Commit 4b0a42e3 authored by Arturo Mejia's avatar Arturo Mejia
Browse files

Closes #4190: Decouple safe browsing api from the tracking protection.

parent 42483650
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue
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.SafeBrowsingPolicy
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.engine.EngineSessionState
import mozilla.components.concept.engine.EngineView
@@ -156,12 +157,25 @@ 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 }
                        ?: SafeBrowsingPolicy.NONE.id

                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
+11 −18
Original line number Diff line number Diff line
@@ -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
@@ -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()
@@ -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)
@@ -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,
+11 −2
Original line number Diff line number Diff line
@@ -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
@@ -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")
@@ -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)
@@ -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
}
 No newline at end of file
+10 −1
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
+11 −12
Original line number Diff line number Diff line
@@ -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
@@ -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() {

@@ -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(
Loading