Skip to content

Commit ae3bc5a

Browse files
Fix surrogates algorithm (#1202)
1 parent 2ba2063 commit ae3bc5a

File tree

24 files changed

+1046
-97
lines changed

24 files changed

+1046
-97
lines changed

app/schemas/com.duckduckgo.app.global.db.AppDatabase/32.json

Lines changed: 866 additions & 0 deletions
Large diffs are not rendered by default.

app/src/androidTest/java/com/duckduckgo/app/brokensite/BrokenSiteDataTest.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ class BrokenSiteDataTest {
6565
@Test
6666
fun whenSiteHasBlockedTrackersThenBlockedTrackersExist() {
6767
val site = buildSite(SITE_URL)
68-
val event = TrackingEvent("http://www.example.com", "http://www.tracker.com/tracker.js", emptyList(), null, false)
69-
val anotherEvent = TrackingEvent("http://www.example.com/test", "http://www.anothertracker.com/tracker.js", emptyList(), null, false)
68+
val event = TrackingEvent("http://www.example.com", "http://www.tracker.com/tracker.js", emptyList(), null, false, null)
69+
val anotherEvent = TrackingEvent("http://www.example.com/test", "http://www.anothertracker.com/tracker.js", emptyList(), null, false, null)
7070
site.trackerDetected(event)
7171
site.trackerDetected(anotherEvent)
7272
assertEquals("www.tracker.com,www.anothertracker.com", BrokenSiteData.fromSite(site).blockedTrackers)
@@ -75,8 +75,8 @@ class BrokenSiteDataTest {
7575
@Test
7676
fun whenSiteHasSameHostBlockedTrackersThenOnlyUniqueTrackersIncludedInData() {
7777
val site = buildSite(SITE_URL)
78-
val event = TrackingEvent("http://www.example.com", "http://www.tracker.com/tracker.js", emptyList(), null, false)
79-
val anotherEvent = TrackingEvent("http://www.example.com/test", "http://www.tracker.com/tracker2.js", emptyList(), null, false)
78+
val event = TrackingEvent("http://www.example.com", "http://www.tracker.com/tracker.js", emptyList(), null, false, null)
79+
val anotherEvent = TrackingEvent("http://www.example.com/test", "http://www.tracker.com/tracker2.js", emptyList(), null, false, null)
8080
site.trackerDetected(event)
8181
site.trackerDetected(anotherEvent)
8282
assertEquals("www.tracker.com", BrokenSiteData.fromSite(site).blockedTrackers)
@@ -91,8 +91,8 @@ class BrokenSiteDataTest {
9191

9292
@Test
9393
fun whenSiteHasSurrogatesThenSurrogatesExist() {
94-
val surrogate = SurrogateResponse(true, "surrogate.com/test.js", "", "")
95-
val anotherSurrogate = SurrogateResponse(true, "anothersurrogate.com/test.js", "", "")
94+
val surrogate = SurrogateResponse("test.js", true, "surrogate.com/test.js", "", "")
95+
val anotherSurrogate = SurrogateResponse("test.js", true, "anothersurrogate.com/test.js", "", "")
9696
val site = buildSite(SITE_URL)
9797
site.surrogateDetected(surrogate)
9898
site.surrogateDetected(anotherSurrogate)
@@ -101,8 +101,8 @@ class BrokenSiteDataTest {
101101

102102
@Test
103103
fun whenSiteHasSameHostSurrogatesThenOnlyUniqueSurrogateIncludedInData() {
104-
val surrogate = SurrogateResponse(true, "surrogate.com/test.js", "", "")
105-
val anotherSurrogate = SurrogateResponse(true, "surrogate.com/test2.js", "", "")
104+
val surrogate = SurrogateResponse("test.js", true, "surrogate.com/test.js", "", "")
105+
val anotherSurrogate = SurrogateResponse("test.js", true, "surrogate.com/test2.js", "", "")
106106
val site = buildSite(SITE_URL)
107107
site.surrogateDetected(surrogate)
108108
site.surrogateDetected(anotherSurrogate)

app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ class BrowserTabViewModelTest {
544544
@Test
545545
fun whenTrackerDetectedThenNetworkLeaderboardUpdated() {
546546
val networkEntity = TestEntity("Network1", "Network1", 10.0)
547-
val event = TrackingEvent("http://www.example.com", "http://www.tracker.com/tracker.js", emptyList(), networkEntity, false)
547+
val event = TrackingEvent("http://www.example.com", "http://www.tracker.com/tracker.js", emptyList(), networkEntity, false, null)
548548
testee.trackerDetected(event)
549549
verify(mockNetworkLeaderboardDao).incrementNetworkCount("Network1")
550550
}
@@ -795,7 +795,7 @@ class BrowserTabViewModelTest {
795795
loadUrl("https://example.com")
796796
val entity = TestEntity("Network1", "Network1", 10.0)
797797
for (i in 1..10) {
798-
testee.trackerDetected(TrackingEvent("https://example.com", "", null, entity, false))
798+
testee.trackerDetected(TrackingEvent("https://example.com", "", null, entity, false, null))
799799
}
800800
assertNotEquals(grade, privacyGradeState().privacyGrade)
801801
}

app/src/androidTest/java/com/duckduckgo/app/browser/WebViewRequestInterceptorTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,9 @@ class WebViewRequestInterceptorTest {
285285
}
286286

287287
@Test
288-
fun whenRequestShouldBlockButThereIsASurrogateThen() = runBlocking<Unit> {
288+
fun whenRequestShouldBlockButThereIsASurrogateThenResponseReturnedContainsTheSurrogateData() = runBlocking<Unit> {
289289
val availableSurrogate = SurrogateResponse(
290+
scriptId = "testId",
290291
responseAvailable = true,
291292
mimeType = "application/javascript",
292293
jsFunction = "javascript replacement function goes here"
@@ -308,6 +309,7 @@ class WebViewRequestInterceptorTest {
308309
@Test
309310
fun whenRequestShouldBlockButThereIsASurrogateThenCallSurrogateDetected() = runBlocking<Unit> {
310311
val availableSurrogate = SurrogateResponse(
312+
scriptId = "testId",
311313
responseAvailable = true,
312314
mimeType = "application/javascript",
313315
jsFunction = "javascript replacement function goes here"
@@ -499,7 +501,8 @@ class WebViewRequestInterceptorTest {
499501
documentUrl = "",
500502
trackerUrl = "",
501503
entity = null,
502-
categories = null
504+
categories = null,
505+
surrogateId = "testId"
503506
)
504507
whenever(mockRequest.isForMainFrame).thenReturn(false)
505508
whenever(mockTrackerDetector.evaluate(any(), any())).thenReturn(blockTrackingEvent)

app/src/androidTest/java/com/duckduckgo/app/cta/ui/CtaTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,8 @@ class CtaTest {
297297
@Test
298298
fun whenTrackersBlockedReturnThemSortingByPrevalence() {
299299
val trackers = listOf(
300-
TrackingEvent("facebook.com", "facebook.com", blocked = true, entity = TestEntity("Facebook", "Facebook", 3.0), categories = null),
301-
TrackingEvent("other.com", "other.com", blocked = true, entity = TestEntity("Other", "Other", 9.0), categories = null)
300+
TrackingEvent("facebook.com", "facebook.com", blocked = true, entity = TestEntity("Facebook", "Facebook", 3.0), categories = null, surrogateId = null),
301+
TrackingEvent("other.com", "other.com", blocked = true, entity = TestEntity("Other", "Other", 9.0), categories = null, surrogateId = null)
302302
)
303303
val site = site(events = trackers)
304304

@@ -312,8 +312,8 @@ class CtaTest {
312312
@Test
313313
fun whenTrackersBlockedReturnOnlyTrackersWithDisplayName() {
314314
val trackers = listOf(
315-
TrackingEvent("facebook.com", "facebook.com", blocked = true, entity = TestEntity("Facebook", "Facebook", 3.0), categories = null),
316-
TrackingEvent("other.com", "other.com", blocked = true, entity = TestEntity("Other", "", 9.0), categories = null)
315+
TrackingEvent("facebook.com", "facebook.com", blocked = true, entity = TestEntity("Facebook", "Facebook", 3.0), categories = null, surrogateId = null),
316+
TrackingEvent("other.com", "other.com", blocked = true, entity = TestEntity("Other", "", 9.0), categories = null, surrogateId = null)
317317
)
318318
val site = site(events = trackers)
319319

app/src/androidTest/java/com/duckduckgo/app/cta/ui/CtaViewModelTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ class CtaViewModelTest {
415415
@Test
416416
fun whenRefreshCtaWhileBrowsingThenReturnTrackersBlockedCta() = coroutineRule.runBlocking {
417417
givenDaxOnboardingActive()
418-
val trackingEvent = TrackingEvent("test.com", "test.com", null, TestEntity("test", "test", 9.0), true)
418+
val trackingEvent = TrackingEvent("test.com", "test.com", null, TestEntity("test", "test", 9.0), true, null)
419419
val site = site(url = "http://www.cnn.com", trackerCount = 1, events = listOf(trackingEvent))
420420
val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true, site = site)
421421

@@ -425,7 +425,7 @@ class CtaViewModelTest {
425425
@Test
426426
fun whenRefreshCtaWhileBrowsingAndTrackersAreNotMajorThenReturnTrackersBlockedCta() = coroutineRule.runBlocking {
427427
givenDaxOnboardingActive()
428-
val trackingEvent = TrackingEvent("test.com", "test.com", null, TestEntity("test", "test", 0.123), true)
428+
val trackingEvent = TrackingEvent("test.com", "test.com", null, TestEntity("test", "test", 0.123), true, null)
429429
val site = site(url = "http://www.cnn.com", trackerCount = 1, events = listOf(trackingEvent))
430430
val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true, site = site)
431431

app/src/androidTest/java/com/duckduckgo/app/global/db/AppDatabaseTest.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,11 @@ class AppDatabaseTest {
350350
createDatabaseAndMigrate(30, 31, migrationsProvider.MIGRATION_30_TO_31)
351351
}
352352

353+
@Test
354+
fun whenMigratingFromVersion31To32ThenValidationSucceeds() {
355+
createDatabaseAndMigrate(31, 32, migrationsProvider.MIGRATION_31_TO_32)
356+
}
357+
353358
private fun givenUserStageIs(database: SupportSQLiteDatabase, appStage: AppStage) {
354359
database.execSQL("INSERT INTO `userStage` values (1, '${appStage.name}') ")
355360
}

app/src/androidTest/java/com/duckduckgo/app/global/model/SiteMonitorTest.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,30 +91,30 @@ class SiteMonitorTest {
9191
@Test
9292
fun whenTrackersAreDetectedThenTrackerCountIsIncremented() {
9393
val testee = SiteMonitor(document, null)
94-
testee.trackerDetected(TrackingEvent(document, trackerA, null, null, true))
95-
testee.trackerDetected(TrackingEvent(document, trackerB, null, null, true))
94+
testee.trackerDetected(TrackingEvent(document, trackerA, null, null, true, null))
95+
testee.trackerDetected(TrackingEvent(document, trackerB, null, null, true, null))
9696
assertEquals(2, testee.trackerCount)
9797
}
9898

9999
@Test
100100
fun whenNonMajorNetworkTrackerIsDetectedThenMajorNetworkCoutnIsZero() {
101101
val testee = SiteMonitor(document, null)
102-
testee.trackerDetected(TrackingEvent(document, trackerA, null, network, true))
102+
testee.trackerDetected(TrackingEvent(document, trackerA, null, network, true, null))
103103
assertEquals(0, testee.majorNetworkCount)
104104
}
105105

106106
@Test
107107
fun whenMajorNetworkTrackerIsDetectedThenMajorNetworkCountIsOne() {
108108
val testee = SiteMonitor(document, null)
109-
testee.trackerDetected(TrackingEvent(document, majorNetworkTracker, null, majorNetwork, true))
109+
testee.trackerDetected(TrackingEvent(document, majorNetworkTracker, null, majorNetwork, true, null))
110110
assertEquals(1, testee.majorNetworkCount)
111111
}
112112

113113
@Test
114114
fun whenDuplicateMajorNetworkIsDetectedThenMajorNetworkCountIsStillOne() {
115115
val testee = SiteMonitor(document, null)
116-
testee.trackerDetected(TrackingEvent(document, trackerA, null, majorNetwork, true))
117-
testee.trackerDetected(TrackingEvent(document, trackerB, null, majorNetwork, true))
116+
testee.trackerDetected(TrackingEvent(document, trackerA, null, majorNetwork, true, null))
117+
testee.trackerDetected(TrackingEvent(document, trackerB, null, majorNetwork, true, null))
118118
assertEquals(1, testee.majorNetworkCount)
119119
}
120120

app/src/androidTest/java/com/duckduckgo/app/privacy/ui/TrackerNetworksAdapterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class TrackerNetworksAdapterTest {
5050
}
5151

5252
private fun data(): SortedMap<Entity, List<TrackingEvent>> {
53-
val trackingEvent = TrackingEvent("", "", null, null, true)
53+
val trackingEvent = TrackingEvent("", "", null, null, true, null)
5454
val minorNetworkList = arrayListOf(trackingEvent, trackingEvent)
5555
val majorNetworkList = arrayListOf(trackingEvent, trackingEvent)
5656
return mapOf(

app/src/androidTest/java/com/duckduckgo/app/privacy/ui/TrackerNetworksViewModelTest.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class TrackerNetworksViewModelTest {
6565

6666
@Test
6767
fun whenTrackersUpdatedWithNoTrackersThenViewModelListIsEmpty() {
68-
val input = listOf(TrackingEvent(Url.DOCUMENT, Url.tracker(1), null, Entity.MINOR_ENTITY_A, true))
68+
val input = listOf(TrackingEvent(Url.DOCUMENT, Url.tracker(1), null, Entity.MINOR_ENTITY_A, true, null))
6969
testee.onSiteChanged(site(trackingEvents = input))
7070
assertTrue(testee.viewState.value!!.trackingEventsByNetwork.isNotEmpty())
7171

@@ -78,21 +78,21 @@ class TrackerNetworksViewModelTest {
7878

7979
val input = listOf(
8080
// Minor entity with 3 distinct trackers
81-
TrackingEvent(Url.DOCUMENT, Url.tracker(1), null, Entity.MINOR_ENTITY_A, true),
82-
TrackingEvent(Url.DOCUMENT, Url.tracker(1), null, Entity.MINOR_ENTITY_A, true),
83-
TrackingEvent(Url.DOCUMENT, Url.tracker(2), null, Entity.MINOR_ENTITY_A, true),
84-
TrackingEvent(Url.DOCUMENT, Url.tracker(3), null, Entity.MINOR_ENTITY_A, true),
81+
TrackingEvent(Url.DOCUMENT, Url.tracker(1), null, Entity.MINOR_ENTITY_A, true, null),
82+
TrackingEvent(Url.DOCUMENT, Url.tracker(1), null, Entity.MINOR_ENTITY_A, true, null),
83+
TrackingEvent(Url.DOCUMENT, Url.tracker(2), null, Entity.MINOR_ENTITY_A, true, null),
84+
TrackingEvent(Url.DOCUMENT, Url.tracker(3), null, Entity.MINOR_ENTITY_A, true, null),
8585

8686
// Minor entity with 1 distinct tracker
87-
TrackingEvent(Url.DOCUMENT, Url.tracker(4), null, Entity.MINOR_ENTITY_B, true),
87+
TrackingEvent(Url.DOCUMENT, Url.tracker(4), null, Entity.MINOR_ENTITY_B, true, null),
8888

8989
// Major entity with 2 distinct tracker
90-
TrackingEvent(Url.DOCUMENT, Url.tracker(6), null, Entity.MAJOR_ENTITY_B, true),
91-
TrackingEvent(Url.DOCUMENT, Url.tracker(6), null, Entity.MAJOR_ENTITY_B, true),
92-
TrackingEvent(Url.DOCUMENT, Url.tracker(7), null, Entity.MAJOR_ENTITY_B, true),
90+
TrackingEvent(Url.DOCUMENT, Url.tracker(6), null, Entity.MAJOR_ENTITY_B, true, null),
91+
TrackingEvent(Url.DOCUMENT, Url.tracker(6), null, Entity.MAJOR_ENTITY_B, true, null),
92+
TrackingEvent(Url.DOCUMENT, Url.tracker(7), null, Entity.MAJOR_ENTITY_B, true, null),
9393

9494
// Major entity with 1 distinct tracker
95-
TrackingEvent(Url.DOCUMENT, Url.tracker(5), null, Entity.MAJOR_ENTITY_A, true)
95+
TrackingEvent(Url.DOCUMENT, Url.tracker(5), null, Entity.MAJOR_ENTITY_A, true, null)
9696
)
9797

9898
testee.onSiteChanged(site(trackingEvents = input))

0 commit comments

Comments
 (0)