summaryrefslogtreecommitdiffstats
path: root/content/worker
diff options
context:
space:
mode:
authoryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-12 08:40:12 +0000
committeryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-12 08:40:12 +0000
commitd9ddc0db322f5a437c6eb932676308f0ac7b448b (patch)
tree92c1b98aa313c515700146fee6294e7b77cbbfb6 /content/worker
parent83c130ce5753269b00d1ee4891fd27286de068fc (diff)
downloadchromium_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.cc12
-rw-r--r--content/worker/shared_worker_devtools_agent.h2
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_;