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

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

Issue 2701343002: Implement permission embargo suppression metrics. (Closed)
Patch Set: Rebase Created 3 years, 10 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 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 182 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
183 EXPECT_EQ(1, autoblocker()->GetDismissCount( 183 EXPECT_EQ(1, autoblocker()->GetDismissCount(
184 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 184 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
185 185
186 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 186 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
187 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 187 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
188 EXPECT_EQ(1, autoblocker()->GetDismissCount( 188 EXPECT_EQ(1, autoblocker()->GetDismissCount(
189 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 189 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
190 190
191 // Record some ignores. 191 // Record some ignores.
192 EXPECT_EQ(1, autoblocker()->RecordIgnore( 192 EXPECT_EQ(
193 url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); 193 1, autoblocker()->RecordIgnore(url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
194 EXPECT_EQ(1, autoblocker()->RecordIgnore( 194 EXPECT_EQ(1, autoblocker()->RecordIgnore(
195 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE)); 195 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
196 EXPECT_EQ(1, autoblocker()->RecordIgnore( 196 EXPECT_EQ(
197 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 197 1, autoblocker()->RecordIgnore(url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
198 EXPECT_EQ(2, autoblocker()->RecordIgnore( 198 EXPECT_EQ(
199 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 199 2, autoblocker()->RecordIgnore(url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
200 200
201 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterGoogle)); 201 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterGoogle));
202 202
203 // Expect that url1's actions are gone, but url2's remain. 203 // Expect that url1's actions are gone, but url2's remain.
204 EXPECT_EQ(0, autoblocker()->GetDismissCount( 204 EXPECT_EQ(0, autoblocker()->GetDismissCount(
205 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 205 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
206 EXPECT_EQ(0, autoblocker()->GetDismissCount( 206 EXPECT_EQ(0, autoblocker()->GetDismissCount(
207 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 207 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
208 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 208 EXPECT_EQ(
209 url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); 209 0, autoblocker()->GetIgnoreCount(url1, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
210 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 210 EXPECT_EQ(0, autoblocker()->GetIgnoreCount(
211 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE)); 211 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
212 212
213 EXPECT_EQ(1, autoblocker()->GetDismissCount( 213 EXPECT_EQ(1, autoblocker()->GetDismissCount(
214 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 214 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
215 EXPECT_EQ(2, autoblocker()->GetIgnoreCount( 215 EXPECT_EQ(2, autoblocker()->GetIgnoreCount(
216 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 216 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
217 217
218 // Add some more actions. 218 // Add some more actions.
219 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 219 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
220 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 220 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
221 EXPECT_EQ(1, autoblocker()->GetDismissCount( 221 EXPECT_EQ(1, autoblocker()->GetDismissCount(
222 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 222 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
223 223
224 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 224 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
225 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 225 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
226 EXPECT_EQ(1, autoblocker()->GetDismissCount( 226 EXPECT_EQ(1, autoblocker()->GetDismissCount(
227 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 227 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
228 228
229 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 229 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
230 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 230 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
231 EXPECT_EQ(2, autoblocker()->GetDismissCount( 231 EXPECT_EQ(2, autoblocker()->GetDismissCount(
232 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 232 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
233 233
234 EXPECT_EQ(1, autoblocker()->RecordIgnore( 234 EXPECT_EQ(
235 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 235 1, autoblocker()->RecordIgnore(url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
236 EXPECT_EQ(1, autoblocker()->RecordIgnore( 236 EXPECT_EQ(1, autoblocker()->RecordIgnore(
237 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 237 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
238 EXPECT_EQ(1, autoblocker()->RecordIgnore( 238 EXPECT_EQ(1, autoblocker()->RecordIgnore(
239 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE)); 239 url1, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
240 EXPECT_EQ(1, autoblocker()->RecordIgnore( 240 EXPECT_EQ(
241 url2, CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); 241 1, autoblocker()->RecordIgnore(url2, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
242 242
243 // Remove everything and expect that it's all gone. 243 // Remove everything and expect that it's all gone.
244 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterAll)); 244 autoblocker()->RemoveCountsByUrl(base::Bind(&FilterAll));
245 245
246 EXPECT_EQ(0, autoblocker()->GetDismissCount( 246 EXPECT_EQ(0, autoblocker()->GetDismissCount(
247 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 247 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
248 EXPECT_EQ(0, autoblocker()->GetDismissCount( 248 EXPECT_EQ(0, autoblocker()->GetDismissCount(
249 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 249 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
250 EXPECT_EQ(0, autoblocker()->GetDismissCount( 250 EXPECT_EQ(0, autoblocker()->GetDismissCount(
251 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 251 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
252 252
253 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 253 EXPECT_EQ(0, autoblocker()->GetIgnoreCount(
254 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 254 url1, CONTENT_SETTINGS_TYPE_GEOLOCATION));
255 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 255 EXPECT_EQ(0, autoblocker()->GetIgnoreCount(
256 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 256 url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
257 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 257 EXPECT_EQ(0, autoblocker()->GetIgnoreCount(
258 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 258 url2, CONTENT_SETTINGS_TYPE_GEOLOCATION));
259 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 259 EXPECT_EQ(0, autoblocker()->GetIgnoreCount(
260 url2, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE)); 260 url2, CONTENT_SETTINGS_TYPE_DURABLE_STORAGE));
261 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 261 EXPECT_EQ(
262 url2, CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); 262 0, autoblocker()->GetIgnoreCount(url2, CONTENT_SETTINGS_TYPE_MIDI_SYSEX));
263 } 263 }
264 264
265 // Test that an origin that has been blacklisted for a permission is embargoed. 265 // Test that an origin that has been blacklisted for a permission is embargoed.
266 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestUpdateEmbargoBlacklist) { 266 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestUpdateEmbargoBlacklist) {
267 GURL url("https://www.google.com"); 267 GURL url("https://www.google.com");
268 base::HistogramTester histograms; 268 base::HistogramTester histograms;
269 269
270 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = 270 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager =
271 new MockSafeBrowsingDatabaseManager(true /* perform_callback */, 271 new MockSafeBrowsingDatabaseManager(true /* perform_callback */,
272 true /* enabled */); 272 true /* enabled */);
(...skipping 27 matching lines...) Expand all
300 0 /* timeout in ms */); 300 0 /* timeout in ms */);
301 301
302 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url); 302 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url);
303 EXPECT_FALSE(last_embargoed_status()); 303 EXPECT_FALSE(last_embargoed_status());
304 histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", 304 histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse",
305 SafeBrowsingResponse::NOT_BLACKLISTED, 1); 305 SafeBrowsingResponse::NOT_BLACKLISTED, 1);
306 histograms.ExpectTotalCount( 306 histograms.ExpectTotalCount(
307 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); 307 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1);
308 } 308 }
309 309
310 // Check that IsUnderEmbargo returns the correct value when the embargo is set 310 // Check that GetEmbargoResult returns the correct value when the embargo is set
311 // and expires. 311 // and expires.
312 TEST_F(PermissionDecisionAutoBlockerUnitTest, CheckEmbargoStatus) { 312 TEST_F(PermissionDecisionAutoBlockerUnitTest, CheckEmbargoStatus) {
313 GURL url("https://www.google.com"); 313 GURL url("https://www.google.com");
314 clock()->SetNow(base::Time::Now()); 314 clock()->SetNow(base::Time::Now());
315 315
316 // Check the default state.
317 PermissionResult result =
318 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
319 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
320 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
321
322 // Place under embargo and verify.
316 PlaceUnderBlacklistEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url); 323 PlaceUnderBlacklistEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
317 EXPECT_TRUE( 324 result =
318 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 325 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
326 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
327 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source);
319 328
320 // Check that the origin is not under embargo for a different permission. 329 // Check that the origin is not under embargo for a different permission.
321 EXPECT_FALSE( 330 result =
322 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url)); 331 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url);
332 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
333 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
323 334
324 // Confirm embargo status during the embargo period. 335 // Confirm embargo status during the embargo period.
325 clock()->Advance(base::TimeDelta::FromDays(5)); 336 clock()->Advance(base::TimeDelta::FromDays(5));
326 EXPECT_TRUE( 337 result =
327 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 338 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
339 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
340 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source);
328 341
329 // Check embargo is lifted on expiry day. A small offset after the exact 342 // Check embargo is lifted on expiry day. A small offset after the exact
330 // embargo expiration date has been added to account for any precision errors 343 // embargo expiration date has been added to account for any precision errors
331 // when removing the date stored as a double from the permission dictionary. 344 // when removing the date stored as a double from the permission dictionary.
332 clock()->Advance(base::TimeDelta::FromHours(3 * 24 + 1)); 345 clock()->Advance(base::TimeDelta::FromHours(3 * 24 + 1));
333 EXPECT_FALSE( 346 result =
334 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 347 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
348 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
349 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
335 350
336 // Check embargo is lifted well after the expiry day. 351 // Check embargo is lifted well after the expiry day.
337 clock()->Advance(base::TimeDelta::FromDays(1)); 352 clock()->Advance(base::TimeDelta::FromDays(1));
338 EXPECT_FALSE( 353 result =
339 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 354 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
355 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
356 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
340 357
341 // Place under embargo again and verify the embargo status. 358 // Place under embargo again and verify the embargo status.
342 PlaceUnderBlacklistEmbargo(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url); 359 PlaceUnderBlacklistEmbargo(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url);
343 clock()->Advance(base::TimeDelta::FromDays(1)); 360 clock()->Advance(base::TimeDelta::FromDays(1));
344 EXPECT_TRUE( 361 result =
345 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url)); 362 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url);
363 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
364 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source);
346 } 365 }
347 366
348 // Tests the alternating pattern of the block on multiple dismiss behaviour. On 367 // Tests the alternating pattern of the block on multiple dismiss behaviour. On
349 // N dismissals, the origin to be embargoed for the requested permission and 368 // N dismissals, the origin to be embargoed for the requested permission and
350 // automatically blocked. Each time the embargo is lifted, the site gets another 369 // automatically blocked. Each time the embargo is lifted, the site gets another
351 // chance to request the permission, but if it is again dismissed it is placed 370 // chance to request the permission, but if it is again dismissed it is placed
352 // under embargo again and its permission requests blocked. 371 // under embargo again and its permission requests blocked.
353 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestDismissEmbargoBackoff) { 372 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestDismissEmbargoBackoff) {
354 GURL url("https://www.google.com"); 373 GURL url("https://www.google.com");
355 clock()->SetNow(base::Time::Now()); 374 clock()->SetNow(base::Time::Now());
356 base::HistogramTester histograms; 375 base::HistogramTester histograms;
357 376
358 // Record some dismisses. 377 // Record some dismisses.
359 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 378 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
360 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 379 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
361 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 380 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
362 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 381 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
363 382
364 // A request with < 3 prior dismisses should not be automatically blocked. 383 // A request with < 3 prior dismisses should not be automatically blocked.
365 EXPECT_FALSE( 384 PermissionResult result =
366 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 385 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
386 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
387 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
367 388
368 // After the 3rd dismiss subsequent permission requests should be autoblocked. 389 // After the 3rd dismiss subsequent permission requests should be autoblocked.
369 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( 390 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo(
370 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 391 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
371 EXPECT_TRUE( 392 result =
372 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 393 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
394 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
395 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source);
373 396
374 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", 397 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse",
375 0); 398 0);
376 histograms.ExpectTotalCount( 399 histograms.ExpectTotalCount(
377 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0); 400 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0);
378 // Accelerate time forward, check that the embargo status is lifted and the 401 // Accelerate time forward, check that the embargo status is lifted and the
379 // request won't be automatically blocked. 402 // request won't be automatically blocked.
380 clock()->Advance(base::TimeDelta::FromDays(8)); 403 clock()->Advance(base::TimeDelta::FromDays(8));
381 EXPECT_FALSE( 404 result =
382 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 405 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
406 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
407 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
383 408
384 // Record another dismiss, subsequent requests should be autoblocked again. 409 // Record another dismiss, subsequent requests should be autoblocked again.
385 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( 410 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo(
386 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 411 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
387 EXPECT_TRUE( 412 result =
388 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 413 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
414 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
415 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source);
389 416
390 // Accelerate time again, check embargo is lifted and another permission 417 // Accelerate time again, check embargo is lifted and another permission
391 // request is let through. 418 // request is let through.
392 clock()->Advance(base::TimeDelta::FromDays(8)); 419 clock()->Advance(base::TimeDelta::FromDays(8));
393 EXPECT_FALSE( 420 result =
394 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 421 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
422 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
423 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
395 424
396 // Record another dismiss, subsequent requests should be autoblocked again. 425 // Record another dismiss, subsequent requests should be autoblocked again.
397 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( 426 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo(
398 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 427 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
399 EXPECT_TRUE( 428 result =
400 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 429 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
430 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
431 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source);
401 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", 432 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse",
402 0); 433 0);
403 histograms.ExpectTotalCount( 434 histograms.ExpectTotalCount(
404 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0); 435 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0);
405 } 436 }
406 437
407 // Test the logic for a combination of blacklisting and dismissal embargo. 438 // Test the logic for a combination of blacklisting and dismissal embargo.
408 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestExpiredBlacklistEmbargo) { 439 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestExpiredBlacklistEmbargo) {
409 GURL url("https://www.google.com"); 440 GURL url("https://www.google.com");
410 clock()->SetNow(base::Time::Now()); 441 clock()->SetNow(base::Time::Now());
411 442
412 // Place under blacklist embargo and check the status. 443 // Place under blacklist embargo and check the status.
413 PlaceUnderBlacklistEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url); 444 PlaceUnderBlacklistEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
414 clock()->Advance(base::TimeDelta::FromDays(5)); 445 clock()->Advance(base::TimeDelta::FromDays(5));
415 EXPECT_TRUE( 446 PermissionResult result =
416 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 447 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
448 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
449 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source);
417 450
418 // Record dismisses to place it under dismissal embargo. 451 // Record dismisses to place it under dismissal embargo.
419 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 452 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
420 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 453 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
421 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( 454 EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo(
422 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 455 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
423 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( 456 EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo(
424 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 457 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
425 458
426 // Accelerate time to a point where the blacklist embargo should be expired 459 // Accelerate time to a point where the blacklist embargo should be expired
427 // and check that dismissal embargo is still set. 460 // and check that dismissal embargo is still set.
428 clock()->Advance(base::TimeDelta::FromDays(3)); 461 clock()->Advance(base::TimeDelta::FromDays(3));
429 EXPECT_TRUE( 462 result =
430 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 463 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
464 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
465 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source);
431 } 466 }
432 467
433 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) { 468 TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) {
434 GURL url("https://www.google.com"); 469 GURL url("https://www.google.com");
435 clock()->SetNow(base::Time::Now()); 470 clock()->SetNow(base::Time::Now());
436 base::HistogramTester histograms; 471 base::HistogramTester histograms;
437 472
438 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = 473 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager =
439 new MockSafeBrowsingDatabaseManager(false /* perform_callback */, 474 new MockSafeBrowsingDatabaseManager(false /* perform_callback */,
440 true /* enabled */); 475 true /* enabled */);
441 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; 476 std::set<std::string> blacklisted_permissions{"GEOLOCATION"};
442 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); 477 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions);
443 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, 478 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager,
444 0 /* timeout in ms */); 479 0 /* timeout in ms */);
445 480
446 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_GEOLOCATION, url); 481 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
447 EXPECT_TRUE(callback_was_run()); 482 EXPECT_TRUE(callback_was_run());
448 EXPECT_FALSE(last_embargoed_status()); 483 EXPECT_FALSE(last_embargoed_status());
449 EXPECT_FALSE( 484
450 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 485 PermissionResult result =
486 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
487 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting);
488 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source);
489
451 histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", 490 histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse",
452 SafeBrowsingResponse::TIMEOUT, 1); 491 SafeBrowsingResponse::TIMEOUT, 1);
453 histograms.ExpectTotalCount( 492 histograms.ExpectTotalCount(
454 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); 493 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1);
455 db_manager->SetPerformCallback(true); 494 db_manager->SetPerformCallback(true);
456 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, 495 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager,
457 2000 /* timeout in ms */); 496 2000 /* timeout in ms */);
458 497
459 clock()->Advance(base::TimeDelta::FromDays(1)); 498 clock()->Advance(base::TimeDelta::FromDays(1));
460 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_GEOLOCATION, url); 499 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
461 EXPECT_TRUE(callback_was_run()); 500 EXPECT_TRUE(callback_was_run());
462 EXPECT_TRUE(last_embargoed_status()); 501 EXPECT_TRUE(last_embargoed_status());
463 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", 502 histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse",
464 2); 503 2);
465 histograms.ExpectTotalCount( 504 histograms.ExpectTotalCount(
466 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 2); 505 "Permissions.AutoBlocker.SafeBrowsingResponseTime", 2);
467 histograms.ExpectBucketCount("Permissions.AutoBlocker.SafeBrowsingResponse", 506 histograms.ExpectBucketCount("Permissions.AutoBlocker.SafeBrowsingResponse",
468 SafeBrowsingResponse::BLACKLISTED, 1); 507 SafeBrowsingResponse::BLACKLISTED, 1);
469 clock()->Advance(base::TimeDelta::FromDays(1)); 508 clock()->Advance(base::TimeDelta::FromDays(1));
470 EXPECT_TRUE( 509 result =
471 autoblocker()->IsUnderEmbargo(CONTENT_SETTINGS_TYPE_GEOLOCATION, url)); 510 autoblocker()->GetEmbargoResult(CONTENT_SETTINGS_TYPE_GEOLOCATION, url);
511 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting);
512 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source);
472 } 513 }
473 514
474 // TODO(raymes): See crbug.com/681709. Remove after M60. 515 // TODO(raymes): See crbug.com/681709. Remove after M60.
475 TEST_F(PermissionDecisionAutoBlockerUnitTest, 516 TEST_F(PermissionDecisionAutoBlockerUnitTest,
476 MigrateNoDecisionCountToPermissionAutoBlockerData) { 517 MigrateNoDecisionCountToPermissionAutoBlockerData) {
477 GURL url("https://www.google.com"); 518 GURL url("https://www.google.com");
478 auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); 519 auto* map = HostContentSettingsMapFactory::GetForProfile(profile());
479 520
480 // Write to the old content setting. 521 // Write to the old content setting.
481 base::DictionaryValue permissions_dict; 522 base::DictionaryValue permissions_dict;
482 permissions_dict.SetInteger(GetDismissKey(), 100); 523 permissions_dict.SetInteger(GetDismissKey(), 100);
483 permissions_dict.SetInteger(GetIgnoreKey(), 50); 524 permissions_dict.SetInteger(GetIgnoreKey(), 50);
484 525
485 base::DictionaryValue origin_dict; 526 base::DictionaryValue origin_dict;
486 origin_dict.Set( 527 origin_dict.Set(
487 PermissionUtil::GetPermissionString(CONTENT_SETTINGS_TYPE_GEOLOCATION), 528 PermissionUtil::GetPermissionString(CONTENT_SETTINGS_TYPE_GEOLOCATION),
488 permissions_dict.CreateDeepCopy()); 529 permissions_dict.CreateDeepCopy());
489 map->SetWebsiteSettingDefaultScope( 530 map->SetWebsiteSettingDefaultScope(
490 url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 531 url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
491 std::string(), origin_dict.CreateDeepCopy()); 532 std::string(), origin_dict.CreateDeepCopy());
492 533
493 // Nothing should be migrated yet, so the current values should be 0. 534 // Nothing should be migrated yet, so the current values should be 0.
494 EXPECT_EQ(0, autoblocker()->GetDismissCount( 535 EXPECT_EQ(0, autoblocker()->GetDismissCount(
495 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 536 url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
496 EXPECT_EQ(0, autoblocker()->GetIgnoreCount( 537 EXPECT_EQ(
497 url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); 538 0, autoblocker()->GetIgnoreCount(url, CONTENT_SETTINGS_TYPE_GEOLOCATION));
498 539
499 // Trigger pref migration which happens at the creation of the 540 // Trigger pref migration which happens at the creation of the
500 // HostContentSettingsMap. 541 // HostContentSettingsMap.
501 { 542 {
502 scoped_refptr<HostContentSettingsMap> temp_map(new HostContentSettingsMap( 543 scoped_refptr<HostContentSettingsMap> temp_map(new HostContentSettingsMap(
503 profile()->GetPrefs(), false /* is_incognito_profile */, 544 profile()->GetPrefs(), false /* is_incognito_profile */,
504 false /* is_guest_profile */)); 545 false /* is_guest_profile */));
505 temp_map->ShutdownOnUIThread(); 546 temp_map->ShutdownOnUIThread();
506 } 547 }
507 548
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; 611 std::set<std::string> blacklisted_permissions{"GEOLOCATION"};
571 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); 612 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions);
572 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, 613 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager,
573 0 /* timeout in ms */); 614 0 /* timeout in ms */);
574 615
575 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url); 616 UpdateEmbargoedStatus(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, url);
576 EXPECT_FALSE(last_embargoed_status()); 617 EXPECT_FALSE(last_embargoed_status());
577 histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", 618 histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse",
578 SafeBrowsingResponse::NOT_BLACKLISTED, 1); 619 SafeBrowsingResponse::NOT_BLACKLISTED, 1);
579 } 620 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698