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

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

Issue 449043002: [DevTools] Make DevTools clients talk directly to DevToolsAgentHost instead of using DevToolsManage… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed DetachAllClients Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 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 "content/browser/devtools/embedded_worker_devtools_manager.h" 5 #include "content/browser/devtools/embedded_worker_devtools_manager.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "content/browser/browser_thread_impl.h" 10 #include "content/browser/browser_thread_impl.h"
11 #include "content/browser/devtools/devtools_manager_impl.h" 11 #include "content/browser/devtools/devtools_agent_host_impl.h"
12 #include "content/browser/devtools/embedded_worker_devtools_agent_host.h" 12 #include "content/browser/devtools/embedded_worker_devtools_agent_host.h"
13 #include "content/browser/shared_worker/shared_worker_instance.h" 13 #include "content/browser/shared_worker/shared_worker_instance.h"
14 #include "content/browser/shared_worker/worker_storage_partition.h" 14 #include "content/browser/shared_worker/worker_storage_partition.h"
15 #include "content/public/browser/devtools_agent_host.h"
16 #include "content/public/browser/devtools_client_host.h"
17 #include "content/public/test/test_browser_context.h" 15 #include "content/public/test/test_browser_context.h"
18 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
19 17
20 namespace content { 18 namespace content {
21 namespace { 19 namespace {
22 20
23 class TestDevToolsClientHost : public DevToolsClientHost { 21 class TestDevToolsClientHost : public DevToolsAgentHostClient {
24 public: 22 public:
25 TestDevToolsClientHost() {} 23 TestDevToolsClientHost() {}
26 virtual ~TestDevToolsClientHost() {} 24 virtual ~TestDevToolsClientHost() {}
27 virtual void DispatchOnInspectorFrontend( 25 virtual void DispatchProtocolMessage(
28 const std::string& message) OVERRIDE {} 26 DevToolsAgentHost* agent_host, const std::string& message) OVERRIDE {}
29 virtual void InspectedContentsClosing() OVERRIDE {} 27 virtual void AgentHostClosed(
30 virtual void ReplacedWithAnotherClient() OVERRIDE {} 28 DevToolsAgentHost* agent_host, bool replaced) OVERRIDE {}
31 29
30 void InspectAgentHost(DevToolsAgentHost* agent_host) {
31 if (agent_host_)
32 agent_host_->DetachClient();
33 agent_host_ = agent_host;
34 if (agent_host_)
35 agent_host_->AttachClient(this);
36 }
32 private: 37 private:
38 scoped_refptr<DevToolsAgentHost> agent_host_;
33 DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost); 39 DISALLOW_COPY_AND_ASSIGN(TestDevToolsClientHost);
34 }; 40 };
35 } 41 }
36 42
37 class EmbeddedWorkerDevToolsManagerTest : public testing::Test { 43 class EmbeddedWorkerDevToolsManagerTest : public testing::Test {
38 public: 44 public:
39 typedef EmbeddedWorkerDevToolsAgentHost::WorkerState WorkerState; 45 typedef EmbeddedWorkerDevToolsAgentHost::WorkerState WorkerState;
40 46
41 EmbeddedWorkerDevToolsManagerTest() 47 EmbeddedWorkerDevToolsManagerTest()
42 : ui_thread_(BrowserThread::UI, &message_loop_), 48 : ui_thread_(BrowserThread::UI, &message_loop_),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 void CheckWorkerNotExist(int worker_process_id, int worker_route_id) { 80 void CheckWorkerNotExist(int worker_process_id, int worker_route_id) {
75 const EmbeddedWorkerDevToolsManager::WorkerId id(worker_process_id, 81 const EmbeddedWorkerDevToolsManager::WorkerId id(worker_process_id,
76 worker_route_id); 82 worker_route_id);
77 EXPECT_TRUE(manager_->workers_.end() == manager_->workers_.find(id)); 83 EXPECT_TRUE(manager_->workers_.end() == manager_->workers_.find(id));
78 } 84 }
79 85
80 void CheckWorkerCount(size_t size) { 86 void CheckWorkerCount(size_t size) {
81 EXPECT_EQ(size, manager_->workers_.size()); 87 EXPECT_EQ(size, manager_->workers_.size());
82 } 88 }
83 89
84 void RegisterDevToolsClientHostFor(DevToolsAgentHost* agent_host,
85 DevToolsClientHost* client_host) {
86 DevToolsManagerImpl::GetInstance()->RegisterDevToolsClientHostFor(
87 agent_host, client_host);
88 }
89
90 void ClientHostClosing(DevToolsClientHost* client_host) {
91 DevToolsManagerImpl::GetInstance()->ClientHostClosing(client_host);
92 }
93
94 base::MessageLoopForIO message_loop_; 90 base::MessageLoopForIO message_loop_;
95 BrowserThreadImpl ui_thread_; 91 BrowserThreadImpl ui_thread_;
96 scoped_ptr<TestBrowserContext> browser_context_; 92 scoped_ptr<TestBrowserContext> browser_context_;
97 scoped_ptr<WorkerStoragePartition> partition_; 93 scoped_ptr<WorkerStoragePartition> partition_;
98 const WorkerStoragePartitionId partition_id_; 94 const WorkerStoragePartitionId partition_id_;
99 EmbeddedWorkerDevToolsManager* manager_; 95 EmbeddedWorkerDevToolsManager* manager_;
100 }; 96 };
101 97
102 TEST_F(EmbeddedWorkerDevToolsManagerTest, BasicTest) { 98 TEST_F(EmbeddedWorkerDevToolsManagerTest, BasicTest) {
103 scoped_refptr<DevToolsAgentHost> agent_host; 99 scoped_refptr<DevToolsAgentHostImpl> agent_host;
104 100
105 SharedWorkerInstance instance1(GURL("http://example.com/w.js"), 101 SharedWorkerInstance instance1(GURL("http://example.com/w.js"),
106 base::string16(), 102 base::string16(),
107 base::string16(), 103 base::string16(),
108 blink::WebContentSecurityPolicyTypeReport, 104 blink::WebContentSecurityPolicyTypeReport,
109 browser_context_->GetResourceContext(), 105 browser_context_->GetResourceContext(),
110 partition_id_); 106 partition_id_);
111 107
112 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 1); 108 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 1);
113 EXPECT_FALSE(agent_host.get()); 109 EXPECT_FALSE(agent_host.get());
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 CheckWorkerState(1, 6, WorkerState::WORKER_UNINSPECTED); 171 CheckWorkerState(1, 6, WorkerState::WORKER_UNINSPECTED);
176 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 6); 172 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 6);
177 EXPECT_TRUE(agent_host.get()); 173 EXPECT_TRUE(agent_host.get());
178 CheckWorkerState(1, 6, WorkerState::WORKER_UNINSPECTED); 174 CheckWorkerState(1, 6, WorkerState::WORKER_UNINSPECTED);
179 agent_host = NULL; 175 agent_host = NULL;
180 manager_->WorkerDestroyed(1, 6); 176 manager_->WorkerDestroyed(1, 6);
181 CheckWorkerNotExist(1, 6); 177 CheckWorkerNotExist(1, 6);
182 } 178 }
183 179
184 TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) { 180 TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) {
185 scoped_refptr<DevToolsAgentHost> agent_host1; 181 scoped_refptr<DevToolsAgentHostImpl> agent_host1;
186 scoped_refptr<DevToolsAgentHost> agent_host2; 182 scoped_refptr<DevToolsAgentHostImpl> agent_host2;
187 183
188 SharedWorkerInstance instance1(GURL("http://example.com/w1.js"), 184 SharedWorkerInstance instance1(GURL("http://example.com/w1.js"),
189 base::string16(), 185 base::string16(),
190 base::string16(), 186 base::string16(),
191 blink::WebContentSecurityPolicyTypeReport, 187 blink::WebContentSecurityPolicyTypeReport,
192 browser_context_->GetResourceContext(), 188 browser_context_->GetResourceContext(),
193 partition_id_); 189 partition_id_);
194 SharedWorkerInstance instance2(GURL("http://example.com/w2.js"), 190 SharedWorkerInstance instance2(GURL("http://example.com/w2.js"),
195 base::string16(), 191 base::string16(),
196 base::string16(), 192 base::string16(),
197 blink::WebContentSecurityPolicyTypeReport, 193 blink::WebContentSecurityPolicyTypeReport,
198 browser_context_->GetResourceContext(), 194 browser_context_->GetResourceContext(),
199 partition_id_); 195 partition_id_);
200 196
201 // Created -> GetDevToolsAgentHost -> Register -> Started -> Destroyed 197 // Created -> GetDevToolsAgentHost -> Register -> Started -> Destroyed
202 scoped_ptr<TestDevToolsClientHost> client_host1(new TestDevToolsClientHost()); 198 scoped_ptr<TestDevToolsClientHost> client_host1(new TestDevToolsClientHost());
203 CheckWorkerNotExist(2, 1); 199 CheckWorkerNotExist(2, 1);
204 manager_->SharedWorkerCreated(2, 1, instance1); 200 manager_->SharedWorkerCreated(2, 1, instance1);
205 CheckWorkerState(2, 1, WorkerState::WORKER_UNINSPECTED); 201 CheckWorkerState(2, 1, WorkerState::WORKER_UNINSPECTED);
206 agent_host1 = manager_->GetDevToolsAgentHostForWorker(2, 1); 202 agent_host1 = manager_->GetDevToolsAgentHostForWorker(2, 1);
207 EXPECT_TRUE(agent_host1.get()); 203 EXPECT_TRUE(agent_host1.get());
208 CheckWorkerState(2, 1, WorkerState::WORKER_UNINSPECTED); 204 CheckWorkerState(2, 1, WorkerState::WORKER_UNINSPECTED);
209 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1)); 205 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1));
210 RegisterDevToolsClientHostFor(agent_host1.get(), client_host1.get()); 206 client_host1->InspectAgentHost(agent_host1.get());
211 CheckWorkerState(2, 1, WorkerState::WORKER_INSPECTED); 207 CheckWorkerState(2, 1, WorkerState::WORKER_INSPECTED);
212 manager_->WorkerContextStarted(2, 1); 208 manager_->WorkerContextStarted(2, 1);
213 CheckWorkerState(2, 1, WorkerState::WORKER_INSPECTED); 209 CheckWorkerState(2, 1, WorkerState::WORKER_INSPECTED);
214 manager_->WorkerDestroyed(2, 1); 210 manager_->WorkerDestroyed(2, 1);
215 CheckWorkerState(2, 1, WorkerState::WORKER_TERMINATED); 211 CheckWorkerState(2, 1, WorkerState::WORKER_TERMINATED);
216 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1)); 212 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1));
217 213
218 // Created -> Started -> GetDevToolsAgentHost -> Register -> Destroyed 214 // Created -> Started -> GetDevToolsAgentHost -> Register -> Destroyed
219 scoped_ptr<TestDevToolsClientHost> client_host2(new TestDevToolsClientHost()); 215 scoped_ptr<TestDevToolsClientHost> client_host2(new TestDevToolsClientHost());
220 manager_->SharedWorkerCreated(2, 2, instance2); 216 manager_->SharedWorkerCreated(2, 2, instance2);
221 CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED); 217 CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED);
222 manager_->WorkerContextStarted(2, 2); 218 manager_->WorkerContextStarted(2, 2);
223 CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED); 219 CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED);
224 agent_host2 = manager_->GetDevToolsAgentHostForWorker(2, 2); 220 agent_host2 = manager_->GetDevToolsAgentHostForWorker(2, 2);
225 EXPECT_TRUE(agent_host2.get()); 221 EXPECT_TRUE(agent_host2.get());
226 EXPECT_NE(agent_host1.get(), agent_host2.get()); 222 EXPECT_NE(agent_host1.get(), agent_host2.get());
227 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2)); 223 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2));
228 CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED); 224 CheckWorkerState(2, 2, WorkerState::WORKER_UNINSPECTED);
229 RegisterDevToolsClientHostFor(agent_host2.get(), client_host2.get()); 225 client_host2->InspectAgentHost(agent_host2);
230 CheckWorkerState(2, 2, WorkerState::WORKER_INSPECTED); 226 CheckWorkerState(2, 2, WorkerState::WORKER_INSPECTED);
231 manager_->WorkerDestroyed(2, 2); 227 manager_->WorkerDestroyed(2, 2);
232 CheckWorkerState(2, 2, WorkerState::WORKER_TERMINATED); 228 CheckWorkerState(2, 2, WorkerState::WORKER_TERMINATED);
233 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2)); 229 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2));
234 230
235 // Re-created -> Started -> ClientHostClosing -> Destroyed 231 // Re-created -> Started -> ClientHostClosing -> Destroyed
236 CheckWorkerState(2, 1, WorkerState::WORKER_TERMINATED); 232 CheckWorkerState(2, 1, WorkerState::WORKER_TERMINATED);
237 manager_->SharedWorkerCreated(2, 3, instance1); 233 manager_->SharedWorkerCreated(2, 3, instance1);
238 CheckWorkerNotExist(2, 1); 234 CheckWorkerNotExist(2, 1);
239 CheckWorkerState(2, 3, WorkerState::WORKER_PAUSED_FOR_REATTACH); 235 CheckWorkerState(2, 3, WorkerState::WORKER_PAUSED_FOR_REATTACH);
240 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 3)); 236 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 3));
241 manager_->WorkerContextStarted(2, 3); 237 manager_->WorkerContextStarted(2, 3);
242 CheckWorkerState(2, 3, WorkerState::WORKER_INSPECTED); 238 CheckWorkerState(2, 3, WorkerState::WORKER_INSPECTED);
243 ClientHostClosing(client_host1.get()); 239 client_host1->InspectAgentHost(NULL);
244 manager_->WorkerDestroyed(2, 3); 240 manager_->WorkerDestroyed(2, 3);
245 CheckWorkerState(2, 3, WorkerState::WORKER_TERMINATED); 241 CheckWorkerState(2, 3, WorkerState::WORKER_TERMINATED);
246 agent_host1 = NULL; 242 agent_host1 = NULL;
247 CheckWorkerNotExist(2, 3); 243 CheckWorkerNotExist(2, 3);
248 244
249 // Re-created -> Destroyed 245 // Re-created -> Destroyed
250 CheckWorkerState(2, 2, WorkerState::WORKER_TERMINATED); 246 CheckWorkerState(2, 2, WorkerState::WORKER_TERMINATED);
251 manager_->SharedWorkerCreated(2, 4, instance2); 247 manager_->SharedWorkerCreated(2, 4, instance2);
252 CheckWorkerNotExist(2, 2); 248 CheckWorkerNotExist(2, 2);
253 CheckWorkerState(2, 4, WorkerState::WORKER_PAUSED_FOR_REATTACH); 249 CheckWorkerState(2, 4, WorkerState::WORKER_PAUSED_FOR_REATTACH);
254 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 4)); 250 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 4));
255 manager_->WorkerDestroyed(2, 4); 251 manager_->WorkerDestroyed(2, 4);
256 CheckWorkerNotExist(2, 2); 252 CheckWorkerNotExist(2, 2);
257 CheckWorkerState(2, 4, WorkerState::WORKER_TERMINATED); 253 CheckWorkerState(2, 4, WorkerState::WORKER_TERMINATED);
258 254
259 // Re-created -> ClientHostClosing -> Destroyed 255 // Re-created -> ClientHostClosing -> Destroyed
260 manager_->SharedWorkerCreated(2, 5, instance2); 256 manager_->SharedWorkerCreated(2, 5, instance2);
261 CheckWorkerNotExist(2, 2); 257 CheckWorkerNotExist(2, 2);
262 CheckWorkerState(2, 5, WorkerState::WORKER_PAUSED_FOR_REATTACH); 258 CheckWorkerState(2, 5, WorkerState::WORKER_PAUSED_FOR_REATTACH);
263 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 5)); 259 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 5));
264 ClientHostClosing(client_host2.get()); 260 client_host2->InspectAgentHost(NULL);
265 CheckWorkerCount(1); 261 CheckWorkerCount(1);
266 agent_host2 = NULL; 262 agent_host2 = NULL;
267 CheckWorkerCount(1); 263 CheckWorkerCount(1);
268 manager_->WorkerDestroyed(2, 5); 264 manager_->WorkerDestroyed(2, 5);
269 CheckWorkerCount(0); 265 CheckWorkerCount(0);
270 } 266 }
271 267
272 TEST_F(EmbeddedWorkerDevToolsManagerTest, ReattachTest) { 268 TEST_F(EmbeddedWorkerDevToolsManagerTest, ReattachTest) {
273 SharedWorkerInstance instance(GURL("http://example.com/w3.js"), 269 SharedWorkerInstance instance(GURL("http://example.com/w3.js"),
274 base::string16(), 270 base::string16(),
275 base::string16(), 271 base::string16(),
276 blink::WebContentSecurityPolicyTypeReport, 272 blink::WebContentSecurityPolicyTypeReport,
277 browser_context_->GetResourceContext(), 273 browser_context_->GetResourceContext(),
278 partition_id_); 274 partition_id_);
279 scoped_ptr<TestDevToolsClientHost> client_host(new TestDevToolsClientHost()); 275 scoped_ptr<TestDevToolsClientHost> client_host(new TestDevToolsClientHost());
280 // Created -> GetDevToolsAgentHost -> Register -> Destroyed 276 // Created -> GetDevToolsAgentHost -> Register -> Destroyed
281 manager_->SharedWorkerCreated(3, 1, instance); 277 manager_->SharedWorkerCreated(3, 1, instance);
282 CheckWorkerState(3, 1, WorkerState::WORKER_UNINSPECTED); 278 CheckWorkerState(3, 1, WorkerState::WORKER_UNINSPECTED);
283 scoped_refptr<DevToolsAgentHost> agent_host( 279 scoped_refptr<DevToolsAgentHost> agent_host(
284 manager_->GetDevToolsAgentHostForWorker(3, 1)); 280 manager_->GetDevToolsAgentHostForWorker(3, 1));
285 EXPECT_TRUE(agent_host.get()); 281 EXPECT_TRUE(agent_host.get());
286 CheckWorkerState(3, 1, WorkerState::WORKER_UNINSPECTED); 282 CheckWorkerState(3, 1, WorkerState::WORKER_UNINSPECTED);
287 RegisterDevToolsClientHostFor(agent_host.get(), client_host.get()); 283 client_host->InspectAgentHost(agent_host.get());
288 CheckWorkerState(3, 1, WorkerState::WORKER_INSPECTED); 284 CheckWorkerState(3, 1, WorkerState::WORKER_INSPECTED);
289 manager_->WorkerDestroyed(3, 1); 285 manager_->WorkerDestroyed(3, 1);
290 CheckWorkerState(3, 1, WorkerState::WORKER_TERMINATED); 286 CheckWorkerState(3, 1, WorkerState::WORKER_TERMINATED);
291 // ClientHostClosing -> Re-created -> release agent_host -> Destroyed 287 // ClientHostClosing -> Re-created -> release agent_host -> Destroyed
292 ClientHostClosing(client_host.get()); 288 client_host->InspectAgentHost(NULL);
293 CheckWorkerState(3, 1, WorkerState::WORKER_TERMINATED); 289 CheckWorkerState(3, 1, WorkerState::WORKER_TERMINATED);
294 manager_->SharedWorkerCreated(3, 2, instance); 290 manager_->SharedWorkerCreated(3, 2, instance);
295 CheckWorkerState(3, 2, WorkerState::WORKER_UNINSPECTED); 291 CheckWorkerState(3, 2, WorkerState::WORKER_UNINSPECTED);
296 agent_host = NULL; 292 agent_host = NULL;
297 CheckWorkerState(3, 2, WorkerState::WORKER_UNINSPECTED); 293 CheckWorkerState(3, 2, WorkerState::WORKER_UNINSPECTED);
298 manager_->WorkerDestroyed(3, 2); 294 manager_->WorkerDestroyed(3, 2);
299 CheckWorkerNotExist(3, 2); 295 CheckWorkerNotExist(3, 2);
300 CheckWorkerCount(0); 296 CheckWorkerCount(0);
301 } 297 }
302 298
303 } // namespace content 299 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/embedded_worker_devtools_manager.cc ('k') | content/browser/devtools/forwarding_agent_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698