| Index: content/browser/devtools/shared_worker_devtools_manager_unittest.cc
|
| diff --git a/content/browser/shared_worker/shared_worker_instance_unittest.cc b/content/browser/devtools/shared_worker_devtools_manager_unittest.cc
|
| similarity index 10%
|
| copy from content/browser/shared_worker/shared_worker_instance_unittest.cc
|
| copy to content/browser/devtools/shared_worker_devtools_manager_unittest.cc
|
| index 632d9e74dcf4dd282735125af5266dd89e5f6d1c..d009cdcffc9067288764f3a84112ef2fc155aa56 100644
|
| --- a/content/browser/shared_worker/shared_worker_instance_unittest.cc
|
| +++ b/content/browser/devtools/shared_worker_devtools_manager_unittest.cc
|
| @@ -1,76 +1,263 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2014 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "base/basictypes.h"
|
| +#include "content/browser/devtools/shared_worker_devtools_manager.h"
|
| +
|
| #include "base/memory/scoped_ptr.h"
|
| -#include "base/strings/string16.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/run_loop.h"
|
| +#include "content/browser/browser_thread_impl.h"
|
| +#include "content/browser/devtools/devtools_manager_impl.h"
|
| #include "content/browser/shared_worker/shared_worker_instance.h"
|
| #include "content/browser/worker_host/worker_storage_partition.h"
|
| +#include "content/public/browser/devtools_agent_host.h"
|
| +#include "content/public/browser/devtools_client_host.h"
|
| #include "content/public/test/test_browser_context.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace content {
|
| +namespace {
|
| +
|
| +class TestDevToolsClientHost : public DevToolsClientHost {
|
| + public:
|
| + TestDevToolsClientHost() {}
|
| + virtual ~TestDevToolsClientHost() {}
|
| + virtual void DispatchOnInspectorFrontend(const std::string& message)
|
| + OVERRIDE {}
|
| + virtual void InspectedContentsClosing() OVERRIDE {}
|
| + virtual void ReplacedWithAnotherClient() OVERRIDE {}
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost);
|
| +};
|
| +}
|
| +
|
| +class SharedWorkerDevToolsManagerTest : public testing::Test {
|
| + public:
|
| + SharedWorkerDevToolsManagerTest()
|
| + : ui_thread_(BrowserThread::UI, &message_loop_),
|
| + browser_context_(new TestBrowserContext()),
|
| + partition_(
|
| + new WorkerStoragePartition(browser_context_->GetRequestContext(),
|
| + NULL,
|
| + NULL,
|
| + NULL,
|
| + NULL,
|
| + NULL,
|
| + NULL,
|
| + NULL)) {}
|
|
|
| -class SharedWorkerInstanceTest : public testing::Test {
|
| protected:
|
| - SharedWorkerInstanceTest()
|
| - : browser_context_(new TestBrowserContext()),
|
| - partition_(new WorkerStoragePartition(
|
| - browser_context_->GetRequestContext(),
|
| - NULL, NULL, NULL, NULL, NULL, NULL, NULL)) {
|
| + virtual void SetUp() OVERRIDE {
|
| + manager_ = SharedWorkerDevToolsManager::GetInstance();
|
| + }
|
| + virtual void TearDown() OVERRIDE {
|
| + SharedWorkerDevToolsManager::GetInstance()->ResetForTesting();
|
| }
|
|
|
| - bool Matches(const SharedWorkerInstance& instance,
|
| - const std::string& url,
|
| - const base::StringPiece& name) {
|
| - return instance.Matches(GURL(url),
|
| - base::ASCIIToUTF16(name),
|
| - *partition_.get(),
|
| - browser_context_->GetResourceContext());
|
| + void CheckWorkerState(int worker_process_id,
|
| + int worker_route_id,
|
| + SharedWorkerDevToolsManager::WorkerState state) {
|
| + const SharedWorkerDevToolsManager::WorkerId id(worker_process_id,
|
| + worker_route_id);
|
| + SharedWorkerDevToolsManager::WorkerInfoMap::iterator it =
|
| + manager_->workers_.find(id);
|
| + EXPECT_TRUE(manager_->workers_.end() != it);
|
| + EXPECT_EQ(state, it->second->state());
|
| }
|
|
|
| + void CheckWorkerNotExist(int worker_process_id, int worker_route_id) {
|
| + const SharedWorkerDevToolsManager::WorkerId id(worker_process_id,
|
| + worker_route_id);
|
| + EXPECT_TRUE(manager_->workers_.end() == manager_->workers_.find(id));
|
| + }
|
| +
|
| + void CheckWorkerCount(size_t size) {
|
| + EXPECT_EQ(size, manager_->workers_.size());
|
| + }
|
| +
|
| + void RegisterDevToolsClientHostFor(DevToolsAgentHost* agent_host,
|
| + DevToolsClientHost* client_host) {
|
| + DevToolsManagerImpl::GetInstance()->RegisterDevToolsClientHostFor(
|
| + agent_host, client_host);
|
| + }
|
| +
|
| + void ClientHostClosing(DevToolsClientHost* client_host) {
|
| + DevToolsManagerImpl::GetInstance()->ClientHostClosing(client_host);
|
| + }
|
| +
|
| + base::MessageLoopForIO message_loop_;
|
| + BrowserThreadImpl ui_thread_;
|
| scoped_ptr<TestBrowserContext> browser_context_;
|
| scoped_ptr<WorkerStoragePartition> partition_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SharedWorkerInstanceTest);
|
| + SharedWorkerDevToolsManager* manager_;
|
| };
|
|
|
| -TEST_F(SharedWorkerInstanceTest, MatchesTest) {
|
| +TEST_F(SharedWorkerDevToolsManagerTest, BasicTest) {
|
| + scoped_refptr<DevToolsAgentHost> agent_host;
|
| +
|
| SharedWorkerInstance instance1(GURL("http://example.com/w.js"),
|
| base::string16(),
|
| base::string16(),
|
| blink::WebContentSecurityPolicyTypeReport,
|
| browser_context_->GetResourceContext(),
|
| *partition_.get());
|
| - EXPECT_TRUE(Matches(instance1, "http://example.com/w.js", ""));
|
| - EXPECT_FALSE(Matches(instance1, "http://example.com/w2.js", ""));
|
| - EXPECT_FALSE(Matches(instance1, "http://example.net/w.js", ""));
|
| - EXPECT_FALSE(Matches(instance1, "http://example.net/w2.js", ""));
|
| - EXPECT_FALSE(Matches(instance1, "http://example.com/w.js", "name"));
|
| - EXPECT_FALSE(Matches(instance1, "http://example.com/w2.js", "name"));
|
| - EXPECT_FALSE(Matches(instance1, "http://example.net/w.js", "name"));
|
| - EXPECT_FALSE(Matches(instance1, "http://example.net/w2.js", "name"));
|
| -
|
| - SharedWorkerInstance instance2(GURL("http://example.com/w.js"),
|
| - base::ASCIIToUTF16("name"),
|
| +
|
| + agent_host = manager_->GetDevToolsAgentHostForWorker(1, 1);
|
| + EXPECT_FALSE(agent_host.get());
|
| +
|
| + // Created -> Started -> Destroyed
|
| + CheckWorkerNotExist(1, 1);
|
| + manager_->WorkerCreated(1, 1, instance1);
|
| + CheckWorkerState(1, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + manager_->WorkerContextStarted(1, 1);
|
| + CheckWorkerState(1, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + manager_->WorkerDestroyed(1, 1);
|
| + CheckWorkerNotExist(1, 1);
|
| +
|
| + // Created -> GetDevToolsAgentHost -> Started -> Destroyed
|
| + CheckWorkerNotExist(1, 2);
|
| + manager_->WorkerCreated(1, 2, instance1);
|
| + CheckWorkerState(1, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + agent_host = manager_->GetDevToolsAgentHostForWorker(1, 2);
|
| + EXPECT_TRUE(agent_host.get());
|
| + CheckWorkerState(1, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + EXPECT_EQ(agent_host.get(), manager_->GetDevToolsAgentHostForWorker(1, 2));
|
| + manager_->WorkerContextStarted(1, 2);
|
| + CheckWorkerState(1, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + manager_->WorkerDestroyed(1, 2);
|
| + CheckWorkerNotExist(1, 2);
|
| + agent_host = NULL;
|
| +
|
| + // Created -> Started -> GetDevToolsAgentHost -> Destroyed
|
| + CheckWorkerNotExist(1, 3);
|
| + manager_->WorkerCreated(1, 3, instance1);
|
| + CheckWorkerState(1, 3, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + manager_->WorkerContextStarted(1, 3);
|
| + CheckWorkerState(1, 3, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + agent_host = manager_->GetDevToolsAgentHostForWorker(1, 3);
|
| + EXPECT_TRUE(agent_host.get());
|
| + CheckWorkerState(1, 3, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + manager_->WorkerDestroyed(1, 3);
|
| + CheckWorkerNotExist(1, 3);
|
| + agent_host = NULL;
|
| +
|
| + // Created -> Destroyed
|
| + CheckWorkerNotExist(1, 4);
|
| + manager_->WorkerCreated(1, 4, instance1);
|
| + CheckWorkerState(1, 4, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + manager_->WorkerDestroyed(1, 4);
|
| + CheckWorkerNotExist(1, 4);
|
| +
|
| + // Created -> GetDevToolsAgentHost -> Destroyed
|
| + CheckWorkerNotExist(1, 5);
|
| + manager_->WorkerCreated(1, 5, instance1);
|
| + CheckWorkerState(1, 5, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + agent_host = manager_->GetDevToolsAgentHostForWorker(1, 5);
|
| + EXPECT_TRUE(agent_host.get());
|
| + CheckWorkerState(1, 5, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + manager_->WorkerDestroyed(1, 5);
|
| + CheckWorkerNotExist(1, 5);
|
| + agent_host = NULL;
|
| +
|
| + // Created -> GetDevToolsAgentHost -> Free agent_host -> Destroyed
|
| + CheckWorkerNotExist(1, 6);
|
| + manager_->WorkerCreated(1, 6, instance1);
|
| + CheckWorkerState(1, 6, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + agent_host = manager_->GetDevToolsAgentHostForWorker(1, 6);
|
| + EXPECT_TRUE(agent_host.get());
|
| + CheckWorkerState(1, 6, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + agent_host = NULL;
|
| + manager_->WorkerDestroyed(1, 6);
|
| + CheckWorkerNotExist(1, 6);
|
| +}
|
| +
|
| +TEST_F(SharedWorkerDevToolsManagerTest, AttachTest) {
|
| + scoped_refptr<DevToolsAgentHost> agent_host1;
|
| + scoped_refptr<DevToolsAgentHost> agent_host2;
|
| +
|
| + SharedWorkerInstance instance1(GURL("http://example.com/w1.js"),
|
| + base::string16(),
|
| + base::string16(),
|
| + blink::WebContentSecurityPolicyTypeReport,
|
| + browser_context_->GetResourceContext(),
|
| + *partition_.get());
|
| + SharedWorkerInstance instance2(GURL("http://example.com/w2.js"),
|
| + base::string16(),
|
| base::string16(),
|
| blink::WebContentSecurityPolicyTypeReport,
|
| browser_context_->GetResourceContext(),
|
| *partition_.get());
|
| - EXPECT_FALSE(Matches(instance2, "http://example.com/w.js", ""));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.com/w2.js", ""));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.net/w.js", ""));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.net/w2.js", ""));
|
| - EXPECT_TRUE(Matches(instance2, "http://example.com/w.js", "name"));
|
| - EXPECT_TRUE(Matches(instance2, "http://example.com/w2.js", "name"));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.net/w.js", "name"));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.net/w2.js", "name"));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.com/w.js", "name2"));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.com/w2.js", "name2"));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.net/w.js", "name2"));
|
| - EXPECT_FALSE(Matches(instance2, "http://example.net/w2.js", "name2"));
|
| +
|
| + // Created -> GetDevToolsAgentHost -> Register -> Started -> Destroyed
|
| + scoped_ptr<TestDevToolsClientHost> client_host1(new TestDevToolsClientHost());
|
| + CheckWorkerNotExist(2, 1);
|
| + manager_->WorkerCreated(2, 1, instance1);
|
| + CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + agent_host1 = manager_->GetDevToolsAgentHostForWorker(2, 1);
|
| + EXPECT_TRUE(agent_host1.get());
|
| + CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1));
|
| + RegisterDevToolsClientHostFor(agent_host1.get(), client_host1.get());
|
| + CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + manager_->WorkerContextStarted(2, 1);
|
| + CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + manager_->WorkerDestroyed(2, 1);
|
| + CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_TERMINATED);
|
| + EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1));
|
| +
|
| + // Created -> Started -> GetDevToolsAgentHost -> Register -> Destroyed
|
| + scoped_ptr<TestDevToolsClientHost> client_host2(new TestDevToolsClientHost());
|
| + manager_->WorkerCreated(2, 2, instance2);
|
| + CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + manager_->WorkerContextStarted(2, 2);
|
| + CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
|
| + agent_host2 = manager_->GetDevToolsAgentHostForWorker(2, 2);
|
| + EXPECT_TRUE(agent_host2.get());
|
| + EXPECT_NE(agent_host1.get(), agent_host2.get());
|
| + EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2));
|
| + CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + RegisterDevToolsClientHostFor(agent_host2.get(), client_host2.get());
|
| + CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + manager_->WorkerDestroyed(2, 2);
|
| + CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED);
|
| + EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2));
|
| +
|
| + // Re-created -> Started -> ClientHostClosing -> Destroyed
|
| + CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_TERMINATED);
|
| + manager_->WorkerCreated(2, 3, instance1);
|
| + CheckWorkerNotExist(2, 1);
|
| + CheckWorkerState(2, 3, SharedWorkerDevToolsManager::WORKER_PAUSED);
|
| + EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 3));
|
| + manager_->WorkerContextStarted(2, 3);
|
| + CheckWorkerState(2, 3, SharedWorkerDevToolsManager::WORKER_INSPECTED);
|
| + ClientHostClosing(client_host1.get());
|
| + manager_->WorkerDestroyed(2, 3);
|
| + CheckWorkerNotExist(2, 3);
|
| + agent_host1 = NULL;
|
| +
|
| + // Re-created -> Destroyed
|
| + CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED);
|
| + manager_->WorkerCreated(2, 4, instance2);
|
| + CheckWorkerNotExist(2, 2);
|
| + CheckWorkerState(2, 4, SharedWorkerDevToolsManager::WORKER_PAUSED);
|
| + EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 4));
|
| + manager_->WorkerDestroyed(2, 4);
|
| + CheckWorkerNotExist(2, 4);
|
| + CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED);
|
| +
|
| + // Re-created -> ClientHostClosing -> Destroyed
|
| + manager_->WorkerCreated(2, 5, instance2);
|
| + CheckWorkerNotExist(2, 2);
|
| + CheckWorkerState(2, 5, SharedWorkerDevToolsManager::WORKER_PAUSED);
|
| + EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 5));
|
| + ClientHostClosing(client_host2.get());
|
| + CheckWorkerCount(1);
|
| + agent_host2 = NULL;
|
| + CheckWorkerCount(1);
|
| + manager_->WorkerDestroyed(2, 5);
|
| + CheckWorkerCount(0);
|
| }
|
|
|
| } // namespace content
|
|
|