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

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

Issue 150103013: Add basic coalescing behavior to the permission bubble manager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
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 "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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698