Skip to content

Commit

Permalink
Closes mozilla-mobile#4190: Decouple safe browsing api from the track…
Browse files Browse the repository at this point in the history
…ing protection.
  • Loading branch information
Amejia481 committed Aug 26, 2019
1 parent 903bce2 commit d93edd0
Show file tree
Hide file tree
Showing 14 changed files with 170 additions and 118 deletions.
Expand Up @@ -156,12 +156,24 @@ class GeckoEngine(
defaultSettings?.automaticLanguageAdjustment = value
}

override var safeBrowsingPolicy: Array<EngineSession.SafeBrowsingPolicy> =
arrayOf(EngineSession.SafeBrowsingPolicy.RECOMMENDED)
set(value) {
val safeBrowsingCategories = value.sumBy { it.id }
val trackingCategories =
trackingProtectionPolicy?.trackingCategories?.sumBy { it.id } ?: 0

runtime.settings.contentBlocking.categories =
safeBrowsingCategories + trackingCategories
field = value
}

override var trackingProtectionPolicy: TrackingProtectionPolicy? = null
set(value) {
value?.let { policy ->

val trackingCategories = policy.trackingCategories.sumBy { it.id } +
policy.safeBrowsingCategories.sumBy { it.id }
safeBrowsingPolicy.sumBy { it.id }

runtime.settings.contentBlocking.categories = trackingCategories
runtime.settings.contentBlocking.cookieBehavior = policy.cookiePolicy.id
Expand Down
Expand Up @@ -15,7 +15,7 @@ import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.SafeBrowsingCategory
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
import mozilla.components.concept.engine.HitResult
import mozilla.components.concept.engine.UnsupportedSettingException
import mozilla.components.concept.engine.content.blocking.Tracker
Expand Down Expand Up @@ -844,7 +844,7 @@ class GeckoEngineSessionTest {
})

val allPolicy = TrackingProtectionPolicy.select(
arrayOf(TrackingProtectionPolicy.TrackingCategory.AD))
arrayOf(TrackingCategory.AD))
val regularOnlyPolicy = TrackingProtectionPolicy.select(
trackingCategories = arrayOf(TrackingCategory.AD)
).forRegularSessionsOnly()
Expand Down Expand Up @@ -888,6 +888,15 @@ class GeckoEngineSessionTest {
assertTrue(trackerBlockingDisabledObserved)
}

@Test
fun safeBrowsingCategoriesAreAligned() {
assertEquals(ContentBlocking.SB_MALWARE, SafeBrowsingPolicy.MALWARE.id)
assertEquals(ContentBlocking.SB_UNWANTED, SafeBrowsingPolicy.UNWANTED.id)
assertEquals(ContentBlocking.SB_HARMFUL, SafeBrowsingPolicy.HARMFUL.id)
assertEquals(ContentBlocking.SB_PHISHING, SafeBrowsingPolicy.PHISHING.id)
assertEquals(ContentBlocking.SB_ALL, SafeBrowsingPolicy.RECOMMENDED.id)
}

@Test
fun trackingProtectionCategoriesAreAligned() {
assertEquals(TrackingCategory.AD.id, ContentBlocking.AT_AD)
Expand All @@ -898,32 +907,16 @@ class GeckoEngineSessionTest {
assertEquals(TrackingCategory.CRYPTOMINING.id, ContentBlocking.AT_CRYPTOMINING)
assertEquals(TrackingCategory.FINGERPRINTING.id, ContentBlocking.AT_FINGERPRINTING)

assertEquals(SafeBrowsingCategory.RECOMMENDED.id, ContentBlocking.SB_ALL)
assertEquals(SafeBrowsingCategory.HARMFUL.id, ContentBlocking.SB_HARMFUL)
assertEquals(SafeBrowsingCategory.MALWARE.id, ContentBlocking.SB_MALWARE)
assertEquals(SafeBrowsingCategory.PHISHING.id, ContentBlocking.SB_PHISHING)
assertEquals(SafeBrowsingCategory.UNWANTED.id, ContentBlocking.SB_UNWANTED)

assertEquals(
TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id },
ContentBlocking.AT_STRICT
)

assertEquals(
TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id },
ContentBlocking.SB_ALL
)

assertEquals(
TrackingProtectionPolicy.recommended().trackingCategories.sumBy { it.id },
ContentBlocking.AT_DEFAULT
)

assertEquals(
TrackingProtectionPolicy.recommended().safeBrowsingCategories.sumBy { it.id },
ContentBlocking.SB_ALL
)

