@ -3,7 +3,6 @@ package org.mozilla.fenix.components
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkObject
import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertArrayEquals
@ -13,6 +12,7 @@ import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.Config
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.ReleaseChannel
import org.mozilla.fenix.utils.Settings
@ -23,7 +23,7 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `WHEN useStrictMode is true then SHOULD return strict mode` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. strict ( )
val expected = TrackingProtectionPolicy. strict ( )
val factory = TrackingProtectionPolicyFactory ( mockSettings ( useStrict = true ) )
@ -35,12 +35,12 @@ class TrackingProtectionPolicyFactoryTest {
expected . assertPolicyEquals ( privateOnly , checkPrivacy = false )
expected . assertPolicyEquals ( normalOnly , checkPrivacy = false )
expected . assertPolicyEquals ( always , checkPrivacy = false )
EngineSession. TrackingProtectionPolicy. none ( ) . assertPolicyEquals ( none , checkPrivacy = false )
TrackingProtectionPolicy. none ( ) . assertPolicyEquals ( none , checkPrivacy = false )
}
@Test
fun `WHEN neither use strict nor use custom is true SHOULD return recommended mode` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. recommended ( )
val expected = TrackingProtectionPolicy. recommended ( )
val factory = TrackingProtectionPolicyFactory ( mockSettings ( useStrict = false , useCustom = false ) )
@ -52,13 +52,13 @@ class TrackingProtectionPolicyFactoryTest {
expected . assertPolicyEquals ( privateOnly , checkPrivacy = false )
expected . assertPolicyEquals ( normalOnly , checkPrivacy = false )
expected . assertPolicyEquals ( always , checkPrivacy = false )
EngineSession. TrackingProtectionPolicy. none ( ) . assertPolicyEquals ( none , checkPrivacy = false )
TrackingProtectionPolicy. none ( ) . assertPolicyEquals ( none , checkPrivacy = false )
}
@Test
fun `GIVEN custom policy WHEN should not block cookies THEN tracking policy should not block cookies` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _ALL ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _ALL ,
trackingCategories = allTrackingCategories
)
@ -75,8 +75,8 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `GIVEN custom policy WHEN cookie policy block all THEN tracking policy should have cookie policy allow none` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
trackingCategories = allTrackingCategories
)
@ -91,34 +91,6 @@ class TrackingProtectionPolicyFactoryTest {
expected . assertPolicyEquals ( always , checkPrivacy = false )
}
@Test
fun `cookiePurging must be available ONLY in nightly or debug` ( ) {
mockkObject ( Config )
for ( channel in ReleaseChannel . values ( ) ) {
every { Config . channel } returns channel
val shouldCookiePurgingActive = channel . isNightlyOrDebug
val customSetting =
settingsForCustom ( shouldBlockCookiesInCustom = true , blockCookiesSelection = " all " )
val stringSetting = mockSettings ( useStrict = true )
val recommendedSetting = mockSettings ( useTrackingProtection = true )
for ( setting in arrayOf ( recommendedSetting , stringSetting , customSetting ) ) {
val factory = TrackingProtectionPolicyFactory ( setting )
val privateOnly =
factory . createTrackingProtectionPolicy ( normalMode = false , privateMode = true )
val normalOnly =
factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = false )
val always =
factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = true )
assertEquals ( shouldCookiePurgingActive , privateOnly . cookiePurging )
assertEquals ( shouldCookiePurgingActive , normalOnly . cookiePurging )
assertEquals ( shouldCookiePurgingActive , always . cookiePurging )
}
}
}
@Test
fun `adaptPolicyToChannel MUST only update properties that have changed per given channel` ( ) {
mockkObject ( Config )
@ -131,20 +103,17 @@ class TrackingProtectionPolicyFactoryTest {
for ( channel in ReleaseChannel . values ( ) ) {
every { Config . channel } returns channel
val shouldCookiePurgingActive = channel . isNightlyOrDebug
for ( policy in policies ) {
val adaptedPolicy = policy . adaptPolicyToChannel ( )
policy . assertPolicyEquals ( adaptedPolicy , checkPrivacy = false )
assertEquals ( shouldCookiePurgingActive , adaptedPolicy . cookiePurging )
}
}
}
@Test
fun `GIVEN custom policy WHEN cookie policy social THEN tracking policy should have cookie policy allow non-trackers` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _NON _TRACKERS ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _NON _TRACKERS ,
trackingCategories = allTrackingCategories
)
@ -161,8 +130,8 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `GIVEN custom policy WHEN cookie policy accept visited THEN tracking policy should have cookie policy allow visited` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _VISITED ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _VISITED ,
trackingCategories = allTrackingCategories
)
@ -179,8 +148,8 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `GIVEN custom policy WHEN cookie policy block third party THEN tracking policy should have cookie policy allow first party` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _ONLY _FIRST _PARTY ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _ONLY _FIRST _PARTY ,
trackingCategories = allTrackingCategories
)
@ -197,8 +166,8 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `GIVEN custom policy WHEN cookie policy unrecognized THEN tracking policy should have cookie policy block all` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
trackingCategories = allTrackingCategories
)
@ -261,7 +230,7 @@ class TrackingProtectionPolicyFactoryTest {
useETPFactory = TrackingProtectionPolicyFactory ( mockSettings ( useTrackingProtection = false ) )
policy = useETPFactory . createTrackingProtectionPolicy ( )
assertEquals ( policy , EngineSession. TrackingProtectionPolicy. none ( ) )
assertEquals ( policy , TrackingProtectionPolicy. none ( ) )
}
@Test
@ -306,14 +275,14 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `GIVEN custom policy WHEN default tracking policies THEN tracking policies should match default` ( ) {
val defaultTrackingCategories = arrayOf (
EngineSession. TrackingProtectionPolicy. TrackingCategory . AD ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . ANALYTICS ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . SOCIAL ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . MOZILLA _SOCIAL
TrackingProtectionPolicy. TrackingCategory . AD ,
TrackingProtectionPolicy. TrackingCategory . ANALYTICS ,
TrackingProtectionPolicy. TrackingCategory . SOCIAL ,
TrackingProtectionPolicy. TrackingCategory . MOZILLA _SOCIAL
)
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
trackingCategories = defaultTrackingCategories
)
@ -332,8 +301,8 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `GIVEN custom policy WHEN all tracking policies THEN tracking policies should match all` ( ) {
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
trackingCategories = allTrackingCategories
)
@ -353,15 +322,15 @@ class TrackingProtectionPolicyFactoryTest {
@Test
fun `GIVEN custom policy WHEN some tracking policies THEN tracking policies should match passed policies` ( ) {
val someTrackingCategories = arrayOf (
EngineSession. TrackingProtectionPolicy. TrackingCategory . AD ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . ANALYTICS ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . SOCIAL ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . MOZILLA _SOCIAL ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . FINGERPRINTING
TrackingProtectionPolicy. TrackingCategory . AD ,
TrackingProtectionPolicy. TrackingCategory . ANALYTICS ,
TrackingProtectionPolicy. TrackingCategory . SOCIAL ,
TrackingProtectionPolicy. TrackingCategory . MOZILLA _SOCIAL ,
TrackingProtectionPolicy. TrackingCategory . FINGERPRINTING
)
val expected = EngineSession. TrackingProtectionPolicy. select (
cookiePolicy = EngineSession. TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
val expected = TrackingProtectionPolicy. select (
cookiePolicy = TrackingProtectionPolicy. CookiePolicy . ACCEPT _NONE ,
trackingCategories = someTrackingCategories
)
@ -377,6 +346,55 @@ class TrackingProtectionPolicyFactoryTest {
expected . assertPolicyEquals ( actual , checkPrivacy = false )
}
@Test
fun `GIVEN custom policy WHEN some tracking policies THEN purge cookies` ( ) {
val expected = TrackingProtectionPolicy . select (
cookiePolicy = TrackingProtectionPolicy . CookiePolicy . ACCEPT _NONE ,
trackingCategories = allTrackingCategories ,
cookiePurging = FeatureFlags . etpCookiePurging
)
val factory = TrackingProtectionPolicyFactory ( settingsForCustom ( shouldBlockCookiesInCustom = true ) )
val privateOnly = factory . createTrackingProtectionPolicy ( normalMode = false , privateMode = true )
val normalOnly = factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = false )
val always = factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = true )
expected . assertPolicyEquals ( privateOnly , checkPrivacy = false )
expected . assertPolicyEquals ( normalOnly , checkPrivacy = false )
expected . assertPolicyEquals ( always , checkPrivacy = false )
}
@Test
fun `GIVEN strict policy WHEN some tracking policies THEN purge cookies` ( ) {
val expected = TrackingProtectionPolicy . strict ( )
val factory = TrackingProtectionPolicyFactory ( mockSettings ( useStrict = true , useTrackingProtection = true ) )
val privateOnly = factory . createTrackingProtectionPolicy ( normalMode = false , privateMode = true )
val normalOnly = factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = false )
val always = factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = true )
assertEquals ( privateOnly . cookiePurging , expected . cookiePurging )
assertEquals ( normalOnly . cookiePurging , expected . cookiePurging )
assertEquals ( always . cookiePurging , expected . cookiePurging )
}
@Test
fun `GIVEN standard policy WHEN some tracking policies THEN purge cookies` ( ) {
val expected = TrackingProtectionPolicy . recommended ( )
val factory = TrackingProtectionPolicyFactory ( mockSettings ( useStrict = false , useCustom = false , useTrackingProtection = true ) )
val privateOnly = factory . createTrackingProtectionPolicy ( normalMode = false , privateMode = true )
val normalOnly = factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = false )
val always = factory . createTrackingProtectionPolicy ( normalMode = true , privateMode = true )
assertEquals ( privateOnly . cookiePurging , expected . cookiePurging )
assertEquals ( normalOnly . cookiePurging , expected . cookiePurging )
assertEquals ( always . cookiePurging , expected . cookiePurging )
}
}
private fun mockSettings (
@ -408,8 +426,8 @@ private fun settingsForCustom(
every { blockCryptominersInCustomTrackingProtection } returns blockCryptominers
}
private fun EngineSession. TrackingProtectionPolicy. assertPolicyEquals (
actual : EngineSession . TrackingProtectionPolicy ,
private fun TrackingProtectionPolicy. assertPolicyEquals (
actual : TrackingProtectionPolicy ,
checkPrivacy : Boolean
) {
assertEquals ( this . cookiePolicy , actual . cookiePolicy )
@ -426,16 +444,16 @@ private fun EngineSession.TrackingProtectionPolicy.assertPolicyEquals(
}
}
private fun Array < EngineSession. TrackingProtectionPolicy. TrackingCategory > . toInt ( ) : Int {
private fun Array < TrackingProtectionPolicy. TrackingCategory > . toInt ( ) : Int {
return fold ( initial = 0 ) { acc , next -> acc + next . id }
}
private val allTrackingCategories = arrayOf (
EngineSession. TrackingProtectionPolicy. TrackingCategory . AD ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . ANALYTICS ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . SOCIAL ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . MOZILLA _SOCIAL ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . SCRIPTS _AND _SUB _RESOURCES ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . FINGERPRINTING ,
EngineSession. TrackingProtectionPolicy. TrackingCategory . CRYPTOMINING
TrackingProtectionPolicy. TrackingCategory . AD ,
TrackingProtectionPolicy. TrackingCategory . ANALYTICS ,
TrackingProtectionPolicy. TrackingCategory . SOCIAL ,
TrackingProtectionPolicy. TrackingCategory . MOZILLA _SOCIAL ,
TrackingProtectionPolicy. TrackingCategory . SCRIPTS _AND _SUB _RESOURCES ,
TrackingProtectionPolicy. TrackingCategory . FINGERPRINTING ,
TrackingProtectionPolicy. TrackingCategory . CRYPTOMINING
)