You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
539 lines
20 KiB
Kotlin
539 lines
20 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.ui
|
|
|
|
import androidx.core.net.toUri
|
|
import androidx.test.espresso.Espresso.pressBack
|
|
import androidx.test.filters.SdkSuppress
|
|
import mozilla.components.concept.engine.mediasession.MediaSession
|
|
import org.junit.Ignore
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
import org.mozilla.fenix.customannotations.SmokeTest
|
|
import org.mozilla.fenix.helpers.AppAndSystemHelper.grantSystemPermission
|
|
import org.mozilla.fenix.helpers.HomeActivityTestRule
|
|
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
|
|
import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
|
|
import org.mozilla.fenix.helpers.TestAssetHelper.getMutedVideoPageAsset
|
|
import org.mozilla.fenix.helpers.TestAssetHelper.getVideoPageAsset
|
|
import org.mozilla.fenix.helpers.TestHelper.exitMenu
|
|
import org.mozilla.fenix.helpers.TestSetup
|
|
import org.mozilla.fenix.ui.robots.browserScreen
|
|
import org.mozilla.fenix.ui.robots.clickPageObject
|
|
import org.mozilla.fenix.ui.robots.homeScreen
|
|
import org.mozilla.fenix.ui.robots.navigationToolbar
|
|
|
|
/**
|
|
* Tests for verifying
|
|
* - site permissions settings sub-menu
|
|
* - the settings effects on the app behavior
|
|
*
|
|
*/
|
|
class SettingsSitePermissionsTest : TestSetup() {
|
|
/* Test page created and handled by the Mozilla mobile test-eng team */
|
|
private val permissionsTestPage = "https://mozilla-mobile.github.io/testapp/v2.0/permissions"
|
|
private val permissionsTestPageHost = "https://mozilla-mobile.github.io"
|
|
private val testPageSubstring = "https://mozilla-mobile.github.io:443"
|
|
|
|
@get:Rule
|
|
val activityTestRule = HomeActivityTestRule(
|
|
isJumpBackInCFREnabled = false,
|
|
isPWAsPromptEnabled = false,
|
|
isTCPCFREnabled = false,
|
|
isDeleteSitePermissionsEnabled = true,
|
|
)
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/246974
|
|
@Test
|
|
fun sitePermissionsItemsTest() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
verifySitePermissionsToolbarTitle()
|
|
verifyToolbarGoBackButton()
|
|
verifySitePermissionOption("Autoplay", "Block audio only")
|
|
verifySitePermissionOption("Camera", "Blocked by Android")
|
|
verifySitePermissionOption("Location", "Blocked by Android")
|
|
verifySitePermissionOption("Microphone", "Blocked by Android")
|
|
verifySitePermissionOption("Notification", "Ask to allow")
|
|
verifySitePermissionOption("Persistent Storage", "Ask to allow")
|
|
verifySitePermissionOption("Cross-site cookies", "Ask to allow")
|
|
verifySitePermissionOption("DRM-controlled content", "Ask to allow")
|
|
verifySitePermissionOption("Exceptions")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/247680
|
|
// Verifies that you can go to System settings and change app's permissions from inside the app
|
|
@SmokeTest
|
|
@Test
|
|
@SdkSuppress(minSdkVersion = 29)
|
|
fun systemBlockedPermissionsRedirectToSystemAppSettingsTest() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openCamera {
|
|
verifyBlockedByAndroidSection()
|
|
}.goBack {
|
|
}.openLocation {
|
|
verifyBlockedByAndroidSection()
|
|
}.goBack {
|
|
}.openMicrophone {
|
|
verifyBlockedByAndroidSection()
|
|
clickGoToSettingsButton()
|
|
openAppSystemPermissionsSettings()
|
|
switchAppPermissionSystemSetting("Camera", "Allow")
|
|
goBackToSystemAppPermissionSettings()
|
|
verifySystemGrantedPermission("Camera")
|
|
switchAppPermissionSystemSetting("Location", "Allow")
|
|
goBackToSystemAppPermissionSettings()
|
|
verifySystemGrantedPermission("Location")
|
|
switchAppPermissionSystemSetting("Microphone", "Allow")
|
|
goBackToSystemAppPermissionSettings()
|
|
verifySystemGrantedPermission("Microphone")
|
|
goBackToPermissionsSettingsSubMenu()
|
|
verifyUnblockedByAndroid()
|
|
}.goBack {
|
|
}.openLocation {
|
|
verifyUnblockedByAndroid()
|
|
}.goBack {
|
|
}.openCamera {
|
|
verifyUnblockedByAndroid()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2095125
|
|
@SmokeTest
|
|
@Test
|
|
fun verifyAutoplayBlockAudioOnlySettingOnNotMutedVideoTest() {
|
|
val genericPage = getGenericAsset(mockWebServer, 1)
|
|
val videoTestPage = getVideoPageAsset(mockWebServer)
|
|
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openAutoPlay {
|
|
verifySitePermissionsAutoPlaySubMenuItems()
|
|
exitMenu()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(genericPage.url) {
|
|
verifyPageContent(genericPage.content)
|
|
}.openTabDrawer {
|
|
closeTab()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(videoTestPage.url) {
|
|
try {
|
|
verifyPageContent(videoTestPage.content)
|
|
clickPageObject(itemWithText("Play"))
|
|
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
|
|
} catch (e: java.lang.AssertionError) {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.refreshPage {
|
|
verifyPageContent(videoTestPage.content)
|
|
clickPageObject(itemWithText("Play"))
|
|
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2286807
|
|
@Ignore("Failing, see https://bugzilla.mozilla.org/show_bug.cgi?id=1827599")
|
|
@SmokeTest
|
|
@Test
|
|
fun verifyAutoplayBlockAudioOnlySettingOnMutedVideoTest() {
|
|
val genericPage = getGenericAsset(mockWebServer, 1)
|
|
val mutedVideoTestPage = getMutedVideoPageAsset(mockWebServer)
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(genericPage.url) {
|
|
verifyPageContent(genericPage.content)
|
|
}.openTabDrawer {
|
|
closeTab()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(mutedVideoTestPage.url) {
|
|
try {
|
|
verifyPageContent("Media file is playing")
|
|
} catch (e: java.lang.AssertionError) {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.refreshPage {
|
|
verifyPageContent("Media file is playing")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2095124
|
|
@Test
|
|
fun verifyAutoplayAllowAudioVideoSettingOnNotMutedVideoTestTest() {
|
|
val genericPage = getGenericAsset(mockWebServer, 1)
|
|
val videoTestPage = getVideoPageAsset(mockWebServer)
|
|
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openAutoPlay {
|
|
selectAutoplayOption("Allow audio and video")
|
|
exitMenu()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(genericPage.url) {
|
|
verifyPageContent(genericPage.content)
|
|
}.openTabDrawer {
|
|
closeTab()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(videoTestPage.url) {
|
|
try {
|
|
verifyPageContent(videoTestPage.content)
|
|
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
|
|
} catch (e: java.lang.AssertionError) {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.refreshPage {
|
|
verifyPageContent(videoTestPage.content)
|
|
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2286806
|
|
@Ignore("Failing, see https://bugzilla.mozilla.org/show_bug.cgi?id=1827599")
|
|
@Test
|
|
fun verifyAutoplayAllowAudioVideoSettingOnMutedVideoTest() {
|
|
val mutedVideoTestPage = getMutedVideoPageAsset(mockWebServer)
|
|
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openAutoPlay {
|
|
selectAutoplayOption("Allow audio and video")
|
|
exitMenu()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(mutedVideoTestPage.url) {
|
|
try {
|
|
verifyPageContent("Media file is playing")
|
|
} catch (e: java.lang.AssertionError) {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.refreshPage {
|
|
verifyPageContent("Media file is playing")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2095126
|
|
@Test
|
|
fun verifyAutoplayBlockAudioAndVideoSettingOnNotMutedVideoTest() {
|
|
val videoTestPage = getVideoPageAsset(mockWebServer)
|
|
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openAutoPlay {
|
|
selectAutoplayOption("Block audio and video")
|
|
exitMenu()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(videoTestPage.url) {
|
|
try {
|
|
verifyPageContent(videoTestPage.content)
|
|
clickPageObject(itemWithText("Play"))
|
|
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
|
|
} catch (e: java.lang.AssertionError) {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.refreshPage {
|
|
verifyPageContent(videoTestPage.content)
|
|
clickPageObject(itemWithText("Play"))
|
|
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2286808
|
|
@Test
|
|
fun verifyAutoplayBlockAudioAndVideoSettingOnMutedVideoTest() {
|
|
val mutedVideoTestPage = getMutedVideoPageAsset(mockWebServer)
|
|
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openAutoPlay {
|
|
selectAutoplayOption("Block audio and video")
|
|
exitMenu()
|
|
}
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(mutedVideoTestPage.url) {
|
|
verifyPageContent("Media file not playing")
|
|
clickPageObject(itemWithText("Play"))
|
|
try {
|
|
verifyPageContent("Media file is playing")
|
|
} catch (e: java.lang.AssertionError) {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.refreshPage {
|
|
clickPageObject(itemWithText("Play"))
|
|
verifyPageContent("Media file is playing")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/247362
|
|
@Test
|
|
fun verifyCameraPermissionSettingsTest() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickStartCameraButton {
|
|
grantSystemPermission()
|
|
verifyCameraPermissionPrompt(testPageSubstring)
|
|
pressBack()
|
|
}
|
|
browserScreen {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openCamera {
|
|
verifySitePermissionsCommonSubMenuItems()
|
|
selectPermissionSettingOption("Blocked")
|
|
exitMenu()
|
|
}
|
|
}.clickStartCameraButton {}
|
|
browserScreen {
|
|
verifyPageContent("Camera not allowed")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/247364
|
|
@Test
|
|
fun verifyMicrophonePermissionSettingsTest() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickStartMicrophoneButton {
|
|
grantSystemPermission()
|
|
verifyMicrophonePermissionPrompt(testPageSubstring)
|
|
pressBack()
|
|
}
|
|
browserScreen {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openMicrophone {
|
|
verifySitePermissionsCommonSubMenuItems()
|
|
selectPermissionSettingOption("Blocked")
|
|
exitMenu()
|
|
}
|
|
}.clickStartMicrophoneButton {}
|
|
browserScreen {
|
|
verifyPageContent("Microphone not allowed")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/247363
|
|
@Test
|
|
fun verifyLocationPermissionSettingsTest() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickGetLocationButton {
|
|
verifyLocationPermissionPrompt(testPageSubstring)
|
|
pressBack()
|
|
}
|
|
browserScreen {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openLocation {
|
|
verifySitePermissionsCommonSubMenuItems()
|
|
selectPermissionSettingOption("Blocked")
|
|
exitMenu()
|
|
}
|
|
}.clickGetLocationButton {}
|
|
browserScreen {
|
|
verifyPageContent("User denied geolocation prompt")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/247365
|
|
@Test
|
|
fun verifyNotificationsPermissionSettingsTest() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickOpenNotificationButton {
|
|
verifyNotificationsPermissionPrompt(testPageSubstring)
|
|
pressBack()
|
|
}
|
|
browserScreen {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openNotification {
|
|
verifyNotificationSubMenuItems()
|
|
selectPermissionSettingOption("Blocked")
|
|
exitMenu()
|
|
}
|
|
}.clickOpenNotificationButton {}
|
|
browserScreen {
|
|
verifyPageContent("Notifications not allowed")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1923415
|
|
@Test
|
|
fun verifyPersistentStoragePermissionSettingsTest() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickRequestPersistentStorageAccessButton {
|
|
verifyPersistentStoragePermissionPrompt(testPageSubstring)
|
|
pressBack()
|
|
}
|
|
browserScreen {
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openPersistentStorage {
|
|
verifySitePermissionsPersistentStorageSubMenuItems()
|
|
selectPermissionSettingOption("Blocked")
|
|
exitMenu()
|
|
}
|
|
}.clickRequestPersistentStorageAccessButton {}
|
|
browserScreen {
|
|
verifyPageContent("Persistent storage permission denied")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1923417
|
|
@Test
|
|
fun verifyDRMControlledContentPermissionSettingsTest() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickRequestDRMControlledContentAccessButton {
|
|
verifyDRMContentPermissionPrompt(testPageSubstring)
|
|
pressBack()
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openDRMControlledContent {
|
|
verifyDRMControlledContentSubMenuItems()
|
|
selectDRMControlledContentPermissionSettingOption("Blocked")
|
|
exitMenu()
|
|
}
|
|
browserScreen {
|
|
}.clickRequestDRMControlledContentAccessButton {}
|
|
browserScreen {
|
|
verifyPageContent("DRM-controlled content not allowed")
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openDRMControlledContent {
|
|
selectDRMControlledContentPermissionSettingOption("Allowed")
|
|
exitMenu()
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.refreshPage {
|
|
}.clickRequestDRMControlledContentAccessButton {}
|
|
browserScreen {
|
|
verifyPageContent("DRM-controlled content allowed")
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/246976
|
|
@SmokeTest
|
|
@Test
|
|
fun clearAllSitePermissionsExceptionsTest() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickOpenNotificationButton {
|
|
verifyNotificationsPermissionPrompt(testPageSubstring)
|
|
}.clickPagePermissionButton(true) {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openExceptions {
|
|
verifyExceptionCreated(permissionsTestPageHost, true)
|
|
clickClearPermissionsOnAllSites()
|
|
verifyClearPermissionsDialog()
|
|
clickCancel()
|
|
clickClearPermissionsOnAllSites()
|
|
clickOK()
|
|
verifyExceptionsEmptyList()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/247007
|
|
@Test
|
|
fun addAndClearOneWebPagePermission() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickOpenNotificationButton {
|
|
verifyNotificationsPermissionPrompt(testPageSubstring)
|
|
}.clickPagePermissionButton(true) {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openExceptions {
|
|
verifyExceptionCreated(permissionsTestPageHost, true)
|
|
openSiteExceptionsDetails(permissionsTestPageHost)
|
|
clickClearPermissionsForOneSite()
|
|
verifyClearPermissionsForOneSiteDialog()
|
|
clickCancel()
|
|
clickClearPermissionsForOneSite()
|
|
clickOK()
|
|
verifyExceptionsEmptyList()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/326477
|
|
@Test
|
|
fun clearIndividuallyAWebPagePermission() {
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(permissionsTestPage.toUri()) {
|
|
}.clickOpenNotificationButton {
|
|
verifyNotificationsPermissionPrompt(testPageSubstring)
|
|
}.clickPagePermissionButton(true) {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuSitePermissions {
|
|
}.openExceptions {
|
|
verifyExceptionCreated(permissionsTestPageHost, true)
|
|
openSiteExceptionsDetails(permissionsTestPageHost)
|
|
verifyPermissionSettingSummary("Notification", "Allowed")
|
|
openChangePermissionSettingsMenu("Notification")
|
|
clickClearOnePermissionForOneSite()
|
|
verifyResetPermissionDefaultForThisSiteDialog()
|
|
clickOK()
|
|
pressBack()
|
|
verifyPermissionSettingSummary("Notification", "Ask to allow")
|
|
pressBack()
|
|
// This should be changed to false, when https://bugzilla.mozilla.org/show_bug.cgi?id=1826297 is fixed
|
|
verifyExceptionCreated(permissionsTestPageHost, true)
|
|
}
|
|
}
|
|
}
|