Adds TCP prompt & storage access tests

This commit is contained in:
sv-ohorvath 2022-10-18 16:52:00 +03:00 committed by mergify[bot]
parent 61a3f26cba
commit 106b692c41
4 changed files with 60 additions and 1 deletions

View File

@ -0,0 +1,8 @@
<html>
<body>
<h2>Cross-site cookies storage access test</h2>
<h3>anti-tracker-test.com</h3>
<h4>different site, cross-origin iframe</h4>
<iframe width=500 height=1000 src="https://mozilla-mobile.github.io/testapp/anti-tracker-test_set_storage_with_sa_api.html"></iframe>
</body>
</html>

View File

@ -4,6 +4,7 @@
package org.mozilla.fenix.ui
import androidx.core.net.toUri
import okhttp3.mockwebserver.MockWebServer
import org.junit.After
import org.junit.Before
@ -13,7 +14,6 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.ETPPolicy
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.appContext
@ -229,4 +229,36 @@ class EnhancedTrackingProtectionTest {
viewTrackingContentBlockList()
}
}
@Test
fun blockCookiesStorageAccessTest() {
// With Standard TrackingProtection settings
val page = mockWebServer.url("pages/cross-site-cookies.html").toString().toUri()
val originSite = "https://mozilla-mobile.github.io"
val currentSite = "http://localhost:${mockWebServer.port}"
navigationToolbar {
}.enterURLAndEnterToBrowser(page) {
}.clickRequestStorageAccessButton {
verifyCrossOriginCookiesPermissionPrompt(originSite, currentSite)
}.clickPagePermissionButton(allow = false) {
verifyPageContent("access denied")
}
}
@Test
fun allowCookiesStorageAccessTest() {
// With Standard TrackingProtection settings
val page = mockWebServer.url("pages/cross-site-cookies.html").toString().toUri()
val originSite = "https://mozilla-mobile.github.io"
val currentSite = "http://localhost:${mockWebServer.port}"
navigationToolbar {
}.enterURLAndEnterToBrowser(page) {
}.clickRequestStorageAccessButton {
verifyCrossOriginCookiesPermissionPrompt(originSite, currentSite)
}.clickPagePermissionButton(allow = true) {
verifyPageContent("access granted")
}
}
}

View File

@ -821,6 +821,14 @@ class BrowserRobot {
return SitePermissionsRobot.Transition()
}
fun clickRequestStorageAccessButton(interact: SitePermissionsRobot.() -> Unit): SitePermissionsRobot.Transition {
mDevice.findObject(UiSelector().text("requestStorageAccess()")).waitForExists(waitingTime)
mDevice.findObject(UiSelector().text("requestStorageAccess()")).click()
SitePermissionsRobot().interact()
return SitePermissionsRobot.Transition()
}
fun openSiteSecuritySheet(interact: SiteSecurityRobot.() -> Unit): SiteSecurityRobot.Transition {
siteSecurityToolbarButton().waitForExists(waitingTime)
siteSecurityToolbarButton().clickAndWaitForNewWindow(waitingTime)

View File

@ -6,6 +6,7 @@ package org.mozilla.fenix.ui.robots
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.uiautomator.UiSelector
@ -82,6 +83,16 @@ class SitePermissionsRobot {
}
}
fun verifyCrossOriginCookiesPermissionPrompt(originSite: String, currentSite: String) {
mDevice.findObject(UiSelector().text("Allow $originSite to use its cookies on $currentSite?"))
.waitForExists(waitingTime)
onView(ViewMatchers.withText("Allow $originSite to use its cookies on $currentSite?")).check(matches(isDisplayed()))
onView(ViewMatchers.withText("You may want to block access if it's not clear why $originSite needs this data.")).check(matches(isDisplayed()))
onView(ViewMatchers.withText("Learn more")).check(matches(isDisplayed()))
onView(ViewMatchers.withText("Block")).check(matches(isDisplayed()))
onView(ViewMatchers.withText("Allow")).check(matches(isDisplayed()))
}
fun selectRememberPermissionDecision() {
onView(withId(R.id.do_not_ask_again))
.check(matches(isDisplayed()))