OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_context_base.h" | 5 #include "chrome/browser/permissions/permission_context_base.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 } | 310 } |
311 | 311 |
312 if (persist) { | 312 if (persist) { |
313 EXPECT_EQ(decision, | 313 EXPECT_EQ(decision, |
314 permission_context.GetContentSettingFromMap(url, url)); | 314 permission_context.GetContentSettingFromMap(url, url)); |
315 } else { | 315 } else { |
316 EXPECT_EQ(CONTENT_SETTING_ASK, | 316 EXPECT_EQ(CONTENT_SETTING_ASK, |
317 permission_context.GetContentSettingFromMap(url, url)); | 317 permission_context.GetContentSettingFromMap(url, url)); |
318 } | 318 } |
319 | 319 |
| 320 histograms.ExpectUniqueSample( |
| 321 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 322 PermissionEmbargoStatus::NOT_EMBARGOED, 1); |
320 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 323 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
321 PermissionEmbargoStatus::NOT_EMBARGOED, 1); | 324 PermissionEmbargoStatus::NOT_EMBARGOED, 1); |
322 } | 325 } |
323 | 326 |
324 void DismissMultipleTimesAndExpectBlock( | 327 void DismissMultipleTimesAndExpectBlock( |
325 const GURL& url, | 328 const GURL& url, |
326 ContentSettingsType content_settings_type, | 329 ContentSettingsType content_settings_type, |
327 uint32_t iterations) { | 330 uint32_t iterations) { |
328 base::HistogramTester histograms; | 331 base::HistogramTester histograms; |
329 | 332 |
330 // Dismiss |iterations| times. The final dismiss should change the decision | 333 // Dismiss |iterations| times. The final dismiss should change the decision |
331 // from dismiss to block, and hence change the persisted content setting. | 334 // from dismiss to block, and hence change the persisted content setting. |
332 for (uint32_t i = 0; i < iterations; ++i) { | 335 for (uint32_t i = 0; i < iterations; ++i) { |
333 ContentSetting expected = | |
334 (i < 2) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | |
335 TestPermissionContext permission_context(profile(), | 336 TestPermissionContext permission_context(profile(), |
336 content_settings_type); | 337 content_settings_type); |
337 const PermissionRequestID id( | 338 const PermissionRequestID id( |
338 web_contents()->GetRenderProcessHost()->GetID(), | 339 web_contents()->GetRenderProcessHost()->GetID(), |
339 web_contents()->GetMainFrame()->GetRoutingID(), i); | 340 web_contents()->GetMainFrame()->GetRoutingID(), i); |
340 | 341 |
341 permission_context.SetRespondPermissionCallback( | 342 permission_context.SetRespondPermissionCallback( |
342 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 343 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
343 base::Unretained(this), &permission_context, id, url, | 344 base::Unretained(this), &permission_context, id, url, |
344 false, CONTENT_SETTING_ASK)); | 345 false, CONTENT_SETTING_ASK)); |
345 | 346 |
346 permission_context.RequestPermission( | 347 permission_context.RequestPermission( |
347 web_contents(), id, url, true /* user_gesture */, | 348 web_contents(), id, url, true /* user_gesture */, |
348 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 349 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
349 base::Unretained(&permission_context))); | 350 base::Unretained(&permission_context))); |
350 histograms.ExpectTotalCount( | 351 histograms.ExpectTotalCount( |
351 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 352 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
352 PermissionUtil::GetPermissionString(content_settings_type), | 353 PermissionUtil::GetPermissionString(content_settings_type), |
353 i + 1); | 354 i + 1); |
354 histograms.ExpectBucketCount( | 355 histograms.ExpectBucketCount( |
355 "Permissions.Prompt.Dismissed.PriorDismissCount." + | 356 "Permissions.Prompt.Dismissed.PriorDismissCount." + |
356 PermissionUtil::GetPermissionString(content_settings_type), | 357 PermissionUtil::GetPermissionString(content_settings_type), |
357 i, 1); | 358 i, 1); |
| 359 |
| 360 // On Android, repeatedly requesting and deciding permissions has the side |
| 361 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 362 // destructor. This is because we directly call |
| 363 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 364 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 365 // all OS_ANDROID ifdefs in this test can be removed. |
| 366 #if !defined(OS_ANDROID) |
358 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", | 367 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", |
359 i + 1); | 368 i + 1); |
| 369 #endif |
| 370 |
| 371 PermissionResult result = |
| 372 permission_context.GetPermissionStatus(url, url); |
| 373 |
| 374 histograms.ExpectUniqueSample( |
| 375 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 376 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); |
360 if (i < 2) { | 377 if (i < 2) { |
| 378 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 379 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
| 380 #if !defined(OS_ANDROID) |
361 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 381 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
362 PermissionEmbargoStatus::NOT_EMBARGOED, | 382 PermissionEmbargoStatus::NOT_EMBARGOED, |
363 i + 1); | 383 i + 1); |
| 384 #endif |
364 } else { | 385 } else { |
| 386 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 387 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 388 #if !defined(OS_ANDROID) |
365 histograms.ExpectBucketCount( | 389 histograms.ExpectBucketCount( |
366 "Permissions.AutoBlocker.EmbargoStatus", | 390 "Permissions.AutoBlocker.EmbargoStatus", |
367 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); | 391 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); |
| 392 #endif |
368 } | 393 } |
369 | 394 |
370 ASSERT_EQ(1u, permission_context.decisions().size()); | 395 ASSERT_EQ(1u, permission_context.decisions().size()); |
371 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 396 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
372 EXPECT_TRUE(permission_context.tab_context_updated()); | 397 EXPECT_TRUE(permission_context.tab_context_updated()); |
373 PermissionResult result = | |
374 permission_context.GetPermissionStatus(url, url); | |
375 EXPECT_EQ(expected, result.content_setting); | |
376 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | |
377 } | 398 } |
378 | 399 |
379 TestPermissionContext permission_context(profile(), content_settings_type); | 400 TestPermissionContext permission_context(profile(), content_settings_type); |
380 const PermissionRequestID id( | 401 const PermissionRequestID id( |
381 web_contents()->GetRenderProcessHost()->GetID(), | 402 web_contents()->GetRenderProcessHost()->GetID(), |
382 web_contents()->GetMainFrame()->GetRoutingID(), -1); | 403 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
383 | 404 |
384 permission_context.SetRespondPermissionCallback( | 405 permission_context.SetRespondPermissionCallback( |
385 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 406 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
386 base::Unretained(this), &permission_context, id, url, false, | 407 base::Unretained(this), &permission_context, id, url, false, |
387 CONTENT_SETTING_ASK)); | 408 CONTENT_SETTING_ASK)); |
388 | 409 |
389 permission_context.RequestPermission( | 410 permission_context.RequestPermission( |
390 web_contents(), id, url, true /* user_gesture */, | 411 web_contents(), id, url, true /* user_gesture */, |
391 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 412 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
392 base::Unretained(&permission_context))); | 413 base::Unretained(&permission_context))); |
393 | 414 |
394 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 415 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
395 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 416 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
396 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | 417 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 418 histograms.ExpectBucketCount( |
| 419 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 420 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); |
397 } | 421 } |
398 | 422 |
399 void TestBlockOnSeveralDismissals_TestContent() { | 423 void TestBlockOnSeveralDismissals_TestContent() { |
400 GURL url("https://www.google.com"); | 424 GURL url("https://www.google.com"); |
401 NavigateAndCommit(url); | 425 NavigateAndCommit(url); |
402 base::HistogramTester histograms; | 426 base::HistogramTester histograms; |
403 | 427 |
404 // First, ensure that > 3 dismissals behaves correctly. | 428 // First, ensure that > 3 dismissals behaves correctly. |
405 for (uint32_t i = 0; i < 4; ++i) { | 429 for (uint32_t i = 0; i < 4; ++i) { |
406 TestPermissionContext permission_context( | 430 TestPermissionContext permission_context( |
407 profile(), CONTENT_SETTINGS_TYPE_GEOLOCATION); | 431 profile(), CONTENT_SETTINGS_TYPE_GEOLOCATION); |
408 | 432 |
409 const PermissionRequestID id( | 433 const PermissionRequestID id( |
410 web_contents()->GetRenderProcessHost()->GetID(), | 434 web_contents()->GetRenderProcessHost()->GetID(), |
411 web_contents()->GetMainFrame()->GetRoutingID(), i); | 435 web_contents()->GetMainFrame()->GetRoutingID(), i); |
412 | 436 |
413 permission_context.SetRespondPermissionCallback( | 437 permission_context.SetRespondPermissionCallback( |
414 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 438 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
415 base::Unretained(this), &permission_context, id, url, | 439 base::Unretained(this), &permission_context, id, url, |
416 false, CONTENT_SETTING_ASK)); | 440 false, CONTENT_SETTING_ASK)); |
417 permission_context.RequestPermission( | 441 permission_context.RequestPermission( |
418 web_contents(), id, url, true /* user_gesture */, | 442 web_contents(), id, url, true /* user_gesture */, |
419 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 443 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
420 base::Unretained(&permission_context))); | 444 base::Unretained(&permission_context))); |
421 histograms.ExpectTotalCount( | 445 histograms.ExpectTotalCount( |
422 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", | 446 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", |
423 i + 1); | 447 i + 1); |
424 histograms.ExpectBucketCount( | 448 histograms.ExpectBucketCount( |
425 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1); | 449 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1); |
| 450 histograms.ExpectUniqueSample( |
| 451 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 452 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); |
| 453 |
| 454 // On Android, repeatedly requesting and deciding permissions has the side |
| 455 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 456 // destructor. This is because we directly call |
| 457 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 458 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 459 // all OS_ANDROID ifdefs in this test can be removed. |
| 460 #if !defined(OS_ANDROID) |
426 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 461 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
427 PermissionEmbargoStatus::NOT_EMBARGOED, | 462 PermissionEmbargoStatus::NOT_EMBARGOED, |
428 i + 1); | 463 i + 1); |
| 464 #endif |
429 | 465 |
430 ASSERT_EQ(1u, permission_context.decisions().size()); | 466 ASSERT_EQ(1u, permission_context.decisions().size()); |
431 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 467 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
432 EXPECT_TRUE(permission_context.tab_context_updated()); | 468 EXPECT_TRUE(permission_context.tab_context_updated()); |
433 EXPECT_EQ(CONTENT_SETTING_ASK, | 469 EXPECT_EQ(CONTENT_SETTING_ASK, |
434 permission_context.GetContentSettingFromMap(url, url)); | 470 permission_context.GetContentSettingFromMap(url, url)); |
435 } | 471 } |
436 | 472 |
437 // Flush the dismissal counts. Enable the block on too many dismissals | 473 // Flush the dismissal counts. Enable the block on too many dismissals |
438 // feature, which is disabled by default. | 474 // feature, which is disabled by default. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 std::map<std::string, std::string> actual_params; | 520 std::map<std::string, std::string> actual_params; |
485 EXPECT_TRUE(variations::GetVariationParamsByFeature( | 521 EXPECT_TRUE(variations::GetVariationParamsByFeature( |
486 features::kBlockPromptsIfDismissedOften, &actual_params)); | 522 features::kBlockPromptsIfDismissedOften, &actual_params)); |
487 EXPECT_EQ(params, actual_params); | 523 EXPECT_EQ(params, actual_params); |
488 } | 524 } |
489 | 525 |
490 for (uint32_t i = 0; i < 5; ++i) { | 526 for (uint32_t i = 0; i < 5; ++i) { |
491 TestPermissionContext permission_context( | 527 TestPermissionContext permission_context( |
492 profile(), CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 528 profile(), CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
493 | 529 |
494 ContentSetting expected = | |
495 (i < 4) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; | |
496 const PermissionRequestID id( | 530 const PermissionRequestID id( |
497 web_contents()->GetRenderProcessHost()->GetID(), | 531 web_contents()->GetRenderProcessHost()->GetID(), |
498 web_contents()->GetMainFrame()->GetRoutingID(), i); | 532 web_contents()->GetMainFrame()->GetRoutingID(), i); |
499 permission_context.SetRespondPermissionCallback( | 533 permission_context.SetRespondPermissionCallback( |
500 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 534 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
501 base::Unretained(this), &permission_context, id, url, | 535 base::Unretained(this), &permission_context, id, url, |
502 false, CONTENT_SETTING_ASK)); | 536 false, CONTENT_SETTING_ASK)); |
503 permission_context.RequestPermission( | 537 permission_context.RequestPermission( |
504 web_contents(), id, url, true /* user_gesture */, | 538 web_contents(), id, url, true /* user_gesture */, |
505 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 539 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
506 base::Unretained(&permission_context))); | 540 base::Unretained(&permission_context))); |
507 | 541 |
508 EXPECT_EQ(1u, permission_context.decisions().size()); | 542 EXPECT_EQ(1u, permission_context.decisions().size()); |
509 ASSERT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); | 543 ASSERT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); |
510 EXPECT_TRUE(permission_context.tab_context_updated()); | 544 EXPECT_TRUE(permission_context.tab_context_updated()); |
511 PermissionResult result = | 545 PermissionResult result = |
512 permission_context.GetPermissionStatus(url, url); | 546 permission_context.GetPermissionStatus(url, url); |
513 EXPECT_EQ(expected, result.content_setting); | |
514 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | |
515 | 547 |
516 histograms.ExpectTotalCount( | 548 histograms.ExpectTotalCount( |
517 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); | 549 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); |
518 histograms.ExpectBucketCount( | 550 histograms.ExpectBucketCount( |
519 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); | 551 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); |
| 552 histograms.ExpectUniqueSample( |
| 553 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 554 PermissionEmbargoStatus::NOT_EMBARGOED, i + 1); |
520 | 555 |
| 556 // On Android, repeatedly requesting and deciding permissions has the side |
| 557 // effect of overcounting any metrics recorded in the PermissionInfoBarDelegate |
| 558 // destructor. This is because we directly call |
| 559 // PermissionQueueController::OnPermissionSet without setting the action_taken |
| 560 // bit in PermissionInfoBarDelegate. When PermissionQueueController is deleted |
| 561 // all OS_ANDROID ifdefs in this test can be removed. |
| 562 #if !defined(OS_ANDROID) |
521 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", | 563 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoStatus", |
522 i + 1); | 564 i + 1); |
| 565 #endif |
523 if (i < 4) { | 566 if (i < 4) { |
| 567 EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
| 568 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 569 #if !defined(OS_ANDROID) |
524 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 570 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
525 PermissionEmbargoStatus::NOT_EMBARGOED, | 571 PermissionEmbargoStatus::NOT_EMBARGOED, |
526 i + 1); | 572 i + 1); |
| 573 #endif |
527 } else { | 574 } else { |
| 575 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
| 576 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
| 577 #if !defined(OS_ANDROID) |
528 histograms.ExpectBucketCount( | 578 histograms.ExpectBucketCount( |
529 "Permissions.AutoBlocker.EmbargoStatus", | 579 "Permissions.AutoBlocker.EmbargoStatus", |
530 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); | 580 PermissionEmbargoStatus::REPEATED_DISMISSALS, 1); |
| 581 #endif |
531 } | 582 } |
532 } | 583 } |
533 | 584 |
534 // Ensure that we finish in the block state. | 585 // Ensure that we finish in the block state. |
535 TestPermissionContext permission_context(profile(), | 586 TestPermissionContext permission_context(profile(), |
536 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 587 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
537 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 588 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
538 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); | 589 EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
539 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | 590 EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
540 | |
541 variations::testing::ClearAllVariationParams(); | 591 variations::testing::ClearAllVariationParams(); |
542 } | 592 } |
543 | 593 |
544 void TestRequestPermissionInvalidUrl( | 594 void TestRequestPermissionInvalidUrl( |
545 ContentSettingsType content_settings_type) { | 595 ContentSettingsType content_settings_type) { |
| 596 base::HistogramTester histograms; |
546 TestPermissionContext permission_context(profile(), content_settings_type); | 597 TestPermissionContext permission_context(profile(), content_settings_type); |
547 GURL url; | 598 GURL url; |
548 ASSERT_FALSE(url.is_valid()); | 599 ASSERT_FALSE(url.is_valid()); |
549 NavigateAndCommit(url); | 600 NavigateAndCommit(url); |
550 | 601 |
551 const PermissionRequestID id( | 602 const PermissionRequestID id( |
552 web_contents()->GetRenderProcessHost()->GetID(), | 603 web_contents()->GetRenderProcessHost()->GetID(), |
553 web_contents()->GetMainFrame()->GetRoutingID(), | 604 web_contents()->GetMainFrame()->GetRoutingID(), |
554 -1); | 605 -1); |
555 permission_context.RequestPermission( | 606 permission_context.RequestPermission( |
556 web_contents(), | 607 web_contents(), |
557 id, url, true /* user_gesture */, | 608 id, url, true /* user_gesture */, |
558 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 609 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
559 base::Unretained(&permission_context))); | 610 base::Unretained(&permission_context))); |
560 | 611 |
561 ASSERT_EQ(1u, permission_context.decisions().size()); | 612 ASSERT_EQ(1u, permission_context.decisions().size()); |
562 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); | 613 EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context.decisions()[0]); |
563 EXPECT_TRUE(permission_context.tab_context_updated()); | 614 EXPECT_TRUE(permission_context.tab_context_updated()); |
564 EXPECT_EQ(CONTENT_SETTING_ASK, | 615 EXPECT_EQ(CONTENT_SETTING_ASK, |
565 permission_context.GetContentSettingFromMap(url, url)); | 616 permission_context.GetContentSettingFromMap(url, url)); |
| 617 histograms.ExpectTotalCount( |
| 618 "Permissions.AutoBlocker.EmbargoPromptSuppression", 0); |
566 } | 619 } |
567 | 620 |
568 void TestGrantAndRevoke_TestContent(ContentSettingsType content_settings_type, | 621 void TestGrantAndRevoke_TestContent(ContentSettingsType content_settings_type, |
569 ContentSetting expected_default) { | 622 ContentSetting expected_default) { |
570 TestPermissionContext permission_context(profile(), content_settings_type); | 623 TestPermissionContext permission_context(profile(), content_settings_type); |
571 GURL url("https://www.google.com"); | 624 GURL url("https://www.google.com"); |
572 NavigateAndCommit(url); | 625 NavigateAndCommit(url); |
573 | 626 |
574 const PermissionRequestID id( | 627 const PermissionRequestID id( |
575 web_contents()->GetRenderProcessHost()->GetID(), | 628 web_contents()->GetRenderProcessHost()->GetID(), |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
677 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); | 730 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); |
678 TestPermissionContext permission_context(profile(), content_settings_type); | 731 TestPermissionContext permission_context(profile(), content_settings_type); |
679 PermissionDecisionAutoBlocker::GetForProfile(profile()) | 732 PermissionDecisionAutoBlocker::GetForProfile(profile()) |
680 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, | 733 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, |
681 timeout); | 734 timeout); |
682 const PermissionRequestID id( | 735 const PermissionRequestID id( |
683 web_contents()->GetRenderProcessHost()->GetID(), | 736 web_contents()->GetRenderProcessHost()->GetID(), |
684 web_contents()->GetMainFrame()->GetRoutingID(), -1); | 737 web_contents()->GetMainFrame()->GetRoutingID(), -1); |
685 | 738 |
686 // A response only needs to be made to the permission request if we do not | 739 // A response only needs to be made to the permission request if we do not |
687 // expect he permission to be blacklisted, therefore set the response | 740 // expect the permission to be blacklisted. |
688 // callback. | |
689 if (expected_permission_status == CONTENT_SETTING_ALLOW) { | 741 if (expected_permission_status == CONTENT_SETTING_ALLOW) { |
690 permission_context.SetRespondPermissionCallback( | 742 permission_context.SetRespondPermissionCallback( |
691 base::Bind(&PermissionContextBaseTests::RespondToPermission, | 743 base::Bind(&PermissionContextBaseTests::RespondToPermission, |
692 base::Unretained(this), &permission_context, id, url, | 744 base::Unretained(this), &permission_context, id, url, |
693 true /* persist */, expected_permission_status)); | 745 true /* persist */, expected_permission_status)); |
694 } | 746 } |
695 | 747 |
696 permission_context.RequestPermission( | 748 permission_context.RequestPermission( |
697 web_contents(), id, url, true /* user_gesture */, | 749 web_contents(), id, url, true /* user_gesture */, |
698 base::Bind(&TestPermissionContext::TrackPermissionDecision, | 750 base::Bind(&TestPermissionContext::TrackPermissionDecision, |
699 base::Unretained(&permission_context))); | 751 base::Unretained(&permission_context))); |
700 PermissionResult result = permission_context.GetPermissionStatus(url, url); | 752 PermissionResult result = permission_context.GetPermissionStatus(url, url); |
701 EXPECT_EQ(expected_permission_status, result.content_setting); | 753 EXPECT_EQ(expected_permission_status, result.content_setting); |
702 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); | |
703 | 754 |
704 if (expected_permission_status == CONTENT_SETTING_ALLOW) { | 755 if (expected_permission_status == CONTENT_SETTING_ALLOW) { |
705 ASSERT_EQ(1u, permission_context.decisions().size()); | 756 ASSERT_EQ(1u, permission_context.decisions().size()); |
706 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); | 757 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); |
| 758 EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
| 759 } else { |
| 760 EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source); |
707 } | 761 } |
| 762 histograms.ExpectUniqueSample( |
| 763 "Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 764 expected_embargo_reason, 1); |
708 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", | 765 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoStatus", |
709 expected_embargo_reason, 1); | 766 expected_embargo_reason, 1); |
710 } | 767 } |
711 | 768 |
712 private: | 769 private: |
713 // ChromeRenderViewHostTestHarness: | 770 // ChromeRenderViewHostTestHarness: |
714 void SetUp() override { | 771 void SetUp() override { |
715 ChromeRenderViewHostTestHarness::SetUp(); | 772 ChromeRenderViewHostTestHarness::SetUp(); |
716 #if defined(OS_ANDROID) | 773 #if defined(OS_ANDROID) |
717 InfoBarService::CreateForWebContents(web_contents()); | 774 InfoBarService::CreateForWebContents(web_contents()); |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
856 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { | 913 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { |
857 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = | 914 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
858 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); | 915 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); |
859 const GURL url("https://www.example.com"); | 916 const GURL url("https://www.example.com"); |
860 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; | 917 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
861 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); | 918 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
862 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, | 919 TestPermissionsBlacklisting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, |
863 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW, | 920 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW, |
864 PermissionEmbargoStatus::NOT_EMBARGOED); | 921 PermissionEmbargoStatus::NOT_EMBARGOED); |
865 } | 922 } |
OLD | NEW |