Skip to content

Commit af03545

Browse files
MozLandoAmejia481
andcommitted
4211: Closes mozilla-mobile#4190: Decouple safe browsing api from the tracking protection. r=Amejia481 a=Amejia481 Co-authored-by: Arturo Mejia <[email protected]>
2 parents 4248365 + 4b0a42e commit af03545

File tree

14 files changed

+173
-118
lines changed

14 files changed

+173
-118
lines changed

components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue
1212
import mozilla.components.browser.engine.gecko.webextension.GeckoWebExtension
1313
import mozilla.components.concept.engine.Engine
1414
import mozilla.components.concept.engine.EngineSession
15+
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
1516
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
1617
import mozilla.components.concept.engine.EngineSessionState
1718
import mozilla.components.concept.engine.EngineView
@@ -156,12 +157,25 @@ class GeckoEngine(
156157
defaultSettings?.automaticLanguageAdjustment = value
157158
}
158159

160+
override var safeBrowsingPolicy: Array<SafeBrowsingPolicy> =
161+
arrayOf(SafeBrowsingPolicy.RECOMMENDED)
162+
set(value) {
163+
val safeBrowsingCategories = value.sumBy { it.id }
164+
val trackingCategories =
165+
trackingProtectionPolicy?.trackingCategories?.sumBy { it.id }
166+
?: SafeBrowsingPolicy.NONE.id
167+
168+
runtime.settings.contentBlocking.categories =
169+
safeBrowsingCategories + trackingCategories
170+
field = value
171+
}
172+
159173
override var trackingProtectionPolicy: TrackingProtectionPolicy? = null
160174
set(value) {
161175
value?.let { policy ->
162176

163177
val trackingCategories = policy.trackingCategories.sumBy { it.id } +
164-
policy.safeBrowsingCategories.sumBy { it.id }
178+
safeBrowsingPolicy.sumBy { it.id }
165179

166180
runtime.settings.contentBlocking.categories = trackingCategories
167181
runtime.settings.contentBlocking.cookieBehavior = policy.cookiePolicy.id

components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import mozilla.components.concept.engine.EngineSession
1515
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
1616
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
1717
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory
18-
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.SafeBrowsingCategory
18+
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
1919
import mozilla.components.concept.engine.HitResult
2020
import mozilla.components.concept.engine.UnsupportedSettingException
2121
import mozilla.components.concept.engine.content.blocking.Tracker
@@ -844,7 +844,7 @@ class GeckoEngineSessionTest {
844844
})
845845

846846
val allPolicy = TrackingProtectionPolicy.select(
847-
arrayOf(TrackingProtectionPolicy.TrackingCategory.AD))
847+
arrayOf(TrackingCategory.AD))
848848
val regularOnlyPolicy = TrackingProtectionPolicy.select(
849849
trackingCategories = arrayOf(TrackingCategory.AD)
850850
).forRegularSessionsOnly()
@@ -888,6 +888,15 @@ class GeckoEngineSessionTest {
888888
assertTrue(trackerBlockingDisabledObserved)
889889
}
890890

891+
@Test
892+
fun safeBrowsingCategoriesAreAligned() {
893+
assertEquals(ContentBlocking.SB_MALWARE, SafeBrowsingPolicy.MALWARE.id)
894+
assertEquals(ContentBlocking.SB_UNWANTED, SafeBrowsingPolicy.UNWANTED.id)
895+
assertEquals(ContentBlocking.SB_HARMFUL, SafeBrowsingPolicy.HARMFUL.id)
896+
assertEquals(ContentBlocking.SB_PHISHING, SafeBrowsingPolicy.PHISHING.id)
897+
assertEquals(ContentBlocking.SB_ALL, SafeBrowsingPolicy.RECOMMENDED.id)
898+
}
899+
891900
@Test
892901
fun trackingProtectionCategoriesAreAligned() {
893902
assertEquals(TrackingCategory.AD.id, ContentBlocking.AT_AD)
@@ -898,32 +907,16 @@ class GeckoEngineSessionTest {
898907
assertEquals(TrackingCategory.CRYPTOMINING.id, ContentBlocking.AT_CRYPTOMINING)
899908
assertEquals(TrackingCategory.FINGERPRINTING.id, ContentBlocking.AT_FINGERPRINTING)
900909

901-
assertEquals(SafeBrowsingCategory.RECOMMENDED.id, ContentBlocking.SB_ALL)
902-
assertEquals(SafeBrowsingCategory.HARMFUL.id, ContentBlocking.SB_HARMFUL)
903-
assertEquals(SafeBrowsingCategory.MALWARE.id, ContentBlocking.SB_MALWARE)
904-
assertEquals(SafeBrowsingCategory.PHISHING.id, ContentBlocking.SB_PHISHING)
905-
assertEquals(SafeBrowsingCategory.UNWANTED.id, ContentBlocking.SB_UNWANTED)
906-
907910
assertEquals(
908911
TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id },
909912
ContentBlocking.AT_STRICT
910913
)
911914

912-
assertEquals(
913-
TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id },
914-
ContentBlocking.SB_ALL
915-
)
916-
917915
assertEquals(
918916
TrackingProtectionPolicy.recommended().trackingCategories.sumBy { it.id },
919917
ContentBlocking.AT_DEFAULT
920918
)
921919

