| 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 } | 42 } |
| 34 | 43 |
| 35 virtual base::string16 GetAlternateDenyButtonText() const OVERRIDE { | 44 virtual GURL GetRequestingHostname() const OVERRIDE { |
| 36 return base::ASCIIToUTF16("button"); | 45 return GURL("http://www.google.com/"); |
| 37 } | 46 } |
| 38 | 47 |
| 39 virtual void PermissionGranted() OVERRIDE { | 48 virtual void PermissionGranted() OVERRIDE { |
| 40 granted_ = true; | 49 granted_ = true; |
| 41 } | 50 } |
| 42 | 51 |
| 43 virtual void PermissionDenied() OVERRIDE { | 52 virtual void PermissionDenied() OVERRIDE { |
| 44 granted_ = false; | 53 granted_ = false; |
| 45 } | 54 } |
| 46 | 55 |
| 47 virtual void Cancelled() OVERRIDE { | 56 virtual void Cancelled() OVERRIDE { |
| 48 granted_ = false; | 57 granted_ = false; |
| 49 cancelled_ = true; | 58 cancelled_ = true; |
| 50 } | 59 } |
| 51 | 60 |
| 52 virtual void RequestFinished() OVERRIDE { | 61 virtual void RequestFinished() OVERRIDE { |
| 53 finished_ = true; | 62 finished_ = true; |
| 54 } | 63 } |
| 55 | 64 |
| 65 base::string16 message_; |
| 56 bool granted_; | 66 bool granted_; |
| 57 bool cancelled_; | 67 bool cancelled_; |
| 58 bool finished_; | 68 bool finished_; |
| 59 }; | 69 }; |
| 60 | 70 |
| 61 class MockView : public PermissionBubbleView { | 71 class MockView : public PermissionBubbleView { |
| 62 public: | 72 public: |
| 63 MockView() : shown_(false), delegate_(NULL) {} | 73 MockView() : shown_(false), delegate_(NULL) {} |
| 64 ~MockView() {} | 74 ~MockView() {} |
| 65 | 75 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 81 bool customization_state_) OVERRIDE { | 91 bool customization_state_) OVERRIDE { |
| 82 shown_ = true; | 92 shown_ = true; |
| 83 permission_requests_ = requests; | 93 permission_requests_ = requests; |
| 84 permission_states_ = accept_state; | 94 permission_states_ = accept_state; |
| 85 } | 95 } |
| 86 | 96 |
| 87 virtual void Hide() OVERRIDE { | 97 virtual void Hide() OVERRIDE { |
| 88 shown_ = false; | 98 shown_ = false; |
| 89 } | 99 } |
| 90 | 100 |
| 101 virtual bool CanAcceptRequestUpdate() OVERRIDE { |
| 102 return true; |
| 103 } |
| 104 |
| 91 bool shown_; | 105 bool shown_; |
| 92 Delegate* delegate_; | 106 Delegate* delegate_; |
| 93 std::vector<PermissionBubbleRequest*> permission_requests_; | 107 std::vector<PermissionBubbleRequest*> permission_requests_; |
| 94 std::vector<bool> permission_states_; | 108 std::vector<bool> permission_states_; |
| 95 }; | 109 }; |
| 96 | 110 |
| 97 } // namespace | 111 } // namespace |
| 98 | 112 |
| 99 class PermissionBubbleManagerTest : public testing::Test { | 113 class PermissionBubbleManagerTest : public testing::Test { |
| 100 public: | 114 public: |
| 101 PermissionBubbleManagerTest(); | 115 PermissionBubbleManagerTest(); |
| 116 virtual ~PermissionBubbleManagerTest() {} |
| 117 |
| 118 void TearDown() { |
| 119 manager_.reset(); |
| 120 } |
| 102 | 121 |
| 103 void ToggleAccept(int index, bool value) { | 122 void ToggleAccept(int index, bool value) { |
| 104 manager_->ToggleAccept(index, value); | 123 manager_->ToggleAccept(index, value); |
| 105 } | 124 } |
| 106 | 125 |
| 107 void Accept() { | 126 void Accept() { |
| 108 manager_->Accept(); | 127 manager_->Accept(); |
| 109 } | 128 } |
| 110 | 129 |
| 111 void WaitForCoalescing() { | 130 void WaitForCoalescing() { |
| 112 base::MessageLoop::current()->RunUntilIdle(); | 131 base::MessageLoop::current()->RunUntilIdle(); |
| 113 } | 132 } |
| 114 | 133 |
| 115 protected: | 134 protected: |
| 116 MockRequest request1_; | 135 MockRequest request1_; |
| 117 MockRequest request2_; | 136 MockRequest request2_; |
| 118 MockView view_; | 137 MockView view_; |
| 119 scoped_ptr<PermissionBubbleManager> manager_; | 138 scoped_ptr<PermissionBubbleManager> manager_; |
| 120 | 139 |
| 121 base::MessageLoop message_loop_; | 140 base::MessageLoop message_loop_; |
| 122 content::TestBrowserThread ui_thread_; | 141 content::TestBrowserThread ui_thread_; |
| 123 }; | 142 }; |
| 124 | 143 |
| 125 PermissionBubbleManagerTest::PermissionBubbleManagerTest() | 144 PermissionBubbleManagerTest::PermissionBubbleManagerTest() |
| 126 : manager_(new PermissionBubbleManager(NULL)), | 145 : request1_(base::ASCIIToUTF16("test1")), |
| 146 request2_(base::ASCIIToUTF16("test2")), |
| 147 manager_(new PermissionBubbleManager(NULL)), |
| 127 ui_thread_(content::BrowserThread::UI, &message_loop_) { | 148 ui_thread_(content::BrowserThread::UI, &message_loop_) { |
| 128 manager_->SetCoalesceIntervalForTesting(0); | 149 manager_->SetCoalesceIntervalForTesting(0); |
| 129 } | 150 } |
| 130 | 151 |
| 131 TEST_F(PermissionBubbleManagerTest, TestFlag) { | 152 TEST_F(PermissionBubbleManagerTest, TestFlag) { |
| 132 EXPECT_FALSE(PermissionBubbleManager::Enabled()); | 153 EXPECT_FALSE(PermissionBubbleManager::Enabled()); |
| 133 CommandLine::ForCurrentProcess()->AppendSwitch( | 154 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 134 switches::kEnablePermissionsBubbles); | 155 switches::kEnablePermissionsBubbles); |
| 135 EXPECT_TRUE(PermissionBubbleManager::Enabled()); | 156 EXPECT_TRUE(PermissionBubbleManager::Enabled()); |
| 136 } | 157 } |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 | 316 |
| 296 EXPECT_FALSE(view_.shown_); | 317 EXPECT_FALSE(view_.shown_); |
| 297 | 318 |
| 298 manager_->AddRequest(&request2_); | 319 manager_->AddRequest(&request2_); |
| 299 WaitForCoalescing(); | 320 WaitForCoalescing(); |
| 300 EXPECT_TRUE(view_.shown_); | 321 EXPECT_TRUE(view_.shown_); |
| 301 Accept(); | 322 Accept(); |
| 302 EXPECT_FALSE(view_.shown_); | 323 EXPECT_FALSE(view_.shown_); |
| 303 EXPECT_TRUE(request2_.granted_); | 324 EXPECT_TRUE(request2_.granted_); |
| 304 } | 325 } |
| 326 |
| 327 TEST_F(PermissionBubbleManagerTest, SameRequestRejected) { |
| 328 manager_->SetView(&view_); |
| 329 manager_->AddRequest(&request1_); |
| 330 manager_->AddRequest(&request1_); |
| 331 EXPECT_FALSE(request1_.finished_); |
| 332 |
| 333 WaitForCoalescing(); |
| 334 EXPECT_TRUE(view_.shown_); |
| 335 ASSERT_EQ(1u, view_.permission_requests_.size()); |
| 336 EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
| 337 } |
| 338 |
| 339 TEST_F(PermissionBubbleManagerTest, DuplicateRequestRejected) { |
| 340 manager_->SetView(&view_); |
| 341 manager_->AddRequest(&request1_); |
| 342 MockRequest dupe_request(base::ASCIIToUTF16("test1")); |
| 343 manager_->AddRequest(&dupe_request); |
| 344 EXPECT_TRUE(dupe_request.finished_); |
| 345 EXPECT_FALSE(request1_.finished_); |
| 346 } |
| 347 |
| 348 TEST_F(PermissionBubbleManagerTest, DuplicateQueuedRequest) { |
| 349 manager_->SetView(&view_); |
| 350 manager_->AddRequest(&request1_); |
| 351 WaitForCoalescing(); |
| 352 manager_->AddRequest(&request2_); |
| 353 |
| 354 MockRequest dupe_request(base::ASCIIToUTF16("test1")); |
| 355 manager_->AddRequest(&dupe_request); |
| 356 EXPECT_TRUE(dupe_request.finished_); |
| 357 EXPECT_FALSE(request1_.finished_); |
| 358 |
| 359 MockRequest dupe_request2(base::ASCIIToUTF16("test2")); |
| 360 manager_->AddRequest(&dupe_request2); |
| 361 EXPECT_TRUE(dupe_request2.finished_); |
| 362 EXPECT_FALSE(request2_.finished_); |
| 363 } |
| OLD | NEW |