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

Side by Side Diff: chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc

Issue 2017873002: Add metrics for permission prompt acceptance / denial (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2743
Patch Set: Created 4 years, 6 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 <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/message_loop/message_loop.h" 9 #include "base/message_loop/message_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"
12 #include "chrome/browser/permissions/permission_uma_util.h"
11 #include "chrome/browser/ui/website_settings/mock_permission_bubble_factory.h" 13 #include "chrome/browser/ui/website_settings/mock_permission_bubble_factory.h"
12 #include "chrome/browser/ui/website_settings/mock_permission_bubble_request.h" 14 #include "chrome/browser/ui/website_settings/mock_permission_bubble_request.h"
13 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" 15 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
14 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 16 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
15 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
16 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 18 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
17 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
18 20
19 class PermissionBubbleManagerTest : public ChromeRenderViewHostTestHarness { 21 class PermissionBubbleManagerTest : public ChromeRenderViewHostTestHarness {
20 public: 22 public:
21 PermissionBubbleManagerTest() 23 PermissionBubbleManagerTest()
22 : ChromeRenderViewHostTestHarness(), 24 : ChromeRenderViewHostTestHarness(),
23 request1_("test1"), 25 request1_("test1", PermissionBubbleType::QUOTA),
24 request2_("test2"), 26 request2_("test2", PermissionBubbleType::DOWNLOAD),
25 iframe_request_same_domain_("iframe", 27 iframe_request_same_domain_("iframe",
26 GURL("http://www.google.com/some/url")), 28 GURL("http://www.google.com/some/url")),
27 iframe_request_other_domain_("iframe", 29 iframe_request_other_domain_("iframe",
28 GURL("http://www.youtube.com")) {} 30 GURL("http://www.youtube.com")) {}
29 ~PermissionBubbleManagerTest() override {} 31 ~PermissionBubbleManagerTest() override {}
30 32
31 void SetUp() override { 33 void SetUp() override {
32 ChromeRenderViewHostTestHarness::SetUp(); 34 ChromeRenderViewHostTestHarness::SetUp();
33 SetContents(CreateTestWebContents()); 35 SetContents(CreateTestWebContents());
34 NavigateAndCommit(GURL("http://www.google.com")); 36 NavigateAndCommit(GURL("http://www.google.com"));
35 37
36 manager_.reset(new PermissionBubbleManager(web_contents())); 38 manager_.reset(new PermissionBubbleManager(web_contents()));
37 view_factory_.reset(new MockPermissionBubbleFactory(false, manager_.get())); 39 view_factory_.reset(new MockPermissionBubbleFactory(false, manager_.get()));
38 } 40 }
39 41
40 void TearDown() override { 42 void TearDown() override {
41 view_factory_.reset(); 43 view_factory_.reset();
42 manager_.reset(); 44 manager_.reset();
43 ChromeRenderViewHostTestHarness::TearDown(); 45 ChromeRenderViewHostTestHarness::TearDown();
44 } 46 }
45 47
46 void ToggleAccept(int index, bool value) { 48 void ToggleAccept(int index, bool value) {
47 manager_->ToggleAccept(index, value); 49 manager_->ToggleAccept(index, value);
48 } 50 }
49 51
50 void Accept() { 52 void Accept() {
51 manager_->Accept(); 53 manager_->Accept();
52 } 54 }
53 55
56 void Deny() {
57 manager_->Deny();
58 }
59
54 void Closing() { 60 void Closing() {
55 manager_->Closing(); 61 manager_->Closing();
56 } 62 }
57 63
58 void WaitForFrameLoad() { 64 void WaitForFrameLoad() {
59 // PermissionBubbleManager ignores all parameters. Yay? 65 // PermissionBubbleManager ignores all parameters. Yay?
60 manager_->DocumentLoadedInFrame(NULL); 66 manager_->DocumentLoadedInFrame(NULL);
61 base::MessageLoop::current()->RunUntilIdle(); 67 base::MessageLoop::current()->RunUntilIdle();
62 } 68 }
63 69
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 manager_->DisplayPendingRequests(); 446 manager_->DisplayPendingRequests();
441 WaitForFrameLoad(); 447 WaitForFrameLoad();
442 WaitForCoalescing(); 448 WaitForCoalescing();
443 manager_->AddRequest(&request1_); 449 manager_->AddRequest(&request1_);
444 manager_->AddRequest(&iframe_request_other_domain_); 450 manager_->AddRequest(&iframe_request_other_domain_);
445 manager_->AddRequest(&request2_); 451 manager_->AddRequest(&request2_);
446 base::MessageLoop::current()->RunUntilIdle(); 452 base::MessageLoop::current()->RunUntilIdle();
447 453
448 EXPECT_TRUE(view_factory_->is_visible()); 454 EXPECT_TRUE(view_factory_->is_visible());
449 } 455 }
456
457 TEST_F(PermissionBubbleManagerTest, UMAForSimpleAcceptedBubble) {
458 base::HistogramTester histograms;
459
460 manager_->AddRequest(&request1_);
461 manager_->DisplayPendingRequests();
462 WaitForCoalescing();
463 histograms.ExpectUniqueSample(
464 PermissionUmaUtil::kPermissionsPromptShown,
465 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA),
466 1);
467 histograms.ExpectUniqueSample(
468 PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt, 1, 1);
469
470 ToggleAccept(0, true);
471 Accept();
472 histograms.ExpectUniqueSample(
473 PermissionUmaUtil::kPermissionsPromptAccepted,
474 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA), 1);
475 }
476
477 TEST_F(PermissionBubbleManagerTest, UMAForSimpleDeniedBubble) {
478 base::HistogramTester histograms;
479
480 manager_->AddRequest(&request1_);
481 manager_->DisplayPendingRequests();
482 WaitForCoalescing();
483 // No need to test UMA for showing prompts again, they were tested in
484 // UMAForSimpleAcceptedBubble.
485
486 Deny();
487 histograms.ExpectUniqueSample(
488 PermissionUmaUtil::kPermissionsPromptDenied,
489 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA), 1);
490 }
491
492 // This code path (calling Accept on a non-merged bubble, with no accepted
493 // permission) would never be used in actual Chrome, but its still tested for
494 // completeness.
495 TEST_F(PermissionBubbleManagerTest, UMAForSimpleDeniedBubbleAlternatePath) {
496 base::HistogramTester histograms;
497
498 manager_->AddRequest(&request1_);
499 manager_->DisplayPendingRequests();
500 WaitForCoalescing();
501 // No need to test UMA for showing prompts again, they were tested in
502 // UMAForSimpleAcceptedBubble.
503
504 ToggleAccept(0, false);
505 Accept();
506 histograms.ExpectUniqueSample(
507 PermissionUmaUtil::kPermissionsPromptDenied,
508 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA), 1);
509 }
510
511 TEST_F(PermissionBubbleManagerTest, UMAForMergedAcceptedBubble) {
512 base::HistogramTester histograms;
513
514 manager_->AddRequest(&request1_);
515 manager_->AddRequest(&request2_);
516 manager_->DisplayPendingRequests();
517 WaitForCoalescing();
518
519 histograms.ExpectUniqueSample(
520 PermissionUmaUtil::kPermissionsPromptShown,
521 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::MULTIPLE),
522 1);
523 histograms.ExpectBucketCount(
524 PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes,
525 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA),
526 1);
527 histograms.ExpectBucketCount(
528 PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes,
529 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::DOWNLOAD),
530 1);
531 histograms.ExpectUniqueSample(
532 PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt, 2, 1);
533
534 ToggleAccept(0, true);
535 ToggleAccept(1, true);
536 Accept();
537
538 histograms.ExpectUniqueSample(
539 PermissionUmaUtil::kPermissionsPromptAccepted,
540 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::MULTIPLE),
541 1);
542 histograms.ExpectBucketCount(
543 PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted,
544 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA),
545 1);
546 histograms.ExpectBucketCount(
547 PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted,
548 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::DOWNLOAD),
549 1);
550 }
551
552 TEST_F(PermissionBubbleManagerTest, UMAForMergedMixedBubble) {
553 base::HistogramTester histograms;
554
555 manager_->AddRequest(&request1_);
556 manager_->AddRequest(&request2_);
557 manager_->DisplayPendingRequests();
558 WaitForCoalescing();
559 // No need to test UMA for showing prompts again, they were tested in
560 // UMAForMergedAcceptedBubble.
561
562 ToggleAccept(0, true);
563 ToggleAccept(1, false);
564 Accept();
565
566 histograms.ExpectUniqueSample(
567 PermissionUmaUtil::kPermissionsPromptDenied,
568 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::MULTIPLE),
569 1);
570 histograms.ExpectBucketCount(
571 PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted,
572 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA),
573 1);
574 histograms.ExpectBucketCount(
575 PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied,
576 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::DOWNLOAD),
577 1);
578 }
579
580 TEST_F(PermissionBubbleManagerTest, UMAForMergedDeniedBubble) {
581 base::HistogramTester histograms;
582
583 manager_->AddRequest(&request1_);
584 manager_->AddRequest(&request2_);
585 manager_->DisplayPendingRequests();
586 WaitForCoalescing();
587 // No need to test UMA for showing prompts again, they were tested in
588 // UMAForMergedAcceptedBubble.
589
590 ToggleAccept(0, false);
591 ToggleAccept(1, false);
592 Accept();
593
594 histograms.ExpectUniqueSample(
595 PermissionUmaUtil::kPermissionsPromptDenied,
596 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::MULTIPLE),
597 1);
598 histograms.ExpectBucketCount(
599 PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied,
600 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::QUOTA),
601 1);
602 histograms.ExpectBucketCount(
603 PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied,
604 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::DOWNLOAD),
605 1);
606 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698