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

Side by Side Diff: chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc

Issue 2790493002: Implement permissions embargo for prompts which are repeatedly ignored. (Closed)
Patch Set: Not for plugins Created 3 years, 8 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/permissions/permission_decision_auto_blocker.h" 5 #include "chrome/browser/permissions/permission_decision_auto_blocker.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 82
83 } // namespace 83 } // namespace
84 84
85 class PermissionDecisionAutoBlockerUnitTest 85 class PermissionDecisionAutoBlockerUnitTest
86 : public ChromeRenderViewHostTestHarness { 86 : public ChromeRenderViewHostTestHarness {
87 protected: 87 protected:
88 void SetUp() override { 88 void SetUp() override {
89 ChromeRenderViewHostTestHarness::SetUp(); 89 ChromeRenderViewHostTestHarness::SetUp();
90 autoblocker_ = PermissionDecisionAutoBlocker::GetForProfile(profile()); 90 autoblocker_ = PermissionDecisionAutoBlocker::GetForProfile(profile());
91 feature_list_.InitWithFeatures({features::kBlockPromptsIfDismissedOften, 91 feature_list_.InitWithFeatures({features::kBlockPromptsIfDismissedOften,
92 features::kBlockPromptsIfIgnoredOften,
92 features::kPermissionsBlacklist}, 93 features::kPermissionsBlacklist},
93 {}); 94 {});
94 last_embargoed_status_ = false; 95 last_embargoed_status_ = false;
95 std::unique_ptr<base::SimpleTestClock> clock = 96 std::unique_ptr<base::SimpleTestClock> clock =
96 base::MakeUnique<base::SimpleTestClock>(); 97 base::MakeUnique<base::SimpleTestClock>();
97 clock_ = clock.get(); 98 clock_ = clock.get();
98 autoblocker_->SetClockForTesting(std::move(clock)); 99 autoblocker_->SetClockForTesting(std::move(clock));
99 callback_was_run_ = false; 100 callback_was_run_ = false;
100 } 101 }
101 102
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 184 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
184 EXPECT_EQ(1, autoblocker()->GetDismissCount( 185 EXPECT_EQ(1, autoblocker()->GetDismissCount(
185 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 186 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
186 187
187 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 188 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
188 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 189 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
189 EXPECT_EQ(1, autoblocker()->GetDismissCount( 190 EXPECT_EQ(1, autoblocker()->GetDismissCount(
190 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 191 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
191 192
192 // Record some ignores. 193 // Record some ignores.
194 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
195 url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
193 EXPECT_EQ( 196 EXPECT_EQ(
194 1, autoblocker()->RecordIgnore(url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); 197 1, autoblocker()->GetIgnoreCount(url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
195 EXPECT_EQ(1, autoblocker()->RecordIgnore( 198 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
199 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
200 EXPECT_EQ(1, autoblocker()->GetIgnoreCount(
196 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE)); 201 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
197 EXPECT_EQ( 202 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
198 1, autoblocker()->RecordIgnore(url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 203 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
199 EXPECT_EQ( 204 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
200 2, autoblocker()->RecordIgnore(url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 205 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
206 EXPECT_EQ(2, autoblocker()->GetIgnoreCount(
207 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
201 208
202 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterGoogle)); 209 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterGoogle));
203 210
204 // Expect that url1's actions are gone, but url2's remain. 211 // Expect that url1's actions are gone, but url2's remain.
205 EXPECT_EQ(0, autoblocker()->GetDismissCount( 212 EXPECT_EQ(0, autoblocker()->GetDismissCount(
206 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 213 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
207 EXPECT_EQ(0, autoblocker()->GetDismissCount( 214 EXPECT_EQ(0, autoblocker()->GetDismissCount(
208 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 215 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
209 EXPECT_EQ( 216 EXPECT_EQ(
210 0, autoblocker()->GetIgnoreCount(url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); 217 0, autoblocker()->GetIgnoreCount(url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
(...skipping 14 matching lines...) Expand all
225 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 232 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
226 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 233 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
227 EXPECT_EQ(1, autoblocker()->GetDismissCount( 234 EXPECT_EQ(1, autoblocker()->GetDismissCount(
228 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 235 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
229 236
230 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 237 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
231 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 238 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
232 EXPECT_EQ(2, autoblocker()->GetDismissCount( 239 EXPECT_EQ(2, autoblocker()->GetDismissCount(
233 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 240 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
234 241
242 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
243 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
244 EXPECT_EQ(1, autoblocker()->GetIgnoreCount(
245 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
246 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
247 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
248 EXPECT_EQ(1, autoblocker()->GetIgnoreCount(
249 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
250 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
251 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
252 EXPECT_EQ(1, autoblocker()->GetIgnoreCount(
253 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
254 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
255 url2, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
235 EXPECT_EQ( 256 EXPECT_EQ(
236 1, autoblocker()->RecordIgnore(url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 257 1, autoblocker()->GetIgnoreCount(url2, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
237 EXPECT_EQ(1, autoblocker()->RecordIgnore(
238 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
239 EXPECT_EQ(1, autoblocker()->RecordIgnore(
240 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
241 EXPECT_EQ(
242 1, autoblocker()->RecordIgnore(url2, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
243 258
244 // Remove everything and expect that it's all gone. 259 // Remove everything and expect that it's all gone.
245 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterAll)); 260 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterAll));
246 261
247 EXPECT_EQ(0, autoblocker()->GetDismissCount( 262 EXPECT_EQ(0, autoblocker()->GetDismissCount(
248 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 263 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
249 EXPECT_EQ(0, autoblocker()->GetDismissCount( 264 EXPECT_EQ(0, autoblocker()->GetDismissCount(
250 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 265 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
251 EXPECT_EQ(0, autoblocker()->GetDismissCount( 266 EXPECT_EQ(0, autoblocker()->GetDismissCount(
252 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 267 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
(...skipping 27 matching lines...) Expand all
280 EXPECT_TRUE(callback_was_run()); 295 EXPECT_TRUE(callback_was_run());
281 EXPECT_TRUE(last_embargoed_status()); 296 EXPECT_TRUE(last_embargoed_status());
282 histograms.ExpectUniqueSample( 297 histograms.ExpectUniqueSample(
283 "Permissions.AutoBlocker.SafeBrowsingResponse", 298 "Permissions.AutoBlocker.SafeBrowsingResponse",
284 static_cast<int>(SafeBrowsingResponse::BLACKLISTED), 1); 299 static_cast<int>(SafeBrowsingResponse::BLACKLISTED), 1);
285 histograms.ExpectTotalCount( 300 histograms.ExpectTotalCount(
286 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); 301 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1);
287 } 302 }
288 303
289 // Test that an origin that is blacklisted for a permission will not be placed 304 // Test that an origin that is blacklisted for a permission will not be placed
290 // under embargoed for another. 305 // under embargo for another permission.
291 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestRequestNotBlacklisted) { 306 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestRequestNotBlacklisted) {
292 GURL url("https://www.google.com"); 307 GURL url("https://www.google.com");
293 clock()->SetNow(base::Time::Now()); 308 clock()->SetNow(base::Time::Now());
294 base::HistogramTester histograms; 309 base::HistogramTester histograms;
295 310
296 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = 311 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager =
297 new MockSafeBrowsingDatabaseManager(true /* perform_callback */, 312 new MockSafeBrowsingDatabaseManager(true /* perform_callback */,
298 true /* enabled */); 313 true /* enabled */);
299 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; 314 std::set<std::string> blacklisted_permissions{"GEOLOCATION"};
300 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); 315 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions);
301 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, 316 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager,
302 0 /* timeout in ms */); 317 0 /* timeout in ms */);
303 318
304 CheckSafeBrowsingBlacklist(url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 319 CheckSafeBrowsingBlacklist(url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
305 EXPECT_FALSE(last_embargoed_status()); 320 EXPECT_FALSE(last_embargoed_status());
306 histograms.ExpectUniqueSample( 321 histograms.ExpectUniqueSample(
307 "Permissions.AutoBlocker.SafeBrowsingResponse", 322 "Permissions.AutoBlocker.SafeBrowsingResponse",
308 static_cast<int>(SafeBrowsingResponse::NOT_BLACKLISTED), 1); 323 static_cast<int>(SafeBrowsingResponse::NOT_BLACKLISTED), 1);
309 histograms.ExpectTotalCount( 324 histograms.ExpectTotalCount(
310 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); 325 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1);
311 } 326 }
312 327
313 // Check that we do not apply embargo to the plugins content type, as prompts 328 // Check that we do not apply embargo to the plugins content type, as prompts
314 // should be triggered only when necessary by Html5ByDefault. 329 // should be triggered only when necessary by Html5ByDefault.
315 TEST_F(PermissionDecisionAutoBlockerUnitTest, 330 TEST_F(PermissionDecisionAutoBlockerUnitTest,
316 PluginsNotEmbargoedByMultipleDismisses) { 331 PluginsNotEmbargoedByMultipleDismissesOrIgnores) {
317 GURL url("https://www.google.com"); 332 GURL url("https://www.google.com");
333
334 // Check dismisses first.
318 autoblocker()->RecordDismissAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS); 335 autoblocker()->RecordDismissAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS);
319 autoblocker()->RecordDismissAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS); 336 autoblocker()->RecordDismissAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS);
320 PermissionResult result = 337 PermissionResult result =
321 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS); 338 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS);
322 339
323 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); 340 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
324 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); 341 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
325 EXPECT_EQ(2, 342 EXPECT_EQ(2,
326 autoblocker()->GetDismissCount(url, CONTENT_SETTINGS_TYPE_PLUGINS)); 343 autoblocker()->GetDismissCount(url, CONTENT_SETTINGS_TYPE_PLUGINS));
327 344
328 // The third dismiss would normally embargo, but this shouldn't happen for 345 // The third dismiss would normally embargo, but this shouldn't happen for
329 // plugins. 346 // plugins.
330 autoblocker()->RecordDismissAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS); 347 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
348 url, CONTENT_SETTINGS_TYPE_PLUGINS));
331 result = autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS); 349 result = autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS);
332 350
333 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); 351 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
334 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); 352 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
335 EXPECT_EQ(3, 353 EXPECT_EQ(3,
336 autoblocker()->GetDismissCount(url, CONTENT_SETTINGS_TYPE_PLUGINS)); 354 autoblocker()->GetDismissCount(url, CONTENT_SETTINGS_TYPE_PLUGINS));
337 355
338 // Extra one for sanity checking. 356 // Extra one for sanity checking.
339 autoblocker()->RecordDismissAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS); 357 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
358 url, CONTENT_SETTINGS_TYPE_PLUGINS));
340 result = autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS); 359 result = autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS);
341 360
342 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); 361 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
343 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); 362 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
344 EXPECT_EQ(4, 363 EXPECT_EQ(4,
345 autoblocker()->GetDismissCount(url, CONTENT_SETTINGS_TYPE_PLUGINS)); 364 autoblocker()->GetDismissCount(url, CONTENT_SETTINGS_TYPE_PLUGINS));
365
366 // Check ignores.
367 autoblocker()->RecordIgnoreAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS);
368 autoblocker()->RecordIgnoreAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS);
369 autoblocker()->RecordIgnoreAndEmbargo(url, CONTENT_SETTINGS_TYPE_PLUGINS);
370 result = autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS);
371
372 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
373 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
374 EXPECT_EQ(3,
375 autoblocker()->GetIgnoreCount(url, CONTENT_SETTINGS_TYPE_PLUGINS));
376
377 // The fourth ignore would normally embargo, but this shouldn't happen for
378 // plugins.
379 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
380 url, CONTENT_SETTINGS_TYPE_PLUGINS));
381 result = autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS);
382
383 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
384 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
385 EXPECT_EQ(4,
386 autoblocker()->GetIgnoreCount(url, CONTENT_SETTINGS_TYPE_PLUGINS));
387
388 // Extra one for sanity checking.
389 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
390 url, CONTENT_SETTINGS_TYPE_PLUGINS));
391 result = autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_PLUGINS);
392
393 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
394 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
395 EXPECT_EQ(5,
396 autoblocker()->GetIgnoreCount(url, CONTENT_SETTINGS_TYPE_PLUGINS));
346 } 397 }
347 398
348 // Check that GetEmbargoResult returns the correct value when the embargo is set 399 // Check that GetEmbargoResult returns the correct value when the embargo is set
349 // and expires. 400 // and expires.
350 TEST_F(PermissionDecisionAutoBlockerUnitTest, CheckEmbargoStatus) { 401 TEST_F(PermissionDecisionAutoBlockerUnitTest, CheckEmbargoStatus) {
351 GURL url("https://www.google.com"); 402 GURL url("https://www.google.com");
352 clock()->SetNow(base::Time::Now()); 403 clock()->SetNow(base::Time::Now());
353 404
354 // Check the default state. 405 // Check the default state.
355 PermissionResult result = 406 PermissionResult result =
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 result = 517 result =
467 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); 518 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION);
468 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); 519 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
469 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); 520 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source);
470 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", 521 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse",
471 0); 522 0);
472 histograms.ExpectTotalCount( 523 histograms.ExpectTotalCount(
473 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0); 524 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0);
474 } 525 }
475 526
527 // Tests the alternating pattern of the block on multiple ignores behaviour.
528 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestIgnoreEmbargoBackoff) {
529 GURL url("https://www.google.com");
530 clock()->SetNow(base::Time::Now());
531 base::HistogramTester histograms;
532
533 // Record some ignores.
534 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
535 url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
536 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
537 url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
538
539 // A request with < 4 prior ignores should not be automatically blocked.
540 PermissionResult result =
541 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
542 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
543 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
544
545 // After the 4th ignore subsequent permission requests should be autoblocked.
546 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
547 url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
548 EXPECT_TRUE(autoblocker()->RecordIgnoreAndEmbargo(
549 url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
550 result =
551 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
552 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
553 EXPECT_EQ(PermissionStatusSource::MULTIPLE_IGNORES, result.source);
554
555 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse",
556 0);
557 histograms.ExpectTotalCount(
558 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0);
559 // Accelerate time forward, check that the embargo status is lifted and the
560 // request won't be automatically blocked.
561 clock()->Advance(base::TimeDelta::FromDays(8));
562 result =
563 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
564 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
565 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
566
567 // Record another dismiss, subsequent requests should be autoblocked again.
568 EXPECT_TRUE(autoblocker()->RecordIgnoreAndEmbargo(
569 url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
570 result =
571 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
572 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
573 EXPECT_EQ(PermissionStatusSource::MULTIPLE_IGNORES, result.source);
574
575 // Accelerate time again, check embargo is lifted and another permission
576 // request is let through.
577 clock()->Advance(base::TimeDelta::FromDays(8));
578 result =
579 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
580 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
581 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
582
583 // Record another dismiss, subsequent requests should be autoblocked again.
584 EXPECT_TRUE(autoblocker()->RecordIgnoreAndEmbargo(
585 url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
586 result =
587 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
588 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
589 EXPECT_EQ(PermissionStatusSource::MULTIPLE_IGNORES, result.source);
590 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse",
591 0);
592 histograms.ExpectTotalCount(
593 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0);
594 }
595
476 // Test the logic for a combination of blacklisting and dismissal embargo. 596 // Test the logic for a combination of blacklisting and dismissal embargo.
477 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestExpiredBlacklistEmbargo) { 597 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestExpiringOverlappingEmbargo) {
478 GURL url("https://www.google.com"); 598 GURL url("https://www.google.com");
479 clock()->SetNow(base::Time::Now()); 599 clock()->SetNow(base::Time::Now());
480 600
481 // Place under blacklist embargo and check the status. 601 // Place under blacklist embargo and check the status.
482 PlaceUnderBlacklistEmbargo(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); 602 PlaceUnderBlacklistEmbargo(url, CONTENT_SETTINGS_TYPE_GEOLOCATION);
483 clock()->Advance(base::TimeDelta::FromDays(5)); 603 clock()->Advance(base::TimeDelta::FromDays(5));
484 PermissionResult result = 604 PermissionResult result =
485 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); 605 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION);
486 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); 606 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
487 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source); 607 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source);
488 608
489 // Record dismisses to place it under dismissal embargo. 609 // Record dismisses to place it under dismissal embargo.
490 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 610 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
491 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 611 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
492 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 612 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
493 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 613 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
494 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( 614 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo(
495 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 615 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
496 616
497 // Accelerate time to a point where the blacklist embargo should be expired 617 // Accelerate time to a point where the blacklist embargo should be expired
498 // and check that dismissal embargo is still set. 618 // and check that dismissal embargo is still set.
499 clock()->Advance(base::TimeDelta::FromDays(3)); 619 clock()->Advance(base::TimeDelta::FromDays(3));
500 result = 620 result =
501 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); 621 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION);
502 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); 622 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
503 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); 623 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source);
624
625 // Record an ignore embargo.
626 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
627 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
628 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
629 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
630 EXPECT_FALSE(autoblocker()->RecordIgnoreAndEmbargo(
631 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
632 EXPECT_TRUE(autoblocker()->RecordIgnoreAndEmbargo(
633 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
634
635 // Ensure the ignore embargo is still set.
636 clock()->Advance(base::TimeDelta::FromDays(5));
637 result =
638 autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION);
639 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
640 EXPECT_EQ(PermissionStatusSource::MULTIPLE_IGNORES, result.source);
504 } 641 }
505 642
506 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) { 643 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) {
507 GURL url("https://www.google.com"); 644 GURL url("https://www.google.com");
508 clock()->SetNow(base::Time::Now()); 645 clock()->SetNow(base::Time::Now());
509 base::HistogramTester histograms; 646 base::HistogramTester histograms;
510 647
511 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = 648 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager =
512 new MockSafeBrowsingDatabaseManager(false /* perform_callback */, 649 new MockSafeBrowsingDatabaseManager(false /* perform_callback */,
513 true /* enabled */); 650 true /* enabled */);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); 789 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions);
653 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, 790 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager,
654 0 /* timeout in ms */); 791 0 /* timeout in ms */);
655 792
656 CheckSafeBrowsingBlacklist(url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 793 CheckSafeBrowsingBlacklist(url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
657 EXPECT_FALSE(last_embargoed_status()); 794 EXPECT_FALSE(last_embargoed_status());
658 histograms.ExpectUniqueSample( 795 histograms.ExpectUniqueSample(
659 "Permissions.AutoBlocker.SafeBrowsingResponse", 796 "Permissions.AutoBlocker.SafeBrowsingResponse",
660 static_cast<int>(SafeBrowsingResponse::NOT_BLACKLISTED), 1); 797 static_cast<int>(SafeBrowsingResponse::NOT_BLACKLISTED), 1);
661 } 798 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698