Skip to content

Commit d89330c

Browse files
authored
Privacy grade ceiling
* Require tos classification of "a" for an "a" privacy grade • Remove previous approach of setting a 2 or a 3 to a C as this caused some sites to be mistakenly updated to an A • There is discussion around the privacy grade algo! More updates coming soon.
1 parent 8514750 commit d89330c

File tree

5 files changed

+48
-20
lines changed

5 files changed

+48
-20
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,11 @@ class BrowserViewModelTest {
305305
}
306306

307307
@Test
308-
fun whenTrackerDetectedThenPrivacyGradeIsUpdated() {
308+
fun whenEnoughTrackersDetectedThenPrivacyGradeIsUpdated() {
309309
testee.urlChanged("https://example.com")
310-
testee.trackerDetected(TrackingEvent("https://example.com", "", null, false))
310+
for (i in 1..10) {
311+
testee.trackerDetected(TrackingEvent("https://example.com", "", null, false))
312+
}
311313
assertEquals(PrivacyGrade.C, testee.privacyGrade.value)
312314
}
313315

app/src/androidTest/java/com/duckduckgo/app/privacymonitor/model/PrivacyGradeTest.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,12 @@ class PrivacyGradeTest {
3737
}
3838

3939
@Test
40-
fun whenScoreIs3ThenGradeIsC() {
41-
assertEquals(PrivacyGrade.C, PrivacyGrade.gradeForScore(3))
40+
fun whenScoreIs3ThenGradeIsD() {
41+
assertEquals(PrivacyGrade.D, PrivacyGrade.gradeForScore(3))
4242
}
4343

4444
@Test
45-
fun whenScoreIs4ThenGradeIsD() {
45+
fun whenScoreIsAbove3ThenGradeIsD() {
4646
assertEquals(PrivacyGrade.D, PrivacyGrade.gradeForScore(4))
4747
}
48-
49-
@Test
50-
fun whenScoreIsAbove4ThenGradeIsD() {
51-
assertEquals(PrivacyGrade.D, PrivacyGrade.gradeForScore(5))
52-
}
53-
5448
}

app/src/androidTest/java/com/duckduckgo/app/privacymonitor/model/PrivacyMonitorGradeExtensionTest.kt

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,16 @@ class PrivacyMonitorGradeExtensionTest {
8585
}
8686

8787
@Test
88-
fun whenTermsScoreIsNegativeThenScoreIsDecrementedByOne() {
88+
fun whenTermsScoreIsNegativeThenScoreGreaterThanOneIsDecrementedByOne() {
89+
// http adds +1 and tos score removes 1 so we expect default score
90+
val privacyMonitor = monitor(terms = TermsOfService(score = -5), https = NONE)
91+
assertEquals(defaultScore, privacyMonitor.score)
92+
}
93+
94+
@Test
95+
fun whenTermsScoreIsNegativeThenScoreOfOneIsUnchanged() {
8996
val privacyMonitor = monitor(terms = TermsOfService(score = -5))
90-
assertEquals(defaultScore - 1, privacyMonitor.score)
97+
assertEquals(defaultScore, privacyMonitor.score)
9198
}
9299

93100
@Test
@@ -103,14 +110,20 @@ class PrivacyMonitorGradeExtensionTest {
103110
}
104111

105112
@Test
106-
fun whenOneTrackerThenScoreIsIncrementedByOne() {
113+
fun whenOneTrackerThenScoreNotIncremented() {
107114
val privacyMonitor = monitor(trackerCount = 1)
115+
assertEquals(defaultScore, privacyMonitor.score)
116+
}
117+
118+
@Test
119+
fun whenTenTrackersThenScoreIsIncrementedByOne() {
120+
val privacyMonitor = monitor(trackerCount = 10)
108121
assertEquals(defaultScore + 1, privacyMonitor.score)
109122
}
110123

111124
@Test
112-
fun whenElevenTrackersThenScoreIsIncrementedByTwo() {
113-
val privacyMonitor = monitor(trackerCount = 11)
125+
fun whenTwentyTrackersThenScoreIsIncrementedByTwo() {
126+
val privacyMonitor = monitor(trackerCount = 20)
114127
assertEquals(defaultScore + 2, privacyMonitor.score)
115128
}
116129

@@ -138,7 +151,7 @@ class PrivacyMonitorGradeExtensionTest {
138151
TrackerNetwork("", "", "", 5, true),
139152
TermsOfService(classification = "D"),
140153
NONE,
141-
5,
154+
11,
142155
true,
143156
true)
144157
assertEquals(defaultScore + 6, privacyMonitor.score)

app/src/main/java/com/duckduckgo/app/privacymonitor/model/PrivacyGrade.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ enum class PrivacyGrade {
3030
return when (score) {
3131
0 -> PrivacyGrade.A
3232
1 -> PrivacyGrade.B
33-
2, 3 -> PrivacyGrade.C
33+
2 -> PrivacyGrade.C
3434
else -> PrivacyGrade.D
3535
}
3636
}

app/src/main/java/com/duckduckgo/app/privacymonitor/model/PrivacyMonitorGradeExtension.kt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,42 @@
1717
package com.duckduckgo.app.privacymonitor.model
1818

1919
import com.duckduckgo.app.privacymonitor.PrivacyMonitor
20+
import timber.log.Timber
2021

2122

2223
val PrivacyMonitor.score: Int
2324
get() {
2425
var score = baseScore
25-
score += Math.ceil(trackerCount / 10.0).toInt()
26+
score += trackerCount / 10
2627
if (hasTrackerFromMajorNetwork) {
2728
score += 1
2829
}
2930
if (hasObscureTracker) {
3031
score += 1
3132
}
33+
if (score == 0 && termsOfService.classification != "A") {
34+
score = 1
35+
}
36+
Timber.v("""Calculating score {
37+
memberMajorNetworkPercentage: ${memberNetwork?.percentageOfPages}
38+
https: ${https}
39+
termsScore: ${termsOfService.gradingScore}
40+
trackerCount: $trackerCount
41+
hasTrackerFromMajorNetwork: $hasTrackerFromMajorNetwork
42+
hasObscureTracker: $hasObscureTracker
43+
score: $score
44+
""")
3245
return score
3346
}
3447

3548
val PrivacyMonitor.potentialScore: Int
36-
get() = baseScore
49+
get() {
50+
var score = baseScore
51+
if (score == 0 && termsOfService.classification != "A") {
52+
score = 1
53+
}
54+
return score
55+
}
3756

3857

3958
private val PrivacyMonitor.baseScore: Int

0 commit comments

Comments
 (0)