assertEquals(TrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL.id, ContentBlocking.COOKIE_ACCEPT_ALL)
assertEquals(
TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS.id,
Expand Down
Expand Up @@ -11,6 +11,7 @@ import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue
import mozilla.components.concept.engine.DefaultSettings
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy
import mozilla.components.concept.engine.UnsupportedSettingException
import mozilla.components.concept.engine.mediaquery.PreferredColorScheme
Expand Down Expand Up @@ -139,10 +140,13 @@ class GeckoEngineTest {
val trackingStrictCategories = TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id }
assertEquals(trackingStrictCategories, ContentBlocking.AT_STRICT)

val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
val safeStrictBrowsingCategories = SafeBrowsingPolicy.RECOMMENDED.id
assertEquals(safeStrictBrowsingCategories, ContentBlocking.SB_ALL)
assertEquals(contentBlockingSettings.cookieBehavior, CookiePolicy.ACCEPT_NON_TRACKERS.id)

engine.settings.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.PHISHING)
assertTrue(contentBlockingSettings.contains(SafeBrowsingPolicy.PHISHING))

try {
engine.settings.domStorageEnabled
fail("Expected UnsupportedOperationException")
Expand Down Expand Up @@ -192,7 +196,9 @@ class GeckoEngineTest {
val trackingStrictCategories = TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id }
assertEquals(trackingStrictCategories, ContentBlocking.AT_STRICT)

val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
assertTrue(contentBlockingSettings.contains(SafeBrowsingPolicy.RECOMMENDED))

val safeStrictBrowsingCategories = SafeBrowsingPolicy.RECOMMENDED.id
assertEquals(safeStrictBrowsingCategories, ContentBlocking.SB_ALL)

assertEquals(contentBlockingSettings.cookieBehavior, CookiePolicy.ACCEPT_NON_TRACKERS.id)
Expand Down Expand Up @@ -410,4 +416,7 @@ class GeckoEngineTest {
assertTrue(version.major >= 69)
assertTrue(version.isAtLeast(69, 0, 0))
}

private fun ContentBlocking.Settings.contains(vararg safeBrowsingPolicies: SafeBrowsingPolicy) =
(safeBrowsingPolicies.sumBy { it.id } and this.categories) != 0
}
Expand Up @@ -13,6 +13,7 @@ import mozilla.components.browser.engine.gecko.webextension.GeckoWebExtension
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
import mozilla.components.concept.engine.EngineSessionState
import mozilla.components.concept.engine.EngineView
import mozilla.components.concept.engine.Settings
Expand Down Expand Up @@ -156,11 +157,18 @@ class GeckoEngine(
defaultSettings?.automaticLanguageAdjustment = value
}

override var safeBrowsingPolicy: Array<SafeBrowsingPolicy> =
arrayOf(SafeBrowsingPolicy.RECOMMENDED)
set(value) {
val policy = value.sumBy { it.id }
runtime.settings.contentBlocking.setSafeBrowsing(policy)
field = value
}

