Title: [101125] trunk/Source/WebCore
Revision
101125
Author
[email protected]
Date
2011-11-24 00:01:21 -0800 (Thu, 24 Nov 2011)

Log Message

Web Inspector: exceptions in shared workers should be logged to web inspector console
https://bugs.webkit.org/show_bug.cgi?id=73022

According to section "4.7 Runtime script errors" of Web Workers spec "For shared
workers, if the error is still not handled afterwards, or if the error occurred
while handling a previous script error, the error may be reported to the user."

This change adds uncaugh exceptions to the shared worker web inspector console.

Reviewed by Pavel Feldman.

* inspector/InspectorConsoleAgent.cpp:
(WebCore::InspectorConsoleAgent::restore):
* inspector/InspectorConsoleInstrumentation.h:
(WebCore::InspectorInstrumentation::addMessageToConsole):
* inspector/InspectorDebuggerAgent.cpp:
(WebCore::InspectorDebuggerAgent::restore):
* inspector/InspectorInstrumentation.cpp:
(WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerContext):
* inspector/InspectorInstrumentation.h:
* inspector/WorkerInspectorController.cpp:
(WebCore::WorkerInspectorController::connectFrontend):
(WebCore::WorkerInspectorController::disconnectFrontend):
(WebCore::WorkerInspectorController::restoreInspectorStateFromCookie):
* inspector/WorkerInspectorController.h:
* inspector/front-end/WorkerManager.js:
(WebInspector.WorkerManager.showWorkerTerminatedScreen):
* inspector/front-end/inspector.js:
* workers/SharedWorkerContext.cpp:
(WebCore::SharedWorkerContext::logExceptionToConsole):
* workers/SharedWorkerContext.h:
* workers/WorkerContext.cpp:
(WebCore::WorkerContext::addMessage): console messages are now added to
the worker console agent.
(WebCore::WorkerContext::addMessageToWorkerConsole):
* workers/WorkerContext.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (101124 => 101125)


--- trunk/Source/WebCore/ChangeLog	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/ChangeLog	2011-11-24 08:01:21 UTC (rev 101125)
@@ -1,3 +1,42 @@
+2011-11-23  Yury Semikhatsky  <[email protected]>
+
+        Web Inspector: exceptions in shared workers should be logged to web inspector console
+        https://bugs.webkit.org/show_bug.cgi?id=73022
+
+        According to section "4.7 Runtime script errors" of Web Workers spec "For shared
+        workers, if the error is still not handled afterwards, or if the error occurred
+        while handling a previous script error, the error may be reported to the user."
+
+        This change adds uncaugh exceptions to the shared worker web inspector console.
+
+        Reviewed by Pavel Feldman.
+
+        * inspector/InspectorConsoleAgent.cpp:
+        (WebCore::InspectorConsoleAgent::restore):
+        * inspector/InspectorConsoleInstrumentation.h:
+        (WebCore::InspectorInstrumentation::addMessageToConsole):
+        * inspector/InspectorDebuggerAgent.cpp:
+        (WebCore::InspectorDebuggerAgent::restore):
+        * inspector/InspectorInstrumentation.cpp:
+        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerContext):
+        * inspector/InspectorInstrumentation.h:
+        * inspector/WorkerInspectorController.cpp:
+        (WebCore::WorkerInspectorController::connectFrontend):
+        (WebCore::WorkerInspectorController::disconnectFrontend):
+        (WebCore::WorkerInspectorController::restoreInspectorStateFromCookie):
+        * inspector/WorkerInspectorController.h:
+        * inspector/front-end/WorkerManager.js:
+        (WebInspector.WorkerManager.showWorkerTerminatedScreen):
+        * inspector/front-end/inspector.js:
+        * workers/SharedWorkerContext.cpp:
+        (WebCore::SharedWorkerContext::logExceptionToConsole):
+        * workers/SharedWorkerContext.h:
+        * workers/WorkerContext.cpp:
+        (WebCore::WorkerContext::addMessage): console messages are now added to
+        the worker console agent.
+        (WebCore::WorkerContext::addMessageToWorkerConsole):
+        * workers/WorkerContext.h:
+
 2011-11-23  Jeff Timanus  <[email protected]>
 
         [Chromium]  Prevent DrawingBuffer instances from corrupting the active

Modified: trunk/Source/WebCore/inspector/InspectorConsoleAgent.cpp (101124 => 101125)


