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

Unified Diff: Source/web/WebSharedWorkerImpl.cpp

Issue 534293003: DevTools: Switch shared workers inspection on to the main thread. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/web/WebSharedWorkerImpl.h ('k') | public/web/WebSharedWorker.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/WebSharedWorkerImpl.cpp
diff --git a/Source/web/WebSharedWorkerImpl.cpp b/Source/web/WebSharedWorkerImpl.cpp
index f570bad9ed14a0843345b2f5992da681f491e1c3..7b8ea29ef22452d745ddc55ebb840da2fdc58ef8 100644
--- a/Source/web/WebSharedWorkerImpl.cpp
+++ b/Source/web/WebSharedWorkerImpl.cpp
@@ -61,6 +61,7 @@
#include "public/platform/WebString.h"
#include "public/platform/WebURL.h"
#include "public/platform/WebURLRequest.h"
+#include "public/web/WebDevToolsAgent.h"
#include "public/web/WebFrame.h"
#include "public/web/WebSettings.h"
#include "public/web/WebView.h"
@@ -159,7 +160,7 @@ WebSharedWorkerImpl::WebSharedWorkerImpl(WebSharedWorkerClient* client)
, m_client(WeakReference<WebSharedWorkerClient>::create(client))
, m_clientWeakPtr(WeakPtr<WebSharedWorkerClient>(m_client))
, m_pauseWorkerContextOnStart(false)
- , m_attachDevToolsOnStart(false)
+ , m_isPausedOnStart(false)
{
initializeWebKitStaticValues();
}
@@ -207,6 +208,7 @@ void WebSharedWorkerImpl::initializeLoader(const WebURL& url)
// is created (similar to RenderThread::OnCreateNewView).
m_mainFrame = WebLocalFrame::create(this);
m_webView->setMainFrame(m_mainFrame);
+ m_webView->setDevToolsAgentClient(this);
WebLocalFrameImpl* webFrame = toWebLocalFrameImpl(m_webView->mainFrame());
@@ -227,6 +229,35 @@ WebApplicationCacheHost* WebSharedWorkerImpl::createApplicationCacheHost(WebLoca
void WebSharedWorkerImpl::didFinishDocumentLoad(WebLocalFrame* frame)
{
+ // If we were asked to pause worker context on start and wait for debugger then it is the good time to do that.
+ client()->workerReadyForInspection();
+ if (m_pauseWorkerContextOnStart) {
+ m_isPausedOnStart = true;
+ return;
+ }
+ startScriptLoader(frame);
+}
+
+void WebSharedWorkerImpl::sendMessageToInspectorFrontend(const WebString& message)
+{
+ client()->dispatchDevToolsMessage(message);
+}
+
+void WebSharedWorkerImpl::resumeStartup()
+{
+ bool isPausedOnStart = m_isPausedOnStart;
+ m_isPausedOnStart = false;
+ if (isPausedOnStart)
+ startScriptLoader(toWebLocalFrameImpl(m_mainFrame));
+}
+
+void WebSharedWorkerImpl::saveAgentRuntimeState(const WebString& inspectorState)
+{
+ client()->saveDevToolsAgentState(inspectorState);
+}
+
+void WebSharedWorkerImpl::startScriptLoader(WebLocalFrame* frame)
+{
ASSERT(!m_loadingDocument);
ASSERT(!m_mainScriptLoader);
m_mainScriptLoader = Loader::create();
@@ -252,11 +283,6 @@ void WebSharedWorkerImpl::reportConsoleMessage(PassRefPtrWillBeRawPtr<ConsoleMes
void WebSharedWorkerImpl::postMessageToPageInspector(const String& message)
{
- // Note that we need to keep the closure creation on a separate line so
- // that the temporary created by isolatedCopy() will always be destroyed
- // before the copy in the closure is used on the main thread.
- const Closure& boundFunction = bind(&WebSharedWorkerClient::dispatchDevToolsMessage, m_clientWeakPtr, message.isolatedCopy());
- callOnMainThread(boundFunction);
toWebLocalFrameImpl(m_mainFrame)->frame()->document()->postInspectorTask(createCrossThreadTask(&WebSharedWorkerImpl::postMessageToPageInspectorOnMainThread, this, message));
}
@@ -271,11 +297,6 @@ void WebSharedWorkerImpl::postMessageToPageInspectorOnMainThread(const String& m
void WebSharedWorkerImpl::updateInspectorStateCookie(const String& cookie)
{
- // Note that we need to keep the closure creation on a separate line so
- // that the temporary created by isolatedCopy() will always be destroyed
- // before the copy in the closure is used on the main thread.
- const Closure& boundFunction = bind(&WebSharedWorkerClient::saveDevToolsAgentState, m_clientWeakPtr, cookie.isolatedCopy());
- callOnMainThread(boundFunction);
}
void WebSharedWorkerImpl::workerGlobalScopeClosed()
@@ -353,11 +374,6 @@ void WebSharedWorkerImpl::didReceiveScriptLoaderResponse()
client()->selectAppCacheID(m_mainScriptLoader->appCacheID());
}
-static void connectToWorkerContextInspectorTask(ExecutionContext* context, bool)
-{
- toWorkerGlobalScope(context)->workerInspectorController()->connectFrontend();
-}
-
void WebSharedWorkerImpl::onScriptLoaderFinished()
{
ASSERT(m_loadingDocument);
@@ -374,7 +390,12 @@ void WebSharedWorkerImpl::onScriptLoaderFinished()
delete this;
return;
}
- WorkerThreadStartMode startMode = m_pauseWorkerContextOnStart ? PauseWorkerGlobalScopeOnStart : DontPauseWorkerGlobalScopeOnStart;
+
+ Document* document = toWebLocalFrameImpl(m_mainFrame)->frame()->document();
+ WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart;
+ if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document))
horo 2014/09/04 05:44:02 nit: It is better to rename "shouldPauseDedicatedW
+ startMode = PauseWorkerGlobalScopeOnStart;
+
OwnPtrWillBeRawPtr<WorkerClients> workerClients = WorkerClients::create();
provideLocalFileSystemToWorker(workerClients.get(), LocalFileSystemClient::create());
provideDatabaseClientToWorker(workerClients.get(), DatabaseClientImpl::create());
@@ -385,15 +406,10 @@ void WebSharedWorkerImpl::onScriptLoaderFinished()
InspectorInstrumentation::scriptImported(m_loadingDocument.get(), m_mainScriptLoader->identifier(), m_mainScriptLoader->script());
m_mainScriptLoader.clear();
- if (m_attachDevToolsOnStart)
- workerThread()->postDebuggerTask(createCrossThreadTask(connectToWorkerContextInspectorTask, true));
-
workerThread()->start();
m_workerInspectorProxy->workerThreadCreated(m_loadingDocument.get(), workerThread(), m_url);
- if (client()) {
+ if (client())
client()->workerScriptLoaded();
- client()->workerReadyForInspection();
- }
}
void WebSharedWorkerImpl::terminateWorkerContext()
@@ -411,70 +427,38 @@ void WebSharedWorkerImpl::pauseWorkerContextOnStart()
m_pauseWorkerContextOnStart = true;
}
-static void resumeWorkerContextTask(ExecutionContext* context, bool)
-{
- toWorkerGlobalScope(context)->workerInspectorController()->resume();
-}
-
void WebSharedWorkerImpl::resumeWorkerContext()
{
- m_pauseWorkerContextOnStart = false;
- if (workerThread())
- workerThread()->postDebuggerTask(createCrossThreadTask(resumeWorkerContextTask, true));
-}
-
-void WebSharedWorkerImpl::attachDevTools()
-{
- if (workerThread())
- workerThread()->postDebuggerTask(createCrossThreadTask(connectToWorkerContextInspectorTask, true));
- else
- m_attachDevToolsOnStart = true;
}
void WebSharedWorkerImpl::attachDevTools(const WebString& hostId)
{
- attachDevTools();
-}
-
-static void reconnectToWorkerContextInspectorTask(ExecutionContext* context, const String& savedState)
-{
- WorkerInspectorController* ic = toWorkerGlobalScope(context)->workerInspectorController();
- ic->restoreInspectorStateFromCookie(savedState);
- ic->resume();
-}
-
-void WebSharedWorkerImpl::reattachDevTools(const WebString& savedState)
-{
- workerThread()->postDebuggerTask(createCrossThreadTask(reconnectToWorkerContextInspectorTask, String(savedState)));
+ WebDevToolsAgent* devtoolsAgent = m_webView->devToolsAgent();
+ if (devtoolsAgent)
+ devtoolsAgent->attach(hostId);
}
void WebSharedWorkerImpl::reattachDevTools(const WebString& hostId, const WebString& savedState)
{
- reattachDevTools(savedState);
-}
-
-static void disconnectFromWorkerContextInspectorTask(ExecutionContext* context, bool)
-{
- toWorkerGlobalScope(context)->workerInspectorController()->disconnectFrontend();
+ WebDevToolsAgent* devtoolsAgent = m_webView->devToolsAgent();
+ if (devtoolsAgent)
+ devtoolsAgent->reattach(hostId, savedState);
}
void WebSharedWorkerImpl::detachDevTools()
{
- m_attachDevToolsOnStart = false;
- workerThread()->postDebuggerTask(createCrossThreadTask(disconnectFromWorkerContextInspectorTask, true));
-}
-
-static void dispatchOnInspectorBackendTask(ExecutionContext* context, const String& message)
-{
- toWorkerGlobalScope(context)->workerInspectorController()->dispatchMessageFromFrontend(message);
+ WebDevToolsAgent* devtoolsAgent = m_webView->devToolsAgent();
+ if (devtoolsAgent)
+ devtoolsAgent->detach();
}
void WebSharedWorkerImpl::dispatchDevToolsMessage(const WebString& message)
{
if (m_askedToTerminate)
return;
- workerThread()->postDebuggerTask(createCrossThreadTask(dispatchOnInspectorBackendTask, String(message)));
- workerThread()->interruptAndDispatchInspectorCommands();
+ WebDevToolsAgent* devtoolsAgent = m_webView->devToolsAgent();
+ if (devtoolsAgent)
+ devtoolsAgent->dispatchOnInspectorBackend(message);
}
WebSharedWorker* WebSharedWorker::create(WebSharedWorkerClient* client)
« no previous file with comments | « Source/web/WebSharedWorkerImpl.h ('k') | public/web/WebSharedWorker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698