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/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
7 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" | 8 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
8 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" | 9 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
9 #include "chrome/browser/ui/website_settings/permission_bubble_view.h" | 10 #include "chrome/browser/ui/website_settings/permission_bubble_view.h" |
10 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" |
12 #include "content/public/test/test_browser_thread.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
12 | 14 |
13 namespace { | 15 namespace { |
14 | 16 |
17 const int kCoalesceTestingTimeMs = 25; | |
Greg Billock
2014/02/07 20:14:24
I think typically we'd want this to be 0 for the e
leng
2014/02/08 00:11:18
Good idea. Done.
| |
18 const int kPaddedCoalesceTimeMs = 50; | |
19 | |
15 class MockRequest : public PermissionBubbleRequest { | 20 class MockRequest : public PermissionBubbleRequest { |
16 public: | 21 public: |
17 MockRequest() : granted_(false), cancelled_(false), finished_(false) {} | 22 MockRequest() : granted_(false), cancelled_(false), finished_(false) {} |
18 virtual ~MockRequest() {} | 23 virtual ~MockRequest() {} |
19 | 24 |
20 // PermissionBubbleRequest: | 25 // PermissionBubbleRequest: |
21 virtual base::string16 GetMessageText() const OVERRIDE { | 26 virtual base::string16 GetMessageText() const OVERRIDE { |
22 return base::ASCIIToUTF16("test"); | 27 return base::ASCIIToUTF16("test"); |
23 } | 28 } |
24 | 29 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
99 PermissionBubbleManagerTest(); | 104 PermissionBubbleManagerTest(); |
100 | 105 |
101 void ToggleAccept(int index, bool value) { | 106 void ToggleAccept(int index, bool value) { |
102 manager_->ToggleAccept(index, value); | 107 manager_->ToggleAccept(index, value); |
103 } | 108 } |
104 | 109 |
105 void Accept() { | 110 void Accept() { |
106 manager_->Accept(); | 111 manager_->Accept(); |
107 } | 112 } |
108 | 113 |
114 void WaitForCoalescing() { | |
Greg Billock
2014/02/07 20:14:24
I think if we can touch the WebcontentsObserver me
leng
2014/02/08 00:11:18
I've set up DidFinishLoad to only extend the timer
| |
115 base::MessageLoop::current()->PostDelayedTask( | |
116 FROM_HERE, base::Bind(&DoneWaiting), | |
117 base::TimeDelta::FromMilliseconds(kPaddedCoalesceTimeMs)); | |
118 base::MessageLoop::current()->Run(); | |
119 } | |
120 | |
121 static void DoneWaiting() { | |
122 base::MessageLoop::current()->QuitNow(); | |
123 } | |
124 | |
109 protected: | 125 protected: |
110 MockRequest request1_; | 126 MockRequest request1_; |
111 MockRequest request2_; | 127 MockRequest request2_; |
112 MockView view_; | 128 MockView view_; |
113 scoped_ptr<PermissionBubbleManager> manager_; | 129 scoped_ptr<PermissionBubbleManager> manager_; |
130 | |
131 base::MessageLoop message_loop_; | |
132 content::TestBrowserThread ui_thread_; | |
114 }; | 133 }; |
115 | 134 |
116 PermissionBubbleManagerTest::PermissionBubbleManagerTest() | 135 PermissionBubbleManagerTest::PermissionBubbleManagerTest() |
117 : manager_(new PermissionBubbleManager(NULL)) { | 136 : manager_(new PermissionBubbleManager(NULL)), |
137 ui_thread_(content::BrowserThread::UI, &message_loop_) { | |
138 manager_->SetCoalesceIntervalForTesting(kCoalesceTestingTimeMs); | |
118 } | 139 } |
119 | 140 |
120 TEST_F(PermissionBubbleManagerTest, TestFlag) { | 141 TEST_F(PermissionBubbleManagerTest, TestFlag) { |
121 EXPECT_FALSE(PermissionBubbleManager::Enabled()); | 142 EXPECT_FALSE(PermissionBubbleManager::Enabled()); |
122 CommandLine::ForCurrentProcess()->AppendSwitch( | 143 CommandLine::ForCurrentProcess()->AppendSwitch( |
123 switches::kEnablePermissionsBubbles); | 144 switches::kEnablePermissionsBubbles); |
124 EXPECT_TRUE(PermissionBubbleManager::Enabled()); | 145 EXPECT_TRUE(PermissionBubbleManager::Enabled()); |
125 } | 146 } |
126 | 147 |
127 TEST_F(PermissionBubbleManagerTest, SingleRequest) { | 148 TEST_F(PermissionBubbleManagerTest, SingleRequest) { |
128 manager_->AddRequest(&request1_); | 149 manager_->AddRequest(&request1_); |
129 manager_->SetView(&view_); | 150 manager_->SetView(&view_); |
151 WaitForCoalescing(); | |
130 | 152 |
131 EXPECT_TRUE(view_.delegate_ == manager_.get()); | 153 EXPECT_TRUE(view_.delegate_ == manager_.get()); |
132 EXPECT_TRUE(view_.shown_); | 154 EXPECT_TRUE(view_.shown_); |
155 ASSERT_EQ(static_cast<size_t>(1), view_.permission_requests_.size()); | |
156 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | |
157 | |
158 ToggleAccept(0, true); | |
159 Accept(); | |
160 EXPECT_TRUE(request1_.granted_); | |
161 } | |
162 | |
163 TEST_F(PermissionBubbleManagerTest, SingleRequestViewFirst) { | |
164 manager_->SetView(&view_); | |
165 manager_->AddRequest(&request1_); | |
166 WaitForCoalescing(); | |
167 | |
168 EXPECT_TRUE(view_.delegate_ == manager_.get()); | |
169 EXPECT_TRUE(view_.shown_); | |
133 ASSERT_EQ(static_cast<size_t>(1), view_.permission_requests_.size()); | 170 ASSERT_EQ(static_cast<size_t>(1), view_.permission_requests_.size()); |
134 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | 171 EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
135 | 172 |
136 ToggleAccept(0, true); | 173 ToggleAccept(0, true); |
137 Accept(); | 174 Accept(); |
138 EXPECT_TRUE(request1_.granted_); | 175 EXPECT_TRUE(request1_.granted_); |
139 } | 176 } |
140 | 177 |
141 TEST_F(PermissionBubbleManagerTest, TwoRequests) { | 178 TEST_F(PermissionBubbleManagerTest, TwoRequests) { |
142 manager_->AddRequest(&request1_); | 179 manager_->AddRequest(&request1_); |
143 manager_->AddRequest(&request2_); | 180 manager_->AddRequest(&request2_); |
144 manager_->SetView(&view_); | 181 manager_->SetView(&view_); |
182 WaitForCoalescing(); | |
145 | 183 |
146 EXPECT_TRUE(view_.delegate_ == manager_.get()); | 184 EXPECT_TRUE(view_.delegate_ == manager_.get()); |
147 EXPECT_TRUE(view_.shown_); | 185 EXPECT_TRUE(view_.shown_); |
148 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); | 186 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); |
149 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | 187 EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
150 EXPECT_EQ(&request2_, view_.permission_requests_[1]); | 188 EXPECT_EQ(&request2_, view_.permission_requests_[1]); |
151 | 189 |
152 ToggleAccept(0, true); | 190 ToggleAccept(0, true); |
153 ToggleAccept(1, false); | 191 ToggleAccept(1, false); |
154 Accept(); | 192 Accept(); |
155 EXPECT_TRUE(request1_.granted_); | 193 EXPECT_TRUE(request1_.granted_); |
156 EXPECT_FALSE(request2_.granted_); | 194 EXPECT_FALSE(request2_.granted_); |
157 } | 195 } |
158 | 196 |
159 TEST_F(PermissionBubbleManagerTest, TwoRequestsTabSwitch) { | 197 TEST_F(PermissionBubbleManagerTest, TwoRequestsTabSwitch) { |
160 manager_->AddRequest(&request1_); | 198 manager_->AddRequest(&request1_); |
161 manager_->AddRequest(&request2_); | 199 manager_->AddRequest(&request2_); |
162 manager_->SetView(&view_); | 200 manager_->SetView(&view_); |
201 WaitForCoalescing(); | |
163 | 202 |
164 EXPECT_TRUE(view_.delegate_ == manager_.get()); | 203 EXPECT_TRUE(view_.delegate_ == manager_.get()); |
165 EXPECT_TRUE(view_.shown_); | 204 EXPECT_TRUE(view_.shown_); |
166 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); | 205 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); |
167 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | 206 EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
168 EXPECT_EQ(&request2_, view_.permission_requests_[1]); | 207 EXPECT_EQ(&request2_, view_.permission_requests_[1]); |
169 | 208 |
170 ToggleAccept(0, true); | 209 ToggleAccept(0, true); |
171 ToggleAccept(1, false); | 210 ToggleAccept(1, false); |
172 | 211 |
173 manager_->SetView(NULL); | 212 manager_->SetView(NULL); |
174 EXPECT_FALSE(view_.shown_); | 213 EXPECT_FALSE(view_.shown_); |
175 EXPECT_TRUE(view_.delegate_ == NULL); | 214 EXPECT_TRUE(view_.delegate_ == NULL); |
176 view_.Clear(); | 215 view_.Clear(); |
177 | 216 |
178 manager_->SetView(&view_); | 217 manager_->SetView(&view_); |
179 EXPECT_TRUE(view_.shown_); | 218 EXPECT_TRUE(view_.shown_); |
180 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); | 219 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); |
181 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | 220 EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
182 EXPECT_EQ(&request2_, view_.permission_requests_[1]); | 221 EXPECT_EQ(&request2_, view_.permission_requests_[1]); |
183 EXPECT_TRUE(view_.permission_states_[0]); | 222 EXPECT_TRUE(view_.permission_states_[0]); |
184 EXPECT_FALSE(view_.permission_states_[1]); | 223 EXPECT_FALSE(view_.permission_states_[1]); |
185 | 224 |
186 Accept(); | 225 Accept(); |
187 EXPECT_TRUE(request1_.granted_); | 226 EXPECT_TRUE(request1_.granted_); |
188 EXPECT_FALSE(request2_.granted_); | 227 EXPECT_FALSE(request2_.granted_); |
189 } | 228 } |
190 | 229 |
230 TEST_F(PermissionBubbleManagerTest, NoRequests) { | |
231 manager_->SetView(&view_); | |
232 WaitForCoalescing(); | |
233 EXPECT_FALSE(view_.shown_); | |
234 } | |
235 | |
236 TEST_F(PermissionBubbleManagerTest, NoView) { | |
237 manager_->AddRequest(&request1_); | |
238 WaitForCoalescing(); | |
239 EXPECT_FALSE(view_.shown_); | |
240 } | |
241 | |
242 TEST_F(PermissionBubbleManagerTest, TwoRequestsCoalesce) { | |
243 manager_->SetView(&view_); | |
244 manager_->AddRequest(&request1_); | |
245 manager_->AddRequest(&request2_); | |
246 EXPECT_FALSE(view_.shown_); | |
247 WaitForCoalescing(); | |
248 | |
249 EXPECT_TRUE(view_.shown_); | |
250 EXPECT_EQ(2u, view_.permission_requests_.size()); | |
251 } | |
252 | |
253 TEST_F(PermissionBubbleManagerTest, TwoRequestsDoNotCoalesce) { | |
254 manager_->SetView(&view_); | |
255 manager_->AddRequest(&request1_); | |
256 WaitForCoalescing(); | |
257 manager_->AddRequest(&request2_); | |
258 | |
259 EXPECT_TRUE(view_.shown_); | |
260 EXPECT_EQ(1u, view_.permission_requests_.size()); | |
261 } | |
262 | |
263 TEST_F(PermissionBubbleManagerTest, TwoRequestsShownInTwoBubbles) { | |
264 manager_->SetView(&view_); | |
265 manager_->AddRequest(&request1_); | |
266 WaitForCoalescing(); | |
267 manager_->AddRequest(&request2_); | |
268 | |
269 EXPECT_TRUE(view_.shown_); | |
270 ASSERT_EQ(1u, view_.permission_requests_.size()); | |
271 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | |
272 | |
273 view_.Hide(); | |
274 Accept(); | |
275 EXPECT_FALSE(view_.shown_); | |
276 | |
277 WaitForCoalescing(); | |
278 EXPECT_TRUE(view_.shown_); | |
279 ASSERT_EQ(1u, view_.permission_requests_.size()); | |
280 EXPECT_EQ(&request2_, view_.permission_requests_[0]); | |
281 } | |
282 | |
283 TEST_F(PermissionBubbleManagerTest, TestAddDuplicateRequest) { | |
284 manager_->SetView(&view_); | |
285 manager_->AddRequest(&request1_); | |
286 manager_->AddRequest(&request2_); | |
287 manager_->AddRequest(&request1_); | |
288 | |
289 WaitForCoalescing(); | |
290 EXPECT_TRUE(view_.shown_); | |
291 ASSERT_EQ(2u, view_.permission_requests_.size()); | |
292 EXPECT_EQ(&request1_, view_.permission_requests_[0]); | |
293 EXPECT_EQ(&request2_, view_.permission_requests_[1]); | |
294 } | |
OLD | NEW |