Index: Source/core/dom/ScriptExecutionContext.cpp |
diff --git a/Source/core/dom/ScriptExecutionContext.cpp b/Source/core/dom/ScriptExecutionContext.cpp |
index 6c0b2101c5dfe6e21e924cc2f016b092ca95ca7e..8e525b7b1905d1235303ccd14d01f175bb29401d 100644 |
--- a/Source/core/dom/ScriptExecutionContext.cpp |
+++ b/Source/core/dom/ScriptExecutionContext.cpp |
@@ -28,6 +28,7 @@ |
#include "config.h" |
#include "core/dom/ScriptExecutionContext.h" |
+#include "bindings/v8/SerializedScriptValue.h" |
#include "core/dom/ContextLifecycleNotifier.h" |
#include "core/dom/ErrorEvent.h" |
#include "core/dom/EventTarget.h" |
@@ -195,7 +196,7 @@ void ScriptExecutionContext::closeMessagePorts() { |
} |
} |
-bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& lineNumber, int& columnNumber, String& sourceURL, CachedScript* cachedScript) |
+bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& lineNumber, int& columnNumber, String& sourceURL, ScriptValue& error, CachedScript* cachedScript) |
{ |
KURL targetURL = completeURL(sourceURL); |
if (securityOrigin()->canRequest(targetURL) || (cachedScript && cachedScript->passesAccessControlCheck(securityOrigin()))) |
@@ -204,10 +205,11 @@ bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& line |
sourceURL = String(); |
lineNumber = 0; |
columnNumber = 0; |
+ error.clear(); |
return true; |
} |
-void ScriptExecutionContext::reportException(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, PassRefPtr<ScriptCallStack> callStack, CachedScript* cachedScript) |
+void ScriptExecutionContext::reportException(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, PassRefPtr<ScriptCallStack> callStack, const ScriptValue& error, CachedScript* cachedScript) |
{ |
if (m_inDispatchErrorEvent) { |
if (!m_pendingExceptions) |
@@ -217,7 +219,7 @@ void ScriptExecutionContext::reportException(const String& errorMessage, int lin |
} |
// First report the original exception and only then all the nested ones. |
- if (!dispatchErrorEvent(errorMessage, lineNumber, columnNumber, sourceURL, cachedScript)) |
+ if (!dispatchErrorEvent(errorMessage, lineNumber, columnNumber, sourceURL, error, cachedScript)) |
logExceptionToConsole(errorMessage, sourceURL, lineNumber, columnNumber, callStack); |
if (!m_pendingExceptions) |
@@ -235,7 +237,7 @@ void ScriptExecutionContext::addConsoleMessage(MessageSource source, MessageLeve |
addMessage(source, level, message, sourceURL, lineNumber, 0, state, requestIdentifier); |
} |
-bool ScriptExecutionContext::dispatchErrorEvent(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, CachedScript* cachedScript) |
+bool ScriptExecutionContext::dispatchErrorEvent(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, const ScriptValue& errorObject, CachedScript* cachedScript) |
{ |
EventTarget* target = errorEventTarget(); |
if (!target) |
@@ -245,11 +247,12 @@ bool ScriptExecutionContext::dispatchErrorEvent(const String& errorMessage, int |
int line = lineNumber; |
int column = columnNumber; |
String sourceName = sourceURL; |
- sanitizeScriptError(message, line, column, sourceName, cachedScript); |
+ ScriptValue error = errorObject; |
+ sanitizeScriptError(message, line, column, sourceName, error, cachedScript); |
ASSERT(!m_inDispatchErrorEvent); |
m_inDispatchErrorEvent = true; |
- RefPtr<ErrorEvent> errorEvent = ErrorEvent::create(message, sourceName, line, column); |
+ RefPtr<ErrorEvent> errorEvent = ErrorEvent::create(message, sourceName, line, column, error); |
target->dispatchEvent(errorEvent); |
m_inDispatchErrorEvent = false; |
return errorEvent->defaultPrevented(); |