| Index: content/browser/devtools/devtools_manager_unittest.cc
|
| diff --git a/content/browser/devtools/devtools_manager_unittest.cc b/content/browser/devtools/devtools_manager_unittest.cc
|
| index 2969cc51ea3dca05a891857d948d1ca7608dbd13..c730ea328488d20f23a2cd68239056f0c5e53f9f 100644
|
| --- a/content/browser/devtools/devtools_manager_unittest.cc
|
| +++ b/content/browser/devtools/devtools_manager_unittest.cc
|
| @@ -191,9 +191,6 @@ class TestDevToolsManagerObserver : public DevToolsManager::Observer {
|
| it != targets.end(); ++it) {
|
| hosts_.push_back((*it)->GetAgentHost());
|
| }
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::MessageLoop::QuitClosure());
|
| }
|
|
|
| private:
|
| @@ -360,14 +357,41 @@ TEST_F(DevToolsManagerTest, TestExternalProxy) {
|
| client_host.Close();
|
| }
|
|
|
| +class TestDevToolsManagerScheduler {
|
| + public:
|
| + DevToolsManager::Scheduler callback() {
|
| + return base::Bind(&TestDevToolsManagerScheduler::Schedule,
|
| + base::Unretained(this));
|
| + }
|
| +
|
| + void Run() {
|
| + ASSERT_FALSE(closure_.is_null());
|
| + base::Closure copy = closure_;
|
| + closure_.Reset();
|
| + copy.Run();
|
| + }
|
| +
|
| + bool IsEmpty() {
|
| + return closure_.is_null();
|
| + }
|
| +
|
| + private:
|
| + void Schedule(base::Closure closure) {
|
| + EXPECT_TRUE(closure_.is_null());
|
| + closure_ = closure;
|
| + }
|
| +
|
| + base::Closure closure_;
|
| +};
|
| +
|
| TEST_F(DevToolsManagerTest, TestObserver) {
|
| GURL url1("data:text/html,<body>Body1</body>");
|
| GURL url2("data:text/html,<body>Body2</body>");
|
| GURL url3("data:text/html,<body>Body3</body>");
|
|
|
| + TestDevToolsManagerScheduler scheduler;
|
| DevToolsManager* manager = DevToolsManager::GetInstance();
|
| - DevToolsManager::SetObserverThrottleIntervalForTest(
|
| - base::TimeDelta::FromMilliseconds(200));
|
| + manager->SetSchedulerForTest(scheduler.callback());
|
|
|
| contents()->NavigateAndCommit(url1);
|
| RunAllPendingInMessageLoop();
|
| @@ -375,29 +399,25 @@ TEST_F(DevToolsManagerTest, TestObserver) {
|
| scoped_ptr<TestDevToolsManagerObserver> observer(
|
| new TestDevToolsManagerObserver());
|
| manager->AddObserver(observer.get());
|
| - RunMessageLoop();
|
| // Added observer should get an update.
|
| EXPECT_EQ(1, observer->updates_count());
|
| - EXPECT_EQ(1u, observer->hosts().size());
|
| + ASSERT_EQ(1u, observer->hosts().size());
|
| EXPECT_EQ(contents(), observer->hosts()[0]->GetWebContents());
|
| EXPECT_EQ(url1.spec(), observer->hosts()[0]->GetURL().spec());
|
|
|
| contents()->NavigateAndCommit(url2);
|
| RunAllPendingInMessageLoop();
|
| contents()->NavigateAndCommit(url3);
|
| - RunMessageLoop();
|
| + scheduler.Run();
|
| // Updates should be coalesced.
|
| EXPECT_EQ(2, observer->updates_count());
|
| - EXPECT_EQ(1u, observer->hosts().size());
|
| + ASSERT_EQ(1u, observer->hosts().size());
|
| EXPECT_EQ(contents(), observer->hosts()[0]->GetWebContents());
|
| EXPECT_EQ(url3.spec(), observer->hosts()[0]->GetURL().spec());
|
|
|
| - base::MessageLoop::current()->PostDelayedTask(
|
| - FROM_HERE,
|
| - base::MessageLoop::QuitClosure(),
|
| - base::TimeDelta::FromMilliseconds(250));
|
| - base::MessageLoop::current()->Run();
|
| // Check there were no extra updates.
|
| + scheduler.Run();
|
| + EXPECT_TRUE(scheduler.IsEmpty());
|
| EXPECT_EQ(2, observer->updates_count());
|
|
|
| scoped_ptr<WorkerStoragePartition> partition(new WorkerStoragePartition(
|
| @@ -417,9 +437,8 @@ TEST_F(DevToolsManagerTest, TestObserver) {
|
| 1, 1, shared_worker);
|
| contents()->NavigateAndCommit(url2);
|
|
|
| - RunMessageLoop();
|
| EXPECT_EQ(3, observer->updates_count());
|
| - EXPECT_EQ(2u, observer->hosts().size());
|
| + ASSERT_EQ(2u, observer->hosts().size());
|
| EXPECT_EQ(contents(), observer->hosts()[0]->GetWebContents());
|
| EXPECT_EQ(url2.spec(), observer->hosts()[0]->GetURL().spec());
|
| EXPECT_EQ(DevToolsAgentHost::TYPE_SHARED_WORKER,
|
| @@ -427,21 +446,21 @@ TEST_F(DevToolsManagerTest, TestObserver) {
|
| EXPECT_EQ(shared_worker_url.spec(), observer->hosts()[1]->GetURL().spec());
|
|
|
| EmbeddedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(1, 1);
|
| - RunMessageLoop();
|
| + scheduler.Run();
|
| EXPECT_EQ(4, observer->updates_count());
|
| - EXPECT_EQ(1u, observer->hosts().size());
|
| + ASSERT_EQ(1u, observer->hosts().size());
|
| EXPECT_EQ(contents(), observer->hosts()[0]->GetWebContents());
|
| EXPECT_EQ(url2.spec(), observer->hosts()[0]->GetURL().spec());
|
|
|
| - base::MessageLoop::current()->PostDelayedTask(
|
| - FROM_HERE,
|
| - base::MessageLoop::QuitClosure(),
|
| - base::TimeDelta::FromMilliseconds(250));
|
| - base::MessageLoop::current()->Run();
|
| // Check there were no extra updates.
|
| + scheduler.Run();
|
| + EXPECT_TRUE(scheduler.IsEmpty());
|
| EXPECT_EQ(4, observer->updates_count());
|
|
|
| manager->RemoveObserver(observer.get());
|
| +
|
| + EXPECT_TRUE(scheduler.IsEmpty());
|
| + manager->SetSchedulerForTest(DevToolsManager::Scheduler());
|
| }
|
|
|
| } // namespace content
|
|
|