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 } | |
34 | |
35 virtual base::string16 GetAlternateDenyButtonText() const OVERRIDE { | |
36 return base::ASCIIToUTF16("button"); | |
37 } | 42 } |
38 | 43 |
39 virtual void PermissionGranted() OVERRIDE { | 44 virtual void PermissionGranted() OVERRIDE { |
40 granted_ = true; | 45 granted_ = true; |
41 } | 46 } |
42 | 47 |
43 virtual void PermissionDenied() OVERRIDE { | 48 virtual void PermissionDenied() OVERRIDE { |
44 granted_ = false; | 49 granted_ = false; |
45 } | 50 } |
46 | 51 |
47 virtual void Cancelled() OVERRIDE { | 52 virtual void Cancelled() OVERRIDE { |
48 granted_ = false; | 53 granted_ = false; |
49 cancelled_ = true; | 54 cancelled_ = true; |
50 } | 55 } |
51 | 56 |
52 virtual void RequestFinished() OVERRIDE { | 57 virtual void RequestFinished() OVERRIDE { |
53 finished_ = true; | 58 finished_ = true; |
54 } | 59 } |
55 | 60 |
61 base::string16 message_; | |
56 bool granted_; | 62 bool granted_; |
57 bool cancelled_; | 63 bool cancelled_; |
58 bool finished_; | 64 bool finished_; |
59 }; | 65 }; |
60 | 66 |
61 class MockView : public PermissionBubbleView { | 67 class MockView : public PermissionBubbleView { |
62 public: | 68 public: |
63 MockView() : shown_(false), delegate_(NULL) {} | 69 MockView() : shown_(false), delegate_(NULL) {} |
64 ~MockView() {} | 70 ~MockView() {} |
65 | 71 |
(...skipping 15 matching lines...) Expand all Loading... | |
81 bool customization_state_) OVERRIDE { | 87 bool customization_state_) OVERRIDE { |
82 shown_ = true; | 88 shown_ = true; |
83 permission_requests_ = requests; | 89 permission_requests_ = requests; |
84 permission_states_ = accept_state; | 90 permission_states_ = accept_state; |
85 } | 91 } |
86 | 92 |
87 virtual void Hide() OVERRIDE { | 93 virtual void Hide() OVERRIDE { |
88 shown_ = false; | 94 shown_ = false; |
89 } | 95 } |
90 | 96 |
97 virtual bool CanAcceptRequestUpdate() OVERRIDE { | |
98 return true; | |
99 } | |
100 | |
91 bool shown_; | 101 bool shown_; |
92 Delegate* delegate_; | 102 Delegate* delegate_; |
93 std::vector<PermissionBubbleRequest*> permission_requests_; | 103 std::vector<PermissionBubbleRequest*> permission_requests_; |
94 std::vector<bool> permission_states_; | 104 std::vector<bool> permission_states_; |
95 }; | 105 }; |
96 | 106 |
97 } // namespace | 107 } // namespace |
98 | 108 |
99 class PermissionBubbleManagerTest : public testing::Test { | 109 class PermissionBubbleManagerTest : public testing::Test { |
100 public: | 110 public: |
101 PermissionBubbleManagerTest(); | 111 PermissionBubbleManagerTest(); |
112 virtual ~PermissionBubbleManagerTest() {} | |
113 | |
114 void TearDown() { | |
115 manager_.reset(); | |
116 } | |
102 | 117 |
103 void ToggleAccept(int index, bool value) { | 118 void ToggleAccept(int index, bool value) { |
104 manager_->ToggleAccept(index, value); | 119 manager_->ToggleAccept(index, value); |
105 } | 120 } |
106 | 121 |
107 void Accept() { | 122 void Accept() { |
108 manager_->Accept(); | 123 manager_->Accept(); |
109 } | 124 } |
110 | 125 |
111 void WaitForCoalescing() { | 126 void WaitForCoalescing() { |
112 base::MessageLoop::current()->RunUntilIdle(); | 127 base::MessageLoop::current()->RunUntilIdle(); |
113 } | 128 } |
114 | 129 |
115 protected: | 130 protected: |
116 MockRequest request1_; | 131 MockRequest request1_; |
117 MockRequest request2_; | 132 MockRequest request2_; |
118 MockView view_; | 133 MockView view_; |
119 scoped_ptr<PermissionBubbleManager> manager_; | 134 scoped_ptr<PermissionBubbleManager> manager_; |
120 | 135 |
121 base::MessageLoop message_loop_; | 136 base::MessageLoop message_loop_; |
122 content::TestBrowserThread ui_thread_; | 137 content::TestBrowserThread ui_thread_; |
123 }; | 138 }; |
124 | 139 |
125 PermissionBubbleManagerTest::PermissionBubbleManagerTest() | 140 PermissionBubbleManagerTest::PermissionBubbleManagerTest() |
126 : manager_(new PermissionBubbleManager(NULL)), | 141 : request1_(base::ASCIIToUTF16("test1")), |
142 request2_(base::ASCIIToUTF16("test2")), | |
143 manager_(new PermissionBubbleManager(NULL)), | |
127 ui_thread_(content::BrowserThread::UI, &message_loop_) { | 144 ui_thread_(content::BrowserThread::UI, &message_loop_) { |
128 manager_->SetCoalesceIntervalForTesting(0); | 145 manager_->SetCoalesceIntervalForTesting(0); |
129 } | 146 } |
130 | 147 |
131 TEST_F(PermissionBubbleManagerTest, TestFlag) { | 148 TEST_F(PermissionBubbleManagerTest, TestFlag) { |
132 EXPECT_FALSE(PermissionBubbleManager::Enabled()); | 149 EXPECT_FALSE(PermissionBubbleManager::Enabled()); |
133 CommandLine::ForCurrentProcess()->AppendSwitch( | 150 CommandLine::ForCurrentProcess()->AppendSwitch( |
134 switches::kEnablePermissionsBubbles); | 151 switches::kEnablePermissionsBubbles); |
135 EXPECT_TRUE(PermissionBubbleManager::Enabled()); | 152 EXPECT_TRUE(PermissionBubbleManager::Enabled()); |
136 } | 153 } |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
295 | 312 |
296 EXPECT_FALSE(view_.shown_); | 313 EXPECT_FALSE(view_.shown_); |
297 | 314 |
298 manager_->AddRequest(&request2_); | 315 manager_->AddRequest(&request2_); |
299 WaitForCoalescing(); | 316 WaitForCoalescing(); |
300 EXPECT_TRUE(view_.shown_); | 317 EXPECT_TRUE(view_.shown_); |
301 Accept(); | 318 Accept(); |
302 EXPECT_FALSE(view_.shown_); | 319 EXPECT_FALSE(view_.shown_); |
303 EXPECT_TRUE(request2_.granted_); | 320 EXPECT_TRUE(request2_.granted_); |
304 } | 321 } |
322 | |
323 TEST_F(PermissionBubbleManagerTest, SameRequestRejected) { | |
324 manager_->SetView(&view_); | |
325 manager_->AddRequest(&request1_); | |
326 manager_->AddRequest(&request1_); | |
groby-ooo-7-16
2014/02/25 22:27:36
I get why we can't do that in the current framewor
Greg Billock
2014/02/26 00:28:44
It shouldn't call RequestFinished, since the manag
groby-ooo-7-16
2014/02/26 02:28:11
FWIW, I think each JS request should simply genera
| |
327 | |
328 WaitForCoalescing(); | |
329 EXPECT_TRUE(view_.shown_); | |
330 ASSERT_EQ(1u, view_.permission_requests_.size()); | |
331 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | |
332 } | |
333 | |
334 TEST_F(PermissionBubbleManagerTest, DuplicateRequestRejected) { | |
335 manager_->SetView(&view_); | |
336 manager_->AddRequest(&request1_); | |
337 MockRequest dupe_request(base::ASCIIToUTF16("test1")); | |
338 manager_->AddRequest(&dupe_request); | |
339 EXPECT_TRUE(dupe_request.finished_); | |
340 EXPECT_FALSE(request1_.finished_); | |
341 } | |
342 | |
343 TEST_F(PermissionBubbleManagerTest, DuplicateQueuedRequest) { | |
344 manager_->SetView(&view_); | |
345 manager_->AddRequest(&request1_); | |
346 WaitForCoalescing(); | |
347 manager_->AddRequest(&request2_); | |
348 | |
349 MockRequest dupe_request(base::ASCIIToUTF16("test1")); | |
350 manager_->AddRequest(&dupe_request); | |
351 EXPECT_TRUE(dupe_request.finished_); | |
352 EXPECT_FALSE(request1_.finished_); | |
353 | |
354 MockRequest dupe_request2(base::ASCIIToUTF16("test2")); | |
355 manager_->AddRequest(&dupe_request2); | |
356 EXPECT_TRUE(dupe_request2.finished_); | |
357 EXPECT_FALSE(request2_.finished_); | |
358 } | |
OLD | NEW |