OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/devtools/shared_worker_devtools_manager.h" | |
6 | |
7 #include "base/memory/scoped_ptr.h" | |
8 #include "base/message_loop/message_loop.h" | |
9 #include "base/run_loop.h" | |
10 #include "content/browser/browser_thread_impl.h" | |
11 #include "content/browser/devtools/devtools_manager_impl.h" | |
12 #include "content/browser/shared_worker/shared_worker_instance.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" | |
16 #include "content/public/test/test_browser_context.h" | |
17 #include "testing/gtest/include/gtest/gtest.h" | |
18 | |
19 namespace content { | |
20 namespace { | |
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 | |
51 protected: | |
52 virtual void SetUp() OVERRIDE { | |
53 manager_ = SharedWorkerDevToolsManager::GetInstance(); | |
54 } | |
55 virtual void TearDown() OVERRIDE { | |
56 SharedWorkerDevToolsManager::GetInstance()->ResetForTesting(); | |
57 } | |
58 | |
59 void CheckWorkerState(int worker_process_id, | |
60 int worker_route_id, | |
61 SharedWorkerDevToolsManager::WorkerState state) { | |
62 const SharedWorkerDevToolsManager::WorkerId id(worker_process_id, | |
63 worker_route_id); | |
64 SharedWorkerDevToolsManager::WorkerInfoMap::iterator it = | |
65 manager_->workers_.find(id); | |
66 EXPECT_TRUE(manager_->workers_.end() != it); | |
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_; | |
92 scoped_ptr<TestBrowserContext> browser_context_; | |
93 scoped_ptr<WorkerStoragePartition> partition_; | |
94 SharedWorkerDevToolsManager* manager_; | |
95 }; | |
96 | |
97 TEST_F(SharedWorkerDevToolsManagerTest, BasicTest) { | |
98 scoped_refptr<DevToolsAgentHost> agent_host; | |
99 | |
100 SharedWorkerInstance instance1(GURL("http://example.com/w.js"), | |
101 base::string16(), | |
102 base::string16(), | |
103 blink::WebContentSecurityPolicyTypeReport, | |
104 browser_context_->GetResourceContext(), | |
105 *partition_.get()); | |
106 | |
107 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 1); | |
108 EXPECT_FALSE(agent_host.get()); | |
109 | |
110 // Created -> Started -> Destroyed | |
111 CheckWorkerNotExist(1, 1); | |
112 manager_->WorkerCreated(1, 1, instance1); | |
113 CheckWorkerState(1, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED); | |
114 manager_->WorkerContextStarted(1, 1); | |
115 CheckWorkerState(1, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED); | |
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 // Created -> GetDevToolsAgentHost -> Free agent_host -> Destroyed | |
165 CheckWorkerNotExist(1, 6); | |
166 manager_->WorkerCreated(1, 6, instance1); | |
167 CheckWorkerState(1, 6, SharedWorkerDevToolsManager::WORKER_UNINSPECTED); | |
168 agent_host = manager_->GetDevToolsAgentHostForWorker(1, 6); | |
169 EXPECT_TRUE(agent_host.get()); | |
170 CheckWorkerState(1, 6, SharedWorkerDevToolsManager::WORKER_INSPECTED); | |
171 agent_host = NULL; | |
172 manager_->WorkerDestroyed(1, 6); | |
173 CheckWorkerNotExist(1, 6); | |
174 } | |
175 | |
176 TEST_F(SharedWorkerDevToolsManagerTest, AttachTest) { | |
177 scoped_refptr<DevToolsAgentHost> agent_host1; | |
178 scoped_refptr<DevToolsAgentHost> agent_host2; | |
179 | |
180 SharedWorkerInstance instance1(GURL("http://example.com/w1.js"), | |
181 base::string16(), | |
182 base::string16(), | |
183 blink::WebContentSecurityPolicyTypeReport, | |
184 browser_context_->GetResourceContext(), | |
185 *partition_.get()); | |
186 SharedWorkerInstance instance2(GURL("http://example.com/w2.js"), | |
187 base::string16(), | |
188 base::string16(), | |
189 blink::WebContentSecurityPolicyTypeReport, | |
190 browser_context_->GetResourceContext(), | |
191 *partition_.get()); | |
192 | |
193 // Created -> GetDevToolsAgentHost -> Register -> Started -> Destroyed | |
194 scoped_ptr<TestDevToolsClientHost> client_host1(new TestDevToolsClientHost()); | |
195 CheckWorkerNotExist(2, 1); | |
196 manager_->WorkerCreated(2, 1, instance1); | |
197 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_UNINSPECTED); | |
198 agent_host1 = manager_->GetDevToolsAgentHostForWorker(2, 1); | |
199 EXPECT_TRUE(agent_host1.get()); | |
200 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED); | |
201 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1)); | |
202 RegisterDevToolsClientHostFor(agent_host1.get(), client_host1.get()); | |
203 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED); | |
204 manager_->WorkerContextStarted(2, 1); | |
205 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_INSPECTED); | |
206 manager_->WorkerDestroyed(2, 1); | |
207 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_TERMINATED); | |
208 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 1)); | |
209 | |
210 // Created -> Started -> GetDevToolsAgentHost -> Register -> Destroyed | |
211 scoped_ptr<TestDevToolsClientHost> client_host2(new TestDevToolsClientHost()); | |
212 manager_->WorkerCreated(2, 2, instance2); | |
213 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED); | |
214 manager_->WorkerContextStarted(2, 2); | |
215 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_UNINSPECTED); | |
216 agent_host2 = manager_->GetDevToolsAgentHostForWorker(2, 2); | |
217 EXPECT_TRUE(agent_host2.get()); | |
218 EXPECT_NE(agent_host1.get(), agent_host2.get()); | |
219 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2)); | |
220 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED); | |
221 RegisterDevToolsClientHostFor(agent_host2.get(), client_host2.get()); | |
222 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_INSPECTED); | |
223 manager_->WorkerDestroyed(2, 2); | |
224 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED); | |
225 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 2)); | |
226 | |
227 // Re-created -> Started -> ClientHostClosing -> Destroyed | |
228 CheckWorkerState(2, 1, SharedWorkerDevToolsManager::WORKER_TERMINATED); | |
229 manager_->WorkerCreated(2, 3, instance1); | |
230 CheckWorkerNotExist(2, 1); | |
231 CheckWorkerState(2, 3, SharedWorkerDevToolsManager::WORKER_PAUSED); | |
232 EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 3)); | |
233 manager_->WorkerContextStarted(2, 3); | |
234 CheckWorkerState(2, 3, SharedWorkerDevToolsManager::WORKER_INSPECTED); | |
235 ClientHostClosing(client_host1.get()); | |
236 manager_->WorkerDestroyed(2, 3); | |
237 CheckWorkerNotExist(2, 3); | |
238 agent_host1 = NULL; | |
239 | |
240 // Re-created -> Destroyed | |
241 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED); | |
242 manager_->WorkerCreated(2, 4, instance2); | |
243 CheckWorkerNotExist(2, 2); | |
244 CheckWorkerState(2, 4, SharedWorkerDevToolsManager::WORKER_PAUSED); | |
245 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 4)); | |
246 manager_->WorkerDestroyed(2, 4); | |
247 CheckWorkerNotExist(2, 4); | |
248 CheckWorkerState(2, 2, SharedWorkerDevToolsManager::WORKER_TERMINATED); | |
249 | |
250 // Re-created -> ClientHostClosing -> Destroyed | |
251 manager_->WorkerCreated(2, 5, instance2); | |
252 CheckWorkerNotExist(2, 2); | |
253 CheckWorkerState(2, 5, SharedWorkerDevToolsManager::WORKER_PAUSED); | |
254 EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 5)); | |
255 ClientHostClosing(client_host2.get()); | |
256 CheckWorkerCount(1); | |
257 agent_host2 = NULL; | |
258 CheckWorkerCount(1); | |
259 manager_->WorkerDestroyed(2, 5); | |
260 CheckWorkerCount(0); | |
261 } | |
262 | |
263 } // namespace content | |
OLD | NEW |