--- trunk/Source/WebCore/inspector/InspectorConsoleAgent.cpp	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/InspectorConsoleAgent.cpp	2011-11-24 08:01:21 UTC (rev 101125)
@@ -115,6 +115,7 @@
 void InspectorConsoleAgent::restore()
 {
     if (m_inspectorState->getBoolean(ConsoleAgentState::consoleMessagesEnabled)) {
+        m_frontend->messagesCleared();
         ErrorString error;
         enable(&error);
     }

Modified: trunk/Source/WebCore/inspector/InspectorConsoleInstrumentation.h (101124 => 101125)


--- trunk/Source/WebCore/inspector/InspectorConsoleInstrumentation.h	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/InspectorConsoleInstrumentation.h	2011-11-24 08:01:21 UTC (rev 101125)
@@ -34,6 +34,7 @@
 #include "InspectorInstrumentation.h"
 #include "ScriptArguments.h"
 #include "ScriptCallStack.h"
+#include "ScriptProfile.h"
 #include <wtf/PassRefPtr.h>
 
 namespace WebCore {
@@ -54,6 +55,24 @@
 #endif
 }
 
+#if ENABLE(WORKERS)
+inline void InspectorInstrumentation::addMessageToConsole(WorkerContext* workerContext, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
+{
+#if ENABLE(INSPECTOR)
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForWorkerContext(workerContext))
+        addMessageToConsoleImpl(instrumentingAgents, source, type, level, message, arguments, callStack);
+#endif
+}
+
+inline void InspectorInstrumentation::addMessageToConsole(WorkerContext* workerContext, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& scriptId)
+{
+#if ENABLE(INSPECTOR)
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForWorkerContext(workerContext))
+        addMessageToConsoleImpl(instrumentingAgents, source, type, level, message, lineNumber, scriptId);
+#endif
+}
+#endif
+
 inline void InspectorInstrumentation::consoleCount(Page* page, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> stack)
 {
 #if ENABLE(INSPECTOR)

Modified: trunk/Source/WebCore/inspector/InspectorDebuggerAgent.cpp (101124 => 101125)


--- trunk/Source/WebCore/inspector/InspectorDebuggerAgent.cpp	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/InspectorDebuggerAgent.cpp	2011-11-24 08:01:21 UTC (rev 101125)
@@ -128,8 +128,10 @@
 
 void InspectorDebuggerAgent::restore()
 {
-    if (enabled())
+    if (enabled()) {
+        m_frontend->globalObjectCleared();
         enable();
+    }
 }
 
 void InspectorDebuggerAgent::setFrontend(InspectorFrontend* frontend)

Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (101124 => 101125)


--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp	2011-11-24 08:01:21 UTC (rev 101125)
@@ -932,6 +932,15 @@
     return instrumentationForPage(page);
 }
 
+#if ENABLE(WORKERS)
+InstrumentingAgents* InspectorInstrumentation::instrumentingAgentsForWorkerContext(WorkerContext* workerContext)
+{
+    if (!workerContext)
+        return 0;
+    return instrumentationForWorkerContext(workerContext);
+}
+#endif
+
 } // namespace WebCore
 
 #endif // !ENABLE(INSPECTOR)

Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.h (101124 => 101125)


--- trunk/Source/WebCore/inspector/InspectorInstrumentation.h	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.h	2011-11-24 08:01:21 UTC (rev 101125)
@@ -151,6 +151,10 @@
 
     static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
     static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String&);
