Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Commit

Permalink
For #25736: Add experiment for Total cookie protection.
Browse files Browse the repository at this point in the history
(cherry picked from commit 8c752c3)
  • Loading branch information
Amejia481 committed Jul 6, 2022
1 parent 1008d7d commit 280c0eb
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 14 deletions.
11 changes: 11 additions & 0 deletions .experimenter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,17 @@ default-browser-message:
message-location:
type: string
description: Where is the message to be put.
engine-settings:
description: Contains a set of settings for controlling the web engine configurations.
hasExposure: true
exposureDescription: ""
variables:
tabs-prioritization-enabled:
type: boolean
description: "If true, enables tabs prioritization feature."
total-cookie-protection-enabled:
type: boolean
description: "If true, enables the total cookie protection in all browsing modes."
homescreen:
description: The homescreen that the user goes to when they press home or new tab.
hasExposure: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,22 @@ class TrackingProtectionPolicyFactory(
}

return when {
normalMode && privateMode -> trackingProtectionPolicy.adaptPolicyToChannel()
normalMode && !privateMode -> trackingProtectionPolicy.adaptPolicyToChannel().forRegularSessionsOnly()
!normalMode && privateMode -> trackingProtectionPolicy.adaptPolicyToChannel().forPrivateSessionsOnly()
normalMode && privateMode -> trackingProtectionPolicy.applyTCPIfNeeded(settings)
normalMode && !privateMode -> trackingProtectionPolicy.applyTCPIfNeeded(settings).forRegularSessionsOnly()
!normalMode && privateMode -> trackingProtectionPolicy.applyTCPIfNeeded(settings).forPrivateSessionsOnly()
else -> TrackingProtectionPolicy.none()
}
}

private fun createCustomTrackingProtectionPolicy(): TrackingProtectionPolicy {
val cookiePolicy = if (settings.enabledTotalCookieProtection) {
CookiePolicy.ACCEPT_FIRST_PARTY_AND_ISOLATE_OTHERS
} else {
getCustomCookiePolicy()
}

return TrackingProtectionPolicy.select(
cookiePolicy = getCustomCookiePolicy(),
cookiePolicy = cookiePolicy,
trackingCategories = getCustomTrackingCategories(),
cookiePurging = getCustomCookiePurgingPolicy()
).let {
Expand Down Expand Up @@ -106,10 +112,17 @@ class TrackingProtectionPolicyFactory(
}

@VisibleForTesting
internal fun TrackingProtectionPolicyForSessionTypes.adaptPolicyToChannel(): TrackingProtectionPolicyForSessionTypes {
internal fun TrackingProtectionPolicyForSessionTypes.applyTCPIfNeeded(settings: Settings):
TrackingProtectionPolicyForSessionTypes {
val updatedCookiePolicy = if (settings.enabledTotalCookieProtection) {
CookiePolicy.ACCEPT_FIRST_PARTY_AND_ISOLATE_OTHERS
} else {
cookiePolicy
}

return TrackingProtectionPolicy.select(
trackingCategories = trackingCategories,
cookiePolicy = cookiePolicy,
cookiePolicy = updatedCookiePolicy,
strictSocialTrackingProtection = strictSocialTrackingProtection,
cookiePurging = cookiePurging
)
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/org/mozilla/fenix/utils/Settings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,10 @@ class Settings(private val appContext: Context) : PreferencesHolder {
true
)

val enabledTotalCookieProtection: Boolean by lazy {
FxNimbus.features.engineSettings.value().totalCookieProtectionEnabled
}

val blockCookiesSelectionInCustomTrackingProtection by stringPreference(
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_custom_cookies_select),
appContext.getString(R.string.social)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkObject
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy
import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
Expand Down Expand Up @@ -137,21 +138,40 @@ class TrackingProtectionPolicyFactoryTest {
}

@Test
fun `adaptPolicyToChannel MUST only update properties that have changed per given channel`() {
mockkObject(Config)
fun `GIVEN TCP is enabled by nimbus WHEN applyTCPIfNeeded THEN cookie policy should be TCP`() {
val settings: Settings = mockk(relaxed = true)
every { settings.enabledTotalCookieProtection } returns true

val policies = arrayOf(
TrackingProtectionPolicy.strict(), TrackingProtectionPolicy.recommended(),
TrackingProtectionPolicy.select()
)

for (channel in ReleaseChannel.values()) {
every { Config.channel } returns channel
for (policy in policies) {
val adaptedPolicy = policy.applyTCPIfNeeded(settings)
assertEquals(
CookiePolicy.ACCEPT_FIRST_PARTY_AND_ISOLATE_OTHERS,
adaptedPolicy.cookiePolicy
)
}
}

for (policy in policies) {
val adaptedPolicy = policy.adaptPolicyToChannel()
policy.assertPolicyEquals(adaptedPolicy, checkPrivacy = false)
}
fun `GIVEN TCP is NOT enabled by nimbus WHEN applyTCPIfNeeded THEN reuse cookie policy`() {
val settings: Settings = mockk(relaxed = true)

every { settings.enabledTotalCookieProtection } returns false

val policies = arrayOf(
TrackingProtectionPolicy.strict(), TrackingProtectionPolicy.recommended(),
TrackingProtectionPolicy.select()
)

for (policy in policies) {
val adaptedPolicy = policy.applyTCPIfNeeded(settings)
assertEquals(
policy.cookiePolicy,
adaptedPolicy.cookiePolicy
)
}
}

Expand Down Expand Up @@ -578,6 +598,7 @@ class TrackingProtectionPolicyFactoryTest {
useCustom: Boolean = false,
useTrackingProtection: Boolean = false
): Settings = mockk {
every { enabledTotalCookieProtection } returns false
every { useStrictTrackingProtection } returns useStrict
every { useCustomTrackingProtection } returns useCustom
every { shouldUseTrackingProtection } returns useTrackingProtection
Expand Down
11 changes: 11 additions & 0 deletions nimbus.fml.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,17 @@ features:
value:
enabled: true

engine-settings:
description: Contains a set of settings for controlling the web engine configurations.
variables:
tabs-prioritization-enabled:
description: If true, enables tabs prioritization feature.
type: Boolean
default: true
total-cookie-protection-enabled:
description: If true, enables the total cookie protection in all browsing modes.
type: Boolean
default: false
types:
objects:
MessageData:
Expand Down

0 comments on commit 280c0eb

Please sign in to comment.