922-
assertEquals(
923-
TrackingProtectionPolicy.recommended().safeBrowsingCategories.sumBy { it.id },
924-
ContentBlocking.SB_ALL
925-
)
926-
927920
assertEquals(TrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL.id, ContentBlocking.COOKIE_ACCEPT_ALL)
928921
assertEquals(
929922
TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS.id,

components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue
1111
import mozilla.components.concept.engine.DefaultSettings
1212
import mozilla.components.concept.engine.Engine
1313
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
14+
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
1415
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy
1516
import mozilla.components.concept.engine.UnsupportedSettingException
1617
import mozilla.components.concept.engine.mediaquery.PreferredColorScheme
@@ -139,10 +140,13 @@ class GeckoEngineTest {
139140
val trackingStrictCategories = TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id }
140141
assertEquals(trackingStrictCategories, ContentBlocking.AT_STRICT)
141142

142-
val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
143+
val safeStrictBrowsingCategories = SafeBrowsingPolicy.RECOMMENDED.id
143144
assertEquals(safeStrictBrowsingCategories, ContentBlocking.SB_ALL)
144145
assertEquals(contentBlockingSettings.cookieBehavior, CookiePolicy.ACCEPT_NON_TRACKERS.id)
145146

147+
engine.settings.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.PHISHING)
148+
assertTrue(contentBlockingSettings.contains(SafeBrowsingPolicy.PHISHING))
149+
146150
try {
147151
engine.settings.domStorageEnabled
148152
fail("Expected UnsupportedOperationException")
@@ -192,7 +196,9 @@ class GeckoEngineTest {
192196
val trackingStrictCategories = TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id }
193197
assertEquals(trackingStrictCategories, ContentBlocking.AT_STRICT)
194198

195-
val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
199+
assertTrue(contentBlockingSettings.contains(SafeBrowsingPolicy.RECOMMENDED))
200+
201+
val safeStrictBrowsingCategories = SafeBrowsingPolicy.RECOMMENDED.id
196202
assertEquals(safeStrictBrowsingCategories, ContentBlocking.SB_ALL)
197203

198204
assertEquals(contentBlockingSettings.cookieBehavior, CookiePolicy.ACCEPT_NON_TRACKERS.id)
@@ -410,4 +416,7 @@ class GeckoEngineTest {
410416
assertTrue(version.major >= 69)
411417
assertTrue(version.isAtLeast(69, 0, 0))
412418
}
419+
420+
private fun ContentBlocking.Settings.contains(vararg safeBrowsingPolicies: SafeBrowsingPolicy) =
421+
(safeBrowsingPolicies.sumBy { it.id } and this.categories) != 0
413422
}

components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import mozilla.components.browser.engine.gecko.webextension.GeckoWebExtension
1313
import mozilla.components.concept.engine.Engine
1414
import mozilla.components.concept.engine.EngineSession
1515
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
16+
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
1617
import mozilla.components.concept.engine.EngineSessionState
1718
import mozilla.components.concept.engine.EngineView
1819
import mozilla.components.concept.engine.Settings
@@ -156,11 +157,18 @@ class GeckoEngine(
156157
defaultSettings?.automaticLanguageAdjustment = value
157158
}
158159

