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

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: fixed unit tests 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
15 class MockRequest : public PermissionBubbleRequest { 17 class MockRequest : public PermissionBubbleRequest {
16 public: 18 public:
17 MockRequest() : granted_(false), cancelled_(false), finished_(false) {} 19 MockRequest() : granted_(false), cancelled_(false), finished_(false) {}
18 virtual ~MockRequest() {} 20 virtual ~MockRequest() {}
19 21
20 // PermissionBubbleRequest: 22 // PermissionBubbleRequest:
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 PermissionBubbleManagerTest(); 101 PermissionBubbleManagerTest();
100 102
101 void ToggleAccept(int index, bool value) { 103 void ToggleAccept(int index, bool value) {
102 manager_->ToggleAccept(index, value); 104 manager_->ToggleAccept(index, value);
103 } 105 }
104 106
105 void Accept() { 107 void Accept() {
106 manager_->Accept(); 108 manager_->Accept();
107 } 109 }
108 110
111 void WaitForCoalescing() {
112 base::MessageLoop::current()->RunUntilIdle();
113 }
114
109 protected: 115 protected:
110 MockRequest request1_; 116 MockRequest request1_;
111 MockRequest request2_; 117 MockRequest request2_;
112 MockView view_; 118 MockView view_;
113 scoped_ptr<PermissionBubbleManager> manager_; 119 scoped_ptr<PermissionBubbleManager> manager_;
120
121 base::MessageLoop message_loop_;
122 content::TestBrowserThread ui_thread_;
114 }; 123 };
115 124
116 PermissionBubbleManagerTest::PermissionBubbleManagerTest() 125 PermissionBubbleManagerTest::PermissionBubbleManagerTest()
117 : manager_(new PermissionBubbleManager(NULL)) { 126 : manager_(new PermissionBubbleManager(NULL)),
127 ui_thread_(content::BrowserThread::UI, &message_loop_) {
128 manager_->SetCoalesceIntervalForTesting(0);
118 } 129 }
119 130
120 TEST_F(PermissionBubbleManagerTest, TestFlag) { 131 TEST_F(PermissionBubbleManagerTest, TestFlag) {
121 EXPECT_FALSE(PermissionBubbleManager::Enabled()); 132 EXPECT_FALSE(PermissionBubbleManager::Enabled());
122 CommandLine::ForCurrentProcess()->AppendSwitch( 133 CommandLine::ForCurrentProcess()->AppendSwitch(
123 switches::kEnablePermissionsBubbles); 134 switches::kEnablePermissionsBubbles);
124 EXPECT_TRUE(PermissionBubbleManager::Enabled()); 135 EXPECT_TRUE(PermissionBubbleManager::Enabled());
125 } 136 }
126 137
127 TEST_F(PermissionBubbleManagerTest, SingleRequest) { 138 TEST_F(PermissionBubbleManagerTest, SingleRequest) {
128 manager_->AddRequest(&request1_); 139 manager_->AddRequest(&request1_);
129 manager_->SetView(&view_); 140 manager_->SetView(&view_);
141 WaitForCoalescing();
130 142
131 EXPECT_TRUE(view_.delegate_ == manager_.get()); 143 EXPECT_TRUE(view_.delegate_ == manager_.get());
132 EXPECT_TRUE(view_.shown_); 144 EXPECT_TRUE(view_.shown_);
145 ASSERT_EQ(static_cast<size_t>(1), view_.permission_requests_.size());
146 EXPECT_EQ(&request1_, view_.permission_requests_[0]);
147
148 ToggleAccept(0, true);
149 Accept();
150 EXPECT_TRUE(request1_.granted_);
151 }
152
153 TEST_F(PermissionBubbleManagerTest, SingleRequestViewFirst) {
154 manager_->SetView(&view_);
155 manager_->AddRequest(&request1_);
156 WaitForCoalescing();
157
158 EXPECT_TRUE(view_.delegate_ == manager_.get());
159 EXPECT_TRUE(view_.shown_);
133 ASSERT_EQ(static_cast<size_t>(1), view_.permission_requests_.size()); 160 ASSERT_EQ(static_cast<size_t>(1), view_.permission_requests_.size());
134 EXPECT_EQ(&request1_, view_.permission_requests_[0]); 161 EXPECT_EQ(&request1_, view_.permission_requests_[0]);
135 162
136 ToggleAccept(0, true); 163 ToggleAccept(0, true);
137 Accept(); 164 Accept();
138 EXPECT_TRUE(request1_.granted_); 165 EXPECT_TRUE(request1_.granted_);
139 } 166 }
140 167
141 TEST_F(PermissionBubbleManagerTest, TwoRequests) { 168 TEST_F(PermissionBubbleManagerTest, TwoRequests) {
142 manager_->AddRequest(&request1_); 169 manager_->AddRequest(&request1_);
143 manager_->AddRequest(&request2_); 170 manager_->AddRequest(&request2_);
144 manager_->SetView(&view_); 171 manager_->SetView(&view_);
172 WaitForCoalescing();
145 173
146 EXPECT_TRUE(view_.delegate_ == manager_.get()); 174 EXPECT_TRUE(view_.delegate_ == manager_.get());
147 EXPECT_TRUE(view_.shown_); 175 EXPECT_TRUE(view_.shown_);
148 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); 176 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size());
149 EXPECT_EQ(&request1_, view_.permission_requests_[0]); 177 EXPECT_EQ(&request1_, view_.permission_requests_[0]);
150 EXPECT_EQ(&request2_, view_.permission_requests_[1]); 178 EXPECT_EQ(&request2_, view_.permission_requests_[1]);
151 179
152 ToggleAccept(0, true); 180 ToggleAccept(0, true);
153 ToggleAccept(1, false); 181 ToggleAccept(1, false);
154 Accept(); 182 Accept();
155 EXPECT_TRUE(request1_.granted_); 183 EXPECT_TRUE(request1_.granted_);
156 EXPECT_FALSE(request2_.granted_); 184 EXPECT_FALSE(request2_.granted_);
157 } 185 }
158 186
159 TEST_F(PermissionBubbleManagerTest, TwoRequestsTabSwitch) { 187 TEST_F(PermissionBubbleManagerTest, TwoRequestsTabSwitch) {
160 manager_->AddRequest(&request1_); 188 manager_->AddRequest(&request1_);
161 manager_->AddRequest(&request2_); 189 manager_->AddRequest(&request2_);
162 manager_->SetView(&view_); 190 manager_->SetView(&view_);
191 WaitForCoalescing();
163 192
164 EXPECT_TRUE(view_.delegate_ == manager_.get()); 193 EXPECT_TRUE(view_.delegate_ == manager_.get());
165 EXPECT_TRUE(view_.shown_); 194 EXPECT_TRUE(view_.shown_);
166 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); 195 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size());
167 EXPECT_EQ(&request1_, view_.permission_requests_[0]); 196 EXPECT_EQ(&request1_, view_.permission_requests_[0]);
168 EXPECT_EQ(&request2_, view_.permission_requests_[1]); 197 EXPECT_EQ(&request2_, view_.permission_requests_[1]);
169 198
170 ToggleAccept(0, true); 199 ToggleAccept(0, true);
171 ToggleAccept(1, false); 200 ToggleAccept(1, false);
172 201
173 manager_->SetView(NULL); 202 manager_->SetView(NULL);
174 EXPECT_FALSE(view_.shown_); 203 EXPECT_FALSE(view_.shown_);
175 EXPECT_TRUE(view_.delegate_ == NULL); 204 EXPECT_TRUE(view_.delegate_ == NULL);
176 view_.Clear(); 205 view_.Clear();
177 206
178 manager_->SetView(&view_); 207 manager_->SetView(&view_);
208 WaitForCoalescing();
179 EXPECT_TRUE(view_.shown_); 209 EXPECT_TRUE(view_.shown_);
180 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size()); 210 ASSERT_EQ(static_cast<size_t>(2), view_.permission_requests_.size());
181 EXPECT_EQ(&request1_, view_.permission_requests_[0]); 211 EXPECT_EQ(&request1_, view_.permission_requests_[0]);
182 EXPECT_EQ(&request2_, view_.permission_requests_[1]); 212 EXPECT_EQ(&request2_, view_.permission_requests_[1]);
183 EXPECT_TRUE(view_.permission_states_[0]); 213 EXPECT_TRUE(view_.permission_states_[0]);
184 EXPECT_FALSE(view_.permission_states_[1]); 214 EXPECT_FALSE(view_.permission_states_[1]);
185 215
186 Accept(); 216 Accept();
187 EXPECT_TRUE(request1_.granted_); 217 EXPECT_TRUE(request1_.granted_);
188 EXPECT_FALSE(request2_.granted_); 218 EXPECT_FALSE(request2_.granted_);
189 } 219 }
190 220
221 TEST_F(PermissionBubbleManagerTest, NoRequests) {
222 manager_->SetView(&view_);
223 WaitForCoalescing();
224 EXPECT_FALSE(view_.shown_);
225 }
226
227 TEST_F(PermissionBubbleManagerTest, NoView) {
228 manager_->AddRequest(&request1_);
229 WaitForCoalescing();
230 EXPECT_FALSE(view_.shown_);
231 }
232
233 TEST_F(PermissionBubbleManagerTest, TwoRequestsCoalesce) {
234 manager_->SetView(&view_);
235 manager_->AddRequest(&request1_);
236 manager_->AddRequest(&request2_);
237 EXPECT_FALSE(view_.shown_);
238 WaitForCoalescing();
239
240 EXPECT_TRUE(view_.shown_);
241 EXPECT_EQ(2u, view_.permission_requests_.size());
242 }
243
244 TEST_F(PermissionBubbleManagerTest, TwoRequestsDoNotCoalesce) {
245 manager_->SetView(&view_);
246 manager_->AddRequest(&request1_);
247 WaitForCoalescing();
248 manager_->AddRequest(&request2_);
249
250 EXPECT_TRUE(view_.shown_);
251 EXPECT_EQ(1u, view_.permission_requests_.size());
252 }
253
254 TEST_F(PermissionBubbleManagerTest, TwoRequestsShownInTwoBubbles) {
255 manager_->SetView(&view_);
256 manager_->AddRequest(&request1_);
257 WaitForCoalescing();
258 manager_->AddRequest(&request2_);
259
260 EXPECT_TRUE(view_.shown_);
261 ASSERT_EQ(1u, view_.permission_requests_.size());
262 EXPECT_EQ(&request1_, view_.permission_requests_[0]);
263
264 view_.Hide();
265 Accept();
266 EXPECT_FALSE(view_.shown_);
267
268 WaitForCoalescing();
269 EXPECT_TRUE(view_.shown_);
270 ASSERT_EQ(1u, view_.permission_requests_.size());
271 EXPECT_EQ(&request2_, view_.permission_requests_[0]);
272 }
273
274 TEST_F(PermissionBubbleManagerTest, TestAddDuplicateRequest) {
275 manager_->SetView(&view_);
276 manager_->AddRequest(&request1_);
277 manager_->AddRequest(&request2_);
278 manager_->AddRequest(&request1_);
279
280 WaitForCoalescing();
281 EXPECT_TRUE(view_.shown_);
282 ASSERT_EQ(2u, view_.permission_requests_.size());
283 EXPECT_EQ(&request1_, view_.permission_requests_[0]);
284 EXPECT_EQ(&request2_, view_.permission_requests_[1]);
285 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698