diff options
author | yurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-12 08:40:12 +0000 |
---|---|---|
committer | yurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-12 08:40:12 +0000 |
commit | d9ddc0db322f5a437c6eb932676308f0ac7b448b (patch) | |
tree | 92c1b98aa313c515700146fee6294e7b77cbbfb6 /content/worker | |
parent | 83c130ce5753269b00d1ee4891fd27286de068fc (diff) | |
download | chromium_src-d9ddc0db322f5a437c6eb932676308f0ac7b448b.zip chromium_src-d9ddc0db322f5a437c6eb932676308f0ac7b448b.tar.gz chromium_src-d9ddc0db322f5a437c6eb932676308f0ac7b448b.tar.bz2 |
DevTools: support shared worker initialization debugger
To be able to debug shared workers initialization, devtools front-end needs to attach very early, before first statement of the worker script is executed. To achieve this on the IO thread we keep a list of shared workers for which devtools front-end was opened and not closed yet. If such worker is destroyed we store its URL and name in the pending workers list and once a new worker is created again we tell it to pause its worker context on start and wait for explicit notification from the devtools client or resume message(in case we learn that the client has already closed on the UI thread). After pause message was sent to the worker being created we put corresponding data to the paused_workers_ list and post reattach task to the UI thread which should result in reattach message to the new worker if the front-end still exists, otherwise when the worker data is removed from the paused_workers_ list we will send resume message and worker will continue to operate as usual.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/8216008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105038 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/worker')
-rw-r--r-- | content/worker/shared_worker_devtools_agent.cc | 12 | ||||
-rw-r--r-- | content/worker/shared_worker_devtools_agent.h | 2 |
2 files changed, 14 insertions, 0 deletions
diff --git a/content/worker/shared_worker_devtools_agent.cc b/content/worker/shared_worker_devtools_agent.cc index 3ba7444..702105d 100644 --- a/content/worker/shared_worker_devtools_agent.cc +++ b/content/worker/shared_worker_devtools_agent.cc @@ -32,6 +32,10 @@ bool SharedWorkerDevToolsAgent::OnMessageReceived(const IPC::Message& message) { IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Detach, OnDetach) IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DispatchOnInspectorBackend, OnDispatchOnInspectorBackend) + IPC_MESSAGE_HANDLER(DevToolsAgentMsg_PauseWorkerContextOnStart, + OnPauseWorkerContextOnStart) + IPC_MESSAGE_HANDLER(DevToolsAgentMsg_ResumeWorkerContext, + OnResumeWorkerContext) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -68,6 +72,14 @@ void SharedWorkerDevToolsAgent::OnDispatchOnInspectorBackend( webworker_->dispatchDevToolsMessage(WebString::fromUTF8(message)); } +void SharedWorkerDevToolsAgent::OnPauseWorkerContextOnStart() { + webworker_->pauseWorkerContextOnStart(); +} + +void SharedWorkerDevToolsAgent::OnResumeWorkerContext() { + webworker_->resumeWorkerContext(); +} + bool SharedWorkerDevToolsAgent::Send(IPC::Message* message) { return WorkerThread::current()->Send(message); } diff --git a/content/worker/shared_worker_devtools_agent.h b/content/worker/shared_worker_devtools_agent.h index 22f5dac6..a1f92db 100644 --- a/content/worker/shared_worker_devtools_agent.h +++ b/content/worker/shared_worker_devtools_agent.h @@ -34,6 +34,8 @@ class SharedWorkerDevToolsAgent { void OnReattach(const std::string&); void OnDetach(); void OnDispatchOnInspectorBackend(const std::string& message); + void OnPauseWorkerContextOnStart(); + void OnResumeWorkerContext(); bool Send(IPC::Message* message); const int route_id_; |