+#if ENABLE(WORKERS)
+    static void addMessageToConsole(WorkerContext*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
+    static void addMessageToConsole(WorkerContext*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String&);
+#endif
     static void consoleCount(Page*, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
     static void startConsoleTiming(Page*, const String& title);
     static void stopConsoleTiming(Page*, const String& title, PassRefPtr<ScriptCallStack>);
@@ -328,6 +332,9 @@
     static InstrumentingAgents* instrumentingAgentsForFrame(Frame*);
     static InstrumentingAgents* instrumentingAgentsForContext(ScriptExecutionContext*);
     static InstrumentingAgents* instrumentingAgentsForDocument(Document*);
+#if ENABLE(WORKERS)
+    static InstrumentingAgents* instrumentingAgentsForWorkerContext(WorkerContext*);
+#endif
 
     static bool collectingHTMLParseErrors(InstrumentingAgents*);
     static void pauseOnNativeEventIfNeeded(InstrumentingAgents*, const String& categoryType, const String& eventName, bool synchronous);

Modified: trunk/Source/WebCore/inspector/WorkerInspectorController.cpp (101124 => 101125)


--- trunk/Source/WebCore/inspector/WorkerInspectorController.cpp	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/WorkerInspectorController.cpp	2011-11-24 08:01:21 UTC (rev 101125)
@@ -38,6 +38,7 @@
 #include "InjectedScriptManager.h"
 #include "InspectorBackendDispatcher.h"
 #include "InspectorClient.h"
+#include "InspectorConsoleAgent.h"
 #include "InspectorFrontend.h"
 #include "InspectorFrontendChannel.h"
 #include "InspectorState.h"
@@ -123,12 +124,12 @@
     m_backendDispatcher = adoptRef(new InspectorBackendDispatcher(
         m_frontendChannel.get(),
         0, // InspectorApplicationCacheAgent
+        0, // InspectorCSSAgent
+        m_consoleAgent.get(),
+        0, // InspectorDOMAgent
 #if ENABLE(_javascript__DEBUGGER)
         0, // InspectorDOMDebuggerAgent
 #endif
-        0, // InspectorCSSAgent
-        0, // InspectorConsoleAgent
-        0, // InspectorDOMAgent
         0, // InspectorDOMStorageAgent
 #if ENABLE(SQL_DATABASE)
         0, // InspectorDatabaseAgent
@@ -150,6 +151,7 @@
 #if ENABLE(_javascript__DEBUGGER)
     m_debuggerAgent->setFrontend(m_frontend.get());
 #endif
+    m_consoleAgent->setFrontend(m_frontend.get());
 }
 
 void WorkerInspectorController::disconnectFrontend()
@@ -164,6 +166,7 @@
 #if ENABLE(_javascript__DEBUGGER)
     m_debuggerAgent->clearFrontend();
 #endif
+    m_consoleAgent->clearFrontend();
     m_injectedScriptManager->injectedScriptHost()->clearFrontend();
 
     m_frontend.clear();
@@ -179,6 +182,7 @@
 #if ENABLE(_javascript__DEBUGGER)
     m_debuggerAgent->restore();
 #endif
+    m_consoleAgent->restore();
 }
 
 void WorkerInspectorController::dispatchMessageFromFrontend(const String& message)

Modified: trunk/Source/WebCore/inspector/WorkerInspectorController.h (101124 => 101125)


--- trunk/Source/WebCore/inspector/WorkerInspectorController.h	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/WorkerInspectorController.h	2011-11-24 08:01:21 UTC (rev 101125)
@@ -49,6 +49,7 @@
 class InspectorConsoleAgent;
 class InspectorFrontend;
 class InspectorFrontendChannel;
+class InspectorConsoleAgent;
 class InspectorInstrumentation;
 class InspectorRuntimeAgent;
 class InspectorState;

Modified: trunk/Source/WebCore/inspector/front-end/WorkerManager.js (101124 => 101125)


--- trunk/Source/WebCore/inspector/front-end/WorkerManager.js	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/front-end/WorkerManager.js	2011-11-24 08:01:21 UTC (rev 101125)
@@ -112,10 +112,10 @@
 {
     function onHide()
     {
-        WebInspector.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, screen.hide, screen);
+        WebInspector.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, screen.hide, screen);
     }
     var screen = new WebInspector.WorkerTerminatedScreen();
-    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, screen.hide, screen);
+    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, screen.hide, screen);
     screen.show(onHide.bind(this));
 }
 

Modified: trunk/Source/WebCore/inspector/front-end/inspector.js (101124 => 101125)


--- trunk/Source/WebCore/inspector/front-end/inspector.js	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/inspector/front-end/inspector.js	2011-11-24 08:01:21 UTC (rev 101125)
@@ -380,9 +380,7 @@
 
     this.extensionServer.initExtensions();
 
-    // There is no console agent for workers yet.
-    if (!WebInspector.WorkerManager.isWorkerFrontend())
-        this.console.enableAgent();
+    this.console.enableAgent();
     DatabaseAgent.enable();
     DOMStorageAgent.enable();
 

Modified: trunk/Source/WebCore/workers/SharedWorkerContext.cpp (101124 => 101125)


