1
0
Fork 0

For issue #12796: Ensure Cookie purging is only active in nightly or debug.

master
Arturo Mejia 2020-08-14 11:26:03 -04:00
parent 4a20607f8b
commit 5d14688448
2 changed files with 72 additions and 4 deletions

View File

@ -4,7 +4,10 @@
package org.mozilla.fenix.components package org.mozilla.fenix.components
import androidx.annotation.VisibleForTesting
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicyForSessionTypes
import org.mozilla.fenix.Config
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
/** /**
@ -34,9 +37,9 @@ class TrackingProtectionPolicyFactory(private val settings: Settings) {
} }
return when { return when {
normalMode && privateMode -> trackingProtectionPolicy normalMode && privateMode -> trackingProtectionPolicy.adaptPolicyToChannel()
normalMode && !privateMode -> trackingProtectionPolicy.forRegularSessionsOnly() normalMode && !privateMode -> trackingProtectionPolicy.adaptPolicyToChannel().forRegularSessionsOnly()
!normalMode && privateMode -> trackingProtectionPolicy.forPrivateSessionsOnly() !normalMode && privateMode -> trackingProtectionPolicy.adaptPolicyToChannel().forPrivateSessionsOnly()
else -> TrackingProtectionPolicy.none() else -> TrackingProtectionPolicy.none()
} }
} }
@ -44,7 +47,8 @@ class TrackingProtectionPolicyFactory(private val settings: Settings) {
private fun createCustomTrackingProtectionPolicy(): TrackingProtectionPolicy { private fun createCustomTrackingProtectionPolicy(): TrackingProtectionPolicy {
return TrackingProtectionPolicy.select( return TrackingProtectionPolicy.select(
cookiePolicy = getCustomCookiePolicy(), cookiePolicy = getCustomCookiePolicy(),
trackingCategories = getCustomTrackingCategories() trackingCategories = getCustomTrackingCategories(),
cookiePurging = Config.channel.isNightlyOrDebug
).let { ).let {
if (settings.blockTrackingContentSelectionInCustomTrackingProtection == "private") { if (settings.blockTrackingContentSelectionInCustomTrackingProtection == "private") {
it.forPrivateSessionsOnly() it.forPrivateSessionsOnly()
@ -91,3 +95,13 @@ class TrackingProtectionPolicyFactory(private val settings: Settings) {
return categories.toTypedArray() return categories.toTypedArray()
} }
} }
@VisibleForTesting
internal fun TrackingProtectionPolicyForSessionTypes.adaptPolicyToChannel(): TrackingProtectionPolicyForSessionTypes {
return TrackingProtectionPolicy.select(
trackingCategories = trackingCategories,
cookiePolicy = cookiePolicy,
strictSocialTrackingProtection = strictSocialTrackingProtection,
cookiePurging = Config.channel.isNightlyOrDebug
)
}

View File

@ -2,7 +2,9 @@ package org.mozilla.fenix.components
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.mockkObject
import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
@ -10,7 +12,9 @@ import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.Config
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ReleaseChannel
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@ -87,6 +91,56 @@ class TrackingProtectionPolicyFactoryTest {
expected.assertPolicyEquals(always, checkPrivacy = false) 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)
val policies = arrayOf(
TrackingProtectionPolicy.strict(), TrackingProtectionPolicy.recommended(),
TrackingProtectionPolicy.select()
)
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 @Test
fun `GIVEN custom policy WHEN cookie policy social THEN tracking policy should have cookie policy allow non-trackers`() { fun `GIVEN custom policy WHEN cookie policy social THEN tracking policy should have cookie policy allow non-trackers`() {
val expected = EngineSession.TrackingProtectionPolicy.select( val expected = EngineSession.TrackingProtectionPolicy.select(