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 "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" | 8 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
9 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" | 9 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
10 #include "chrome/browser/ui/website_settings/permission_bubble_view.h" | 10 #include "chrome/browser/ui/website_settings/permission_bubble_view.h" |
11 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" |
12 #include "content/public/test/test_browser_thread.h" | 12 #include "content/public/test/test_browser_thread.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 namespace { | 15 namespace { |
16 | 16 |
17 class MockRequest : public PermissionBubbleRequest { | 17 class MockRequest : public PermissionBubbleRequest { |
18 public: | 18 public: |
19 MockRequest() : granted_(false), cancelled_(false), finished_(false) {} | 19 explicit MockRequest(const base::string16& message) |
| 20 : message_(message), |
| 21 granted_(false), |
| 22 cancelled_(false), |
| 23 finished_(false) {} |
| 24 |
20 virtual ~MockRequest() {} | 25 virtual ~MockRequest() {} |
21 | 26 |
22 // PermissionBubbleRequest: | 27 // PermissionBubbleRequest: |
| 28 virtual int GetIconID() const OVERRIDE { |
| 29 return 5; |
| 30 } |
| 31 |
23 virtual base::string16 GetMessageText() const OVERRIDE { | 32 virtual base::string16 GetMessageText() const OVERRIDE { |
24 return base::ASCIIToUTF16("test"); | 33 return message_; |
25 } | 34 } |
26 | 35 |
27 virtual base::string16 GetMessageTextFragment() const OVERRIDE { | 36 virtual base::string16 GetMessageTextFragment() const OVERRIDE { |
28 return base::ASCIIToUTF16("test"); | 37 return message_; |
29 } | 38 } |
30 | 39 |
31 virtual base::string16 GetAlternateAcceptButtonText() const OVERRIDE { | 40 virtual bool HasUserGesture() const OVERRIDE { |
32 return base::ASCIIToUTF16("button"); | 41 return false; |
33 } | 42 } |
34 | 43 |
35 virtual base::string16 GetAlternateDenyButtonText() const OVERRIDE { | 44 virtual GURL GetRequestingHostname() const OVERRIDE { |
36 return base::ASCIIToUTF16("button"); | 45 return GURL("http://www.google.com/"); |
37 } | 46 } |
38 | 47 |
39 virtual void PermissionGranted() OVERRIDE { | 48 virtual void PermissionGranted() OVERRIDE { |
40 granted_ = true; | 49 granted_ = true; |
41 } | 50 } |
42 | 51 |
43 virtual void PermissionDenied() OVERRIDE { | 52 virtual void PermissionDenied() OVERRIDE { |
44 granted_ = false; | 53 granted_ = false; |
45 } | 54 } |
46 | 55 |
47 virtual void Cancelled() OVERRIDE { | 56 virtual void Cancelled() OVERRIDE { |
48 granted_ = false; | 57 granted_ = false; |
49 cancelled_ = true; | 58 cancelled_ = true; |
50 } | 59 } |
51 | 60 |
52 virtual void RequestFinished() OVERRIDE { | 61 virtual void RequestFinished() OVERRIDE { |
53 finished_ = true; | 62 finished_ = true; |
54 } | 63 } |
55 | 64 |
| 65 base::string16 message_; |
56 bool granted_; | 66 bool granted_; |
57 bool cancelled_; | 67 bool cancelled_; |
58 bool finished_; | 68 bool finished_; |
59 }; | 69 }; |
60 | 70 |
61 class MockView : public PermissionBubbleView { | 71 class MockView : public PermissionBubbleView { |
62 public: | 72 public: |
63 MockView() : shown_(false), delegate_(NULL) {} | 73 MockView() : shown_(false), delegate_(NULL) {} |
64 ~MockView() {} | 74 ~MockView() {} |
65 | 75 |
(...skipping 15 matching lines...) Expand all Loading... |
81 bool customization_state_) OVERRIDE { | 91 bool customization_state_) OVERRIDE { |
82 shown_ = true; | 92 shown_ = true; |
83 permission_requests_ = requests; | 93 permission_requests_ = requests; |
84 permission_states_ = accept_state; | 94 permission_states_ = accept_state; |
85 } | 95 } |
86 | 96 |
87 virtual void Hide() OVERRIDE { | 97 virtual void Hide() OVERRIDE { |
88 shown_ = false; | 98 shown_ = false; |
89 } | 99 } |
90 | 100 |
| 101 virtual bool CanAcceptRequestUpdate() OVERRIDE { |
| 102 return true; |
| 103 } |
| 104 |
91 bool shown_; | 105 bool shown_; |
92 Delegate* delegate_; | 106 Delegate* delegate_; |
93 std::vector<PermissionBubbleRequest*> permission_requests_; | 107 std::vector<PermissionBubbleRequest*> permission_requests_; |
94 std::vector<bool> permission_states_; | 108 std::vector<bool> permission_states_; |
95 }; | 109 }; |
96 | 110 |
97 } // namespace | 111 } // namespace |
98 | 112 |
99 class PermissionBubbleManagerTest : public testing::Test { | 113 class PermissionBubbleManagerTest : public testing::Test { |
100 public: | 114 public: |
101 PermissionBubbleManagerTest(); | 115 PermissionBubbleManagerTest(); |
| 116 virtual ~PermissionBubbleManagerTest() {} |
| 117 |
| 118 void TearDown() { |
| 119 manager_.reset(); |
| 120 } |
102 | 121 |
103 void ToggleAccept(int index, bool value) { | 122 void ToggleAccept(int index, bool value) { |
104 manager_->ToggleAccept(index, value); | 123 manager_->ToggleAccept(index, value); |
105 } | 124 } |
106 | 125 |
107 void Accept() { | 126 void Accept() { |
108 manager_->Accept(); | 127 manager_->Accept(); |
109 } | 128 } |
110 | 129 |
111 void WaitForCoalescing() { | 130 void WaitForCoalescing() { |
112 base::MessageLoop::current()->RunUntilIdle(); | 131 base::MessageLoop::current()->RunUntilIdle(); |
113 } | 132 } |
114 | 133 |
115 protected: | 134 protected: |
116 MockRequest request1_; | 135 MockRequest request1_; |
117 MockRequest request2_; | 136 MockRequest request2_; |
118 MockView view_; | 137 MockView view_; |
119 scoped_ptr<PermissionBubbleManager> manager_; | 138 scoped_ptr<PermissionBubbleManager> manager_; |
120 | 139 |
121 base::MessageLoop message_loop_; | 140 base::MessageLoop message_loop_; |
122 content::TestBrowserThread ui_thread_; | 141 content::TestBrowserThread ui_thread_; |
123 }; | 142 }; |
124 | 143 |
125 PermissionBubbleManagerTest::PermissionBubbleManagerTest() | 144 PermissionBubbleManagerTest::PermissionBubbleManagerTest() |
126 : manager_(new PermissionBubbleManager(NULL)), | 145 : request1_(base::ASCIIToUTF16("test1")), |
| 146 request2_(base::ASCIIToUTF16("test2")), |
| 147 manager_(new PermissionBubbleManager(NULL)), |
127 ui_thread_(content::BrowserThread::UI, &message_loop_) { | 148 ui_thread_(content::BrowserThread::UI, &message_loop_) { |
128 manager_->SetCoalesceIntervalForTesting(0); | 149 manager_->SetCoalesceIntervalForTesting(0); |
129 } | 150 } |
130 | 151 |
131 TEST_F(PermissionBubbleManagerTest, TestFlag) { | 152 TEST_F(PermissionBubbleManagerTest, TestFlag) { |
132 EXPECT_FALSE(PermissionBubbleManager::Enabled()); | 153 EXPECT_FALSE(PermissionBubbleManager::Enabled()); |
133 CommandLine::ForCurrentProcess()->AppendSwitch( | 154 CommandLine::ForCurrentProcess()->AppendSwitch( |
134 switches::kEnablePermissionsBubbles); | 155 switches::kEnablePermissionsBubbles); |
135 EXPECT_TRUE(PermissionBubbleManager::Enabled()); | 156 EXPECT_TRUE(PermissionBubbleManager::Enabled()); |
136 } | 157 } |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 | 316 |
296 EXPECT_FALSE(view_.shown_); | 317 EXPECT_FALSE(view_.shown_); |
297 | 318 |
298 manager_->AddRequest(&request2_); | 319 manager_->AddRequest(&request2_); |
299 WaitForCoalescing(); | 320 WaitForCoalescing(); |
300 EXPECT_TRUE(view_.shown_); | 321 EXPECT_TRUE(view_.shown_); |
301 Accept(); | 322 Accept(); |
302 EXPECT_FALSE(view_.shown_); | 323 EXPECT_FALSE(view_.shown_); |
303 EXPECT_TRUE(request2_.granted_); | 324 EXPECT_TRUE(request2_.granted_); |
304 } | 325 } |
| 326 |
| 327 TEST_F(PermissionBubbleManagerTest, SameRequestRejected) { |
| 328 manager_->SetView(&view_); |
| 329 manager_->AddRequest(&request1_); |
| 330 manager_->AddRequest(&request1_); |
| 331 EXPECT_FALSE(request1_.finished_); |
| 332 |
| 333 WaitForCoalescing(); |
| 334 EXPECT_TRUE(view_.shown_); |
| 335 ASSERT_EQ(1u, view_.permission_requests_.size()); |
| 336 EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
| 337 } |
| 338 |
| 339 TEST_F(PermissionBubbleManagerTest, DuplicateRequestRejected) { |
| 340 manager_->SetView(&view_); |
| 341 manager_->AddRequest(&request1_); |
| 342 MockRequest dupe_request(base::ASCIIToUTF16("test1")); |
| 343 manager_->AddRequest(&dupe_request); |
| 344 EXPECT_TRUE(dupe_request.finished_); |
| 345 EXPECT_FALSE(request1_.finished_); |
| 346 } |
| 347 |
| 348 TEST_F(PermissionBubbleManagerTest, DuplicateQueuedRequest) { |
| 349 manager_->SetView(&view_); |
| 350 manager_->AddRequest(&request1_); |
| 351 WaitForCoalescing(); |
| 352 manager_->AddRequest(&request2_); |
| 353 |
| 354 MockRequest dupe_request(base::ASCIIToUTF16("test1")); |
| 355 manager_->AddRequest(&dupe_request); |
| 356 EXPECT_TRUE(dupe_request.finished_); |
| 357 EXPECT_FALSE(request1_.finished_); |
| 358 |
| 359 MockRequest dupe_request2(base::ASCIIToUTF16("test2")); |
| 360 manager_->AddRequest(&dupe_request2); |
| 361 EXPECT_TRUE(dupe_request2.finished_); |
| 362 EXPECT_FALSE(request2_.finished_); |
| 363 } |
OLD | NEW |