diff options
Diffstat (limited to 'chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc')
-rw-r--r-- | chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc | 178 |
1 files changed, 102 insertions, 76 deletions
diff --git a/chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc b/chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc index 69b23052425..35a0b301ac2 100644 --- a/chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc +++ b/chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc @@ -8,33 +8,41 @@ #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/devtools/devtools_agent_host_impl.h" +#include "content/browser/devtools/embedded_worker_devtools_agent_host.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/browser/shared_worker/worker_storage_partition.h" #include "content/public/test/test_browser_context.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { namespace { -class TestDevToolsClientHost : public DevToolsClientHost { +class TestDevToolsClientHost : public DevToolsAgentHostClient { public: TestDevToolsClientHost() {} - virtual ~TestDevToolsClientHost() {} - virtual void DispatchOnInspectorFrontend( - const std::string& message) OVERRIDE {} - virtual void InspectedContentsClosing() OVERRIDE {} - virtual void ReplacedWithAnotherClient() OVERRIDE {} + ~TestDevToolsClientHost() override {} + void DispatchProtocolMessage(DevToolsAgentHost* agent_host, + const std::string& message) override {} + void AgentHostClosed(DevToolsAgentHost* agent_host, bool replaced) override {} + void InspectAgentHost(DevToolsAgentHost* agent_host) { + if (agent_host_.get()) + agent_host_->DetachClient(); + agent_host_ = agent_host; + if (agent_host_.get()) + agent_host_->AttachClient(this); + } private: + scoped_refptr<DevToolsAgentHost> agent_host_; DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost); }; } class EmbeddedWorkerDevToolsManagerTest : public testing::Test { public: + typedef EmbeddedWorkerDevToolsAgentHost::WorkerState WorkerState; + EmbeddedWorkerDevToolsManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_), browser_context_(new TestBrowserContext()), @@ -50,22 +58,22 @@ class EmbeddedWorkerDevToolsManagerTest : public testing::Test { partition_id_(*partition_.get()) {} protected: - virtual void SetUp() OVERRIDE { + void SetUp() override { manager_ = EmbeddedWorkerDevToolsManager::GetInstance(); } - virtual void TearDown() OVERRIDE { + void TearDown() override { EmbeddedWorkerDevToolsManager::GetInstance()->ResetForTesting(); } void CheckWorkerState(int worker_process_id, int worker_route_id, - EmbeddedWorkerDevToolsManager::WorkerState state) { + WorkerState state) { const EmbeddedWorkerDevToolsManager::WorkerId id(worker_process_id, worker_route_id); - EmbeddedWorkerDevToolsManager::WorkerInfoMap::iterator it = + EmbeddedWorkerDevToolsManager::AgentHostMap::iterator it = manager_->workers_.find(id); EXPECT_TRUE(manager_->workers_.end() != it); - EXPECT_EQ(state, it->second->state()); + EXPECT_EQ(state, it->second->state_); } void CheckWorkerNotExist(int worker_process_id, int worker_route_id) { @@ -78,16 +86,6 @@ class EmbeddedWorkerDevToolsManagerTest : public testing::Test { 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_; @@ -97,7 +95,7 @@ class EmbeddedWorkerDevToolsManagerTest : public testing::Test { }; TEST_F(EmbeddedWorkerDevToolsManagerTest, BasicTest) { - scoped_refptr<DevToolsAgentHost> agent_host; + scoped_refptr<DevToolsAgentHostImpl> agent_host; SharedWorkerInstance instance1(GURL("http://example.com/w.js"), base::string16(), @@ -112,75 +110,75 @@ TEST_F(EmbeddedWorkerDevToolsManagerTest, BasicTest) { // Created -> Started -> Destroyed CheckWorkerNotExist(1, 1); manager_->SharedWorkerCreated(1, 1, instance1); - CheckWorkerState(1, 1, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); - manager_->WorkerContextStarted(1, 1); - CheckWorkerState(1, 1, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(1, 1, WorkerState::WORKER_UNINSPECTED); + manager_->WorkerReadyForInspection(1, 1); + CheckWorkerState(1, 1, WorkerState::WORKER_UNINSPECTED); manager_->WorkerDestroyed(1, 1); CheckWorkerNotExist(1, 1); // Created -> GetDevToolsAgentHost -> Started -> Destroyed CheckWorkerNotExist(1, 2); manager_->SharedWorkerCreated(1, 2, instance1); - CheckWorkerState(1, 2, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(1, 2, WorkerState::WORKER_UNINSPECTED); agent_host = manager_->GetDevToolsAgentHostForWorker(1, 2); EXPECT_TRUE(agent_host.get()); - CheckWorkerState(1, 2, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + CheckWorkerState(1, 2, WorkerState::WORKER_UNINSPECTED); EXPECT_EQ(agent_host.get(), manager_->GetDevToolsAgentHostForWorker(1, 2)); - manager_->WorkerContextStarted(1, 2); - CheckWorkerState(1, 2, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + manager_->WorkerReadyForInspection(1, 2); + CheckWorkerState(1, 2, WorkerState::WORKER_UNINSPECTED); manager_->WorkerDestroyed(1, 2); - CheckWorkerState(1, 2, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(1, 2, WorkerState::WORKER_TERMINATED); agent_host = NULL; CheckWorkerNotExist(1, 2); // Created -> Started -> GetDevToolsAgentHost -> Destroyed CheckWorkerNotExist(1, 3); manager_->SharedWorkerCreated(1, 3, instance1); - CheckWorkerState(1, 3, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); - manager_->WorkerContextStarted(1, 3); - CheckWorkerState(1, 3, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(1, 3, WorkerState::WORKER_UNINSPECTED); + manager_->WorkerReadyForInspection(1, 3); + CheckWorkerState(1, 3, WorkerState::WORKER_UNINSPECTED); agent_host = manager_->GetDevToolsAgentHostForWorker(1, 3); EXPECT_TRUE(agent_host.get()); - CheckWorkerState(1, 3, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + CheckWorkerState(1, 3, WorkerState::WORKER_UNINSPECTED); manager_->WorkerDestroyed(1, 3); - CheckWorkerState(1, 3, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(1, 3, WorkerState::WORKER_TERMINATED); agent_host = NULL; CheckWorkerNotExist(1, 3); // Created -> Destroyed CheckWorkerNotExist(1, 4); manager_->SharedWorkerCreated(1, 4, instance1); - CheckWorkerState(1, 4, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(1, 4, WorkerState::WORKER_UNINSPECTED); manager_->WorkerDestroyed(1, 4); CheckWorkerNotExist(1, 4); // Created -> GetDevToolsAgentHost -> Destroyed CheckWorkerNotExist(1, 5); manager_->SharedWorkerCreated(1, 5, instance1); - CheckWorkerState(1, 5, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(1, 5, WorkerState::WORKER_UNINSPECTED); agent_host = manager_->GetDevToolsAgentHostForWorker(1, 5); EXPECT_TRUE(agent_host.get()); - CheckWorkerState(1, 5, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + CheckWorkerState(1, 5, WorkerState::WORKER_UNINSPECTED); manager_->WorkerDestroyed(1, 5); - CheckWorkerState(1, 5, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(1, 5, WorkerState::WORKER_TERMINATED); agent_host = NULL; CheckWorkerNotExist(1, 5); // Created -> GetDevToolsAgentHost -> Free agent_host -> Destroyed CheckWorkerNotExist(1, 6); manager_->SharedWorkerCreated(1, 6, instance1); - CheckWorkerState(1, 6, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(1, 6, WorkerState::WORKER_UNINSPECTED); agent_host = manager_->GetDevToolsAgentHostForWorker(1, 6); EXPECT_TRUE(agent_host.get()); - CheckWorkerState(1, 6, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + CheckWorkerState(1, 6, WorkerState::WORKER_UNINSPECTED); agent_host = NULL; manager_->WorkerDestroyed(1, 6); CheckWorkerNotExist(1, 6); } TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) { - scoped_refptr<DevToolsAgentHost> agent_host1; - scoped_refptr<DevToolsAgentHost> agent_host2; + scoped_refptr<DevToolsAgentHostImpl> agent_host1; + scoped_refptr<DevToolsAgentHostImpl> agent_host2; SharedWorkerInstance instance1(GURL("http://example.com/w1.js"), base::string16(), @@ -199,69 +197,66 @@ TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) { scoped_ptr<TestDevToolsClientHost> client_host1(new TestDevToolsClientHost()); CheckWorkerNotExist(2, 1); manager_->SharedWorkerCreated(2, 1, instance1); - CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(2, 1, WorkerState::WORKER_UNINSPECTED); agent_host1 = manager_->GetDevToolsAgentHostForWorker(2, 1); EXPECT_TRUE(agent_host1.get()); - CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + CheckWorkerState(2, 1, WorkerState::WORKER_UNINSPECTED); EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1)); - RegisterDevToolsClientHostFor(agent_host1.get(), client_host1.get()); - CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); - manager_->WorkerContextStarted(2, 1); - CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + client_host1->InspectAgentHost(agent_host1.get()); + CheckWorkerState(2, 1, WorkerState::WORKER_INSPECTED); + manager_->WorkerReadyForInspection(2, 1); + CheckWorkerState(2, 1, WorkerState::WORKER_INSPECTED); manager_->WorkerDestroyed(2, 1); - CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(2, 1, WorkerState::WORKER_TERMINATED); EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1)); // Created -> Started -> GetDevToolsAgentHost -> Register -> Destroyed scoped_ptr<TestDevToolsClientHost> client_host2(new TestDevToolsClientHost()); manager_->SharedWorkerCreated(2, 2, instance2); - CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); - manager_->WorkerContextStarted(2, 2); - CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED); + CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED); + manager_->WorkerReadyForInspection(2, 2); + CheckWorkerState(2, 2, WorkerState::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, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); - RegisterDevToolsClientHostFor(agent_host2.get(), client_host2.get()); - CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); + CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED); + client_host2->InspectAgentHost(agent_host2.get()); + CheckWorkerState(2, 2, WorkerState::WORKER_INSPECTED); manager_->WorkerDestroyed(2, 2); - CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(2, 2, WorkerState::WORKER_TERMINATED); EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2)); // Re-created -> Started -> ClientHostClosing -> Destroyed - CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(2, 1, WorkerState::WORKER_TERMINATED); manager_->SharedWorkerCreated(2, 3, instance1); CheckWorkerNotExist(2, 1); - CheckWorkerState( - 2, 3, EmbeddedWorkerDevToolsManager::WORKER_PAUSED_FOR_REATTACH); + CheckWorkerState(2, 3, WorkerState::WORKER_PAUSED_FOR_REATTACH); EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 3)); - manager_->WorkerContextStarted(2, 3); - CheckWorkerState(2, 3, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED); - ClientHostClosing(client_host1.get()); + manager_->WorkerReadyForInspection(2, 3); + CheckWorkerState(2, 3, WorkerState::WORKER_INSPECTED); + client_host1->InspectAgentHost(NULL); manager_->WorkerDestroyed(2, 3); - CheckWorkerState(2, 3, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(2, 3, WorkerState::WORKER_TERMINATED); agent_host1 = NULL; CheckWorkerNotExist(2, 3); // Re-created -> Destroyed - CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerState(2, 2, WorkerState::WORKER_TERMINATED); manager_->SharedWorkerCreated(2, 4, instance2); CheckWorkerNotExist(2, 2); - CheckWorkerState( - 2, 4, EmbeddedWorkerDevToolsManager::WORKER_PAUSED_FOR_REATTACH); + CheckWorkerState(2, 4, WorkerState::WORKER_PAUSED_FOR_REATTACH); EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 4)); manager_->WorkerDestroyed(2, 4); - CheckWorkerNotExist(2, 4); - CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED); + CheckWorkerNotExist(2, 2); + CheckWorkerState(2, 4, WorkerState::WORKER_TERMINATED); // Re-created -> ClientHostClosing -> Destroyed manager_->SharedWorkerCreated(2, 5, instance2); CheckWorkerNotExist(2, 2); - CheckWorkerState( - 2, 5, EmbeddedWorkerDevToolsManager::WORKER_PAUSED_FOR_REATTACH); + CheckWorkerState(2, 5, WorkerState::WORKER_PAUSED_FOR_REATTACH); EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 5)); - ClientHostClosing(client_host2.get()); + client_host2->InspectAgentHost(NULL); CheckWorkerCount(1); agent_host2 = NULL; CheckWorkerCount(1); @@ -269,4 +264,35 @@ TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) { CheckWorkerCount(0); } +TEST_F(EmbeddedWorkerDevToolsManagerTest, ReattachTest) { + SharedWorkerInstance instance(GURL("http://example.com/w3.js"), + base::string16(), + base::string16(), + blink::WebContentSecurityPolicyTypeReport, + browser_context_->GetResourceContext(), + partition_id_); + scoped_ptr<TestDevToolsClientHost> client_host(new TestDevToolsClientHost()); + // Created -> GetDevToolsAgentHost -> Register -> Destroyed + manager_->SharedWorkerCreated(3, 1, instance); + CheckWorkerState(3, 1, WorkerState::WORKER_UNINSPECTED); + scoped_refptr<DevToolsAgentHost> agent_host( + manager_->GetDevToolsAgentHostForWorker(3, 1)); + EXPECT_TRUE(agent_host.get()); + CheckWorkerState(3, 1, WorkerState::WORKER_UNINSPECTED); + client_host->InspectAgentHost(agent_host.get()); + CheckWorkerState(3, 1, WorkerState::WORKER_INSPECTED); + manager_->WorkerDestroyed(3, 1); + CheckWorkerState(3, 1, WorkerState::WORKER_TERMINATED); + // ClientHostClosing -> Re-created -> release agent_host -> Destroyed + client_host->InspectAgentHost(NULL); + CheckWorkerState(3, 1, WorkerState::WORKER_TERMINATED); + manager_->SharedWorkerCreated(3, 2, instance); + CheckWorkerState(3, 2, WorkerState::WORKER_UNINSPECTED); + agent_host = NULL; + CheckWorkerState(3, 2, WorkerState::WORKER_UNINSPECTED); + manager_->WorkerDestroyed(3, 2); + CheckWorkerNotExist(3, 2); + CheckWorkerCount(0); +} + } // namespace content |