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

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

Issue 2684913002: Add UMA for recording embargo reasons and autoblocker interactions. (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 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>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/feature_list.h" 14 #include "base/feature_list.h"
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
17 #include "base/metrics/field_trial.h" 17 #include "base/metrics/field_trial.h"
18 #include "base/run_loop.h" 18 #include "base/run_loop.h"
19 #include "base/test/histogram_tester.h" 19 #include "base/test/histogram_tester.h"
20 #include "base/test/mock_entropy_provider.h" 20 #include "base/test/mock_entropy_provider.h"
21 #include "base/test/scoped_feature_list.h" 21 #include "base/test/scoped_feature_list.h"
22 #include "build/build_config.h" 22 #include "build/build_config.h"
23 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" 23 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
24 #include "chrome/browser/infobars/infobar_service.h" 24 #include "chrome/browser/infobars/infobar_service.h"
25 #include "chrome/browser/permissions/permission_decision_auto_blocker.h" 25 #include "chrome/browser/permissions/permission_decision_auto_blocker.h"
26 #include "chrome/browser/permissions/permission_queue_controller.h" 26 #include "chrome/browser/permissions/permission_queue_controller.h"
27 #include "chrome/browser/permissions/permission_request_id.h" 27 #include "chrome/browser/permissions/permission_request_id.h"
28 #include "chrome/browser/permissions/permission_uma_util.h"
28 #include "chrome/browser/permissions/permission_util.h" 29 #include "chrome/browser/permissions/permission_util.h"
29 #include "chrome/common/chrome_features.h" 30 #include "chrome/common/chrome_features.h"
30 #include "chrome/common/chrome_switches.h" 31 #include "chrome/common/chrome_switches.h"
31 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 32 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
32 #include "chrome/test/base/testing_profile.h" 33 #include "chrome/test/base/testing_profile.h"
33 #include "components/content_settings/core/browser/host_content_settings_map.h" 34 #include "components/content_settings/core/browser/host_content_settings_map.h"
34 #include "components/content_settings/core/common/content_settings.h" 35 #include "components/content_settings/core/common/content_settings.h"
35 #include "components/content_settings/core/common/content_settings_types.h" 36 #include "components/content_settings/core/common/content_settings_types.h"
36 #include "components/safe_browsing_db/database_manager.h" 37 #include "components/safe_browsing_db/database_manager.h"
37 #include "components/safe_browsing_db/test_database_manager.h" 38 #include "components/safe_browsing_db/test_database_manager.h"
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 base::Bind(&TestPermissionContext::TrackPermissionDecision, 350 base::Bind(&TestPermissionContext::TrackPermissionDecision,
350 base::Unretained(&permission_context))); 351 base::Unretained(&permission_context)));
351 histograms.ExpectTotalCount( 352 histograms.ExpectTotalCount(
352 "Permissions.Prompt.Dismissed.PriorDismissCount." + 353 "Permissions.Prompt.Dismissed.PriorDismissCount." +
353 PermissionUtil::GetPermissionString(permission_type), 354 PermissionUtil::GetPermissionString(permission_type),
354 i + 1); 355 i + 1);
355 histograms.ExpectBucketCount( 356 histograms.ExpectBucketCount(
356 "Permissions.Prompt.Dismissed.PriorDismissCount." + 357 "Permissions.Prompt.Dismissed.PriorDismissCount." +
357 PermissionUtil::GetPermissionString(permission_type), 358 PermissionUtil::GetPermissionString(permission_type),
358 i, 1); 359 i, 1);
360 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoReason",
361 i + 1);
362 if (i < 2) {
363 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoReason",
364 PermissionEmbargoReason::NOT_EMBARGOED,
365 i + 1);
366 } else {
367 histograms.ExpectBucketCount(
368 "Permissions.AutoBlocker.EmbargoReason",
369 PermissionEmbargoReason::REPEATED_DISMISSALS, 1);
370 }
371
359 ASSERT_EQ(1u, permission_context.decisions().size()); 372 ASSERT_EQ(1u, permission_context.decisions().size());
360 EXPECT_EQ(expected, permission_context.decisions()[0]); 373 EXPECT_EQ(expected, permission_context.decisions()[0]);
361 EXPECT_TRUE(permission_context.tab_context_updated()); 374 EXPECT_TRUE(permission_context.tab_context_updated());
362 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url)); 375 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url));
363 } 376 }
364 377
365 TestPermissionContext permission_context(profile(), permission_type, 378 TestPermissionContext permission_context(profile(), permission_type,
366 content_settings_type); 379 content_settings_type);
367 const PermissionRequestID id( 380 const PermissionRequestID id(
368 web_contents()->GetRenderProcessHost()->GetID(), 381 web_contents()->GetRenderProcessHost()->GetID(),
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 false, CONTENT_SETTING_ASK)); 416 false, CONTENT_SETTING_ASK));
404 permission_context.RequestPermission( 417 permission_context.RequestPermission(
405 web_contents(), id, url, true /* user_gesture */, 418 web_contents(), id, url, true /* user_gesture */,
406 base::Bind(&TestPermissionContext::TrackPermissionDecision, 419 base::Bind(&TestPermissionContext::TrackPermissionDecision,
407 base::Unretained(&permission_context))); 420 base::Unretained(&permission_context)));
408 histograms.ExpectTotalCount( 421 histograms.ExpectTotalCount(
409 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", 422 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation",
410 i + 1); 423 i + 1);
411 histograms.ExpectBucketCount( 424 histograms.ExpectBucketCount(
412 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1); 425 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1);
426 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoReason",
427 PermissionEmbargoReason::NOT_EMBARGOED,
428 i + 1);
429
413 ASSERT_EQ(1u, permission_context.decisions().size()); 430 ASSERT_EQ(1u, permission_context.decisions().size());
414 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); 431 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]);
415 EXPECT_TRUE(permission_context.tab_context_updated()); 432 EXPECT_TRUE(permission_context.tab_context_updated());
416 EXPECT_EQ(CONTENT_SETTING_ASK, 433 EXPECT_EQ(CONTENT_SETTING_ASK,
417 permission_context.GetContentSettingFromMap(url, url)); 434 permission_context.GetContentSettingFromMap(url, url));
418 } 435 }
419 436
420 // Flush the dismissal counts. Enable the block on too many dismissals 437 // Flush the dismissal counts. Enable the block on too many dismissals
421 // feature, which is disabled by default. 438 // feature, which is disabled by default.
422 auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); 439 auto* map = HostContentSettingsMapFactory::GetForProfile(profile());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 510
494 EXPECT_EQ(1u, permission_context.decisions().size()); 511 EXPECT_EQ(1u, permission_context.decisions().size());
495 ASSERT_EQ(expected, permission_context.decisions()[0]); 512 ASSERT_EQ(expected, permission_context.decisions()[0]);
496 EXPECT_TRUE(permission_context.tab_context_updated()); 513 EXPECT_TRUE(permission_context.tab_context_updated());
497 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url)); 514 EXPECT_EQ(expected, permission_context.GetPermissionStatus(url, url));
498 515
499 histograms.ExpectTotalCount( 516 histograms.ExpectTotalCount(
500 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1); 517 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1);
501 histograms.ExpectBucketCount( 518 histograms.ExpectBucketCount(
502 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1); 519 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1);
520
521 histograms.ExpectTotalCount("Permissions.AutoBlocker.EmbargoReason",
522 i + 1);
523 if (i < 4) {
524 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoReason",
525 PermissionEmbargoReason::NOT_EMBARGOED,
526 i + 1);
527 } else {
528 histograms.ExpectBucketCount(
529 "Permissions.AutoBlocker.EmbargoReason",
530 PermissionEmbargoReason::REPEATED_DISMISSALS, 1);
531 }
503 } 532 }
504 533
505 // Ensure that we finish in the block state. 534 // Ensure that we finish in the block state.
506 TestPermissionContext permission_context( 535 TestPermissionContext permission_context(
507 profile(), content::PermissionType::MIDI_SYSEX, 536 profile(), content::PermissionType::MIDI_SYSEX,
508 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); 537 CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
509 EXPECT_EQ(CONTENT_SETTING_BLOCK, 538 EXPECT_EQ(CONTENT_SETTING_BLOCK,
510 permission_context.GetPermissionStatus(url, url)); 539 permission_context.GetPermissionStatus(url, url));
511 variations::testing::ClearAllVariationParams(); 540 variations::testing::ClearAllVariationParams();
512 } 541 }
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 668
640 EXPECT_EQ(response, permission_context.GetContentSettingFromMap(url, url)); 669 EXPECT_EQ(response, permission_context.GetContentSettingFromMap(url, url));
641 } 670 }
642 671
643 void TestPermissionsBlacklisting( 672 void TestPermissionsBlacklisting(
644 content::PermissionType permission_type, 673 content::PermissionType permission_type,
645 ContentSettingsType content_settings_type, 674 ContentSettingsType content_settings_type,
646 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager, 675 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
647 const GURL& url, 676 const GURL& url,
648 int timeout, 677 int timeout,
649 ContentSetting expected_permission_status) { 678 ContentSetting expected_permission_status,
679 PermissionEmbargoReason expected_embargo_reason) {
650 NavigateAndCommit(url); 680 NavigateAndCommit(url);
681 base::HistogramTester histograms;
651 base::test::ScopedFeatureList scoped_feature_list; 682 base::test::ScopedFeatureList scoped_feature_list;
652 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist); 683 scoped_feature_list.InitAndEnableFeature(features::kPermissionsBlacklist);
653 TestPermissionContext permission_context(profile(), permission_type, 684 TestPermissionContext permission_context(profile(), permission_type,
654 content_settings_type); 685 content_settings_type);
655 PermissionDecisionAutoBlocker::GetForProfile(profile()) 686 PermissionDecisionAutoBlocker::GetForProfile(profile())
656 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, 687 ->SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager,
657 timeout); 688 timeout);
658 const PermissionRequestID id( 689 const PermissionRequestID id(
659 web_contents()->GetRenderProcessHost()->GetID(), 690 web_contents()->GetRenderProcessHost()->GetID(),
660 web_contents()->GetMainFrame()->GetRoutingID(), -1); 691 web_contents()->GetMainFrame()->GetRoutingID(), -1);
(...skipping 12 matching lines...) Expand all
673 web_contents(), id, url, true /* user_gesture */, 704 web_contents(), id, url, true /* user_gesture */,
674 base::Bind(&TestPermissionContext::TrackPermissionDecision, 705 base::Bind(&TestPermissionContext::TrackPermissionDecision,
675 base::Unretained(&permission_context))); 706 base::Unretained(&permission_context)));
676 EXPECT_EQ(expected_permission_status, 707 EXPECT_EQ(expected_permission_status,
677 permission_context.GetPermissionStatus(url, url)); 708 permission_context.GetPermissionStatus(url, url));
678 709
679 if (expected_permission_status == CONTENT_SETTING_ALLOW) { 710 if (expected_permission_status == CONTENT_SETTING_ALLOW) {
680 ASSERT_EQ(1u, permission_context.decisions().size()); 711 ASSERT_EQ(1u, permission_context.decisions().size());
681 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]); 712 EXPECT_EQ(expected_permission_status, permission_context.decisions()[0]);
682 } 713 }
714 histograms.ExpectUniqueSample("Permissions.AutoBlocker.EmbargoReason",
715 expected_embargo_reason, 1);
683 } 716 }
684 717
685 private: 718 private:
686 // ChromeRenderViewHostTestHarness: 719 // ChromeRenderViewHostTestHarness:
687 void SetUp() override { 720 void SetUp() override {
688 ChromeRenderViewHostTestHarness::SetUp(); 721 ChromeRenderViewHostTestHarness::SetUp();
689 #if defined(OS_ANDROID) 722 #if defined(OS_ANDROID)
690 InfoBarService::CreateForWebContents(web_contents()); 723 InfoBarService::CreateForWebContents(web_contents());
691 #else 724 #else
692 PermissionRequestManager::CreateForWebContents(web_contents()); 725 PermissionRequestManager::CreateForWebContents(web_contents());
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 // Tests a blacklisted (URL, permission) pair has had its permission request 873 // Tests a blacklisted (URL, permission) pair has had its permission request
841 // blocked. 874 // blocked.
842 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingBlocked) { 875 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingBlocked) {
843 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = 876 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager =
844 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); 877 new MockSafeBrowsingDatabaseManager(true /* perform_callback */);
845 const GURL url("https://www.example.com"); 878 const GURL url("https://www.example.com");
846 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; 879 std::set<std::string> blacklisted_permissions{"GEOLOCATION"};
847 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); 880 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions);
848 TestPermissionsBlacklisting(content::PermissionType::GEOLOCATION, 881 TestPermissionsBlacklisting(content::PermissionType::GEOLOCATION,
849 CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager, 882 CONTENT_SETTINGS_TYPE_GEOLOCATION, db_manager,
850 url, 2000 /* timeout */, CONTENT_SETTING_BLOCK); 883 url, 2000 /* timeout */, CONTENT_SETTING_BLOCK,
884 PermissionEmbargoReason::BLACKLISTED);
851 } 885 }
852 886
853 // Tests that a URL that is blacklisted for one permission can still request 887 // Tests that a URL that is blacklisted for one permission can still request
854 // another and grant another. 888 // another and grant another.
855 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) { 889 TEST_F(PermissionContextBaseTests, TestPermissionsBlacklistingAllowed) {
856 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = 890 scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager =
857 new MockSafeBrowsingDatabaseManager(true /* perform_callback */); 891 new MockSafeBrowsingDatabaseManager(true /* perform_callback */);
858 const GURL url("https://www.example.com"); 892 const GURL url("https://www.example.com");
859 std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; 893 std::set<std::string> blacklisted_permissions{"GEOLOCATION"};
860 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); 894 db_manager->BlacklistUrlPermissions(url, blacklisted_permissions);
861 TestPermissionsBlacklisting(content::PermissionType::NOTIFICATIONS, 895 TestPermissionsBlacklisting(content::PermissionType::NOTIFICATIONS,
862 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager, 896 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, db_manager,
863 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW); 897 url, 2000 /* timeout */, CONTENT_SETTING_ALLOW,
898 PermissionEmbargoReason::NOT_EMBARGOED);
864 } 899 }
raymes 2017/02/08 23:20:09 Are we testing that NOT_EMBARGOED will be recorded
meredithl 2017/02/09 00:15:37 Not at all. I've added a histogram check into Test
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698