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/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 |