160+
override var safeBrowsingPolicy: Array<SafeBrowsingPolicy> =
161+
arrayOf(SafeBrowsingPolicy.RECOMMENDED)
162+
set(value) {
163+
val policy = value.sumBy { it.id }
164+
runtime.settings.contentBlocking.setSafeBrowsing(policy)
165+
field = value
166+
}
167+
159168
override var trackingProtectionPolicy: TrackingProtectionPolicy? = null
160169
set(value) {
161170
value?.let { policy ->
162171
runtime.settings.contentBlocking.setAntiTracking(policy.trackingCategories.sumBy { it.id })
163-
runtime.settings.contentBlocking.setSafeBrowsing(policy.safeBrowsingCategories.sumBy { it.id })
164172
runtime.settings.contentBlocking.cookieBehavior = policy.cookiePolicy.id
165173
defaultSettings?.trackingProtectionPolicy = value
166174
field = value
@@ -234,6 +242,7 @@ class GeckoEngine(
234242
this.automaticFontSizeAdjustment = it.automaticFontSizeAdjustment
235243
this.automaticLanguageAdjustment = it.automaticLanguageAdjustment
236244
this.trackingProtectionPolicy = it.trackingProtectionPolicy
245+
this.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.RECOMMENDED)
237246
this.remoteDebuggingEnabled = it.remoteDebuggingEnabled
238247
this.testingModeEnabled = it.testingModeEnabled
239248
this.userAgentString = it.userAgentString

components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import mozilla.components.concept.engine.EngineSession
1515
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
1616
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
1717
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory
18-
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.SafeBrowsingCategory
1918
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy
19+
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
2020
import mozilla.components.concept.engine.HitResult
2121
import mozilla.components.concept.engine.UnsupportedSettingException
2222
import mozilla.components.concept.engine.content.blocking.Tracker
@@ -943,6 +943,16 @@ class GeckoEngineSessionTest {
943943
assertTrue(trackerBlockingDisabledObserved)
944944
}
945945

946+
@Test
947+
fun safeBrowsingCategoriesAreAligned() {
948+
assertEquals(GeckoSafeBrowsing.NONE, SafeBrowsingPolicy.NONE.id)
949+
assertEquals(GeckoSafeBrowsing.MALWARE, SafeBrowsingPolicy.MALWARE.id)
950+
assertEquals(GeckoSafeBrowsing.UNWANTED, SafeBrowsingPolicy.UNWANTED.id)
951+
assertEquals(GeckoSafeBrowsing.HARMFUL, SafeBrowsingPolicy.HARMFUL.id)
952+
assertEquals(GeckoSafeBrowsing.PHISHING, SafeBrowsingPolicy.PHISHING.id)
953+
assertEquals(GeckoSafeBrowsing.DEFAULT, SafeBrowsingPolicy.RECOMMENDED.id)
954+
}
955+
946956
@Test
947957
fun trackingProtectionCategoriesAreAligned() {
948958

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

959-
assertEquals(GeckoSafeBrowsing.NONE, SafeBrowsingCategory.NONE.id)
960-
assertEquals(GeckoSafeBrowsing.MALWARE, SafeBrowsingCategory.MALWARE.id)
961-
assertEquals(GeckoSafeBrowsing.UNWANTED, SafeBrowsingCategory.UNWANTED.id)
962-
assertEquals(GeckoSafeBrowsing.HARMFUL, SafeBrowsingCategory.HARMFUL.id)
963-
assertEquals(GeckoSafeBrowsing.PHISHING, SafeBrowsingCategory.PHISHING.id)
964-
assertEquals(GeckoSafeBrowsing.DEFAULT, SafeBrowsingCategory.RECOMMENDED.id)
965-
966969
val recommendedPolicy = TrackingProtectionPolicy.recommended()
967970
val strictPolicy = TrackingProtectionPolicy.strict()
968971
var antiTrackingCategories = strictPolicy.trackingCategories.sumBy { it.id }
969-
var antiSafeBrowsing = strictPolicy.safeBrowsingCategories.sumBy { it.id }
970972

971973
assertEquals(GeckoAntiTracking.STRICT, antiTrackingCategories)
972-
assertEquals(GeckoSafeBrowsing.DEFAULT, antiSafeBrowsing)
973974

974975
antiTrackingCategories = recommendedPolicy.trackingCategories.sumBy { it.id }
975-
antiSafeBrowsing = recommendedPolicy.safeBrowsingCategories.sumBy { it.id }
976976

977977
assertEquals(GeckoAntiTracking.DEFAULT, antiTrackingCategories)
978-
assertEquals(GeckoSafeBrowsing.DEFAULT, antiSafeBrowsing)
979978

980979
assertEquals(GeckoCookieBehavior.ACCEPT_ALL, CookiePolicy.ACCEPT_ALL.id)
981980
assertEquals(

components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue
1111
import mozilla.components.concept.engine.DefaultSettings
1212
import mozilla.components.concept.engine.Engine
1313
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
14+
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
1415
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy
1516
import mozilla.components.concept.engine.UnsupportedSettingException
1617
import mozilla.components.concept.engine.mediaquery.PreferredColorScheme
@@ -139,9 +140,12 @@ class GeckoEngineTest {
139140
val trackingStrictCategories = TrackingProtectionPolicy.strict().trackingCategories.sumBy { it.id }
140141
assertEquals(trackingStrictCategories, contentBlockingSettings.antiTrackingCategories)
141142

142-
val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
143+
val safeStrictBrowsingCategories = SafeBrowsingPolicy.RECOMMENDED.id
143144
assertEquals(safeStrictBrowsingCategories, contentBlockingSettings.safeBrowsingCategories)
144145

146+
engine.settings.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.PHISHING)
147+
assertEquals(SafeBrowsingPolicy.PHISHING.id, contentBlockingSettings.safeBrowsingCategories)
148+
145149
assertEquals(defaultSettings.trackingProtectionPolicy, TrackingProtectionPolicy.strict())
146150
assertEquals(contentBlockingSettings.cookieBehavior, CookiePolicy.ACCEPT_NON_TRACKERS.id)
147151

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

197-
val safeStrictBrowsingCategories = TrackingProtectionPolicy.strict().safeBrowsingCategories.sumBy { it.id }
198-
assertEquals(safeStrictBrowsingCategories, contentBlockingSettings.safeBrowsingCategories)
201+
assertEquals(SafeBrowsingPolicy.RECOMMENDED.id, contentBlockingSettings.safeBrowsingCategories)
199202

200203
assertEquals(CookiePolicy.ACCEPT_NON_TRACKERS.id, contentBlockingSettings.cookieBehavior)
201204
assertTrue(engine.settings.testingModeEnabled)
@@ -204,10 +207,10 @@ class GeckoEngineTest {
204207
assertFalse(engine.settings.allowAutoplayMedia)
205208
assertTrue(engine.settings.suspendMediaWhenInactive)
206209

210+
engine.settings.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.PHISHING)
207211
engine.settings.trackingProtectionPolicy =
208212
TrackingProtectionPolicy.select(
209213
trackingCategories = arrayOf(TrackingProtectionPolicy.TrackingCategory.AD),
210-
safeBrowsingCategories = arrayOf(TrackingProtectionPolicy.SafeBrowsingCategory.PHISHING),
211214
cookiePolicy = CookiePolicy.ACCEPT_ONLY_FIRST_PARTY
212215
)
213216

@@ -217,7 +220,7 @@ class GeckoEngineTest {
217220
)
218221

219222
assertEquals(
220-
TrackingProtectionPolicy.SafeBrowsingCategory.PHISHING.id,
223+
SafeBrowsingPolicy.PHISHING.id,
221224
contentBlockingSettings.safeBrowsingCategories
222225
)
223226

components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import mozilla.components.browser.engine.gecko.webextension.GeckoWebExtension
1313
import mozilla.components.concept.engine.Engine
1414
import mozilla.components.concept.engine.EngineSession
1515
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
16+
import mozilla.components.concept.engine.EngineSession.SafeBrowsingPolicy
1617
import mozilla.components.concept.engine.EngineSessionState
1718
import mozilla.components.concept.engine.EngineView
1819
import mozilla.components.concept.engine.Settings
@@ -156,12 +157,25 @@ class GeckoEngine(
156157
defaultSettings?.automaticLanguageAdjustment = value
157158
}
158159

160+
override var safeBrowsingPolicy: Array<SafeBrowsingPolicy> =
161+
arrayOf(SafeBrowsingPolicy.RECOMMENDED)
162+
set(value) {
163+
val safeBrowsingCategories = value.sumBy { it.id }
164+
val trackingCategories =
165+
trackingProtectionPolicy?.trackingCategories?.sumBy { it.id }
166+
?: SafeBrowsingPolicy.NONE.id
167+
168+
runtime.settings.contentBlocking.categories =
169+
safeBrowsingCategories + trackingCategories
170+
field = value
171+
}
172+
159173
override var trackingProtectionPolicy: TrackingProtectionPolicy? = null
160174
set(value) {
161175
value?.let { policy ->
162176

163177
val trackingCategories = policy.trackingCategories.sumBy { it.id } +
164-
policy.safeBrowsingCategories.sumBy { it.id }
178+
safeBrowsingPolicy.sumBy { it.id }
165179

166180
runtime.settings.contentBlocking.categories = trackingCategories
167181
runtime.settings.contentBlocking.cookieBehavior = policy.cookiePolicy.id

0 commit comments

Comments
 (0)