Index: Source/core/workers/WorkerGlobalScope.cpp |
diff --git a/Source/core/workers/WorkerGlobalScope.cpp b/Source/core/workers/WorkerGlobalScope.cpp |
index b355f28e92bcff44fba64c7b7b7406189f7e0b68..f59380694e896b4645ad6235d663c415a6d73cfb 100644 |
--- a/Source/core/workers/WorkerGlobalScope.cpp |
+++ b/Source/core/workers/WorkerGlobalScope.cpp |
@@ -62,6 +62,13 @@ |
namespace blink { |
+static unsigned long s_workerExceptionUniqueIdentifier = 0; |
vsevik
2014/11/24 09:51:34
Let's put these into an anonymous namespace.
kozy
2014/12/01 13:11:55
Done.
|
+ |
+unsigned long createWorkerExceptionUniqueIdentifier() |
+{ |
+ return ++s_workerExceptionUniqueIdentifier; |
+} |
+ |
class CloseWorkerGlobalScopeTask : public ExecutionContextTask { |
public: |
static PassOwnPtr<CloseWorkerGlobalScopeTask> create() |
@@ -267,9 +274,14 @@ EventTarget* WorkerGlobalScope::errorEventTarget() |
return this; |
} |
-void WorkerGlobalScope::logExceptionToConsole(const String& errorMessage, int, const String& sourceURL, int lineNumber, int columnNumber, PassRefPtrWillBeRawPtr<ScriptCallStack>) |
+void WorkerGlobalScope::logExceptionToConsole(const String& errorMessage, int, const String& sourceURL, int lineNumber, int columnNumber, PassRefPtrWillBeRawPtr<ScriptCallStack> callStack) |
{ |
- thread()->workerReportingProxy().reportException(errorMessage, lineNumber, columnNumber, sourceURL); |
+ unsigned long exceptionId = createWorkerExceptionUniqueIdentifier(); |
+ RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, errorMessage, sourceURL, lineNumber); |
+ consoleMessage->setCallStack(callStack); |
+ m_pendingMessages.set(exceptionId, consoleMessage); |
+ |
+ thread()->workerReportingProxy().reportException(errorMessage, lineNumber, columnNumber, sourceURL, exceptionId); |
} |
void WorkerGlobalScope::reportBlockedScriptExecutionToInspector(const String& directiveText) |
@@ -329,6 +341,15 @@ ConsoleMessageStorage* WorkerGlobalScope::messageStorage() |
return m_messageStorage.get(); |
} |
+void WorkerGlobalScope::exceptionHandled(int exceptionId, bool isHandled) |
+{ |
+ RefPtr<ConsoleMessage> consoleMessage = m_pendingMessages.take(exceptionId); |
+ if (!isHandled) { |
+ thread()->workerReportingProxy().reportConsoleMessage(consoleMessage); |
+ addMessageToWorkerConsole(consoleMessage.release()); |
+ } |
+} |
+ |
void WorkerGlobalScope::trace(Visitor* visitor) |
{ |
#if ENABLE(OILPAN) |