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;