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

Side by Side Diff: content/browser/debugger/worker_devtools_manager.cc

Issue 8549022: Define DevTools content API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 9 years 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/debugger/worker_devtools_manager.h" 5 #include "content/browser/debugger/worker_devtools_manager.h"
6 6
7 #include <list> 7 #include <list>
8 #include <map> 8 #include <map>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "content/browser/debugger/devtools_agent_host.h" 11 #include "content/browser/debugger/devtools_agent_host.h"
12 #include "content/browser/debugger/devtools_manager.h" 12 #include "content/browser/debugger/devtools_manager_impl.h"
13 #include "content/browser/debugger/worker_devtools_message_filter.h" 13 #include "content/browser/debugger/worker_devtools_message_filter.h"
14 #include "content/browser/worker_host/worker_process_host.h" 14 #include "content/browser/worker_host/worker_process_host.h"
15 #include "content/browser/worker_host/worker_service.h" 15 #include "content/browser/worker_host/worker_service.h"
16 #include "content/common/devtools_messages.h" 16 #include "content/common/devtools_messages.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/devtools_agent_host_registry.h"
18 #include "content/public/browser/notification_observer.h" 19 #include "content/public/browser/notification_observer.h"
19 #include "content/public/browser/notification_registrar.h" 20 #include "content/public/browser/notification_registrar.h"
20 #include "content/public/browser/notification_service.h" 21 #include "content/public/browser/notification_service.h"
21 #include "content/public/browser/notification_types.h" 22 #include "content/public/browser/notification_types.h"
22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h" 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h"
23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDevToolsAgent.h" 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDevToolsAgent.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" 25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
25 26
26 using content::BrowserThread; 27 using content::BrowserThread;
27 28
29 namespace content {
30
31 // Called on the UI thread.
32 // static
33 DevToolsAgentHost* DevToolsAgentHostRegistry::GetDevToolsAgentHostForWorker(
34 int worker_process_id,
35 int worker_route_id) {
36 return WorkerDevToolsManager::GetDevToolsAgentHostForWorker(
37 worker_process_id,
38 worker_route_id);
39 }
40
28 class WorkerDevToolsManager::AgentHosts 41 class WorkerDevToolsManager::AgentHosts
29 : private content::NotificationObserver { 42 : private content::NotificationObserver {
30 public: 43 public:
31 static void Add(WorkerId id, WorkerDevToolsAgentHost* host) { 44 static void Add(WorkerId id, WorkerDevToolsAgentHost* host) {
32 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 45 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
33 if (!instance_) 46 if (!instance_)
34 instance_ = new AgentHosts(); 47 instance_ = new AgentHosts();
35 instance_->map_[id] = host; 48 instance_->map_[id] = host;
36 } 49 }
37 static void Remove(WorkerId id) { 50 static void Remove(WorkerId id) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 RemovePendingWorkerData(old_id); 170 RemovePendingWorkerData(old_id);
158 } 171 }
159 172
160 static void WorkerDestroyed(WorkerId id) { 173 static void WorkerDestroyed(WorkerId id) {
161 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
162 WorkerDevToolsAgentHost* agent = AgentHosts::GetAgentHost(id); 175 WorkerDevToolsAgentHost* agent = AgentHosts::GetAgentHost(id);
163 if (!agent) { 176 if (!agent) {
164 RemovePendingWorkerData(id); 177 RemovePendingWorkerData(id);
165 return; 178 return;
166 } 179 }
167 DevToolsManager::GetInstance()->ForwardToDevToolsClient(agent, 180 DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(
168 DevToolsClientMsg_DispatchOnInspectorFrontend(MSG_ROUTING_NONE, 181 agent,
169 WebKit::WebDevToolsAgent::disconnectEventAsText().utf8())); 182 WebKit::WebDevToolsAgent::disconnectEventAsText().utf8());
170 int cookie = DevToolsManager::GetInstance()->DetachClientHost(agent); 183 int cookie = DevToolsManagerImpl::GetInstance()->DetachClientHost(agent);
171 if (cookie == -1) { 184 if (cookie == -1) {
172 RemovePendingWorkerData(id); 185 RemovePendingWorkerData(id);
173 return; 186 return;
174 } 187 }
175 if (!instance_) 188 if (!instance_)
176 new DetachedClientHosts(); 189 new DetachedClientHosts();
177 instance_->worker_id_to_cookie_[id] = cookie; 190 instance_->worker_id_to_cookie_[id] = cookie;
178 } 191 }
179 192
180 private: 193 private:
181 DetachedClientHosts() { 194 DetachedClientHosts() {
182 instance_ = this; 195 instance_ = this;
183 } 196 }
184 ~DetachedClientHosts() { 197 ~DetachedClientHosts() {
185 instance_ = NULL; 198 instance_ = NULL;
186 } 199 }
187 200
188 bool ReattachClient(WorkerId old_id, WorkerId new_id) { 201 bool ReattachClient(WorkerId old_id, WorkerId new_id) {
189 WorkerIdToCookieMap::iterator it = worker_id_to_cookie_.find(old_id); 202 WorkerIdToCookieMap::iterator it = worker_id_to_cookie_.find(old_id);
190 if (it == worker_id_to_cookie_.end()) 203 if (it == worker_id_to_cookie_.end())
191 return false; 204 return false;
192 DevToolsAgentHost* agent = 205 DevToolsAgentHost* agent =
193 WorkerDevToolsManager::GetDevToolsAgentHostForWorker( 206 WorkerDevToolsManager::GetDevToolsAgentHostForWorker(
194 new_id.first, 207 new_id.first,
195 new_id.second); 208 new_id.second);
196 DevToolsManager::GetInstance()->AttachClientHost( 209 DevToolsManagerImpl::GetInstance()->AttachClientHost(
197 it->second, 210 it->second,
198 agent); 211 agent);
199 worker_id_to_cookie_.erase(it); 212 worker_id_to_cookie_.erase(it);
200 if (worker_id_to_cookie_.empty()) 213 if (worker_id_to_cookie_.empty())
201 delete this; 214 delete this;
202 return true; 215 return true;
203 } 216 }
204 217
205 static void RemovePendingWorkerData(WorkerId id) { 218 static void RemovePendingWorkerData(WorkerId id) {
206 BrowserThread::PostTask( 219 BrowserThread::PostTask(
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 return; 391 return;
379 } 392 }
380 } 393 }
381 } 394 }
382 NotifyWorkerDestroyedOnIOThread(worker_process_id, worker_route_id); 395 NotifyWorkerDestroyedOnIOThread(worker_process_id, worker_route_id);
383 } 396 }
384 397
385 void WorkerDevToolsManager::ForwardToDevToolsClient( 398 void WorkerDevToolsManager::ForwardToDevToolsClient(
386 int worker_process_id, 399 int worker_process_id,
387 int worker_route_id, 400 int worker_route_id,
388 const IPC::Message& message) { 401 const std::string& message) {
389 if (FindInspectedWorker(worker_process_id, worker_route_id) == 402 if (FindInspectedWorker(worker_process_id, worker_route_id) ==
390 inspected_workers_.end()) { 403 inspected_workers_.end()) {
391 NOTREACHED(); 404 NOTREACHED();
392 return; 405 return;
393 } 406 }
394 BrowserThread::PostTask( 407 BrowserThread::PostTask(
395 BrowserThread::UI, FROM_HERE, 408 BrowserThread::UI, FROM_HERE,
396 base::Bind( 409 base::Bind(
397 &ForwardToDevToolsClientOnUIThread, 410 &ForwardToDevToolsClientOnUIThread,
398 worker_process_id, 411 worker_process_id,
(...skipping 24 matching lines...) Expand all
423 return; 436 return;
424 IPC::Message* msg = new IPC::Message(message); 437 IPC::Message* msg = new IPC::Message(message);
425 msg->set_routing_id(worker_route_id); 438 msg->set_routing_id(worker_route_id);
426 it->host->Send(msg); 439 it->host->Send(msg);
427 } 440 }
428 441
429 // static 442 // static
430 void WorkerDevToolsManager::ForwardToDevToolsClientOnUIThread( 443 void WorkerDevToolsManager::ForwardToDevToolsClientOnUIThread(
431 int worker_process_id, 444 int worker_process_id,
432 int worker_route_id, 445 int worker_route_id,
433 const IPC::Message& message) { 446 const std::string& message) {
434 WorkerDevToolsAgentHost* agent_host = AgentHosts::GetAgentHost(WorkerId( 447 WorkerDevToolsAgentHost* agent_host = AgentHosts::GetAgentHost(WorkerId(
435 worker_process_id, 448 worker_process_id,
436 worker_route_id)); 449 worker_route_id));
437 if (!agent_host) 450 if (!agent_host)
438 return; 451 return;
439 DevToolsManager::GetInstance()->ForwardToDevToolsClient(agent_host, message); 452 DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(agent_host,
453 message);
440 } 454 }
441 455
442 // static 456 // static
443 void WorkerDevToolsManager::SaveAgentRuntimeStateOnUIThread( 457 void WorkerDevToolsManager::SaveAgentRuntimeStateOnUIThread(
444 int worker_process_id, 458 int worker_process_id,
445 int worker_route_id, 459 int worker_route_id,
446 const std::string& state) { 460 const std::string& state) {
447 WorkerDevToolsAgentHost* agent_host = AgentHosts::GetAgentHost(WorkerId( 461 WorkerDevToolsAgentHost* agent_host = AgentHosts::GetAgentHost(WorkerId(
448 worker_process_id, 462 worker_process_id,
449 worker_route_id)); 463 worker_route_id));
450 if (!agent_host) 464 if (!agent_host)
451 return; 465 return;
452 DevToolsManager::GetInstance()->SaveAgentRuntimeState(agent_host, state); 466 DevToolsManagerImpl::GetInstance()->SaveAgentRuntimeState(agent_host, state);
453 } 467 }
454 468
455 // static 469 // static
456 void WorkerDevToolsManager::NotifyWorkerDestroyedOnIOThread( 470 void WorkerDevToolsManager::NotifyWorkerDestroyedOnIOThread(
457 int worker_process_id, 471 int worker_process_id,
458 int worker_route_id) { 472 int worker_route_id) {
459 BrowserThread::PostTask( 473 BrowserThread::PostTask(
460 BrowserThread::UI, FROM_HERE, 474 BrowserThread::UI, FROM_HERE,
461 base::Bind( 475 base::Bind(
462 &WorkerDevToolsManager::NotifyWorkerDestroyedOnUIThread, 476 &WorkerDevToolsManager::NotifyWorkerDestroyedOnUIThread,
463 worker_process_id, 477 worker_process_id,
464 worker_route_id)); 478 worker_route_id));
465 } 479 }
466 480
467 // static 481 // static
468 void WorkerDevToolsManager::NotifyWorkerDestroyedOnUIThread( 482 void WorkerDevToolsManager::NotifyWorkerDestroyedOnUIThread(
469 int worker_process_id, 483 int worker_process_id,
470 int worker_route_id) { 484 int worker_route_id) {
471 WorkerDevToolsAgentHost* host = 485 WorkerDevToolsAgentHost* host =
472 AgentHosts::GetAgentHost(WorkerId(worker_process_id, worker_route_id)); 486 AgentHosts::GetAgentHost(WorkerId(worker_process_id, worker_route_id));
473 if (host) 487 if (host)
474 host->WorkerDestroyed(); 488 host->WorkerDestroyed();
475 } 489 }
476 490
477 // static 491 // static
478 void WorkerDevToolsManager::SendResumeToWorker(const WorkerId& id) { 492 void WorkerDevToolsManager::SendResumeToWorker(const WorkerId& id) {
479 if (WorkerProcessHost* process = FindWorkerProcess(id.first)) 493 if (WorkerProcessHost* process = FindWorkerProcess(id.first))
480 process->Send(new DevToolsAgentMsg_ResumeWorkerContext(id.second)); 494 process->Send(new DevToolsAgentMsg_ResumeWorkerContext(id.second));
481 } 495 }
496
497 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698