Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(694)

Side by Side Diff: content/browser/devtools/shared_worker_devtools_manager_unittest.cc

Issue 196503005: Make DevTools support for the embedded SharedWorker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: introduce WorkerState enum and add test Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "content/browser/devtools/shared_worker_devtools_manager.h"
6
6 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
7 #include "base/strings/string16.h" 8 #include "base/message_loop/message_loop.h"
8 #include "base/strings/utf_string_conversions.h" 9 #include "base/run_loop.h"
10 #include "content/browser/browser_thread_impl.h"
11 #include "content/browser/devtools/devtools_manager_impl.h"
9 #include "content/browser/shared_worker/shared_worker_instance.h" 12 #include "content/browser/shared_worker/shared_worker_instance.h"
10 #include "content/browser/worker_host/worker_storage_partition.h" 13 #include "content/browser/worker_host/worker_storage_partition.h"
14 #include "content/public/browser/devtools_agent_host.h"
15 #include "content/public/browser/devtools_client_host.h"
11 #include "content/public/test/test_browser_context.h" 16 #include "content/public/test/test_browser_context.h"
12 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
13 18
14 namespace content { 19 namespace content {
15 20 namespace {
16 class SharedWorkerInstanceTest : public testing::Test { 21
22 class TestDevToolsClientHost : public DevToolsClientHost {
23 public:
24 TestDevToolsClientHost() {}
25 virtual ~TestDevToolsClientHost() {}
26 virtual void DispatchOnInspectorFrontend(const std::string& message)
27 OVERRIDE {}
28 virtual void InspectedContentsClosing() OVERRIDE {}
29 virtual void ReplacedWithAnotherClient() OVERRIDE {}
30
31 private:
32 DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost);
33 };
34 }
35
36 class SharedWorkerDevToolsManagerTest : public testing::Test {
37 public:
38 SharedWorkerDevToolsManagerTest()
39 : ui_thread_(BrowserThread::UI, &message_loop_),
40 browser_context_(new TestBrowserContext()),
41 partition_(
42 new WorkerStoragePartition(browser_context_->GetRequestContext(),
43 NULL,
44 NULL,
45 NULL,
46 NULL,
47 NULL,
48 NULL,
49 NULL)) {}
50
17 protected: 51 protected:
18 SharedWorkerInstanceTest() 52 virtual void SetUp() OVERRIDE {
19 : browser_context_(new TestBrowserContext()), 53 manager_ = SharedWorkerDevToolsManager::GetInstance();
20 partition_(new WorkerStoragePartition( 54 }
21 browser_context_->GetRequestContext(), 55 virtual void TearDown() OVERRIDE {
22 NULL, NULL, NULL, NULL, NULL, NULL, NULL)) { 56 SharedWorkerDevToolsManager::GetInstance()->ResetForTesting();
23 } 57 }
24 58
25 bool Matches(const SharedWorkerInstance& instance, 59 void CheckWorkerState(int worker_process_id,
26 const std::string& url, 60 int worker_route_id,
27 const base::StringPiece& name) { 61 SharedWorkerDevToolsManager::WorkerState state) {
28 return instance.Matches(GURL(url), 62 const SharedWorkerDevToolsManager::WorkerId id(worker_process_id,
29 base::ASCIIToUTF16(name), 63 worker_route_id);
30 *partition_.get(), 64 SharedWorkerDevToolsManager::WorkerInfoMap::iterator it =
31 browser_context_->GetResourceContext()); 65 manager_->workers_.find(id);
32 } 66 EXPECT_TRUE(manager_->workers_.end() != it);
33 67 EXPECT_EQ(state, it->second->state());
68 }
69
70 void CheckWorkerNotExist(int worker_process_id, int worker_route_id) {
71 const SharedWorkerDevToolsManager::WorkerId id(worker_process_id,
72 worker_route_id);
73 EXPECT_TRUE(manager_->workers_.end() == manager_->workers_.find(id));
74 }
75
76 void CheckWorkerCount(size_t size) {
77 EXPECT_EQ(size, manager_->workers_.size());
78 }
79
80 void RegisterDevToolsClientHostFor(DevToolsAgentHost* agent_host,
81 DevToolsClientHost* client_host) {
82 DevToolsManagerImpl::GetInstance()->RegisterDevToolsClientHostFor(
83 agent_host, client_host);
84 }
85
86 void ClientHostClosing(DevToolsClientHost* client_host) {
87 DevToolsManagerImpl::GetInstance()->ClientHostClosing(client_host);
88 }
89
90 base::MessageLoopForIO message_loop_;
91 BrowserThreadImpl ui_thread_;
34 scoped_ptr<TestBrowserContext> browser_context_; 92 scoped_ptr<TestBrowserContext> browser_context_;
35 scoped_ptr<WorkerStoragePartition> partition_; 93 scoped_ptr<WorkerStoragePartition> partition_;
36 94 SharedWorkerDevToolsManager* manager_;
37 DISALLOW_COPY_AND_ASSIGN(SharedWorkerInstanceTest);
38 }; 95 };
39 96
40 TEST_F(SharedWorkerInstanceTest, MatchesTest) { 97 TEST_F(SharedWorkerDevToolsManagerTest, BasicTest) {
98 scoped_refptr<DevToolsAgentHost> agent_host;
99
41 SharedWorkerInstance instance1(GURL("http://example.com/w.js"), 100 SharedWorkerInstance instance1(GURL("http://example.com/w.js"),
42 base::string16(), 101 base::string16(),
43 base::string16(), 102 base::string16(),
44 blink::WebContentSecurityPolicyTypeReport, 103 blink::WebContentSecurityPolicyTypeReport,
45 browser_context_->GetResourceContext(), 104 browser_context_->GetResourceContext(),
46 *partition_.get()); 105 *partition_.get());
47 EXPECT_TRUE(Matches(instance1, "http://example.com/w.js", "")); 106
48 EXPECT_FALSE(Matches(instance1, "http://example.com/w2.js", "")); 107 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 1);
49 EXPECT_FALSE(Matches(instance1, "http://example.net/w.js", "")); 108 EXPECT_FALSE(agent_host.get());
50 EXPECT_FALSE(Matches(instance1, "http://example.net/w2.js", "")); 109
51 EXPECT_FALSE(Matches(instance1, "http://example.com/w.js", "name")); 110 // Created -> Started -> Destroyed
52 EXPECT_FALSE(Matches(instance1, "http://example.com/w2.js", "name")); 111 CheckWorkerNotExist(1, 1);
53 EXPECT_FALSE(Matches(instance1, "http://example.net/w.js", "name")); 112 manager_->WorkerCreated(1, 1, instance1);
54 EXPECT_FALSE(Matches(instance1, "http://example.net/w2.js", "name")); 113 CheckWorkerState(1, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
55 114 manager_->WorkerContextStarted(1, 1);
56 SharedWorkerInstance instance2(GURL("http://example.com/w.js"), 115 CheckWorkerState(1, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
57 base::ASCIIToUTF16("name"), 116 manager_->WorkerDestroyed(1, 1);
117 CheckWorkerNotExist(1, 1);
118
119 // Created -> GetDevToolsAgentHost -> Started -> Destroyed
120 CheckWorkerNotExist(1, 2);
121 manager_->WorkerCreated(1, 2, instance1);
122 CheckWorkerState(1, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
123 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 2);
124 EXPECT_TRUE(agent_host.get());
125 CheckWorkerState(1, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
126 EXPECT_EQ(agent_host.get(), manager_->GetDevToolsAgentHostForWorker(1, 2));
127 manager_->WorkerContextStarted(1, 2);
128 CheckWorkerState(1, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
129 manager_->WorkerDestroyed(1, 2);
130 CheckWorkerNotExist(1, 2);
131 agent_host = NULL;
132
133 // Created -> Started -> GetDevToolsAgentHost -> Destroyed
134 CheckWorkerNotExist(1, 3);
135 manager_->WorkerCreated(1, 3, instance1);
136 CheckWorkerState(1, 3, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
137 manager_->WorkerContextStarted(1, 3);
138 CheckWorkerState(1, 3, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
139 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 3);
140 EXPECT_TRUE(agent_host.get());
141 CheckWorkerState(1, 3, SharedWorkerDevToolsManager::WORKER_INSPECTED);
142 manager_->WorkerDestroyed(1, 3);
143 CheckWorkerNotExist(1, 3);
144 agent_host = NULL;
145
146 // Created -> Destroyed
147 CheckWorkerNotExist(1, 4);
148 manager_->WorkerCreated(1, 4, instance1);
149 CheckWorkerState(1, 4, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
150 manager_->WorkerDestroyed(1, 4);
151 CheckWorkerNotExist(1, 4);
152
153 // Created -> GetDevToolsAgentHost -> Destroyed
154 CheckWorkerNotExist(1, 5);
155 manager_->WorkerCreated(1, 5, instance1);
156 CheckWorkerState(1, 5, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
157 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 5);
158 EXPECT_TRUE(agent_host.get());
159 CheckWorkerState(1, 5, SharedWorkerDevToolsManager::WORKER_INSPECTED);
160 manager_->WorkerDestroyed(1, 5);
161 CheckWorkerNotExist(1, 5);
162 agent_host = NULL;
163 }
164
165 TEST_F(SharedWorkerDevToolsManagerTest, AttachTest) {
166 scoped_refptr<DevToolsAgentHost> agent_host1;
167 scoped_refptr<DevToolsAgentHost> agent_host2;
168
169 SharedWorkerInstance instance1(GURL("http://example.com/w1.js"),
170 base::string16(),
58 base::string16(), 171 base::string16(),
59 blink::WebContentSecurityPolicyTypeReport, 172 blink::WebContentSecurityPolicyTypeReport,
60 browser_context_->GetResourceContext(), 173 browser_context_->GetResourceContext(),
61 *partition_.get()); 174 *partition_.get());
62 EXPECT_FALSE(Matches(instance2, "http://example.com/w.js", "")); 175 SharedWorkerInstance instance2(GURL("http://example.com/w2.js"),
63 EXPECT_FALSE(Matches(instance2, "http://example.com/w2.js", "")); 176 base::string16(),
64 EXPECT_FALSE(Matches(instance2, "http://example.net/w.js", "")); 177 base::string16(),
65 EXPECT_FALSE(Matches(instance2, "http://example.net/w2.js", "")); 178 blink::WebContentSecurityPolicyTypeReport,
66 EXPECT_TRUE(Matches(instance2, "http://example.com/w.js", "name")); 179 browser_context_->GetResourceContext(),
67 EXPECT_TRUE(Matches(instance2, "http://example.com/w2.js", "name")); 180 *partition_.get());
68 EXPECT_FALSE(Matches(instance2, "http://example.net/w.js", "name")); 181
69 EXPECT_FALSE(Matches(instance2, "http://example.net/w2.js", "name")); 182 // Created -> GetDevToolsAgentHost -> Register -> Started -> Destroyed
70 EXPECT_FALSE(Matches(instance2, "http://example.com/w.js", "name2")); 183 scoped_ptr<TestDevToolsClientHost> client_host1(new TestDevToolsClientHost());
71 EXPECT_FALSE(Matches(instance2, "http://example.com/w2.js", "name2")); 184 CheckWorkerNotExist(2, 1);
72 EXPECT_FALSE(Matches(instance2, "http://example.net/w.js", "name2")); 185 manager_->WorkerCreated(2, 1, instance1);
73 EXPECT_FALSE(Matches(instance2, "http://example.net/w2.js", "name2")); 186 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
187 agent_host1 = manager_->GetDevToolsAgentHostForWorker(2, 1);
188 EXPECT_TRUE(agent_host1.get());
189 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED);
190 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1));
191 RegisterDevToolsClientHostFor(agent_host1.get(), client_host1.get());
192 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED);
193 manager_->WorkerContextStarted(2, 1);
194 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED);
195 manager_->WorkerDestroyed(2, 1);
196 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_TERMINATED);
197 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1));
198
199 // Created -> Started -> GetDevToolsAgentHost -> Register -> Destroyed
200 scoped_ptr<TestDevToolsClientHost> client_host2(new TestDevToolsClientHost());
201 manager_->WorkerCreated(2, 2, instance2);
202 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
203 manager_->WorkerContextStarted(2, 2);
204 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED);
205 agent_host2 = manager_->GetDevToolsAgentHostForWorker(2, 2);
206 EXPECT_TRUE(agent_host2.get());
207 EXPECT_NE(agent_host1.get(), agent_host2.get());
208 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2));
209 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
210 RegisterDevToolsClientHostFor(agent_host2.get(), client_host2.get());
211 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED);
212 manager_->WorkerDestroyed(2, 2);
213 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED);
214 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2));
215
216 // Re-created -> Started -> ClientHostClosing -> Destroyed
217 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_TERMINATED);
218 manager_->WorkerCreated(2, 3, instance1);
219 CheckWorkerNotExist(2, 1);
220 CheckWorkerState(2, 3, SharedWorkerDevToolsManager::WORKER_PAUSED);
221 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 3));
222 manager_->WorkerContextStarted(2, 3);
223 CheckWorkerState(2, 3, SharedWorkerDevToolsManager::WORKER_INSPECTED);
224 ClientHostClosing(client_host1.get());
225 manager_->WorkerDestroyed(2, 3);
226 CheckWorkerNotExist(2, 3);
227 agent_host1 = NULL;
228
229 // Re-created -> Destroyed
230 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED);
231 manager_->WorkerCreated(2, 4, instance2);
232 CheckWorkerNotExist(2, 2);
233 CheckWorkerState(2, 4, SharedWorkerDevToolsManager::WORKER_PAUSED);
234 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 4));
235 manager_->WorkerDestroyed(2, 4);
236 CheckWorkerNotExist(2, 4);
237 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED);
238
239 // Re-created -> ClientHostClosing -> Destroyed
240 manager_->WorkerCreated(2, 5, instance2);
241 CheckWorkerNotExist(2, 2);
242 CheckWorkerState(2, 5, SharedWorkerDevToolsManager::WORKER_PAUSED);
243 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 5));
244 ClientHostClosing(client_host2.get());
245 CheckWorkerCount(1);
246 agent_host2 = NULL;
247 CheckWorkerCount(1);
248 manager_->WorkerDestroyed(2, 5);
249 CheckWorkerCount(0);
74 } 250 }
75 251
76 } // namespace content 252 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698