Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(293)

Side by Side Diff: components/safe_browsing_db/safe_browsing_prefs_unittest.cc

Issue 2869383002: Unify safe_browsing* components [1]: move safe_browsing_prefs* (Closed)
Patch Set: fix win bots Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/safe_browsing_db/safe_browsing_prefs.cc ('k') | components/safe_browsing_db/util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <string>
6 #include <vector>
7
8 #include "base/command_line.h"
9 #include "base/strings/string_piece.h"
10 #include "base/strings/string_util.h"
11 #include "base/test/scoped_feature_list.h"
12 #include "components/prefs/pref_registry_simple.h"
13 #include "components/prefs/testing_pref_service.h"
14 #include "components/safe_browsing_db/safe_browsing_prefs.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace safe_browsing {
18
19 class SafeBrowsingPrefsTest : public ::testing::Test {
20 protected:
21 void SetUp() override {
22 prefs_.registry()->RegisterBooleanPref(
23 prefs::kSafeBrowsingExtendedReportingEnabled, false);
24 prefs_.registry()->RegisterBooleanPref(
25 prefs::kSafeBrowsingScoutReportingEnabled, false);
26 prefs_.registry()->RegisterBooleanPref(
27 prefs::kSafeBrowsingScoutGroupSelected, false);
28 prefs_.registry()->RegisterBooleanPref(
29 prefs::kSafeBrowsingSawInterstitialExtendedReporting, false);
30 prefs_.registry()->RegisterBooleanPref(
31 prefs::kSafeBrowsingSawInterstitialScoutReporting, false);
32
33 ResetExperiments(/*can_show_scout=*/false, /*only_show_scout=*/false);
34 }
35
36 void ResetPrefs(bool sber_reporting, bool scout_reporting, bool scout_group) {
37 prefs_.SetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled,
38 sber_reporting);
39 prefs_.SetBoolean(prefs::kSafeBrowsingScoutReportingEnabled,
40 scout_reporting);
41 prefs_.SetBoolean(prefs::kSafeBrowsingScoutGroupSelected, scout_group);
42 }
43
44 void ResetExperiments(bool can_show_scout, bool only_show_scout) {
45 std::vector<base::StringPiece> enabled_features;
46 std::vector<base::StringPiece> disabled_features;
47
48 auto* target_vector =
49 can_show_scout ? &enabled_features : &disabled_features;
50 target_vector->push_back(kCanShowScoutOptIn.name);
51
52 target_vector = only_show_scout ? &enabled_features : &disabled_features;
53 target_vector->push_back(kOnlyShowScoutOptIn.name);
54
55 feature_list_.reset(new base::test::ScopedFeatureList);
56 feature_list_->InitFromCommandLine(
57 base::JoinString(enabled_features, ","),
58 base::JoinString(disabled_features, ","));
59 }
60
61 std::string GetActivePref() { return GetExtendedReportingPrefName(prefs_); }
62
63 // Convenience method for explicitly setting up all combinations of prefs and
64 // experiments.
65 void TestGetPrefName(bool sber_reporting,
66 bool scout_reporting,
67 bool scout_group,
68 bool can_show_scout,
69 bool only_show_scout,
70 const std::string& expected_pref) {
71 ResetPrefs(sber_reporting, scout_reporting, scout_group);
72 ResetExperiments(can_show_scout, only_show_scout);
73 EXPECT_EQ(expected_pref, GetActivePref())
74 << "sber=" << sber_reporting << " scout=" << scout_reporting
75 << " scout_group=" << scout_group
76 << " can_show_scout=" << can_show_scout
77 << " only_show_scout=" << only_show_scout;
78 }
79
80 void InitPrefs() { InitializeSafeBrowsingPrefs(&prefs_); }
81
82 bool IsScoutGroupSelected() {
83 return prefs_.GetBoolean(prefs::kSafeBrowsingScoutGroupSelected);
84 }
85
86 void ExpectPrefs(bool sber_reporting,
87 bool scout_reporting,
88 bool scout_group) {
89 LOG(INFO) << "Pref values: sber=" << sber_reporting
90 << " scout=" << scout_reporting << " scout_group=" << scout_group;
91 EXPECT_EQ(sber_reporting,
92 prefs_.GetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled));
93 EXPECT_EQ(scout_reporting,
94 prefs_.GetBoolean(prefs::kSafeBrowsingScoutReportingEnabled));
95 EXPECT_EQ(scout_group,
96 prefs_.GetBoolean(prefs::kSafeBrowsingScoutGroupSelected));
97 }
98
99 void ExpectPrefsExist(bool sber_reporting,
100 bool scout_reporting,
101 bool scout_group) {
102 LOG(INFO) << "Prefs exist: sber=" << sber_reporting
103 << " scout=" << scout_reporting << " scout_group=" << scout_group;
104 EXPECT_EQ(sber_reporting,
105 prefs_.HasPrefPath(prefs::kSafeBrowsingExtendedReportingEnabled));
106 EXPECT_EQ(scout_reporting,
107 prefs_.HasPrefPath(prefs::kSafeBrowsingScoutReportingEnabled));
108 EXPECT_EQ(scout_group,
109 prefs_.HasPrefPath(prefs::kSafeBrowsingScoutGroupSelected));
110 }
111 TestingPrefServiceSimple prefs_;
112
113 private:
114 std::unique_ptr<base::test::ScopedFeatureList> feature_list_;
115 };
116
117 // This test ensures that we correctly select between SBER and Scout as the
118 // active preference in a number of common scenarios.
119 TEST_F(SafeBrowsingPrefsTest, GetExtendedReportingPrefName_Common) {
120 const std::string& sber = prefs::kSafeBrowsingExtendedReportingEnabled;
121 const std::string& scout = prefs::kSafeBrowsingScoutReportingEnabled;
122
123 // By default (all prefs and experiment features disabled), SBER pref is used.
124 TestGetPrefName(false, false, false, false, false, sber);
125
126 // Changing any prefs (including ScoutGroupSelected) keeps SBER as the active
127 // pref because the experiment remains in the Control group.
128 TestGetPrefName(/*sber=*/true, false, false, false, false, sber);
129 TestGetPrefName(false, /*scout=*/true, false, false, false, sber);
130 TestGetPrefName(false, false, /*scout_group=*/true, false, false, sber);
131
132 // Being in either experiment group with ScoutGroup selected makes Scout the
133 // active pref.
134 TestGetPrefName(false, false, /*scout_group=*/true, /*can_show_scout=*/true,
135 false, scout);
136 TestGetPrefName(false, false, /*scout_group=*/true, false,
137 /*only_show_scout=*/true, scout);
138
139 // When ScoutGroup is not selected then SBER remains the active pref,
140 // regardless which experiment is enabled.
141 TestGetPrefName(false, false, false, /*can_show_scout=*/true, false, sber);
142 TestGetPrefName(false, false, false, false, /*only_show_scout=*/true, sber);
143 }
144
145 // Here we exhaustively check all combinations of pref and experiment states.
146 // This should help catch regressions.
147 TEST_F(SafeBrowsingPrefsTest, GetExtendedReportingPrefName_Exhaustive) {
148 const std::string& sber = prefs::kSafeBrowsingExtendedReportingEnabled;
149 const std::string& scout = prefs::kSafeBrowsingScoutReportingEnabled;
150 TestGetPrefName(false, false, false, false, false, sber);
151 TestGetPrefName(false, false, false, false, true, sber);
152 TestGetPrefName(false, false, false, true, false, sber);
153 TestGetPrefName(false, false, false, true, true, sber);
154 TestGetPrefName(false, false, true, false, false, sber);
155 TestGetPrefName(false, false, true, false, true, scout);
156 TestGetPrefName(false, false, true, true, false, scout);
157 TestGetPrefName(false, false, true, true, true, scout);
158 TestGetPrefName(false, true, false, false, false, sber);
159 TestGetPrefName(false, true, false, false, true, sber);
160 TestGetPrefName(false, true, false, true, false, sber);
161 TestGetPrefName(false, true, false, true, true, sber);
162 TestGetPrefName(false, true, true, false, false, sber);
163 TestGetPrefName(false, true, true, false, true, scout);
164 TestGetPrefName(false, true, true, true, false, scout);
165 TestGetPrefName(false, true, true, true, true, scout);
166 TestGetPrefName(true, false, false, false, false, sber);
167 TestGetPrefName(true, false, false, false, true, sber);
168 TestGetPrefName(true, false, false, true, false, sber);
169 TestGetPrefName(true, false, false, true, true, sber);
170 TestGetPrefName(true, false, true, false, false, sber);
171 TestGetPrefName(true, false, true, false, true, scout);
172 TestGetPrefName(true, false, true, true, false, scout);
173 TestGetPrefName(true, false, true, true, true, scout);
174 TestGetPrefName(true, true, false, false, false, sber);
175 TestGetPrefName(true, true, false, false, true, sber);
176 TestGetPrefName(true, true, false, true, false, sber);
177 TestGetPrefName(true, true, false, true, true, sber);
178 TestGetPrefName(true, true, true, false, false, sber);
179 TestGetPrefName(true, true, true, false, true, scout);
180 TestGetPrefName(true, true, true, true, false, scout);
181 TestGetPrefName(true, true, true, true, true, scout);
182 }
183
184 // Basic test that command-line flags can force the ScoutGroupSelected pref on
185 // or off.
186 TEST_F(SafeBrowsingPrefsTest, InitPrefs_ForceScoutGroupOnOff) {
187 // By default ScoutGroupSelected is off.
188 EXPECT_FALSE(IsScoutGroupSelected());
189
190 // Command-line flag can force it on during initialization.
191 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
192 kSwitchForceScoutGroup, "true");
193 InitPrefs();
194 EXPECT_TRUE(IsScoutGroupSelected());
195
196 // ScoutGroup remains on if switches are cleared, but only if an experiment
197 // is active (since being in the Control group automatically clears the
198 // Scout prefs).
199 base::CommandLine::StringVector empty;
200 base::CommandLine::ForCurrentProcess()->InitFromArgv(empty);
201 ResetExperiments(/*can_show_scout=*/true, /*only_show_scout=*/false);
202 EXPECT_TRUE(IsScoutGroupSelected());
203
204 // Nonsense values are ignored and ScoutGroup is unchanged.
205 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
206 kSwitchForceScoutGroup, "foo");
207 InitPrefs();
208 EXPECT_TRUE(IsScoutGroupSelected());
209
210 // ScoutGroup can also be forced off during initialization.
211 base::CommandLine::ForCurrentProcess()->InitFromArgv(empty);
212 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
213 kSwitchForceScoutGroup, "false");
214 InitPrefs();
215 EXPECT_FALSE(IsScoutGroupSelected());
216 }
217
218 // Test all combinations of prefs during initialization when neither experiment
219 // is on (ie: control group). In all cases the Scout prefs should be cleared,
220 // and the SBER pref may get switched.
221 TEST_F(SafeBrowsingPrefsTest, InitPrefs_Control) {
222 // Turn both experiments off.
223 ResetExperiments(/*can_show_scout=*/false, /*only_show_scout=*/false);
224
225 // Default case (everything off) - no change on init.
226 ResetPrefs(false, false, false);
227 InitPrefs();
228 ExpectPrefs(false, false, false);
229 // SBER pref exists because it was set to false above.
230 ExpectPrefsExist(true, false, false);
231
232 // ScoutGroup on - SBER cleared since Scout opt-in was shown but Scout pref
233 // was not chosen. Scout prefs cleared.
234 ResetPrefs(false, false, true);
235 InitPrefs();
236 ExpectPrefs(false, false, false);
237 ExpectPrefsExist(true, false, false);
238
239 // ScoutReporting on without ScoutGroup - SBER turns on since user opted-in to
240 // broader Scout reporting, we can continue collecting the SBER subset. Scout
241 // prefs cleared.
242 ResetPrefs(false, true, false);
243 InitPrefs();
244 ExpectPrefs(true, false, false);
245 ExpectPrefsExist(true, false, false);
246
247 // ScoutReporting and ScoutGroup on - SBER turns on since user opted-in to
248 // broader Scout reporting, we can continue collecting the SBER subset. Scout
249 // prefs cleared.
250 ResetPrefs(false, true, true);
251 InitPrefs();
252 ExpectPrefs(true, false, false);
253 ExpectPrefsExist(true, false, false);
254
255 // SBER on - no change on init since ScoutGroup is off implying that user
256 // never saw Scout opt-in text. Scout prefs remain cleared.
257 ResetPrefs(true, false, false);
258 InitPrefs();
259 ExpectPrefs(true, false, false);
260 ExpectPrefsExist(true, false, false);
261
262 // SBER and ScoutGroup on - SBER cleared. User previously opted-in to SBER
263 // and they saw Scout opt-in text (ie. ScoutGroup on), but chose not to opt-in
264 // to Scout reporting. We want them to re-evaluate their choice of SBER since
265 // the lack of Scout opt-in was a conscious choice. Scout cleared.
266 ResetPrefs(true, false, true);
267 InitPrefs();
268 ExpectPrefs(false, false, false);
269 ExpectPrefsExist(true, false, false);
270
271 // SBER and ScoutReporting on. User has opted-in to broader level of reporting
272 // so SBER stays on. Scout prefs cleared.
273 ResetPrefs(true, true, false);
274 InitPrefs();
275 ExpectPrefs(true, false, false);
276 ExpectPrefsExist(true, false, false);
277
278 // Everything on. User has opted-in to broader level of reporting so SBER
279 // stays on. Scout prefs cleared.
280 ResetPrefs(true, true, true);
281 InitPrefs();
282 ExpectPrefs(true, false, false);
283 ExpectPrefs(true, false, false);
284 }
285
286 // Tests a unique case where the Extended Reporting pref will be Cleared instead
287 // of set to False in order to mimic the state of the Scout reporting pref.
288 // This happens when a user is in the OnlyShowScoutOptIn experiment but never
289 // encounters a security issue so never sees the Scout opt-in. This user then
290 // returns to the Control group having never seen the Scout opt-in, so their
291 // Scout Reporting pref is un-set. We want to return their SBER pref to the
292 // unset state as well.
293 TEST_F(SafeBrowsingPrefsTest, InitPrefs_Control_SberPrefCleared) {
294 // Turn both experiments off.
295 ResetExperiments(/*can_show_scout=*/false, /*only_show_scout=*/false);
296
297 // Set the user's old SBER pref to on to be explicit.
298 prefs_.SetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled, true);
299 // User is in the OnlyShowScoutOptIn experiment so they go directly to the
300 // Scout Group.
301 prefs_.SetBoolean(prefs::kSafeBrowsingScoutGroupSelected, true);
302 // But they never see a security popup or change the setting manually so the
303 // Scout pref remains unset.
304 prefs_.ClearPref(prefs::kSafeBrowsingScoutReportingEnabled);
305
306 InitPrefs();
307
308 // All pref values should be false and unset.
309 ExpectPrefs(false, false, false);
310 ExpectPrefsExist(false, false, false);
311 }
312
313 // Test all combinations of prefs during initialization when the CanShowScout
314 // experiment is on.
315 TEST_F(SafeBrowsingPrefsTest, InitPrefs_CanShowScout) {
316 // Turn the CanShowScout experiment on.
317 ResetExperiments(/*can_show_scout=*/true, /*only_show_scout=*/false);
318
319 // Default case (everything off) - ScoutGroup turns on because SBER is off.
320 ResetPrefs(false, false, false);
321 InitPrefs();
322 ExpectPrefs(false, false, true);
323
324 // ScoutGroup on - no change on init since ScoutGroup is already on.
325 ResetPrefs(false, false, true);
326 InitPrefs();
327 ExpectPrefs(false, false, true);
328
329 // ScoutReporting on without ScoutGroup - ScoutGroup turns on because SBER is
330 // off.
331 ResetPrefs(false, true, false);
332 InitPrefs();
333 ExpectPrefs(false, true, true);
334
335 // ScoutReporting and ScoutGroup on - no change on init since ScoutGroup is
336 // already on.
337 ResetPrefs(false, true, true);
338 InitPrefs();
339 ExpectPrefs(false, true, true);
340
341 // SBER on - no change on init. Will wait for first security incident before
342 // turning on ScoutGroup and displaying the Scout opt-in.
343 ResetPrefs(true, false, false);
344 InitPrefs();
345 ExpectPrefs(true, false, false);
346
347 // SBER and ScoutGroup on - no change on init since ScoutGroup is already on.
348 ResetPrefs(true, false, true);
349 InitPrefs();
350 ExpectPrefs(true, false, true);
351
352 // SBER and ScoutReporting on - no change on init because SBER is on.
353 // ScoutGroup will turn on on next security incident.
354 ResetPrefs(true, true, false);
355 InitPrefs();
356 ExpectPrefs(true, true, false);
357
358 // Everything on - no change on init since ScoutGroup is already on.
359 ResetPrefs(true, true, true);
360 InitPrefs();
361 ExpectPrefs(true, true, true);
362 }
363
364 // Test all combinations of prefs during initialization when the OnlyShowScout
365 // experiment is on.
366 TEST_F(SafeBrowsingPrefsTest, InitPrefs_OnlyShowScout) {
367 // Turn the OnlyShowScout experiment on.
368 ResetExperiments(/*can_show_scout=*/false, /*only_show_scout=*/true);
369
370 // Default case (everything off) - ScoutGroup turns on.
371 ResetPrefs(false, false, false);
372 InitPrefs();
373 ExpectPrefs(false, false, true);
374
375 // ScoutGroup on - no change on init since ScoutGroup is already on.
376 ResetPrefs(false, false, true);
377 InitPrefs();
378 ExpectPrefs(false, false, true);
379
380 // ScoutReporting on without ScoutGroup - ScoutGroup turns on.
381 ResetPrefs(false, true, false);
382 InitPrefs();
383 ExpectPrefs(false, true, true);
384
385 // ScoutReporting and ScoutGroup on - no change on init since ScoutGroup is
386 // already on.
387 ResetPrefs(false, true, true);
388 InitPrefs();
389 ExpectPrefs(false, true, true);
390
391 // SBER on - ScoutGroup turns on immediately, not waiting for first security
392 // incident.
393 ResetPrefs(true, false, false);
394 InitPrefs();
395 ExpectPrefs(true, false, true);
396
397 // SBER and ScoutGroup on - no change on init since ScoutGroup is already on.
398 ResetPrefs(true, false, true);
399 InitPrefs();
400 ExpectPrefs(true, false, true);
401
402 // SBER and ScoutReporting on - ScoutGroup turns on immediately, not waiting
403 // for first security incident.
404 ResetPrefs(true, true, false);
405 InitPrefs();
406 ExpectPrefs(true, true, true);
407
408 // Everything on - no change on init since ScoutGroup is already on.
409 ResetPrefs(true, true, true);
410 InitPrefs();
411 ExpectPrefs(true, true, true);
412 }
413
414 TEST_F(SafeBrowsingPrefsTest, ChooseOptInText) {
415 const int kSberResource = 100;
416 const int kScoutResource = 500;
417 // By default, SBER opt-in is used
418 EXPECT_EQ(kSberResource,
419 ChooseOptInTextResource(prefs_, kSberResource, kScoutResource));
420
421 // Enabling Scout switches to the Scout opt-in text.
422 ResetExperiments(/*can_show_scout=*/false, /*only_show_scout=*/true);
423 ResetPrefs(/*sber=*/false, /*scout=*/false, /*scout_group=*/true);
424 EXPECT_EQ(kScoutResource,
425 ChooseOptInTextResource(prefs_, kSberResource, kScoutResource));
426 }
427
428 TEST_F(SafeBrowsingPrefsTest, GetSafeBrowsingExtendedReportingLevel) {
429 // By Default, SBER is off
430 EXPECT_EQ(SBER_LEVEL_OFF, GetExtendedReportingLevel(prefs_));
431
432 // Opt-in to Legacy SBER gives Legacy reporting leve.
433 ResetPrefs(/*sber=*/true, /*scout_reporting=*/false, /*scout_group=*/false);
434 EXPECT_EQ(SBER_LEVEL_LEGACY, GetExtendedReportingLevel(prefs_));
435
436 // The value of the Scout pref doesn't change the reporting level if the user
437 // is outside of the Scout Group and/or no experiment is running.
438 // No scout group.
439 ResetPrefs(/*sber=*/true, /*scout_reporting=*/true, /*scout_group=*/false);
440 EXPECT_EQ(SBER_LEVEL_LEGACY, GetExtendedReportingLevel(prefs_));
441 // Scout group but no experiment.
442 ResetPrefs(/*sber=*/true, /*scout_reporting=*/true, /*scout_group=*/true);
443 EXPECT_EQ(SBER_LEVEL_LEGACY, GetExtendedReportingLevel(prefs_));
444
445 // Remaining in the Scout Group and adding an experiment will switch to the
446 // Scout pref to determine reporting level.
447 ResetExperiments(/*can_show_scout=*/false, /*only_show_scout=*/true);
448 // Both reporting prefs off, so reporting is off.
449 ResetPrefs(/*sber=*/false, /*scout_reporting=*/false, /*scout_group=*/true);
450 EXPECT_EQ(SBER_LEVEL_OFF, GetExtendedReportingLevel(prefs_));
451 // Legacy pref on when we're using Scout - reporting remains off.
452 ResetPrefs(/*sber=*/true, /*scout_reporting=*/false, /*scout_group=*/true);
453 EXPECT_EQ(SBER_LEVEL_OFF, GetExtendedReportingLevel(prefs_));
454 // Turning on Scout gives us Scout level reporting
455 ResetPrefs(/*sber=*/false, /*scout_reporting=*/true, /*scout_group=*/true);
456 EXPECT_EQ(SBER_LEVEL_SCOUT, GetExtendedReportingLevel(prefs_));
457 // .. and the legacy pref doesn't affect this.
458 ResetPrefs(/*sber=*/true, /*scout_reporting=*/true, /*scout_group=*/true);
459 EXPECT_EQ(SBER_LEVEL_SCOUT, GetExtendedReportingLevel(prefs_));
460 }
461
462 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « components/safe_browsing_db/safe_browsing_prefs.cc ('k') | components/safe_browsing_db/util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698