summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc
diff options
context:
space:
mode:
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.cc272
1 files changed, 272 insertions, 0 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
new file mode 100644
index 00000000000..69b23052425
--- /dev/null
+++ b/chromium/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc
@@ -0,0 +1,272 @@
+// Copyright 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 "content/browser/devtools/embedded_worker_devtools_manager.h"
+
+#include "base/memory/scoped_ptr.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 EmbeddedWorkerDevToolsManagerTest : public testing::Test {
+ public:
+ EmbeddedWorkerDevToolsManagerTest()
+ : ui_thread_(BrowserThread::UI, &message_loop_),
+ browser_context_(new TestBrowserContext()),
+ partition_(
+ new WorkerStoragePartition(browser_context_->GetRequestContext(),
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL)),
+ partition_id_(*partition_.get()) {}
+
+ protected:
+ virtual void SetUp() OVERRIDE {
+ manager_ = EmbeddedWorkerDevToolsManager::GetInstance();
+ }
+ virtual void TearDown() OVERRIDE {
+ EmbeddedWorkerDevToolsManager::GetInstance()->ResetForTesting();
+ }
+
+ void CheckWorkerState(int worker_process_id,
+ int worker_route_id,
+ EmbeddedWorkerDevToolsManager::WorkerState state) {
+ const EmbeddedWorkerDevToolsManager::WorkerId id(worker_process_id,
+ worker_route_id);
+ EmbeddedWorkerDevToolsManager::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 EmbeddedWorkerDevToolsManager::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_;
+ const WorkerStoragePartitionId partition_id_;
+ EmbeddedWorkerDevToolsManager* manager_;
+};
+
+TEST_F(EmbeddedWorkerDevToolsManagerTest, BasicTest) {
+ scoped_refptr<DevToolsAgentHost> agent_host;
+
+ SharedWorkerInstance instance1(GURL("http://example.com/w.js"),
+ base::string16(),
+ base::string16(),
+ blink::WebContentSecurityPolicyTypeReport,
+ browser_context_->GetResourceContext(),
+ partition_id_);
+
+ agent_host = manager_->GetDevToolsAgentHostForWorker(1, 1);
+ EXPECT_FALSE(agent_host.get());
+
+ // 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);
+ 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);
+ agent_host = manager_->GetDevToolsAgentHostForWorker(1, 2);
+ EXPECT_TRUE(agent_host.get());
+ CheckWorkerState(1, 2, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED);
+ EXPECT_EQ(agent_host.get(), manager_->GetDevToolsAgentHostForWorker(1, 2));
+ manager_->WorkerContextStarted(1, 2);
+ CheckWorkerState(1, 2, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED);
+ manager_->WorkerDestroyed(1, 2);
+ CheckWorkerState(1, 2, EmbeddedWorkerDevToolsManager::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);
+ agent_host = manager_->GetDevToolsAgentHostForWorker(1, 3);
+ EXPECT_TRUE(agent_host.get());
+ CheckWorkerState(1, 3, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED);
+ manager_->WorkerDestroyed(1, 3);
+ CheckWorkerState(1, 3, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED);
+ agent_host = NULL;
+ CheckWorkerNotExist(1, 3);
+
+ // Created -> Destroyed
+ CheckWorkerNotExist(1, 4);
+ manager_->SharedWorkerCreated(1, 4, instance1);
+ CheckWorkerState(1, 4, EmbeddedWorkerDevToolsManager::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);
+ agent_host = manager_->GetDevToolsAgentHostForWorker(1, 5);
+ EXPECT_TRUE(agent_host.get());
+ CheckWorkerState(1, 5, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED);
+ manager_->WorkerDestroyed(1, 5);
+ CheckWorkerState(1, 5, EmbeddedWorkerDevToolsManager::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);
+ agent_host = manager_->GetDevToolsAgentHostForWorker(1, 6);
+ EXPECT_TRUE(agent_host.get());
+ CheckWorkerState(1, 6, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED);
+ agent_host = NULL;
+ manager_->WorkerDestroyed(1, 6);
+ CheckWorkerNotExist(1, 6);
+}
+
+TEST_F(EmbeddedWorkerDevToolsManagerTest, 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_id_);
+ SharedWorkerInstance instance2(GURL("http://example.com/w2.js"),
+ base::string16(),
+ base::string16(),
+ blink::WebContentSecurityPolicyTypeReport,
+ browser_context_->GetResourceContext(),
+ partition_id_);
+
+ // Created -> GetDevToolsAgentHost -> Register -> Started -> Destroyed
+ scoped_ptr<TestDevToolsClientHost> client_host1(new TestDevToolsClientHost());
+ CheckWorkerNotExist(2, 1);
+ manager_->SharedWorkerCreated(2, 1, instance1);
+ CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_UNINSPECTED);
+ agent_host1 = manager_->GetDevToolsAgentHostForWorker(2, 1);
+ EXPECT_TRUE(agent_host1.get());
+ CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED);
+ 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);
+ manager_->WorkerDestroyed(2, 1);
+ CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::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);
+ 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);
+ manager_->WorkerDestroyed(2, 2);
+ CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED);
+ EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2));
+
+ // Re-created -> Started -> ClientHostClosing -> Destroyed
+ CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED);
+ manager_->SharedWorkerCreated(2, 3, instance1);
+ CheckWorkerNotExist(2, 1);
+ CheckWorkerState(
+ 2, 3, EmbeddedWorkerDevToolsManager::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_->WorkerDestroyed(2, 3);
+ CheckWorkerState(2, 3, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED);
+ agent_host1 = NULL;
+ CheckWorkerNotExist(2, 3);
+
+ // Re-created -> Destroyed
+ CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED);
+ manager_->SharedWorkerCreated(2, 4, instance2);
+ CheckWorkerNotExist(2, 2);
+ CheckWorkerState(
+ 2, 4, EmbeddedWorkerDevToolsManager::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);
+
+ // Re-created -> ClientHostClosing -> Destroyed
+ manager_->SharedWorkerCreated(2, 5, instance2);
+ CheckWorkerNotExist(2, 2);
+ CheckWorkerState(
+ 2, 5, EmbeddedWorkerDevToolsManager::WORKER_PAUSED_FOR_REATTACH);
+ 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