Loading components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +18 −3 Original line number Diff line number Diff line Loading @@ -634,11 +634,20 @@ class GeckoEngine( } } @Suppress("ComplexMethod") internal fun ContentBlockingController.LogEntry.BlockingData.getLoadedCategory(): TrackingCategory { val socialTrackingProtectionEnabled = settings.trackingProtectionPolicy?.strictSocialTrackingProtection ?: false return when (category) { Event.LOADED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.LOADED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.LOADED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.LOADED_SOCIALTRACKING_CONTENT -> { if (socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.COOKIES_LOADED_SOCIALTRACKER -> { if (!socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.LOADED_LEVEL_1_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES Event.LOADED_LEVEL_2_TRACKING_CONTENT -> { Loading @@ -662,6 +671,11 @@ class GeckoEngine( } } /** * Mimics the behavior for categorizing trackers from desktop, they should be kept in sync, * as differences will result in improper categorization for trackers. * https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-siteProtections.js */ internal fun ContentBlockingController.LogEntry.toTrackerLog(): TrackerLog { val cookiesHasBeenBlocked = this.blockingData.any { it.hasBlockedCookies() } return TrackerLog( Loading Loading @@ -689,14 +703,15 @@ internal fun ContentBlockingController.LogEntry.BlockingData.hasBlockedCookies() category == Event.COOKIES_BLOCKED_TRACKER || category == Event.COOKIES_BLOCKED_ALL || category == Event.COOKIES_PARTITIONED_FOREIGN || category == Event.COOKIES_BLOCKED_FOREIGN category == Event.COOKIES_BLOCKED_FOREIGN || category == Event.COOKIES_BLOCKED_SOCIALTRACKER } internal fun ContentBlockingController.LogEntry.BlockingData.getBlockedCategory(): TrackingCategory { return when (category) { Event.BLOCKED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.BLOCKED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.BLOCKED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_SOCIALTRACKING_CONTENT, Event.COOKIES_BLOCKED_SOCIALTRACKER -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES else -> TrackingCategory.NONE } Loading components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +75 −1 Original line number Diff line number Diff line Loading @@ -1644,6 +1644,56 @@ class GeckoEngineTest { assertTrue(onErrorCalled) } @Test fun `fetch site with social trackers`() { val runtime = mock<GeckoRuntime>() val engine = GeckoEngine(context, runtime = runtime) val mockSession = mock<GeckoEngineSession>() val mockGeckoSetting = mock<GeckoRuntimeSettings>() val mockGeckoContentBlockingSetting = mock<ContentBlocking.Settings>() var trackersLog: List<TrackerLog>? = null val mockContentBlockingController = mock<ContentBlockingController>() var logEntriesResult = GeckoResult<List<ContentBlockingController.LogEntry>>() whenever(runtime.settings).thenReturn(mockGeckoSetting) whenever(mockGeckoSetting.contentBlocking).thenReturn(mockGeckoContentBlockingSetting) whenever(runtime.contentBlockingController).thenReturn(mockContentBlockingController) whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.recommended() engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) var trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) var trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.strict() logEntriesResult = GeckoResult() whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) } @Test fun `fetch trackers logged of the level 2 list`() { val runtime = mock<GeckoRuntime>() Loading Loading @@ -1714,11 +1764,33 @@ class GeckoEngineTest { assert(handler1 == handler2) } private fun createSocialTrackersLogEntryList(): List<ContentBlockingController.LogEntry> { val blockedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(blockedLogEntry, "origin", "www.tracker.com") val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedSocialContent = createBlockingData(Event.BLOCKED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(blockedLogEntry, "blockingData", listOf(blockedSocialContent, blockedCookieSocialTracker)) val loadedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(loadedLogEntry, "origin", "www.tracker2.com") val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val loadedSocialContent = createBlockingData(Event.LOADED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(loadedLogEntry, "blockingData", listOf(loadedCookieSocialTracker, loadedSocialContent)) return listOf(blockedLogEntry, loadedLogEntry) } private fun createDummyLogEntryList(): List<ContentBlockingController.LogEntry> { val addLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(addLogEntry, "origin", "www.tracker.com") val blockedCookiePermission = createBlockingData(Event.COOKIES_BLOCKED_BY_PERMISSION) val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedTrackingContent = createBlockingData(Event.BLOCKED_TRACKING_CONTENT) val blockedFingerprintingContent = createBlockingData(Event.BLOCKED_FINGERPRINTING_CONTENT) Loading @@ -1741,7 +1813,9 @@ class GeckoEngineTest { loadedCyptominingContent, blockedCookiePermission, blockedSocialContent, loadedSocialContent loadedSocialContent, loadedCookieSocialTracker, blockedCookieSocialTracker ) val addLogSecondEntry = object : ContentBlockingController.LogEntry() {} Loading components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +18 −3 Original line number Diff line number Diff line Loading @@ -634,11 +634,20 @@ class GeckoEngine( } } @Suppress("ComplexMethod") internal fun ContentBlockingController.LogEntry.BlockingData.getLoadedCategory(): TrackingCategory { val socialTrackingProtectionEnabled = settings.trackingProtectionPolicy?.strictSocialTrackingProtection ?: false return when (category) { Event.LOADED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.LOADED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.LOADED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.LOADED_SOCIALTRACKING_CONTENT -> { if (socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.COOKIES_LOADED_SOCIALTRACKER -> { if (!socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.LOADED_LEVEL_1_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES Event.LOADED_LEVEL_2_TRACKING_CONTENT -> { Loading @@ -662,6 +671,11 @@ class GeckoEngine( } } /** * Mimics the behavior for categorizing trackers from desktop, they should be kept in sync, * as differences will result in improper categorization for trackers. * https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-siteProtections.js */ internal fun ContentBlockingController.LogEntry.toTrackerLog(): TrackerLog { val cookiesHasBeenBlocked = this.blockingData.any { it.hasBlockedCookies() } return TrackerLog( Loading Loading @@ -689,14 +703,15 @@ internal fun ContentBlockingController.LogEntry.BlockingData.hasBlockedCookies() category == Event.COOKIES_BLOCKED_TRACKER || category == Event.COOKIES_BLOCKED_ALL || category == Event.COOKIES_PARTITIONED_FOREIGN || category == Event.COOKIES_BLOCKED_FOREIGN category == Event.COOKIES_BLOCKED_FOREIGN || category == Event.COOKIES_BLOCKED_SOCIALTRACKER } internal fun ContentBlockingController.LogEntry.BlockingData.getBlockedCategory(): TrackingCategory { return when (category) { Event.BLOCKED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.BLOCKED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.BLOCKED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_SOCIALTRACKING_CONTENT, Event.COOKIES_BLOCKED_SOCIALTRACKER -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES else -> TrackingCategory.NONE } Loading components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +75 −1 Original line number Diff line number Diff line Loading @@ -1644,6 +1644,56 @@ class GeckoEngineTest { assertTrue(onErrorCalled) } @Test fun `fetch site with social trackers`() { val runtime = mock<GeckoRuntime>() val engine = GeckoEngine(context, runtime = runtime) val mockSession = mock<GeckoEngineSession>() val mockGeckoSetting = mock<GeckoRuntimeSettings>() val mockGeckoContentBlockingSetting = mock<ContentBlocking.Settings>() var trackersLog: List<TrackerLog>? = null val mockContentBlockingController = mock<ContentBlockingController>() var logEntriesResult = GeckoResult<List<ContentBlockingController.LogEntry>>() whenever(runtime.settings).thenReturn(mockGeckoSetting) whenever(mockGeckoSetting.contentBlocking).thenReturn(mockGeckoContentBlockingSetting) whenever(runtime.contentBlockingController).thenReturn(mockContentBlockingController) whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.recommended() engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) var trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) var trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.strict() logEntriesResult = GeckoResult() whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) } @Test fun `fetch trackers logged of the level 2 list`() { val runtime = mock<GeckoRuntime>() Loading Loading @@ -1714,11 +1764,33 @@ class GeckoEngineTest { assert(handler1 == handler2) } private fun createSocialTrackersLogEntryList(): List<ContentBlockingController.LogEntry> { val blockedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(blockedLogEntry, "origin", "www.tracker.com") val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedSocialContent = createBlockingData(Event.BLOCKED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(blockedLogEntry, "blockingData", listOf(blockedSocialContent, blockedCookieSocialTracker)) val loadedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(loadedLogEntry, "origin", "www.tracker2.com") val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val loadedSocialContent = createBlockingData(Event.LOADED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(loadedLogEntry, "blockingData", listOf(loadedCookieSocialTracker, loadedSocialContent)) return listOf(blockedLogEntry, loadedLogEntry) } private fun createDummyLogEntryList(): List<ContentBlockingController.LogEntry> { val addLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(addLogEntry, "origin", "www.tracker.com") val blockedCookiePermission = createBlockingData(Event.COOKIES_BLOCKED_BY_PERMISSION) val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedTrackingContent = createBlockingData(Event.BLOCKED_TRACKING_CONTENT) val blockedFingerprintingContent = createBlockingData(Event.BLOCKED_FINGERPRINTING_CONTENT) Loading @@ -1741,7 +1813,9 @@ class GeckoEngineTest { loadedCyptominingContent, blockedCookiePermission, blockedSocialContent, loadedSocialContent loadedSocialContent, loadedCookieSocialTracker, blockedCookieSocialTracker ) val addLogSecondEntry = object : ContentBlockingController.LogEntry() {} Loading components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +18 −3 Original line number Diff line number Diff line Loading @@ -634,11 +634,20 @@ class GeckoEngine( } } @Suppress("ComplexMethod") internal fun ContentBlockingController.LogEntry.BlockingData.getLoadedCategory(): TrackingCategory { val socialTrackingProtectionEnabled = settings.trackingProtectionPolicy?.strictSocialTrackingProtection ?: false return when (category) { Event.LOADED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.LOADED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.LOADED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.LOADED_SOCIALTRACKING_CONTENT -> { if (socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.COOKIES_LOADED_SOCIALTRACKER -> { if (!socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.LOADED_LEVEL_1_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES Event.LOADED_LEVEL_2_TRACKING_CONTENT -> { Loading @@ -662,6 +671,11 @@ class GeckoEngine( } } /** * Mimics the behavior for categorizing trackers from desktop, they should be kept in sync, * as differences will result in improper categorization for trackers. * https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-siteProtections.js */ internal fun ContentBlockingController.LogEntry.toTrackerLog(): TrackerLog { val cookiesHasBeenBlocked = this.blockingData.any { it.hasBlockedCookies() } return TrackerLog( Loading Loading @@ -689,14 +703,15 @@ internal fun ContentBlockingController.LogEntry.BlockingData.hasBlockedCookies() category == Event.COOKIES_BLOCKED_TRACKER || category == Event.COOKIES_BLOCKED_ALL || category == Event.COOKIES_PARTITIONED_FOREIGN || category == Event.COOKIES_BLOCKED_FOREIGN category == Event.COOKIES_BLOCKED_FOREIGN || category == Event.COOKIES_BLOCKED_SOCIALTRACKER } internal fun ContentBlockingController.LogEntry.BlockingData.getBlockedCategory(): TrackingCategory { return when (category) { Event.BLOCKED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.BLOCKED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.BLOCKED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_SOCIALTRACKING_CONTENT, Event.COOKIES_BLOCKED_SOCIALTRACKER -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES else -> TrackingCategory.NONE } Loading Loading
components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +18 −3 Original line number Diff line number Diff line Loading @@ -634,11 +634,20 @@ class GeckoEngine( } } @Suppress("ComplexMethod") internal fun ContentBlockingController.LogEntry.BlockingData.getLoadedCategory(): TrackingCategory { val socialTrackingProtectionEnabled = settings.trackingProtectionPolicy?.strictSocialTrackingProtection ?: false return when (category) { Event.LOADED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.LOADED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.LOADED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.LOADED_SOCIALTRACKING_CONTENT -> { if (socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.COOKIES_LOADED_SOCIALTRACKER -> { if (!socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.LOADED_LEVEL_1_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES Event.LOADED_LEVEL_2_TRACKING_CONTENT -> { Loading @@ -662,6 +671,11 @@ class GeckoEngine( } } /** * Mimics the behavior for categorizing trackers from desktop, they should be kept in sync, * as differences will result in improper categorization for trackers. * https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-siteProtections.js */ internal fun ContentBlockingController.LogEntry.toTrackerLog(): TrackerLog { val cookiesHasBeenBlocked = this.blockingData.any { it.hasBlockedCookies() } return TrackerLog( Loading Loading @@ -689,14 +703,15 @@ internal fun ContentBlockingController.LogEntry.BlockingData.hasBlockedCookies() category == Event.COOKIES_BLOCKED_TRACKER || category == Event.COOKIES_BLOCKED_ALL || category == Event.COOKIES_PARTITIONED_FOREIGN || category == Event.COOKIES_BLOCKED_FOREIGN category == Event.COOKIES_BLOCKED_FOREIGN || category == Event.COOKIES_BLOCKED_SOCIALTRACKER } internal fun ContentBlockingController.LogEntry.BlockingData.getBlockedCategory(): TrackingCategory { return when (category) { Event.BLOCKED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.BLOCKED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.BLOCKED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_SOCIALTRACKING_CONTENT, Event.COOKIES_BLOCKED_SOCIALTRACKER -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES else -> TrackingCategory.NONE } Loading
components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +75 −1 Original line number Diff line number Diff line Loading @@ -1644,6 +1644,56 @@ class GeckoEngineTest { assertTrue(onErrorCalled) } @Test fun `fetch site with social trackers`() { val runtime = mock<GeckoRuntime>() val engine = GeckoEngine(context, runtime = runtime) val mockSession = mock<GeckoEngineSession>() val mockGeckoSetting = mock<GeckoRuntimeSettings>() val mockGeckoContentBlockingSetting = mock<ContentBlocking.Settings>() var trackersLog: List<TrackerLog>? = null val mockContentBlockingController = mock<ContentBlockingController>() var logEntriesResult = GeckoResult<List<ContentBlockingController.LogEntry>>() whenever(runtime.settings).thenReturn(mockGeckoSetting) whenever(mockGeckoSetting.contentBlocking).thenReturn(mockGeckoContentBlockingSetting) whenever(runtime.contentBlockingController).thenReturn(mockContentBlockingController) whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.recommended() engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) var trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) var trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.strict() logEntriesResult = GeckoResult() whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) } @Test fun `fetch trackers logged of the level 2 list`() { val runtime = mock<GeckoRuntime>() Loading Loading @@ -1714,11 +1764,33 @@ class GeckoEngineTest { assert(handler1 == handler2) } private fun createSocialTrackersLogEntryList(): List<ContentBlockingController.LogEntry> { val blockedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(blockedLogEntry, "origin", "www.tracker.com") val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedSocialContent = createBlockingData(Event.BLOCKED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(blockedLogEntry, "blockingData", listOf(blockedSocialContent, blockedCookieSocialTracker)) val loadedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(loadedLogEntry, "origin", "www.tracker2.com") val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val loadedSocialContent = createBlockingData(Event.LOADED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(loadedLogEntry, "blockingData", listOf(loadedCookieSocialTracker, loadedSocialContent)) return listOf(blockedLogEntry, loadedLogEntry) } private fun createDummyLogEntryList(): List<ContentBlockingController.LogEntry> { val addLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(addLogEntry, "origin", "www.tracker.com") val blockedCookiePermission = createBlockingData(Event.COOKIES_BLOCKED_BY_PERMISSION) val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedTrackingContent = createBlockingData(Event.BLOCKED_TRACKING_CONTENT) val blockedFingerprintingContent = createBlockingData(Event.BLOCKED_FINGERPRINTING_CONTENT) Loading @@ -1741,7 +1813,9 @@ class GeckoEngineTest { loadedCyptominingContent, blockedCookiePermission, blockedSocialContent, loadedSocialContent loadedSocialContent, loadedCookieSocialTracker, blockedCookieSocialTracker ) val addLogSecondEntry = object : ContentBlockingController.LogEntry() {} Loading
components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +18 −3 Original line number Diff line number Diff line Loading @@ -634,11 +634,20 @@ class GeckoEngine( } } @Suppress("ComplexMethod") internal fun ContentBlockingController.LogEntry.BlockingData.getLoadedCategory(): TrackingCategory { val socialTrackingProtectionEnabled = settings.trackingProtectionPolicy?.strictSocialTrackingProtection ?: false return when (category) { Event.LOADED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.LOADED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.LOADED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.LOADED_SOCIALTRACKING_CONTENT -> { if (socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.COOKIES_LOADED_SOCIALTRACKER -> { if (!socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.LOADED_LEVEL_1_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES Event.LOADED_LEVEL_2_TRACKING_CONTENT -> { Loading @@ -662,6 +671,11 @@ class GeckoEngine( } } /** * Mimics the behavior for categorizing trackers from desktop, they should be kept in sync, * as differences will result in improper categorization for trackers. * https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-siteProtections.js */ internal fun ContentBlockingController.LogEntry.toTrackerLog(): TrackerLog { val cookiesHasBeenBlocked = this.blockingData.any { it.hasBlockedCookies() } return TrackerLog( Loading Loading @@ -689,14 +703,15 @@ internal fun ContentBlockingController.LogEntry.BlockingData.hasBlockedCookies() category == Event.COOKIES_BLOCKED_TRACKER || category == Event.COOKIES_BLOCKED_ALL || category == Event.COOKIES_PARTITIONED_FOREIGN || category == Event.COOKIES_BLOCKED_FOREIGN category == Event.COOKIES_BLOCKED_FOREIGN || category == Event.COOKIES_BLOCKED_SOCIALTRACKER } internal fun ContentBlockingController.LogEntry.BlockingData.getBlockedCategory(): TrackingCategory { return when (category) { Event.BLOCKED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.BLOCKED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.BLOCKED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_SOCIALTRACKING_CONTENT, Event.COOKIES_BLOCKED_SOCIALTRACKER -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES else -> TrackingCategory.NONE } Loading
components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +75 −1 Original line number Diff line number Diff line Loading @@ -1644,6 +1644,56 @@ class GeckoEngineTest { assertTrue(onErrorCalled) } @Test fun `fetch site with social trackers`() { val runtime = mock<GeckoRuntime>() val engine = GeckoEngine(context, runtime = runtime) val mockSession = mock<GeckoEngineSession>() val mockGeckoSetting = mock<GeckoRuntimeSettings>() val mockGeckoContentBlockingSetting = mock<ContentBlocking.Settings>() var trackersLog: List<TrackerLog>? = null val mockContentBlockingController = mock<ContentBlockingController>() var logEntriesResult = GeckoResult<List<ContentBlockingController.LogEntry>>() whenever(runtime.settings).thenReturn(mockGeckoSetting) whenever(mockGeckoSetting.contentBlocking).thenReturn(mockGeckoContentBlockingSetting) whenever(runtime.contentBlockingController).thenReturn(mockContentBlockingController) whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.recommended() engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) var trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) var trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) engine.settings.trackingProtectionPolicy = TrackingProtectionPolicy.strict() logEntriesResult = GeckoResult() whenever(mockContentBlockingController.getLog(any())).thenReturn(logEntriesResult) engine.getTrackersLog(mockSession, onSuccess = { trackersLog = it }) logEntriesResult.complete(createSocialTrackersLogEntryList()) trackerLog = trackersLog!!.first() assertTrue(trackerLog.cookiesHasBeenBlocked) assertEquals("www.tracker.com", trackerLog.url) assertTrue(trackerLog.blockedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) trackerLog2 = trackersLog!![1] assertFalse(trackerLog2.cookiesHasBeenBlocked) assertEquals("www.tracker2.com", trackerLog2.url) assertTrue(trackerLog2.loadedCategories.contains(TrackingCategory.MOZILLA_SOCIAL)) } @Test fun `fetch trackers logged of the level 2 list`() { val runtime = mock<GeckoRuntime>() Loading Loading @@ -1714,11 +1764,33 @@ class GeckoEngineTest { assert(handler1 == handler2) } private fun createSocialTrackersLogEntryList(): List<ContentBlockingController.LogEntry> { val blockedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(blockedLogEntry, "origin", "www.tracker.com") val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedSocialContent = createBlockingData(Event.BLOCKED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(blockedLogEntry, "blockingData", listOf(blockedSocialContent, blockedCookieSocialTracker)) val loadedLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(loadedLogEntry, "origin", "www.tracker2.com") val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val loadedSocialContent = createBlockingData(Event.LOADED_SOCIALTRACKING_CONTENT) ReflectionUtils.setField(loadedLogEntry, "blockingData", listOf(loadedCookieSocialTracker, loadedSocialContent)) return listOf(blockedLogEntry, loadedLogEntry) } private fun createDummyLogEntryList(): List<ContentBlockingController.LogEntry> { val addLogEntry = object : ContentBlockingController.LogEntry() {} ReflectionUtils.setField(addLogEntry, "origin", "www.tracker.com") val blockedCookiePermission = createBlockingData(Event.COOKIES_BLOCKED_BY_PERMISSION) val loadedCookieSocialTracker = createBlockingData(Event.COOKIES_LOADED_SOCIALTRACKER) val blockedCookieSocialTracker = createBlockingData(Event.COOKIES_BLOCKED_SOCIALTRACKER) val blockedTrackingContent = createBlockingData(Event.BLOCKED_TRACKING_CONTENT) val blockedFingerprintingContent = createBlockingData(Event.BLOCKED_FINGERPRINTING_CONTENT) Loading @@ -1741,7 +1813,9 @@ class GeckoEngineTest { loadedCyptominingContent, blockedCookiePermission, blockedSocialContent, loadedSocialContent loadedSocialContent, loadedCookieSocialTracker, blockedCookieSocialTracker ) val addLogSecondEntry = object : ContentBlockingController.LogEntry() {} Loading
components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +18 −3 Original line number Diff line number Diff line Loading @@ -634,11 +634,20 @@ class GeckoEngine( } } @Suppress("ComplexMethod") internal fun ContentBlockingController.LogEntry.BlockingData.getLoadedCategory(): TrackingCategory { val socialTrackingProtectionEnabled = settings.trackingProtectionPolicy?.strictSocialTrackingProtection ?: false return when (category) { Event.LOADED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.LOADED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.LOADED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.LOADED_SOCIALTRACKING_CONTENT -> { if (socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.COOKIES_LOADED_SOCIALTRACKER -> { if (!socialTrackingProtectionEnabled) TrackingCategory.MOZILLA_SOCIAL else TrackingCategory.NONE } Event.LOADED_LEVEL_1_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES Event.LOADED_LEVEL_2_TRACKING_CONTENT -> { Loading @@ -662,6 +671,11 @@ class GeckoEngine( } } /** * Mimics the behavior for categorizing trackers from desktop, they should be kept in sync, * as differences will result in improper categorization for trackers. * https://dxr.mozilla.org/mozilla-central/source/browser/base/content/browser-siteProtections.js */ internal fun ContentBlockingController.LogEntry.toTrackerLog(): TrackerLog { val cookiesHasBeenBlocked = this.blockingData.any { it.hasBlockedCookies() } return TrackerLog( Loading Loading @@ -689,14 +703,15 @@ internal fun ContentBlockingController.LogEntry.BlockingData.hasBlockedCookies() category == Event.COOKIES_BLOCKED_TRACKER || category == Event.COOKIES_BLOCKED_ALL || category == Event.COOKIES_PARTITIONED_FOREIGN || category == Event.COOKIES_BLOCKED_FOREIGN category == Event.COOKIES_BLOCKED_FOREIGN || category == Event.COOKIES_BLOCKED_SOCIALTRACKER } internal fun ContentBlockingController.LogEntry.BlockingData.getBlockedCategory(): TrackingCategory { return when (category) { Event.BLOCKED_FINGERPRINTING_CONTENT -> TrackingCategory.FINGERPRINTING Event.BLOCKED_CRYPTOMINING_CONTENT -> TrackingCategory.CRYPTOMINING Event.BLOCKED_SOCIALTRACKING_CONTENT -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_SOCIALTRACKING_CONTENT, Event.COOKIES_BLOCKED_SOCIALTRACKER -> TrackingCategory.MOZILLA_SOCIAL Event.BLOCKED_TRACKING_CONTENT -> TrackingCategory.SCRIPTS_AND_SUB_RESOURCES else -> TrackingCategory.NONE } Loading