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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "base/test/histogram_tester.h" | 11 #include "base/test/histogram_tester.h" |
12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 13 #include "chrome/browser/engagement/site_engagement_service.h" |
13 #include "chrome/browser/permissions/mock_permission_request.h" | 14 #include "chrome/browser/permissions/mock_permission_request.h" |
14 #include "chrome/browser/permissions/permission_request.h" | 15 #include "chrome/browser/permissions/permission_request.h" |
15 #include "chrome/browser/permissions/permission_request_manager.h" | 16 #include "chrome/browser/permissions/permission_request_manager.h" |
16 #include "chrome/browser/permissions/permission_uma_util.h" | 17 #include "chrome/browser/permissions/permission_uma_util.h" |
17 #include "chrome/browser/ui/permission_bubble/mock_permission_prompt_factory.h" | 18 #include "chrome/browser/ui/permission_bubble/mock_permission_prompt_factory.h" |
18 #include "chrome/common/chrome_switches.h" | 19 #include "chrome/common/chrome_switches.h" |
19 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 20 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 21 #include "chrome/test/base/testing_profile.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
21 | 23 |
| 24 const double kTestEngagementScore = 29; |
| 25 |
22 class PermissionRequestManagerTest : public ChromeRenderViewHostTestHarness { | 26 class PermissionRequestManagerTest : public ChromeRenderViewHostTestHarness { |
23 public: | 27 public: |
24 PermissionRequestManagerTest() | 28 PermissionRequestManagerTest() |
25 : ChromeRenderViewHostTestHarness(), | 29 : ChromeRenderViewHostTestHarness(), |
26 request1_("test1", | 30 request1_("test1", |
27 PermissionRequestType::QUOTA, | 31 PermissionRequestType::QUOTA, |
28 PermissionRequestGestureType::GESTURE), | 32 PermissionRequestGestureType::GESTURE), |
29 request2_("test2", | 33 request2_("test2", |
30 PermissionRequestType::DOWNLOAD, | 34 PermissionRequestType::DOWNLOAD, |
31 PermissionRequestGestureType::NO_GESTURE), | 35 PermissionRequestGestureType::NO_GESTURE), |
32 request_mic_("mic", | 36 request_mic_("mic", |
33 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC, | 37 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC, |
34 PermissionRequestGestureType::NO_GESTURE), | 38 PermissionRequestGestureType::NO_GESTURE), |
35 request_camera_("cam", | 39 request_camera_("cam", |
36 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA, | 40 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA, |
37 PermissionRequestGestureType::NO_GESTURE), | 41 PermissionRequestGestureType::NO_GESTURE), |
38 iframe_request_same_domain_("iframe", | 42 iframe_request_same_domain_( |
39 PermissionRequestType::UNKNOWN, | 43 "iframe", |
40 GURL("http://www.google.com/some/url")), | 44 PermissionRequestType::PERMISSION_NOTIFICATIONS, |
41 iframe_request_other_domain_("iframe", | 45 GURL("http://www.google.com/some/url")), |
42 PermissionRequestType::UNKNOWN, | 46 iframe_request_other_domain_( |
43 GURL("http://www.youtube.com")), | 47 "iframe", |
| 48 PermissionRequestType::PERMISSION_GEOLOCATION, |
| 49 GURL("http://www.youtube.com")), |
44 iframe_request_mic_other_domain_( | 50 iframe_request_mic_other_domain_( |
45 "iframe", | 51 "iframe", |
46 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC, | 52 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC, |
47 GURL("http://www.youtube.com")) {} | 53 GURL("http://www.youtube.com")) {} |
48 ~PermissionRequestManagerTest() override {} | 54 ~PermissionRequestManagerTest() override {} |
49 | 55 |
50 void SetUp() override { | 56 void SetUp() override { |
51 ChromeRenderViewHostTestHarness::SetUp(); | 57 ChromeRenderViewHostTestHarness::SetUp(); |
52 SetContents(CreateTestWebContents()); | 58 SetContents(CreateTestWebContents()); |
53 NavigateAndCommit(GURL("http://www.google.com")); | 59 url_ = GURL("http://www.google.com"); |
| 60 NavigateAndCommit(url_); |
| 61 |
| 62 SiteEngagementService::Get(profile())->ResetBaseScoreForURL( |
| 63 url_, kTestEngagementScore); |
54 | 64 |
55 PermissionRequestManager::CreateForWebContents(web_contents()); | 65 PermissionRequestManager::CreateForWebContents(web_contents()); |
56 manager_ = PermissionRequestManager::FromWebContents(web_contents()); | 66 manager_ = PermissionRequestManager::FromWebContents(web_contents()); |
57 prompt_factory_.reset(new MockPermissionPromptFactory(manager_)); | 67 prompt_factory_.reset(new MockPermissionPromptFactory(manager_)); |
58 } | 68 } |
59 | 69 |
60 void TearDown() override { | 70 void TearDown() override { |
61 prompt_factory_.reset(); | 71 prompt_factory_.reset(); |
62 ChromeRenderViewHostTestHarness::TearDown(); | 72 ChromeRenderViewHostTestHarness::TearDown(); |
63 } | 73 } |
(...skipping 24 matching lines...) Expand all Loading... |
88 void MockTabSwitchAway() { manager_->HideBubble(); } | 98 void MockTabSwitchAway() { manager_->HideBubble(); } |
89 | 99 |
90 void MockTabSwitchBack() { manager_->DisplayPendingRequests(); } | 100 void MockTabSwitchBack() { manager_->DisplayPendingRequests(); } |
91 | 101 |
92 virtual void NavigationEntryCommitted( | 102 virtual void NavigationEntryCommitted( |
93 const content::LoadCommittedDetails& details) { | 103 const content::LoadCommittedDetails& details) { |
94 manager_->NavigationEntryCommitted(details); | 104 manager_->NavigationEntryCommitted(details); |
95 } | 105 } |
96 | 106 |
97 protected: | 107 protected: |
| 108 GURL url_; |
98 MockPermissionRequest request1_; | 109 MockPermissionRequest request1_; |
99 MockPermissionRequest request2_; | 110 MockPermissionRequest request2_; |
100 MockPermissionRequest request_mic_; | 111 MockPermissionRequest request_mic_; |
101 MockPermissionRequest request_camera_; | 112 MockPermissionRequest request_camera_; |
102 MockPermissionRequest iframe_request_same_domain_; | 113 MockPermissionRequest iframe_request_same_domain_; |
103 MockPermissionRequest iframe_request_other_domain_; | 114 MockPermissionRequest iframe_request_other_domain_; |
104 MockPermissionRequest iframe_request_mic_other_domain_; | 115 MockPermissionRequest iframe_request_mic_other_domain_; |
105 PermissionRequestManager* manager_; | 116 PermissionRequestManager* manager_; |
106 std::unique_ptr<MockPermissionPromptFactory> prompt_factory_; | 117 std::unique_ptr<MockPermissionPromptFactory> prompt_factory_; |
107 }; | 118 }; |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), | 519 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), |
509 1); | 520 1); |
510 histograms.ExpectUniqueSample( | 521 histograms.ExpectUniqueSample( |
511 PermissionUmaUtil::kPermissionsPromptShownGesture, | 522 PermissionUmaUtil::kPermissionsPromptShownGesture, |
512 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), | 523 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), |
513 1); | 524 1); |
514 histograms.ExpectTotalCount( | 525 histograms.ExpectTotalCount( |
515 PermissionUmaUtil::kPermissionsPromptShownNoGesture, 0); | 526 PermissionUmaUtil::kPermissionsPromptShownNoGesture, 0); |
516 histograms.ExpectUniqueSample( | 527 histograms.ExpectUniqueSample( |
517 PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt, 1, 1); | 528 PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt, 1, 1); |
| 529 histograms.ExpectTotalCount("Permissions.Engagement.Accepted.Quota", 0); |
518 | 530 |
519 Accept(); | 531 Accept(); |
520 histograms.ExpectUniqueSample( | 532 histograms.ExpectUniqueSample( |
521 PermissionUmaUtil::kPermissionsPromptAccepted, | 533 PermissionUmaUtil::kPermissionsPromptAccepted, |
522 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), | 534 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), |
523 1); | 535 1); |
524 histograms.ExpectTotalCount( | 536 histograms.ExpectTotalCount( |
525 PermissionUmaUtil::kPermissionsPromptDenied, 0); | 537 PermissionUmaUtil::kPermissionsPromptDenied, 0); |
526 | 538 |
527 histograms.ExpectUniqueSample( | 539 histograms.ExpectUniqueSample( |
528 PermissionUmaUtil::kPermissionsPromptAcceptedGesture, | 540 PermissionUmaUtil::kPermissionsPromptAcceptedGesture, |
529 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), | 541 static_cast<base::HistogramBase::Sample>(PermissionRequestType::QUOTA), |
530 1); | 542 1); |
531 histograms.ExpectTotalCount( | 543 histograms.ExpectTotalCount( |
532 PermissionUmaUtil::kPermissionsPromptAcceptedNoGesture, 0); | 544 PermissionUmaUtil::kPermissionsPromptAcceptedNoGesture, 0); |
| 545 histograms.ExpectUniqueSample("Permissions.Engagement.Accepted.Quota", |
| 546 kTestEngagementScore, 1); |
533 } | 547 } |
534 | 548 |
535 TEST_F(PermissionRequestManagerTest, UMAForSimpleDeniedNoGestureBubble) { | 549 TEST_F(PermissionRequestManagerTest, UMAForSimpleDeniedNoGestureBubble) { |
536 base::HistogramTester histograms; | 550 base::HistogramTester histograms; |
537 | 551 |
538 manager_->AddRequest(&request2_); | 552 manager_->AddRequest(&request2_); |
539 manager_->DisplayPendingRequests(); | 553 manager_->DisplayPendingRequests(); |
540 WaitForBubbleToBeShown(); | 554 WaitForBubbleToBeShown(); |
541 | 555 |
542 histograms.ExpectTotalCount( | 556 histograms.ExpectTotalCount( |
543 PermissionUmaUtil::kPermissionsPromptShownGesture, 0); | 557 PermissionUmaUtil::kPermissionsPromptShownGesture, 0); |
544 histograms.ExpectUniqueSample( | 558 histograms.ExpectUniqueSample( |
545 PermissionUmaUtil::kPermissionsPromptShownNoGesture, | 559 PermissionUmaUtil::kPermissionsPromptShownNoGesture, |
546 static_cast<base::HistogramBase::Sample>(PermissionRequestType::DOWNLOAD), | 560 static_cast<base::HistogramBase::Sample>(PermissionRequestType::DOWNLOAD), |
547 1); | 561 1); |
| 562 histograms.ExpectTotalCount("Permissions.Engagement.Denied.MultipleDownload", |
| 563 0); |
548 // No need to test the other UMA for showing prompts again, they were tested | 564 // No need to test the other UMA for showing prompts again, they were tested |
549 // in UMAForSimpleAcceptedBubble. | 565 // in UMAForSimpleAcceptedBubble. |
550 | 566 |
551 Deny(); | 567 Deny(); |
552 histograms.ExpectTotalCount( | 568 histograms.ExpectTotalCount( |
553 PermissionUmaUtil::kPermissionsPromptAccepted, 0); | 569 PermissionUmaUtil::kPermissionsPromptAccepted, 0); |
554 histograms.ExpectUniqueSample( | 570 histograms.ExpectUniqueSample( |
555 PermissionUmaUtil::kPermissionsPromptDenied, | 571 PermissionUmaUtil::kPermissionsPromptDenied, |
556 static_cast<base::HistogramBase::Sample>(PermissionRequestType::DOWNLOAD), | 572 static_cast<base::HistogramBase::Sample>(PermissionRequestType::DOWNLOAD), |
557 1); | 573 1); |
558 | 574 |
559 histograms.ExpectUniqueSample( | 575 histograms.ExpectUniqueSample( |
560 PermissionUmaUtil::kPermissionsPromptDeniedNoGesture, | 576 PermissionUmaUtil::kPermissionsPromptDeniedNoGesture, |
561 static_cast<base::HistogramBase::Sample>(PermissionRequestType::DOWNLOAD), | 577 static_cast<base::HistogramBase::Sample>(PermissionRequestType::DOWNLOAD), |
562 1); | 578 1); |
563 histograms.ExpectTotalCount( | 579 histograms.ExpectTotalCount( |
564 PermissionUmaUtil::kPermissionsPromptDeniedGesture, 0); | 580 PermissionUmaUtil::kPermissionsPromptDeniedGesture, 0); |
| 581 histograms.ExpectUniqueSample( |
| 582 "Permissions.Engagement.Denied.MultipleDownload", kTestEngagementScore, |
| 583 1); |
565 } | 584 } |
566 | 585 |
567 // This code path (calling Accept on a non-merged bubble, with no accepted | 586 // This code path (calling Accept on a non-merged bubble, with no accepted |
568 // permission) would never be used in actual Chrome, but its still tested for | 587 // permission) would never be used in actual Chrome, but its still tested for |
569 // completeness. | 588 // completeness. |
570 TEST_F(PermissionRequestManagerTest, UMAForSimpleDeniedBubbleAlternatePath) { | 589 TEST_F(PermissionRequestManagerTest, UMAForSimpleDeniedBubbleAlternatePath) { |
571 base::HistogramTester histograms; | 590 base::HistogramTester histograms; |
572 | 591 |
573 manager_->AddRequest(&request1_); | 592 manager_->AddRequest(&request1_); |
574 manager_->DisplayPendingRequests(); | 593 manager_->DisplayPendingRequests(); |
(...skipping 29 matching lines...) Expand all Loading... |
604 PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes, | 623 PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes, |
605 static_cast<base::HistogramBase::Sample>( | 624 static_cast<base::HistogramBase::Sample>( |
606 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA), | 625 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA), |
607 1); | 626 1); |
608 histograms.ExpectUniqueSample( | 627 histograms.ExpectUniqueSample( |
609 PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt, 2, 1); | 628 PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt, 2, 1); |
610 histograms.ExpectTotalCount( | 629 histograms.ExpectTotalCount( |
611 PermissionUmaUtil::kPermissionsPromptShownGesture, 0); | 630 PermissionUmaUtil::kPermissionsPromptShownGesture, 0); |
612 histograms.ExpectTotalCount( | 631 histograms.ExpectTotalCount( |
613 PermissionUmaUtil::kPermissionsPromptShownNoGesture, 0); | 632 PermissionUmaUtil::kPermissionsPromptShownNoGesture, 0); |
| 633 histograms.ExpectTotalCount( |
| 634 "Permissions.Engagement.Accepted.AudioAndVideoCapture", 0); |
614 | 635 |
615 Accept(); | 636 Accept(); |
616 | 637 |
617 histograms.ExpectUniqueSample( | 638 histograms.ExpectUniqueSample( |
618 PermissionUmaUtil::kPermissionsPromptAccepted, | 639 PermissionUmaUtil::kPermissionsPromptAccepted, |
619 static_cast<base::HistogramBase::Sample>(PermissionRequestType::MULTIPLE), | 640 static_cast<base::HistogramBase::Sample>(PermissionRequestType::MULTIPLE), |
620 1); | 641 1); |
621 histograms.ExpectBucketCount( | 642 histograms.ExpectBucketCount( |
622 PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted, | 643 PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted, |
623 static_cast<base::HistogramBase::Sample>( | 644 static_cast<base::HistogramBase::Sample>( |
624 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC), | 645 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC), |
625 1); | 646 1); |
626 histograms.ExpectBucketCount( | 647 histograms.ExpectBucketCount( |
627 PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted, | 648 PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted, |
628 static_cast<base::HistogramBase::Sample>( | 649 static_cast<base::HistogramBase::Sample>( |
629 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA), | 650 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA), |
630 1); | 651 1); |
| 652 histograms.ExpectUniqueSample( |
| 653 "Permissions.Engagement.Accepted.AudioAndVideoCapture", |
| 654 kTestEngagementScore, 1); |
631 } | 655 } |
632 | 656 |
633 TEST_F(PermissionRequestManagerTest, UMAForMergedDeniedBubble) { | 657 TEST_F(PermissionRequestManagerTest, UMAForMergedDeniedBubble) { |
634 base::HistogramTester histograms; | 658 base::HistogramTester histograms; |
635 | 659 |
636 manager_->AddRequest(&request_mic_); | 660 manager_->AddRequest(&request_mic_); |
637 manager_->AddRequest(&request_camera_); | 661 manager_->AddRequest(&request_camera_); |
638 manager_->DisplayPendingRequests(); | 662 manager_->DisplayPendingRequests(); |
639 WaitForBubbleToBeShown(); | 663 WaitForBubbleToBeShown(); |
| 664 histograms.ExpectTotalCount( |
| 665 "Permissions.Engagement.Denied.AudioAndVideoCapture", 0); |
640 // No need to test UMA for showing prompts again, they were tested in | 666 // No need to test UMA for showing prompts again, they were tested in |
641 // UMAForMergedAcceptedBubble. | 667 // UMAForMergedAcceptedBubble. |
642 | 668 |
643 Deny(); | 669 Deny(); |
644 | 670 |
645 histograms.ExpectUniqueSample( | 671 histograms.ExpectUniqueSample( |
646 PermissionUmaUtil::kPermissionsPromptDenied, | 672 PermissionUmaUtil::kPermissionsPromptDenied, |
647 static_cast<base::HistogramBase::Sample>(PermissionRequestType::MULTIPLE), | 673 static_cast<base::HistogramBase::Sample>(PermissionRequestType::MULTIPLE), |
648 1); | 674 1); |
649 histograms.ExpectBucketCount( | 675 histograms.ExpectBucketCount( |
650 PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied, | 676 PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied, |
651 static_cast<base::HistogramBase::Sample>( | 677 static_cast<base::HistogramBase::Sample>( |
652 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC), | 678 PermissionRequestType::PERMISSION_MEDIASTREAM_MIC), |
653 1); | 679 1); |
654 histograms.ExpectBucketCount( | 680 histograms.ExpectBucketCount( |
655 PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied, | 681 PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied, |
656 static_cast<base::HistogramBase::Sample>( | 682 static_cast<base::HistogramBase::Sample>( |
657 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA), | 683 PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA), |
658 1); | 684 1); |
| 685 histograms.ExpectUniqueSample( |
| 686 "Permissions.Engagement.Denied.AudioAndVideoCapture", |
| 687 kTestEngagementScore, 1); |
659 } | 688 } |
| 689 |
| 690 TEST_F(PermissionRequestManagerTest, UMAForIgnores) { |
| 691 base::HistogramTester histograms; |
| 692 |
| 693 manager_->AddRequest(&request1_); |
| 694 manager_->DisplayPendingRequests(); |
| 695 WaitForBubbleToBeShown(); |
| 696 histograms.ExpectTotalCount("Permissions.Engagement.Ignored.Quota", 0); |
| 697 |
| 698 GURL youtube("http://www.youtube.com/"); |
| 699 NavigateAndCommit(youtube); |
| 700 histograms.ExpectUniqueSample("Permissions.Engagement.Ignored.Quota", |
| 701 kTestEngagementScore, 1); |
| 702 |
| 703 MockPermissionRequest youtube_request( |
| 704 "request2", PermissionRequestType::PERMISSION_GEOLOCATION, youtube); |
| 705 manager_->AddRequest(&youtube_request); |
| 706 manager_->DisplayPendingRequests(); |
| 707 WaitForBubbleToBeShown(); |
| 708 |
| 709 NavigateAndCommit(GURL("http://www.google.com/")); |
| 710 histograms.ExpectUniqueSample("Permissions.Engagement.Ignored.Geolocation", 0, |
| 711 1); |
| 712 } |
OLD | NEW |