--- trunk/Source/WebCore/workers/SharedWorkerContext.cpp	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/workers/SharedWorkerContext.cpp	2011-11-24 08:01:21 UTC (rev 101125)
@@ -38,6 +38,7 @@
 #include "EventNames.h"
 #include "MessageEvent.h"
 #include "NotImplemented.h"
+#include "ScriptCallStack.h"
 #include "SharedWorkerThread.h"
 
 namespace WebCore {
@@ -69,6 +70,12 @@
     return static_cast<SharedWorkerThread*>(Base::thread());
 }
 
+void SharedWorkerContext::logExceptionToConsole(const String& errorMessage, int lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack> callStack)
+{
+    WorkerContext::logExceptionToConsole(errorMessage, lineNumber, sourceURL, callStack);
+    addMessageToWorkerConsole(JSMessageSource, LogMessageType, ErrorMessageLevel, errorMessage, lineNumber, sourceURL, callStack);
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(SHARED_WORKERS)

Modified: trunk/Source/WebCore/workers/SharedWorkerContext.h (101124 => 101125)


--- trunk/Source/WebCore/workers/SharedWorkerContext.h	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/workers/SharedWorkerContext.h	2011-11-24 08:01:21 UTC (rev 101125)
@@ -61,6 +61,9 @@
         SharedWorkerThread* thread();
     private:
         SharedWorkerContext(const String& name, const KURL&, const String&, SharedWorkerThread*);
+
+        virtual void logExceptionToConsole(const String& errorMessage, int lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack>);
+
         String m_name;
     };
 

Modified: trunk/Source/WebCore/workers/WorkerContext.cpp (101124 => 101125)


--- trunk/Source/WebCore/workers/WorkerContext.cpp	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/workers/WorkerContext.cpp	2011-11-24 08:01:21 UTC (rev 101125)
@@ -44,7 +44,7 @@
 #include "ErrorEvent.h"
 #include "Event.h"
 #include "EventException.h"
-#include "InspectorInstrumentation.h"
+#include "InspectorConsoleInstrumentation.h"
 #include "KURL.h"
 #include "MessagePort.h"
 #include "NotImplemented.h"
@@ -298,15 +298,25 @@
     thread()->workerReportingProxy().postExceptionToWorkerObject(errorMessage, lineNumber, sourceURL);
 }
 
-void WorkerContext::addMessage(MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack>)
+void WorkerContext::addMessage(MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack> callStack)
 {
     if (!isContextThread()) {
         postTask(AddConsoleMessageTask::create(source, type, level, message));
         return;
     }
     thread()->workerReportingProxy().postConsoleMessageToWorkerObject(source, type, level, message, lineNumber, sourceURL);
+    addMessageToWorkerConsole(source, type, level, message, lineNumber, sourceURL, callStack);
 }
 
+void WorkerContext::addMessageToWorkerConsole(MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack> callStack)
+{
+    ASSERT(isContextThread());
+    if (callStack)
+        InspectorInstrumentation::addMessageToConsole(this, source, type, level, message, 0, callStack);
+    else
+        InspectorInstrumentation::addMessageToConsole(this, source, type, level, message, lineNumber, sourceURL);
+}
+
 #if ENABLE(NOTIFICATIONS)
 NotificationCenter* WorkerContext::webkitNotifications() const
 {

Modified: trunk/Source/WebCore/workers/WorkerContext.h (101124 => 101125)


--- trunk/Source/WebCore/workers/WorkerContext.h	2011-11-24 07:47:49 UTC (rev 101124)
+++ trunk/Source/WebCore/workers/WorkerContext.h	2011-11-24 08:01:21 UTC (rev 101125)
@@ -177,6 +177,9 @@
     protected:
         WorkerContext(const KURL&, const String&, WorkerThread*);
 
+        virtual void logExceptionToConsole(const String& errorMessage, int lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack>);
+        void addMessageToWorkerConsole(MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack>);
+
     private:
         virtual void refScriptExecutionContext() { ref(); }
         virtual void derefScriptExecutionContext() { deref(); }
@@ -190,7 +193,6 @@
         virtual KURL virtualCompleteURL(const String&) const;
 
         virtual EventTarget* errorEventTarget();
-        virtual void logExceptionToConsole(const String& errorMessage, int lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack>);
 
         KURL m_url;
         String m_userAgent;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to