Diff
Modified: trunk/LayoutTests/ChangeLog (98236 => 98237)
--- trunk/LayoutTests/ChangeLog 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/LayoutTests/ChangeLog 2011-10-24 14:32:44 UTC (rev 98237)
@@ -1,3 +1,13 @@
+2011-10-24 Yury Semikhatsky <[email protected]>
+
+ Web Inspector: allow debugging dedicated worker initialization
+ https://bugs.webkit.org/show_bug.cgi?id=70723
+
+ Reviewed by Pavel Feldman.
+
+ * inspector/protocol/runtime-agent-expected.txt:
+ * inspector/protocol/runtime-agent.html:
+
2011-10-24 Alejandro G. Castro <[email protected]>
Unreviewed, skip failing test in GTK, added bug 70720. Rebaseline
Modified: trunk/LayoutTests/inspector/protocol/runtime-agent-expected.txt (98236 => 98237)
--- trunk/LayoutTests/inspector/protocol/runtime-agent-expected.txt 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/LayoutTests/inspector/protocol/runtime-agent-expected.txt 2011-10-24 14:32:44 UTC (rev 98237)
@@ -253,6 +253,22 @@
id : <number>
}
+-----------------------------------------------------------
+RuntimeAgent.run()
+
+request:
+{
+ method : "Runtime.run"
+ id : <number>
+}
+
+response:
+{
+ result : {
+ }
+ id : <number>
+}
+
===========================================================
Coverage for RuntimeAgent
{
@@ -261,5 +277,6 @@
getProperties : "checked"
releaseObject : "checked"
releaseObjectGroup : "checked"
+ run : "checked"
}
Modified: trunk/LayoutTests/inspector/protocol/runtime-agent.html (98236 => 98237)
--- trunk/LayoutTests/inspector/protocol/runtime-agent.html 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/LayoutTests/inspector/protocol/runtime-agent.html 2011-10-24 14:32:44 UTC (rev 98237)
@@ -28,7 +28,8 @@
["RuntimeAgent", "getProperties", result.objectId, true],
["RuntimeAgent", "releaseObject", result.objectId],
- ["RuntimeAgent", "releaseObjectGroup", 'test']];
+ ["RuntimeAgent", "releaseObjectGroup", 'test'],
+ ["RuntimeAgent", "run"]];
InspectorTest.runProtocolTestSuite("RuntimeAgent", testSuite, ['id', 'requestId', 'objectId', 'className']);
}
Modified: trunk/Source/WebCore/ChangeLog (98236 => 98237)
--- trunk/Source/WebCore/ChangeLog 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/ChangeLog 2011-10-24 14:32:44 UTC (rev 98237)
@@ -1,3 +1,49 @@
+2011-10-24 Yury Semikhatsky <[email protected]>
+
+ Web Inspector: allow debugging dedicated worker initialization
+ https://bugs.webkit.org/show_bug.cgi?id=70723
+
+ Now it is possible to pause each new dedicated worker on start. The user
+ needs to select a checkbox and then each newly created dedicated worker
+ will be paused on the first statement until the user resumes it explicitely.
+
+ Reviewed by Pavel Feldman.
+
+ * inspector/Inspector.json: resume command is added. It is similar to GDB's run
+ command, i.e. worker execution will be paused until explicit "resume" command is
+ received.
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStartImpl):
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart):
+ * inspector/InspectorRuntimeAgent.cpp:
+ (WebCore::InspectorRuntimeAgent::resume):
+ (WebCore::InspectorRuntimeAgent::pauseWorkerContext):
+ * inspector/InspectorRuntimeAgent.h:
+ * inspector/InspectorWorkerAgent.cpp:
+ (WebCore::InspectorWorkerAgent::shouldPauseDedicatedWorkerOnStart): returns true
+ if the user chose to automatically pause all new workers.
+ * inspector/InspectorWorkerAgent.h:
+ * inspector/WorkerInspectorController.cpp:
+ (WebCore::WorkerInspectorController::resume):
+ * inspector/front-end/WorkerManager.js:
+ (WebInspector.WorkerManager.loaded):
+ (WebInspector.WorkerManager.loadCompleted):
+ (WebInspector.WorkerManager.prototype._workerCreated):
+ (WebInspector.WorkerManager.prototype.openWorkerInspector):
+ (WebInspector.WorkerManager.prototype._openInspectorWindow):
+ * inspector/front-end/inspector.js:
+ (WebInspector.loaded):
+ * workers/Worker.cpp:
+ (WebCore::Worker::notifyFinished):
+ * workers/WorkerContextProxy.h:
+ * workers/WorkerMessagingProxy.cpp:
+ (WebCore::WorkerMessagingProxy::startWorkerContext): additional flag specifying
+ worker initial state(paused/not paused) is added to the factory method. The flag
+ will be carried to the corresponding WorkerThread.
+ (WebCore::WorkerMessagingProxy::connectToInspector):
+ * workers/WorkerMessagingProxy.h:
+
2011-10-21 Nikita Vasilyev <[email protected]>
Web Inspector: Make indent configurable
Modified: trunk/Source/WebCore/inspector/Inspector.json (98236 => 98237)
--- trunk/Source/WebCore/inspector/Inspector.json 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/Inspector.json 2011-10-24 14:32:44 UTC (rev 98237)
@@ -380,6 +380,11 @@
{ "name": "objectGroup", "type": "string", "description": "Symbolic object group name." }
],
"description": "Releases all remote objects that belong to a given group."
+ },
+ {
+ "name": "run",
+ "hidden": true,
+ "description": "Tells inspected instance(worker or page) that it can run in case it was started paused."
}
]
},
Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (98236 => 98237)
--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp 2011-10-24 14:32:44 UTC (rev 98237)
@@ -780,6 +780,13 @@
}
#if ENABLE(WORKERS)
+bool InspectorInstrumentation::shouldPauseDedicatedWorkerOnStartImpl(InstrumentingAgents* instrumentingAgents)
+{
+ if (InspectorWorkerAgent* workerAgent = instrumentingAgents->inspectorWorkerAgent())
+ return workerAgent->shouldPauseDedicatedWorkerOnStart();
+ return false;
+}
+
void InspectorInstrumentation::didStartWorkerContextImpl(InstrumentingAgents* instrumentingAgents, WorkerContextProxy* workerContextProxy, const KURL& url)
{
if (InspectorWorkerAgent* workerAgent = instrumentingAgents->inspectorWorkerAgent())
Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.h (98236 => 98237)
--- trunk/Source/WebCore/inspector/InspectorInstrumentation.h 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.h 2011-10-24 14:32:44 UTC (rev 98237)
@@ -175,6 +175,7 @@
static void didUseDOMStorage(Page*, StorageArea*, bool isLocalStorage, Frame*);
#if ENABLE(WORKERS)
+ static bool shouldPauseDedicatedWorkerOnStart(ScriptExecutionContext*);
static void didStartWorkerContext(ScriptExecutionContext*, WorkerContextProxy*, const KURL&);
static void didCreateWorker(ScriptExecutionContext*, intptr_t id, const String& url, bool isSharedWorker);
static void didDestroyWorker(ScriptExecutionContext*, intptr_t id);
@@ -306,6 +307,7 @@
static void didUseDOMStorageImpl(InstrumentingAgents*, StorageArea*, bool isLocalStorage, Frame*);
#if ENABLE(WORKERS)
+ static bool shouldPauseDedicatedWorkerOnStartImpl(InstrumentingAgents*);
static void didStartWorkerContextImpl(InstrumentingAgents*, WorkerContextProxy*, const KURL&);
static void didCreateWorkerImpl(InstrumentingAgents*, intptr_t id, const String& url, bool isSharedWorker);
static void didDestroyWorkerImpl(InstrumentingAgents*, intptr_t id);
@@ -944,6 +946,16 @@
}
#if ENABLE(WORKERS)
+inline bool InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(ScriptExecutionContext* context)
+{
+#if ENABLE(INSPECTOR)
+ FAST_RETURN_IF_NO_FRONTENDS(false);
+ if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForContext(context))
+ return shouldPauseDedicatedWorkerOnStartImpl(instrumentingAgents);
+#endif
+ return false;
+}
+
inline void InspectorInstrumentation::didStartWorkerContext(ScriptExecutionContext* context, WorkerContextProxy* proxy, const KURL& url)
{
#if ENABLE(INSPECTOR)
Modified: trunk/Source/WebCore/inspector/InspectorRuntimeAgent.cpp (98236 => 98237)
--- trunk/Source/WebCore/inspector/InspectorRuntimeAgent.cpp 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/InspectorRuntimeAgent.cpp 2011-10-24 14:32:44 UTC (rev 98237)
@@ -140,6 +140,11 @@
m_injectedScriptManager->releaseObjectGroup(objectGroup);
}
+void InspectorRuntimeAgent::run(ErrorString*)
+{
+ m_paused = false;
+}
+
#if ENABLE(_javascript__DEBUGGER)
void InspectorRuntimeAgent::setScriptDebugServer(ScriptDebugServer* scriptDebugServer)
{
@@ -156,11 +161,6 @@
// Keep waiting until execution is resumed.
} while (result == MessageQueueMessageReceived && m_paused);
}
-
-void InspectorRuntimeAgent::resume()
-{
- m_paused = false;
-}
#endif // ENABLE(WORKERS)
#endif // ENABLE(_javascript__DEBUGGER)
Modified: trunk/Source/WebCore/inspector/InspectorRuntimeAgent.h (98236 => 98237)
--- trunk/Source/WebCore/inspector/InspectorRuntimeAgent.h 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/InspectorRuntimeAgent.h 2011-10-24 14:32:44 UTC (rev 98237)
@@ -75,12 +75,12 @@
void releaseObject(ErrorString*, const String& objectId);
void getProperties(ErrorString*, const String& objectId, const bool* const ownProperties, RefPtr<InspectorArray>* result);
void releaseObjectGroup(ErrorString*, const String& objectGroup);
+ void run(ErrorString*);
#if ENABLE(_javascript__DEBUGGER)
void setScriptDebugServer(ScriptDebugServer*);
#if ENABLE(WORKERS)
void pauseWorkerContext(WorkerContext*);
- void resume();
#endif
#endif
Modified: trunk/Source/WebCore/inspector/InspectorWorkerAgent.cpp (98236 => 98237)
--- trunk/Source/WebCore/inspector/InspectorWorkerAgent.cpp 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/InspectorWorkerAgent.cpp 2011-10-24 14:32:44 UTC (rev 98237)
@@ -188,6 +188,11 @@
m_inspectorState->setBoolean(WorkerAgentState::autoconnectToWorkers, value);
}
+bool InspectorWorkerAgent::shouldPauseDedicatedWorkerOnStart()
+{
+ return m_inspectorState->getBoolean(WorkerAgentState::autoconnectToWorkers);
+}
+
void InspectorWorkerAgent::didStartWorkerContext(WorkerContextProxy* workerContextProxy, const KURL& url)
{
WorkerFrontendChannel* channel = new WorkerFrontendChannel(m_inspectorFrontend, workerContextProxy);
Modified: trunk/Source/WebCore/inspector/InspectorWorkerAgent.h (98236 => 98237)
--- trunk/Source/WebCore/inspector/InspectorWorkerAgent.h 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/InspectorWorkerAgent.h 2011-10-24 14:32:44 UTC (rev 98237)
@@ -56,6 +56,7 @@
void clearFrontend();
// Called from InspectorInstrumentation
+ bool shouldPauseDedicatedWorkerOnStart();
void didStartWorkerContext(WorkerContextProxy*, const KURL&);
void workerContextTerminated(WorkerContextProxy*);
Modified: trunk/Source/WebCore/inspector/WorkerInspectorController.cpp (98236 => 98237)
--- trunk/Source/WebCore/inspector/WorkerInspectorController.cpp 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/WorkerInspectorController.cpp 2011-10-24 14:32:44 UTC (rev 98237)
@@ -209,7 +209,8 @@
#if ENABLE(_javascript__DEBUGGER)
void WorkerInspectorController::resume()
{
- m_runtimeAgent->resume();
+ ErrorString unused;
+ m_runtimeAgent->run(&unused);
}
#endif
Modified: trunk/Source/WebCore/inspector/front-end/WorkerManager.js (98236 => 98237)
--- trunk/Source/WebCore/inspector/front-end/WorkerManager.js 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/front-end/WorkerManager.js 2011-10-24 14:32:44 UTC (rev 98237)
@@ -47,13 +47,26 @@
WebInspector.WorkerManager.loaded = function()
{
var workerId = WebInspector.queryParamsObject["dedicatedWorkerId"];
- if (workerId)
+ if (workerId) {
WebInspector.WorkerManager._initializeDedicatedWorkerFrontend(workerId);
- else
+ } else
WebInspector.workerManager = new WebInspector.WorkerManager();
+}
- if (WebInspector.WorkerManager.isWorkerFrontend())
+WebInspector.WorkerManager.loadCompleted = function()
+{
+ // Make sure script execution of dedicated worker is resumed and then paused
+ // on the first script statement in case we autoattached to it.
+ if (WebInspector.queryParamsObject["workerPaused"]) {
+ DebuggerAgent.pause();
+ RuntimeAgent.run(calculateTitle);
+ } else if (WebInspector.WorkerManager.isWorkerFrontend())
+ calculateTitle();
+
+ function calculateTitle()
+ {
WebInspector.WorkerManager._calculateWorkerInspectorTitle();
+ }
}
WebInspector.WorkerManager._initializeDedicatedWorkerFrontend = function(workerId)
@@ -104,7 +117,7 @@
_workerCreated: function(workerId, url, inspectorConnected)
{
if (inspectorConnected)
- this._openInspectorWindow(workerId);
+ this._openInspectorWindow(workerId, true);
this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkerAdded, {workerId: workerId, url: url, inspectorConnected: inspectorConnected});
},
@@ -123,13 +136,15 @@
openWorkerInspector: function(workerId)
{
- this._openInspectorWindow(workerId);
+ this._openInspectorWindow(workerId, false);
WorkerAgent.connectToWorker(workerId);
},
- _openInspectorWindow: function(workerId)
+ _openInspectorWindow: function(workerId, workerIsPaused)
{
var url = "" + "&dedicatedWorkerId=" + workerId;
+ if (workerIsPaused)
+ url += "&workerPaused=true";
url = "" "");
// Set location=0 just to make sure the front-end will be opened in a separate window, not in new tab.
var workerInspectorWindow = window.open(url, undefined, "location=0");
Modified: trunk/Source/WebCore/inspector/front-end/inspector.js (98236 => 98237)
--- trunk/Source/WebCore/inspector/front-end/inspector.js 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/inspector/front-end/inspector.js 2011-10-24 14:32:44 UTC (rev 98237)
@@ -442,6 +442,7 @@
}
WebInspector.WorkerManager.loaded();
WebInspector.doLoadedDone();
+ WebInspector.WorkerManager.loadCompleted();
}
WebInspector.doLoadedDone = function()
Modified: trunk/Source/WebCore/workers/Worker.cpp (98236 => 98237)
--- trunk/Source/WebCore/workers/Worker.cpp 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/workers/Worker.cpp 2011-10-24 14:32:44 UTC (rev 98237)
@@ -139,7 +139,10 @@
if (m_scriptLoader->failed())
dispatchEvent(Event::create(eventNames().errorEvent, false, true));
else {
- m_contextProxy->startWorkerContext(m_scriptLoader->url(), scriptExecutionContext()->userAgent(m_scriptLoader->url()), m_scriptLoader->script());
+ WorkerThreadStartMode startMode = DontPauseWorkerContextOnStart;
+ if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(scriptExecutionContext()))
+ startMode = PauseWorkerContextOnStart;
+ m_contextProxy->startWorkerContext(m_scriptLoader->url(), scriptExecutionContext()->userAgent(m_scriptLoader->url()), m_scriptLoader->script(), startMode);
InspectorInstrumentation::didStartWorkerContext(scriptExecutionContext(), m_contextProxy, m_scriptLoader->url());
InspectorInstrumentation::scriptImported(scriptExecutionContext(), m_scriptLoader->identifier(), m_scriptLoader->script());
}
Modified: trunk/Source/WebCore/workers/WorkerContextProxy.h (98236 => 98237)
--- trunk/Source/WebCore/workers/WorkerContextProxy.h 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/workers/WorkerContextProxy.h 2011-10-24 14:32:44 UTC (rev 98237)
@@ -34,6 +34,7 @@
#if ENABLE(WORKERS)
#include "MessagePort.h"
+#include "WorkerThread.h"
#include <wtf/Forward.h>
#include <wtf/PassOwnPtr.h>
@@ -49,7 +50,7 @@
virtual ~WorkerContextProxy() {}
- virtual void startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode) = 0;
+ virtual void startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode) = 0;
virtual void terminateWorkerContext() = 0;
Modified: trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp (98236 => 98237)
--- trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp 2011-10-24 14:32:44 UTC (rev 98237)
@@ -266,9 +266,9 @@
|| (m_scriptExecutionContext->isWorkerContext() && currentThread() == static_cast<WorkerContext*>(m_scriptExecutionContext.get())->thread()->threadID()));
}
-void WorkerMessagingProxy::startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode)
+void WorkerMessagingProxy::startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode)
{
- RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this, DontPauseWorkerContextOnStart);
+ RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this, startMode);
workerThreadCreated(thread);
thread->start();
}
@@ -366,7 +366,7 @@
return;
ASSERT(!m_pageInspector);
m_pageInspector = pageInspector;
- m_workerThread->runLoop().postTask(createCallbackTask(connectToWorkerContextInspectorTask, true));
+ m_workerThread->runLoop().postTaskForMode(createCallbackTask(connectToWorkerContextInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode);
}
static void disconnectFromWorkerContextInspectorTask(ScriptExecutionContext* context, bool)
Modified: trunk/Source/WebCore/workers/WorkerMessagingProxy.h (98236 => 98237)
--- trunk/Source/WebCore/workers/WorkerMessagingProxy.h 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebCore/workers/WorkerMessagingProxy.h 2011-10-24 14:32:44 UTC (rev 98237)
@@ -53,7 +53,7 @@
// Implementations of WorkerContextProxy.
// (Only use these methods in the worker object thread.)
- virtual void startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode);
+ virtual void startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode);
virtual void terminateWorkerContext();
virtual void postMessageToWorkerContext(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>);
virtual bool hasPendingActivity() const;
Modified: trunk/Source/WebKit/chromium/ChangeLog (98236 => 98237)
--- trunk/Source/WebKit/chromium/ChangeLog 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebKit/chromium/ChangeLog 2011-10-24 14:32:44 UTC (rev 98237)
@@ -1,3 +1,16 @@
+2011-10-24 Yury Semikhatsky <[email protected]>
+
+ Web Inspector: allow debugging dedicated worker initialization
+ https://bugs.webkit.org/show_bug.cgi?id=70723
+
+ Pass worker thread start mode to the worker thread.
+
+ Reviewed by Pavel Feldman.
+
+ * src/WebWorkerClientImpl.cpp:
+ (WebKit::WebWorkerClientImpl::startWorkerContext):
+ * src/WebWorkerClientImpl.h:
+
2011-10-24 Sheriff Bot <[email protected]>
Unreviewed. Rolled DEPS.
Modified: trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.cpp (98236 => 98237)
--- trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.cpp 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.cpp 2011-10-24 14:32:44 UTC (rev 98237)
@@ -85,9 +85,9 @@
return 0;
}
-void WebWorkerClientImpl::startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode)
+void WebWorkerClientImpl::startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode)
{
- RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this, DontPauseWorkerContextOnStart);
+ RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this, startMode);
m_proxy->workerThreadCreated(thread);
thread->start();
}
Modified: trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.h (98236 => 98237)
--- trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.h 2011-10-24 13:52:51 UTC (rev 98236)
+++ trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.h 2011-10-24 14:32:44 UTC (rev 98237)
@@ -69,7 +69,8 @@
// process, this will be the main WebKit thread.
virtual void startWorkerContext(const WebCore::KURL&,
const WTF::String&,
- const WTF::String&);
+ const WTF::String&,
+ WebCore::WorkerThreadStartMode);
virtual void terminateWorkerContext();
virtual void postMessageToWorkerContext(
PassRefPtr<WebCore::SerializedScriptValue> message,