override var trackingProtectionPolicy: TrackingProtectionPolicy? = null
set(value) {
value?.let { policy ->
runtime.settings.contentBlocking.setAntiTracking(policy.trackingCategories.sumBy { it.id })
runtime.settings.contentBlocking.setSafeBrowsing(policy.safeBrowsingCategories.sumBy { it.id })
runtime.settings.contentBlocking.cookieBehavior = policy.cookiePolicy.id
defaultSettings?.trackingProtectionPolicy = value
field = value
Expand Down Expand Up @@ -234,6 +242,7 @@ class GeckoEngine(
this.automaticFontSizeAdjustment = it.automaticFontSizeAdjustment
this.automaticLanguageAdjustment = it.automaticLanguageAdjustment
this.trackingProtectionPolicy = it.trackingProtectionPolicy
this.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.RECOMMENDED)
this.remoteDebuggingEnabled = it.remoteDebuggingEnabled
this.testingModeEnabled = it.testingModeEnabled
this.userAgentString = it.userAgentString
Expand Down
Expand Up @@ -15,8 +15,8 @@ import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.SafeBrowsingCategory
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
import mozilla.components.concept.engine.HitResult
import mozilla.components.concept.engine.UnsupportedSettingException
import mozilla.components.concept.engine.content.blocking.Tracker
Expand Down Expand Up @@ -943,6 +943,16 @@ class GeckoEngineSessionTest {
assertTrue(trackerBlockingDisabledObserved)
}

@Test
fun safeBrowsingCategoriesAreAligned() {
assertEquals(GeckoSafeBrowsing.NONE, SafeBrowsingPolicy.NONE.id)
assertEquals(GeckoSafeBrowsing.MALWARE, SafeBrowsingPolicy.MALWARE.id)
assertEquals(GeckoSafeBrowsing.UNWANTED, SafeBrowsingPolicy.UNWANTED.id)
assertEquals(GeckoSafeBrowsing.HARMFUL, SafeBrowsingPolicy.HARMFUL.id)
assertEquals(GeckoSafeBrowsing.PHISHING, SafeBrowsingPolicy.PHISHING.id)
assertEquals(GeckoSafeBrowsing.DEFAULT, SafeBrowsingPolicy.RECOMMENDED.id)
}

@Test
fun trackingProtectionCategoriesAreAligned() {

Expand All @@ -956,26 +966,15 @@ class GeckoEngineSessionTest {
assertEquals(GeckoAntiTracking.DEFAULT, TrackingCategory.RECOMMENDED.id)
assertEquals(GeckoAntiTracking.STRICT, TrackingCategory.STRICT.id)

assertEquals(GeckoSafeBrowsing.NONE, SafeBrowsingCategory.NONE.id)
assertEquals(GeckoSafeBrowsing.MALWARE, SafeBrowsingCategory.MALWARE.id)
assertEquals(GeckoSafeBrowsing.UNWANTED, SafeBrowsingCategory.UNWANTED.id)
assertEquals(GeckoSafeBrowsing.HARMFUL, SafeBrowsingCategory.HARMFUL.id)
assertEquals(GeckoSafeBrowsing.PHISHING, SafeBrowsingCategory.PHISHING.id)
assertEquals(GeckoSafeBrowsing.DEFAULT, SafeBrowsingCategory.RECOMMENDED.id)

val recommendedPolicy = TrackingProtectionPolicy.recommended()
val strictPolicy = TrackingProtectionPolicy.strict()
var antiTrackingCategories = strictPolicy.trackingCategories.sumBy { it.id }
var antiSafeBrowsing = strictPolicy.safeBrowsingCategories.sumBy { it.id }

assertEquals(GeckoAntiTracking.STRICT, antiTrackingCategories)
assertEquals(GeckoSafeBrowsing.DEFAULT, antiSafeBrowsing)

antiTrackingCategories = recommendedPolicy.trackingCategories.sumBy { it.id }
antiSafeBrowsing = recommendedPolicy.safeBrowsingCategories.sumBy { it.id }

assertEquals(GeckoAntiTracking.DEFAULT, antiTrackingCategories)
assertEquals(GeckoSafeBrowsing.DEFAULT, antiSafeBrowsing)

assertEquals(GeckoCookieBehavior.ACCEPT_ALL, CookiePolicy.ACCEPT_ALL.id)
assertEquals(
Expand Down
Expand Up @@ -11,6 +11,7 @@ import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue
import mozilla.components.concept.engine.DefaultSettings
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy
import mozilla.components.concept.engine.UnsupportedSettingException
import mozilla.components.concept.engine.mediaquery.PreferredColorScheme
Expand Down Expand Up @@ -139,9 +140,12 @@ class GeckoEngineTest {
val trackingStrictCategories = TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id }
assertEquals(trackingStrictCategories, contentBlockingSettings.antiTrackingCategories)

val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
val safeStrictBrowsingCategories = SafeBrowsingPolicy.RECOMMENDED.id
assertEquals(safeStrictBrowsingCategories, contentBlockingSettings.safeBrowsingCategories)

engine.settings.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.PHISHING)
assertEquals(SafeBrowsingPolicy.PHISHING.id, contentBlockingSettings.safeBrowsingCategories)

assertEquals(defaultSettings.trackingProtectionPolicy, TrackingProtectionPolicy.strict())
assertEquals(contentBlockingSettings.cookieBehavior, CookiePolicy.ACCEPT_NON_TRACKERS.id)

Expand Down Expand Up @@ -194,8 +198,7 @@ class GeckoEngineTest {
val trackingStrictCategories = TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id }
assertEquals(trackingStrictCategories, contentBlockingSettings.antiTrackingCategories)

val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
assertEquals(safeStrictBrowsingCategories, contentBlockingSettings.safeBrowsingCategories)
assertEquals(SafeBrowsingPolicy.RECOMMENDED.id, contentBlockingSettings.safeBrowsingCategories)

assertEquals(CookiePolicy.ACCEPT_NON_TRACKERS.id, contentBlockingSettings.cookieBehavior)
assertTrue(engine.settings.testingModeEnabled)
Expand All @@ -204,10 +207,10 @@ class GeckoEngineTest {
assertFalse(engine.settings.allowAutoplayMedia)
assertTrue(engine.settings.suspendMediaWhenInactive)

engine.settings.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.PHISHING)
engine.settings.trackingProtectionPolicy =
TrackingProtectionPolicy.select(
trackingCategories = arrayOf(TrackingProtectionPolicy.TrackingCategory.AD),
safeBrowsingCategories = arrayOf(TrackingProtectionPolicy.SafeBrowsingCategory.PHISHING),
cookiePolicy = CookiePolicy.ACCEPT_ONLY_FIRST_PARTY
)

Expand All @@ -217,7 +220,7 @@ class GeckoEngineTest {
)

assertEquals(
TrackingProtectionPolicy.SafeBrowsingCategory.PHISHING.id,
SafeBrowsingPolicy.PHISHING.id,
contentBlockingSettings.safeBrowsingCategories
)

Expand Down
Expand Up @@ -13,6 +13,7 @@ import mozilla.components.browser.engine.gecko.webextension.GeckoWebExtension
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
import mozilla.components.concept.engine.EngineSessionState
import mozilla.components.concept.engine.EngineView
import mozilla.components.concept.engine.Settings
Expand Down Expand Up @@ -156,12 +157,24 @@ class GeckoEngine(
defaultSettings?.automaticLanguageAdjustment = value
}

override var safeBrowsingPolicy: Array<SafeBrowsingPolicy> =
arrayOf(SafeBrowsingPolicy.RECOMMENDED)
set(value) {
val safeBrowsingCategories = value.sumBy { it.id }
val trackingCategories =
trackingProtectionPolicy?.trackingCategories?.sumBy { it.id } ?: 0

runtime.settings.contentBlocking.categories =
safeBrowsingCategories + trackingCategories
field = value
}

override var trackingProtectionPolicy: TrackingProtectionPolicy? = null
set(value) {
value?.let { policy ->

val trackingCategories = policy.trackingCategories.sumBy { it.id } +
policy.safeBrowsingCategories.sumBy { it.id }
safeBrowsingPolicy.sumBy { it.id }

runtime.settings.contentBlocking.categories = trackingCategories
runtime.settings.contentBlocking.cookieBehavior = policy.cookiePolicy.id
Expand Down
Expand Up @@ -15,7 +15,7 @@ import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.SafeBrowsingCategory
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
import mozilla.components.concept.engine.HitResult
import mozilla.components.concept.engine.UnsupportedSettingException
import mozilla.components.concept.engine.content.blocking.Tracker
Expand Down Expand Up @@ -862,6 +862,15 @@ class GeckoEngineSessionTest {
assertTrue(trackerBlockingDisabledObserved)
}

@Test
fun safeBrowsingCategoriesAreAligned() {
assertEquals(ContentBlocking.SB_MALWARE, SafeBrowsingPolicy.MALWARE.id)
assertEquals(ContentBlocking.SB_UNWANTED, SafeBrowsingPolicy.UNWANTED.id)
assertEquals(ContentBlocking.SB_HARMFUL, SafeBrowsingPolicy.HARMFUL.id)
assertEquals(ContentBlocking.SB_PHISHING, SafeBrowsingPolicy.PHISHING.id)
assertEquals(ContentBlocking.SB_ALL, SafeBrowsingPolicy.RECOMMENDED.id)
}

@Test
fun trackingProtectionCategoriesAreAligned() {
assertEquals(TrackingCategory.AD.id, ContentBlocking.AT_AD)
Expand All @@ -872,32 +881,16 @@ class GeckoEngineSessionTest {
assertEquals(TrackingCategory.CRYPTOMINING.id, ContentBlocking.AT_CRYPTOMINING)
assertEquals(TrackingCategory.FINGERPRINTING.id, ContentBlocking.AT_FINGERPRINTING)

assertEquals(SafeBrowsingCategory.RECOMMENDED.id, ContentBlocking.SB_ALL)
assertEquals(SafeBrowsingCategory.HARMFUL.id, ContentBlocking.SB_HARMFUL)
assertEquals(SafeBrowsingCategory.MALWARE.id, ContentBlocking.SB_MALWARE)
assertEquals(SafeBrowsingCategory.PHISHING.id, ContentBlocking.SB_PHISHING)
assertEquals(SafeBrowsingCategory.UNWANTED.id, ContentBlocking.SB_UNWANTED)

assertEquals(
TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id },
ContentBlocking.AT_STRICT
)

assertEquals(
TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id },
ContentBlocking.SB_ALL
)

assertEquals(
TrackingProtectionPolicy.recommended().trackingCategories.sumBy { it.id },
ContentBlocking.AT_DEFAULT
)

assertEquals(
TrackingProtectionPolicy.recommended().safeBrowsingCategories.sumBy { it.id },
ContentBlocking.SB_ALL
)

assertEquals(TrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL.id, ContentBlocking.COOKIE_ACCEPT_ALL)
assertEquals(
TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS.id,
Expand Down

0 comments on commit d93edd0

Please sign in to comment.