Index: chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc |
diff --git a/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc b/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc |
index 0e12b56b83dfc05d8ed4fdc20534c2c19e4f9934..76cc721dc0b073aad9c11a5f221c908d74beca2f 100644 |
--- a/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc |
+++ b/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc |
@@ -3,15 +3,20 @@ |
// found in the LICENSE file. |
#include "base/command_line.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
#include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
#include "chrome/browser/ui/website_settings/permission_bubble_view.h" |
#include "chrome/common/chrome_switches.h" |
+#include "content/public/test/test_browser_thread.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace { |
+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.
|
+const int kPaddedCoalesceTimeMs = 50; |
+ |
class MockRequest : public PermissionBubbleRequest { |
public: |
MockRequest() : granted_(false), cancelled_(false), finished_(false) {} |
@@ -106,15 +111,31 @@ class PermissionBubbleManagerTest : public testing::Test { |
manager_->Accept(); |
} |
+ 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
|
+ base::MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, base::Bind(&DoneWaiting), |
+ base::TimeDelta::FromMilliseconds(kPaddedCoalesceTimeMs)); |
+ base::MessageLoop::current()->Run(); |
+ } |
+ |
+ static void DoneWaiting() { |
+ base::MessageLoop::current()->QuitNow(); |
+ } |
+ |
protected: |
MockRequest request1_; |
MockRequest request2_; |
MockView view_; |
scoped_ptr<PermissionBubbleManager> manager_; |
+ |
+ base::MessageLoop message_loop_; |
+ content::TestBrowserThread ui_thread_; |
}; |
PermissionBubbleManagerTest::PermissionBubbleManagerTest() |
- : manager_(new PermissionBubbleManager(NULL)) { |
+ : manager_(new PermissionBubbleManager(NULL)), |
+ ui_thread_(content::BrowserThread::UI, &message_loop_) { |
+ manager_->SetCoalesceIntervalForTesting(kCoalesceTestingTimeMs); |
} |
TEST_F(PermissionBubbleManagerTest, TestFlag) { |
@@ -127,6 +148,22 @@ TEST_F(PermissionBubbleManagerTest, TestFlag) { |
TEST_F(PermissionBubbleManagerTest, SingleRequest) { |
manager_->AddRequest(&request1_); |
manager_->SetView(&view_); |
+ WaitForCoalescing(); |
+ |
+ EXPECT_TRUE(view_.delegate_ == manager_.get()); |
+ EXPECT_TRUE(view_.shown_); |
+ ASSERT_EQ(static_cast<size_t>(1), view_.permission_requests_.size()); |
+ EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
+ |
+ ToggleAccept(0, true); |
+ Accept(); |
+ EXPECT_TRUE(request1_.granted_); |
+} |
+ |
+TEST_F(PermissionBubbleManagerTest, SingleRequestViewFirst) { |
+ manager_->SetView(&view_); |
+ manager_->AddRequest(&request1_); |
+ WaitForCoalescing(); |
EXPECT_TRUE(view_.delegate_ == manager_.get()); |
EXPECT_TRUE(view_.shown_); |
@@ -142,6 +179,7 @@ TEST_F(PermissionBubbleManagerTest, TwoRequests) { |
manager_->AddRequest(&request1_); |
manager_->AddRequest(&request2_); |
manager_->SetView(&view_); |
+ WaitForCoalescing(); |
EXPECT_TRUE(view_.delegate_ == manager_.get()); |
EXPECT_TRUE(view_.shown_); |
@@ -160,6 +198,7 @@ TEST_F(PermissionBubbleManagerTest, TwoRequestsTabSwitch) { |
manager_->AddRequest(&request1_); |
manager_->AddRequest(&request2_); |
manager_->SetView(&view_); |
+ WaitForCoalescing(); |
EXPECT_TRUE(view_.delegate_ == manager_.get()); |
EXPECT_TRUE(view_.shown_); |
@@ -188,3 +227,68 @@ TEST_F(PermissionBubbleManagerTest, TwoRequestsTabSwitch) { |
EXPECT_FALSE(request2_.granted_); |
} |
+TEST_F(PermissionBubbleManagerTest, NoRequests) { |
+ manager_->SetView(&view_); |
+ WaitForCoalescing(); |
+ EXPECT_FALSE(view_.shown_); |
+} |
+ |
+TEST_F(PermissionBubbleManagerTest, NoView) { |
+ manager_->AddRequest(&request1_); |
+ WaitForCoalescing(); |
+ EXPECT_FALSE(view_.shown_); |
+} |
+ |
+TEST_F(PermissionBubbleManagerTest, TwoRequestsCoalesce) { |
+ manager_->SetView(&view_); |
+ manager_->AddRequest(&request1_); |
+ manager_->AddRequest(&request2_); |
+ EXPECT_FALSE(view_.shown_); |
+ WaitForCoalescing(); |
+ |
+ EXPECT_TRUE(view_.shown_); |
+ EXPECT_EQ(2u, view_.permission_requests_.size()); |
+} |
+ |
+TEST_F(PermissionBubbleManagerTest, TwoRequestsDoNotCoalesce) { |
+ manager_->SetView(&view_); |
+ manager_->AddRequest(&request1_); |
+ WaitForCoalescing(); |
+ manager_->AddRequest(&request2_); |
+ |
+ EXPECT_TRUE(view_.shown_); |
+ EXPECT_EQ(1u, view_.permission_requests_.size()); |
+} |
+ |
+TEST_F(PermissionBubbleManagerTest, TwoRequestsShownInTwoBubbles) { |
+ manager_->SetView(&view_); |
+ manager_->AddRequest(&request1_); |
+ WaitForCoalescing(); |
+ manager_->AddRequest(&request2_); |
+ |
+ EXPECT_TRUE(view_.shown_); |
+ ASSERT_EQ(1u, view_.permission_requests_.size()); |
+ EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
+ |
+ view_.Hide(); |
+ Accept(); |
+ EXPECT_FALSE(view_.shown_); |
+ |
+ WaitForCoalescing(); |
+ EXPECT_TRUE(view_.shown_); |
+ ASSERT_EQ(1u, view_.permission_requests_.size()); |
+ EXPECT_EQ(&request2_, view_.permission_requests_[0]); |
+} |
+ |
+TEST_F(PermissionBubbleManagerTest, TestAddDuplicateRequest) { |
+ manager_->SetView(&view_); |
+ manager_->AddRequest(&request1_); |
+ manager_->AddRequest(&request2_); |
+ manager_->AddRequest(&request1_); |
+ |
+ WaitForCoalescing(); |
+ EXPECT_TRUE(view_.shown_); |
+ ASSERT_EQ(2u, view_.permission_requests_.size()); |
+ EXPECT_EQ(&request1_, view_.permission_requests_[0]); |
+ EXPECT_EQ(&request2_, view_.permission_requests_[1]); |
+} |