Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (174027 => 174028)
--- trunk/Source/_javascript_Core/ChangeLog 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-09-26 23:25:17 UTC (rev 174028)
@@ -1,3 +1,56 @@
+2014-09-26 Joseph Pecoraro <[email protected]>
+
+ Web Inspector: Automatic Inspection should continue once all breakpoints are loaded
+ https://bugs.webkit.org/show_bug.cgi?id=137038
+
+ Reviewed by Timothy Hatcher.
+
+ Add a new protocol command "Inspector.initialized" that signifies to the backend
+ when the frontend has sent all its initialization messages to the backend. This
+ can include information like breakpoints, which we would want to have loaded
+ before any _javascript_ evaluates in the context.
+
+ * inspector/protocol/InspectorDomain.json:
+ New protocol command, Inspector.initialized.
+
+ * inspector/agents/InspectorAgent.h:
+ * inspector/agents/InspectorAgent.cpp:
+ (Inspector::InspectorAgent::InspectorAgent):
+ (Inspector::InspectorAgent::initialized):
+ Tell the InspectorEnvironment (the Controller) the frontend has initialized.
+
+ * inspector/InspectorEnvironment.h:
+ Abstract virtual method to handle frontend initialization. To be
+ implemented by all of the InspectorControllers.
+
+ * inspector/JSGlobalObjectInspectorController.h:
+ * inspector/JSGlobalObjectInspectorController.cpp:
+ (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
+ (Inspector::JSGlobalObjectInspectorController::connectFrontend):
+ (Inspector::JSGlobalObjectInspectorController::disconnectFrontend):
+ (Inspector::JSGlobalObjectInspectorController::frontendInitialized):
+ When a frontend is initialized, if it was automatic inspection unpause the debuggable.
+
+ * inspector/remote/RemoteInspectorDebuggable.cpp:
+ (Inspector::RemoteInspectorDebuggable::unpauseForInitializedInspector):
+ Complete setup for this debuggable.
+
+ * inspector/remote/RemoteInspectorDebuggable.h:
+ * inspector/remote/RemoteInspectorDebuggableConnection.mm:
+ (Inspector::RemoteInspectorDebuggableConnection::setup):
+ Move the setup complete to later, when the frontend sends an "initialized" message.
+
+ * inspector/remote/RemoteInspector.h:
+ * inspector/remote/RemoteInspector.mm:
+ (Inspector::RemoteInspector::updateDebuggableAutomaticInspectCandidate):
+ Provide a longer timeout now that the frontend must send messages after the connection
+ has established. The longest I have seen in 600ms, but the average tends to be 200ms.
+ So bump the timeout to 800ms for a buffer.
+
+ (Inspector::RemoteInspector::setupSucceeded): Deleted.
+ (Inspector::RemoteInspector::setupCompleted):
+ Rename, as this happens at a slightly different time.
+
2014-09-26 Filip Pizlo <[email protected]>
DFG shouldn't insert store barriers when it has it on good authority that we're not storing a cell
Modified: trunk/Source/_javascript_Core/inspector/InspectorEnvironment.h (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/InspectorEnvironment.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/InspectorEnvironment.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -46,6 +46,7 @@
virtual InspectorEvaluateHandler evaluateHandler() const = 0;
virtual void willCallInjectedScriptFunction(JSC::ExecState*, const String& scriptName, int scriptLine) = 0;
virtual void didCallInjectedScriptFunction(JSC::ExecState*) = 0;
+ virtual void frontendInitialized() = 0;
};
} // namespace Inspector
Modified: trunk/Source/_javascript_Core/inspector/JSGlobalObjectInspectorController.cpp (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/JSGlobalObjectInspectorController.cpp 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/JSGlobalObjectInspectorController.cpp 2014-09-26 23:25:17 UTC (rev 174028)
@@ -47,6 +47,10 @@
#include <dlfcn.h>
#include <execinfo.h>
+#if ENABLE(REMOTE_INSPECTOR)
+#include "JSGlobalObjectDebuggable.h"
+#endif
+
using namespace JSC;
namespace Inspector {
@@ -56,6 +60,7 @@
, m_injectedScriptManager(std::make_unique<InjectedScriptManager>(*this, InjectedScriptHost::create()))
, m_inspectorFrontendChannel(nullptr)
, m_includeNativeCallStackWithExceptions(true)
+ , m_isAutomaticInspection(false)
{
auto runtimeAgent = std::make_unique<JSGlobalObjectRuntimeAgent>(m_injectedScriptManager.get(), m_globalObject);
auto consoleAgent = std::make_unique<JSGlobalObjectConsoleAgent>(m_injectedScriptManager.get());
@@ -67,7 +72,7 @@
runtimeAgent->setScriptDebugServer(&debuggerAgent->scriptDebugServer());
- m_agents.append(std::make_unique<InspectorAgent>());
+ m_agents.append(std::make_unique<InspectorAgent>(*this));
m_agents.append(WTF::move(runtimeAgent));
m_agents.append(WTF::move(consoleAgent));
m_agents.append(WTF::move(debuggerAgent));
@@ -90,19 +95,12 @@
ASSERT(!m_inspectorFrontendChannel);
ASSERT(!m_inspectorBackendDispatcher);
+ m_isAutomaticInspection = isAutomaticInspection;
+
m_inspectorFrontendChannel = frontendChannel;
m_inspectorBackendDispatcher = InspectorBackendDispatcher::create(frontendChannel);
m_agents.didCreateFrontendAndBackend(frontendChannel, m_inspectorBackendDispatcher.get());
-
- if (isAutomaticInspection) {
- // FIXME: We should not always pause for automatic inspection.
- // Currently if we don't automatically pause, then we may miss a breakpoint, since breakpoints
- // come from the frontend and might be received after some evaluateScript message. We should
- // have the frontend signal the backend when its setup messages are complete.
- m_debuggerAgent->enable(nullptr);
- m_debuggerAgent->pause(nullptr);
- }
}
void JSGlobalObjectInspectorController::disconnectFrontend(InspectorDisconnectReason reason)
@@ -115,6 +113,8 @@
m_inspectorBackendDispatcher->clearFrontend();
m_inspectorBackendDispatcher.clear();
m_inspectorFrontendChannel = nullptr;
+
+ m_isAutomaticInspection = false;
}
void JSGlobalObjectInspectorController::dispatchMessageFromFrontend(const String& message)
@@ -192,6 +192,14 @@
return JSC::evaluate;
}
+void JSGlobalObjectInspectorController::frontendInitialized()
+{
+#if ENABLE(REMOTE_INSPECTOR)
+ if (m_isAutomaticInspection)
+ m_globalObject.inspectorDebuggable().unpauseForInitializedInspector();
+#endif
+}
+
} // namespace Inspector
#endif // ENABLE(INSPECTOR)
Modified: trunk/Source/_javascript_Core/inspector/JSGlobalObjectInspectorController.h (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/JSGlobalObjectInspectorController.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/JSGlobalObjectInspectorController.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -78,6 +78,7 @@
virtual InspectorEvaluateHandler evaluateHandler() const override;
virtual void willCallInjectedScriptFunction(JSC::ExecState*, const String&, int) override { }
virtual void didCallInjectedScriptFunction(JSC::ExecState*) override { }
+ virtual void frontendInitialized() override;
private:
void appendAPIBacktrace(ScriptCallStack* callStack);
@@ -91,6 +92,7 @@
InspectorFrontendChannel* m_inspectorFrontendChannel;
RefPtr<InspectorBackendDispatcher> m_inspectorBackendDispatcher;
bool m_includeNativeCallStackWithExceptions;
+ bool m_isAutomaticInspection;
};
} // namespace Inspector
Modified: trunk/Source/_javascript_Core/inspector/agents/InspectorAgent.cpp (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/agents/InspectorAgent.cpp 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/agents/InspectorAgent.cpp 2014-09-26 23:25:17 UTC (rev 174028)
@@ -33,13 +33,15 @@
#if ENABLE(INSPECTOR)
+#include "InspectorEnvironment.h"
#include "InspectorValues.h"
#include "ScriptValue.h"
namespace Inspector {
-InspectorAgent::InspectorAgent()
+InspectorAgent::InspectorAgent(InspectorEnvironment& environment)
: InspectorAgentBase(ASCIILiteral("Inspector"))
+ , m_environment(environment)
, m_enabled(false)
{
}
@@ -87,6 +89,11 @@
m_enabled = false;
}
+void InspectorAgent::initialized(ErrorString*)
+{
+ m_environment.frontendInitialized();
+}
+
void InspectorAgent::inspect(PassRefPtr<Protocol::Runtime::RemoteObject> objectToInspect, PassRefPtr<InspectorObject> hints)
{
if (m_enabled && m_frontendDispatcher) {
Modified: trunk/Source/_javascript_Core/inspector/agents/InspectorAgent.h (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/agents/InspectorAgent.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/agents/InspectorAgent.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -40,10 +40,10 @@
namespace Inspector {
-class InspectorObject;
-class InstrumentingAgents;
+class InspectorEnvironment;
class InspectorInspectorBackendDispatcher;
class InspectorInspectorFrontendDispatchers;
+class InspectorObject;
typedef String ErrorString;
@@ -51,7 +51,7 @@
WTF_MAKE_NONCOPYABLE(InspectorAgent);
WTF_MAKE_FAST_ALLOCATED;
public:
- InspectorAgent();
+ InspectorAgent(InspectorEnvironment&);
virtual ~InspectorAgent();
virtual void didCreateFrontendAndBackend(InspectorFrontendChannel*, InspectorBackendDispatcher*) override;
@@ -59,11 +59,13 @@
virtual void enable(ErrorString*) override;
virtual void disable(ErrorString*) override;
+ virtual void initialized(ErrorString*) override;
void inspect(PassRefPtr<Protocol::Runtime::RemoteObject> objectToInspect, PassRefPtr<InspectorObject> hints);
void evaluateForTestInFrontend(const String& script);
private:
+ InspectorEnvironment& m_environment;
std::unique_ptr<InspectorInspectorFrontendDispatcher> m_frontendDispatcher;
RefPtr<InspectorInspectorBackendDispatcher> m_backendDispatcher;
Vector<String> m_pendingEvaluateTestCommands;
Modified: trunk/Source/_javascript_Core/inspector/protocol/InspectorDomain.json (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/protocol/InspectorDomain.json 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/protocol/InspectorDomain.json 2014-09-26 23:25:17 UTC (rev 174028)
@@ -9,6 +9,10 @@
{
"name": "disable",
"description": "Disables inspector domain notifications."
+ },
+ {
+ "name": "initialized",
+ "description": "Sent by the frontend after all initialization messages have been sent."
}
],
"events": [
Modified: trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.h (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -55,7 +55,7 @@
void updateDebuggableAutomaticInspectCandidate(RemoteInspectorDebuggable*);
void sendMessageToRemoteFrontend(unsigned identifier, const String& message);
void setupFailed(unsigned identifier);
- void setupSucceeded(unsigned identifier);
+ void setupCompleted(unsigned identifier);
bool waitingForAutomaticInspection(unsigned identifier);
bool enabled() const { return m_enabled; }
Modified: trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.mm (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.mm 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.mm 2014-09-26 23:25:17 UTC (rev 174028)
@@ -221,7 +221,7 @@
}
// In case debuggers fail to respond, or we cannot connect to webinspectord, automatically continue after a short period of time.
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.8 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
std::lock_guard<std::mutex> lock(m_mutex);
if (m_automaticInspectionCandidateIdentifier == identifier) {
LOG_ERROR("Skipping Automatic Inspection Candidate with pageId(%u) because we failed to receive a response in time.", m_automaticInspectionCandidateIdentifier);
@@ -286,7 +286,7 @@
pushListingSoon();
}
-void RemoteInspector::setupSucceeded(unsigned identifier)
+void RemoteInspector::setupCompleted(unsigned identifier)
{
std::lock_guard<std::mutex> lock(m_mutex);
Modified: trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggable.cpp (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggable.cpp 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggable.cpp 2014-09-26 23:25:17 UTC (rev 174028)
@@ -91,6 +91,11 @@
loop.cycle();
}
+void RemoteInspectorDebuggable::unpauseForInitializedInspector()
+{
+ RemoteInspector::shared().setupCompleted(identifier());
+}
+
} // namespace Inspector
#endif // ENABLE(REMOTE_INSPECTOR)
Modified: trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggable.h (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggable.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggable.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -69,6 +69,7 @@
virtual bool automaticInspectionAllowed() const { return false; }
virtual void pauseWaitingForAutomaticInspection();
+ virtual void unpauseForInitializedInspector();
private:
unsigned m_identifier;
Modified: trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggableConnection.mm (174027 => 174028)
--- trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggableConnection.mm 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/_javascript_Core/inspector/remote/RemoteInspectorDebuggableConnection.mm 2014-09-26 23:25:17 UTC (rev 174028)
@@ -166,7 +166,6 @@
} else {
m_debuggable->connect(this, isAutomaticInspection);
m_connected = true;
- RemoteInspector::shared().setupSucceeded(identifier());
}
}
deref();
Modified: trunk/Source/WebCore/ChangeLog (174027 => 174028)
--- trunk/Source/WebCore/ChangeLog 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/WebCore/ChangeLog 2014-09-26 23:25:17 UTC (rev 174028)
@@ -1,3 +1,23 @@
+2014-09-26 Joseph Pecoraro <[email protected]>
+
+ Web Inspector: Automatic Inspection should continue once all breakpoints are loaded
+ https://bugs.webkit.org/show_bug.cgi?id=137038
+
+ Reviewed by Timothy Hatcher.
+
+ Handle frontend initialization messages even though pages cannot
+ be automatically inspected yet.
+
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::InspectorController):
+ (WebCore::InspectorController::connectFrontend):
+ (WebCore::InspectorController::disconnectFrontend):
+ (WebCore::InspectorController::frontendInitialized):
+ * inspector/InspectorController.h:
+ * inspector/WorkerInspectorController.h:
+ * page/Page.h:
+ (WebCore::Page::inspectorDebuggable):
+
2014-09-26 David Kilzer <[email protected]>
REGRESSION (r173988): Fix unused variable warning in PDFDocumentImage.cpp
Modified: trunk/Source/WebCore/inspector/InspectorController.cpp (174027 => 174028)
--- trunk/Source/WebCore/inspector/InspectorController.cpp 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/WebCore/inspector/InspectorController.cpp 2014-09-26 23:25:17 UTC (rev 174028)
@@ -74,6 +74,10 @@
#include <inspector/agents/InspectorAgent.h>
#include <runtime/JSLock.h>
+#if ENABLE(REMOTE_INSPECTOR)
+#include "PageDebuggable.h"
+#endif
+
using namespace JSC;
using namespace Inspector;
@@ -88,13 +92,14 @@
, m_inspectorClient(inspectorClient)
, m_inspectorFrontendClient(nullptr)
, m_isUnderTest(false)
+ , m_isAutomaticInspection(false)
#if ENABLE(REMOTE_INSPECTOR)
, m_hasRemoteFrontend(false)
#endif
{
ASSERT_ARG(inspectorClient, inspectorClient);
- auto inspectorAgentPtr = std::make_unique<InspectorAgent>();
+ auto inspectorAgentPtr = std::make_unique<InspectorAgent>(*this);
m_inspectorAgent = inspectorAgentPtr.get();
m_instrumentingAgents->setInspectorAgent(m_inspectorAgent);
m_agents.append(WTF::move(inspectorAgentPtr));
@@ -231,13 +236,15 @@
m_inspectorFrontendClient->windowObjectCleared();
}
-void InspectorController::connectFrontend(InspectorFrontendChannel* frontendChannel, bool)
+void InspectorController::connectFrontend(InspectorFrontendChannel* frontendChannel, bool isAutomaticInspection)
{
ASSERT(frontendChannel);
ASSERT(m_inspectorClient);
ASSERT(!m_inspectorFrontendChannel);
ASSERT(!m_inspectorBackendDispatcher);
+ m_isAutomaticInspection = isAutomaticInspection;
+
m_inspectorFrontendChannel = frontendChannel;
m_inspectorBackendDispatcher = InspectorBackendDispatcher::create(frontendChannel);
@@ -263,6 +270,8 @@
m_inspectorBackendDispatcher.clear();
m_inspectorFrontendChannel = nullptr;
+ m_isAutomaticInspection = false;
+
// Release overlay page resources.
m_overlay->freePage();
InspectorInstrumentation::frontendDeleted();
@@ -438,6 +447,14 @@
InspectorInstrumentation::didCallFunction(cookie, scriptExecutionContext);
}
+void InspectorController::frontendInitialized()
+{
+#if ENABLE(REMOTE_INSPECTOR)
+ if (m_isAutomaticInspection)
+ m_page.inspectorDebuggable().unpauseForInitializedInspector();
+#endif
+}
+
} // namespace WebCore
#endif // ENABLE(INSPECTOR)
Modified: trunk/Source/WebCore/inspector/InspectorController.h (174027 => 174028)
--- trunk/Source/WebCore/inspector/InspectorController.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/WebCore/inspector/InspectorController.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -129,6 +129,7 @@
virtual Inspector::InspectorEvaluateHandler evaluateHandler() const override;
virtual void willCallInjectedScriptFunction(JSC::ExecState*, const String& scriptName, int scriptLine) override;
virtual void didCallInjectedScriptFunction(JSC::ExecState*) override;
+ virtual void frontendInitialized() override;
private:
friend InstrumentingAgents* instrumentationForPage(Page*);
@@ -153,6 +154,7 @@
Inspector::InspectorAgentRegistry m_agents;
Vector<InspectorInstrumentationCookie, 2> m_injectedScriptInstrumentationCookies;
bool m_isUnderTest;
+ bool m_isAutomaticInspection;
#if ENABLE(REMOTE_INSPECTOR)
bool m_hasRemoteFrontend;
Modified: trunk/Source/WebCore/inspector/WorkerInspectorController.h (174027 => 174028)
--- trunk/Source/WebCore/inspector/WorkerInspectorController.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/WebCore/inspector/WorkerInspectorController.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -73,6 +73,7 @@
virtual Inspector::InspectorEvaluateHandler evaluateHandler() const override;
virtual void willCallInjectedScriptFunction(JSC::ExecState*, const String& scriptName, int scriptLine) override;
virtual void didCallInjectedScriptFunction(JSC::ExecState*) override;
+ virtual void frontendInitialized() override { }
private:
friend InstrumentingAgents* instrumentationForWorkerGlobalScope(WorkerGlobalScope*);
Modified: trunk/Source/WebCore/page/Page.h (174027 => 174028)
--- trunk/Source/WebCore/page/Page.h 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/WebCore/page/Page.h 2014-09-26 23:25:17 UTC (rev 174028)
@@ -410,6 +410,10 @@
PageConsoleClient& console() { return *m_consoleClient; }
+#if ENABLE(REMOTE_INSPECTOR)
+ PageDebuggable& inspectorDebuggable() const { return *m_inspectorDebuggable.get(); }
+#endif
+
void hiddenPageCSSAnimationSuspensionStateChanged();
#if ENABLE(VIDEO_TRACK)
Modified: trunk/Source/WebInspectorUI/ChangeLog (174027 => 174028)
--- trunk/Source/WebInspectorUI/ChangeLog 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/WebInspectorUI/ChangeLog 2014-09-26 23:25:17 UTC (rev 174028)
@@ -1,3 +1,14 @@
+2014-09-26 Joseph Pecoraro <[email protected]>
+
+ Web Inspector: Automatic Inspection should continue once all breakpoints are loaded
+ https://bugs.webkit.org/show_bug.cgi?id=137038
+
+ Reviewed by Timothy Hatcher.
+
+ * UserInterface/Base/Main.js:
+ Send the initialized message after we have sent all other setup messages,
+ such as enabling features and setting breakpoints.
+
2014-09-26 Saam Barati <[email protected]>
Web Inspector: Type Token View shows type information on hover when it shouldn't
Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (174027 => 174028)
--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js 2014-09-26 23:18:08 UTC (rev 174027)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js 2014-09-26 23:25:17 UTC (rev 174028)
@@ -117,6 +117,12 @@
if (window.ConsoleAgent)
ConsoleAgent.enable();
+ // Tell the backend we are initialized after all our initialization messages have been sent.
+ setTimeout(function() {
+ if (window.InspectorAgent && InspectorAgent.initialized)
+ InspectorAgent.initialized();
+ }, 0);
+
// Register for events.
this.replayManager.addEventListener(WebInspector.ReplayManager.Event.CaptureStarted, this._captureDidStart, this);
this.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.Paused, this._debuggerDidPause, this);