Chromium Code Reviews| 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 |