| 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
 | 
| 
 |