Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
* Any copyright is dedicated to the Public Domain.
// For ContentBlockingException
@file:Suppress("DEPRECATION")
package org.mozilla.geckoview.test
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.hamcrest.Matchers.* // ktlint-disable no-wildcard-imports
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.geckoview.ContentBlocking
import org.mozilla.geckoview.ContentBlocking.AntiTracking
import org.mozilla.geckoview.ContentBlocking.CookieBannerMode
import org.mozilla.geckoview.ContentBlockingController
import org.mozilla.geckoview.GeckoSession
import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.AssertCalled
@RunWith(AndroidJUnit4::class)
@MediumTest
class ContentBlockingControllerTest : BaseSessionTest() {
// Smoke test for safe browsing settings, most testing is through platform tests
@Test
fun safeBrowsingSettings() {
val contentBlocking = sessionRule.runtime.settings.contentBlocking
val google = contentBlocking.safeBrowsingProviders.first { it.name == "google" }
val google4 = contentBlocking.safeBrowsingProviders.first { it.name == "google4" }
// Let's make sure the initial value of safeBrowsingProviders is correct
assertThat(
"Expected number of default providers",
contentBlocking.safeBrowsingProviders.size,
equalTo(2),
)
assertThat("Google legacy provider is present", google, notNullValue())
assertThat("Google provider is present", google4, notNullValue())
// Checks that the default provider values make sense
assertThat(
"Default provider values are sensible",
google.getHashUrl,
containsString("/safebrowsing-dummy/"),
)
assertThat(
"Default provider values are sensible",
google.advisoryUrl,
)
assertThat(
"Default provider values are sensible",
google4.getHashUrl,
containsString("/safebrowsing4-dummy/"),
)
assertThat(
"Default provider values are sensible",
google4.updateUrl,
containsString("/safebrowsing4-dummy/"),
)
assertThat(
"Default provider values are sensible",
google4.dataSharingUrl,
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"browser.safebrowsing.provider.google4.updateURL",
"browser.safebrowsing.provider.google4.gethashURL",
"browser.safebrowsing.provider.google4.lists",
)
assertThat(
"Initial prefs value is correct",
originalPrefs[0] as String,
equalTo(google4.updateUrl),
)
assertThat(
"Initial prefs value is correct",
originalPrefs[1] as String,
equalTo(google4.getHashUrl),
)
assertThat(
"Initial prefs value is correct",
originalPrefs[2] as String,
equalTo(google4.lists.joinToString(",")),
)
// Makes sure we can override a default value
val override = ContentBlocking.SafeBrowsingProvider
.from(ContentBlocking.GOOGLE_SAFE_BROWSING_PROVIDER)
.build()
// ... and that we can add a custom provider
val custom = ContentBlocking.SafeBrowsingProvider
.withName("custom-provider")
.lists("a", "b", "c")
.build()
assertThat(
"Override value is correct",
override.updateUrl,
)
assertThat(
"Override value is correct",
override.getHashUrl,
)
assertThat(
"Custom provider value is correct",
custom.updateUrl,
)
assertThat(
"Custom provider value is correct",
custom.getHashUrl,
)
assertThat(
"Custom provider value is correct",
custom.lists,
equalTo(arrayOf("a", "b", "c")),
)
contentBlocking.setSafeBrowsingProviders(override, custom)
val prefs = sessionRule.getPrefs(
"browser.safebrowsing.provider.google4.updateURL",
"browser.safebrowsing.provider.google4.gethashURL",
"browser.safebrowsing.provider.custom-provider.updateURL",
"browser.safebrowsing.provider.custom-provider.gethashURL",
"browser.safebrowsing.provider.custom-provider.lists",
)
assertThat(
"Pref value is set correctly",
prefs[0] as String,
)
assertThat(
"Pref value is set correctly",
prefs[1] as String,
)
assertThat(
"Pref value is set correctly",
prefs[2] as String,
)
assertThat(
"Pref value is set correctly",
prefs[3] as String,
)
assertThat(
"Pref value is set correctly",
prefs[4] as String,
equalTo("a,b,c"),
)
// Restore defaults
contentBlocking.setSafeBrowsingProviders(google, google4)
// Checks that after restoring the providers the prefs get updated
val restoredPrefs = sessionRule.getPrefs(
"browser.safebrowsing.provider.google4.updateURL",
"browser.safebrowsing.provider.google4.gethashURL",
"browser.safebrowsing.provider.google4.lists",
)
assertThat(
"Restored prefs value is correct",
restoredPrefs[0] as String,
equalTo(originalPrefs[0]),
)
assertThat(
"Restored prefs value is correct",
restoredPrefs[1] as String,
equalTo(originalPrefs[1]),
)
assertThat(
"Restored prefs value is correct",
restoredPrefs[2] as String,
equalTo(originalPrefs[2]),
)
}
@Test
fun getLog() {
val category = ContentBlocking.AntiTracking.TEST
sessionRule.runtime.settings.contentBlocking.setAntiTracking(category)
mainSession.settings.useTrackingProtection = true
mainSession.loadTestPath(TRACKERS_PATH)
sessionRule.waitUntilCalled(object : ContentBlocking.Delegate {
@AssertCalled(count = 1)
override fun onContentBlocked(
session: GeckoSession,
event: ContentBlocking.BlockEvent,
) {
}
})
sessionRule.waitForResult(
sessionRule.runtime.contentBlockingController.getLog(mainSession).accept {
assertThat("Log must not be null", it, notNullValue())
assertThat("Log must have at least one entry", it?.size, not(0))
it?.forEach {
it.blockingData.forEach {
assertThat(
"Category must match",
it.category,
equalTo(ContentBlockingController.Event.BLOCKED_TRACKING_CONTENT),
)
assertThat("Blocked must be true", it.blocked, equalTo(true))
assertThat("Count must be at least 1", it.count, not(0))
}
}
},
)
}
@Test
fun cookieBannerHandlingSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is off",
contentBlocking.cookieBannerMode,
equalTo(CookieBannerMode.COOKIE_BANNER_MODE_DISABLED),
)
assertThat(
"Expect correct default value for private browsing",
contentBlocking.cookieBannerModePrivateBrowsing,
equalTo(CookieBannerMode.COOKIE_BANNER_MODE_REJECT),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"cookiebanners.service.mode",
"cookiebanners.service.mode.privateBrowsing",
)
assertThat("Initial value is correct", originalPrefs[0] as Int, equalTo(contentBlocking.cookieBannerMode))
assertThat("Initial value is correct", originalPrefs[1] as Int, equalTo(contentBlocking.cookieBannerModePrivateBrowsing))
contentBlocking.cookieBannerMode = CookieBannerMode.COOKIE_BANNER_MODE_REJECT_OR_ACCEPT
contentBlocking.cookieBannerModePrivateBrowsing = CookieBannerMode.COOKIE_BANNER_MODE_DISABLED
val actualPrefs = sessionRule.getPrefs(
"cookiebanners.service.mode",
"cookiebanners.service.mode.privateBrowsing",
)
assertThat("Initial value is correct", actualPrefs[0] as Int, equalTo(contentBlocking.cookieBannerMode))
assertThat("Initial value is correct", actualPrefs[1] as Int, equalTo(contentBlocking.cookieBannerModePrivateBrowsing))
}
@Test
fun cookieBannerGlobalRulesEnabledSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is off",
contentBlocking.cookieBannerGlobalRulesEnabled,
equalTo(false),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"cookiebanners.service.enableGlobalRules",
)
assertThat("Actual value is correct", originalPrefs[0] as Boolean, equalTo(contentBlocking.cookieBannerGlobalRulesEnabled))
contentBlocking.cookieBannerGlobalRulesEnabled = true
val actualPrefs = sessionRule.getPrefs("cookiebanners.service.enableGlobalRules")
assertThat("Actual value is correct", actualPrefs[0] as Boolean, equalTo(contentBlocking.cookieBannerGlobalRulesEnabled))
}
@Test
fun cookieBannerGlobalRulesSubFramesEnabledSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is off",
contentBlocking.cookieBannerGlobalRulesSubFramesEnabled,
equalTo(false),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"cookiebanners.service.enableGlobalRules.subFrames",
)
assertThat("Actual value is correct", originalPrefs[0] as Boolean, equalTo(contentBlocking.cookieBannerGlobalRulesSubFramesEnabled))
contentBlocking.cookieBannerGlobalRulesSubFramesEnabled = true
val actualPrefs = sessionRule.getPrefs("cookiebanners.service.enableGlobalRules.subFrames")
assertThat("Actual value is correct", actualPrefs[0] as Boolean, equalTo(contentBlocking.cookieBannerGlobalRulesSubFramesEnabled))
}
@Test
fun cookieBannerHandlingDetectOnlyModeSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is off",
contentBlocking.cookieBannerDetectOnlyMode,
equalTo(false),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"cookiebanners.service.detectOnly",
)
assertThat(
"Initial value is correct",
originalPrefs[0] as Boolean,
equalTo(contentBlocking.cookieBannerDetectOnlyMode),
)
contentBlocking.cookieBannerDetectOnlyMode = true
val actualPrefs = sessionRule.getPrefs(
"cookiebanners.service.detectOnly",
)
assertThat(
"Initial value is correct",
actualPrefs[0] as Boolean,
equalTo(contentBlocking.cookieBannerDetectOnlyMode),
)
}
@Test
fun queryParameterStrippingSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is off",
contentBlocking.queryParameterStrippingEnabled,
equalTo(false),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"privacy.query_stripping.enabled",
)
assertThat(
"Initial value is correct",
originalPrefs[0] as Boolean,
equalTo(contentBlocking.queryParameterStrippingEnabled),
)
contentBlocking.queryParameterStrippingEnabled = true
val actualPrefs = sessionRule.getPrefs(
"privacy.query_stripping.enabled",
)
assertThat(
"The value is updated",
actualPrefs[0] as Boolean,
equalTo(contentBlocking.queryParameterStrippingEnabled),
)
}
@Test
fun queryParameterStrippingPrivateBrowsingSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is off",
contentBlocking.queryParameterStrippingPrivateBrowsingEnabled,
equalTo(false),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"privacy.query_stripping.enabled.pbmode",
)
assertThat(
"Initial value is correct",
originalPrefs[0] as Boolean,
equalTo(contentBlocking.queryParameterStrippingPrivateBrowsingEnabled),
)
contentBlocking.queryParameterStrippingPrivateBrowsingEnabled = true
val actualPrefs = sessionRule.getPrefs(
"privacy.query_stripping.enabled.pbmode",
)
assertThat(
"The value is updated",
actualPrefs[0] as Boolean,
equalTo(contentBlocking.queryParameterStrippingPrivateBrowsingEnabled),
)
}
@Test
fun queryParameterStrippingAllowListSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is empty string",
contentBlocking.queryParameterStrippingAllowList.joinToString(","),
equalTo(""),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"privacy.query_stripping.allow_list",
)
assertThat(
"Initial value is correct",
originalPrefs[0] as String,
equalTo(contentBlocking.queryParameterStrippingAllowList.joinToString(",")),
)
contentBlocking.setQueryParameterStrippingAllowList("item_one", "item_two")
val actualPrefs = sessionRule.getPrefs(
"privacy.query_stripping.allow_list",
)
assertThat(
"The value is updated",
actualPrefs[0] as String,
equalTo(contentBlocking.queryParameterStrippingAllowList.joinToString(",")),
)
}
@Test
fun queryParameterStrippingStripListSettings() {
// Check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
assertThat(
"Expect correct default value which is empty string",
contentBlocking.queryParameterStrippingStripList.joinToString(","),
equalTo(""),
)
// Checks that the pref value is also consistent with the runtime settings
val originalPrefs = sessionRule.getPrefs(
"privacy.query_stripping.strip_list",
)
assertThat(
"Initial value is correct",
originalPrefs[0] as String,
equalTo(contentBlocking.queryParameterStrippingStripList.joinToString(",")),
)
contentBlocking.setQueryParameterStrippingAllowList("item_one", "item_two")
val actualPrefs = sessionRule.getPrefs(
"privacy.query_stripping.strip_list",
)
assertThat(
"The value is updated",
actualPrefs[0] as String,
equalTo(contentBlocking.queryParameterStrippingStripList.joinToString(",")),
)
}
@Test
fun toggleEmailTrackingForPrivateBrowsingMode() {
// check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
val originalPref = sessionRule.getPrefs(
"privacy.trackingprotection.emailtracking.pbmode.enabled",
)
assertThat(
"Expect correct default value which is off",
originalPref[0] as Boolean,
equalTo(false),
)
contentBlocking.setEmailTrackerBlockingPrivateBrowsing(true)
val updatedPref = sessionRule.getPrefs(
"privacy.trackingprotection.emailtracking.pbmode.enabled",
)
assertThat(
"Expect new value which is on",
updatedPref[0] as Boolean,
equalTo(true),
)
}
@Test
fun toggleEmailTrackingWhenETBAddedToAntiTrackingList() {
// check default value
val contentBlocking = sessionRule.runtime.settings.contentBlocking
val originalPref = sessionRule.getPrefs(
"privacy.trackingprotection.emailtracking.enabled",
)
assertThat(
"Expect correct default value which is off",
originalPref[0] as Boolean,
equalTo(false),
)
contentBlocking.setAntiTracking(AntiTracking.EMAIL)
val updatedPref = sessionRule.getPrefs(
"privacy.trackingprotection.emailtracking.enabled",
)
assertThat(
"Expect new value which is on",
updatedPref[0] as Boolean,
equalTo(true),
)
}
}