Title: [174028] trunk/Source
Revision
174028
Author
[email protected]
Date
2014-09-26 16:25:17 -0700 (Fri, 26 Sep 2014)

Log Message

Web Inspector: Automatic Inspection should continue once all breakpoints are loaded
https://bugs.webkit.org/show_bug.cgi?id=137038

Patch by Joseph Pecoraro <[email protected]> on 2014-09-26
Reviewed by Timothy Hatcher.

Source/_javascript_Core:

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.

Source/WebCore:

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):

Source/WebInspectorUI:

* UserInterface/Base/Main.js:
Send the initialized message after we have sent all other setup messages,
such as enabling features and setting breakpoints.

Modified Paths

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);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to