| Index: Source/core/dom/ScriptExecutionContext.cpp
|
| diff --git a/Source/core/dom/ScriptExecutionContext.cpp b/Source/core/dom/ScriptExecutionContext.cpp
|
| index ff466ba50c62691668ca73cb576396de04f1a26e..42e04fb56a91d2c57547429e91cb213219bb98f9 100644
|
| --- a/Source/core/dom/ScriptExecutionContext.cpp
|
| +++ b/Source/core/dom/ScriptExecutionContext.cpp
|
| @@ -194,10 +194,14 @@ void ScriptExecutionContext::closeMessagePorts() {
|
| }
|
| }
|
|
|
| +bool ScriptExecutionContext::shouldSanitizeScriptError(const String& sourceURL)
|
| +{
|
| + return !securityOrigin()->canRequest(completeURL(sourceURL));
|
| +}
|
| +
|
| bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& lineNumber, int& columnNumber, String& sourceURL)
|
| {
|
| - KURL targetURL = completeURL(sourceURL);
|
| - if (securityOrigin()->canRequest(targetURL))
|
| + if (!shouldSanitizeScriptError(sourceURL))
|
| return false;
|
| errorMessage = "Script error.";
|
| sourceURL = String();
|
| @@ -206,18 +210,19 @@ bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& line
|
| return true;
|
| }
|
|
|
| -void ScriptExecutionContext::reportException(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, PassRefPtr<ScriptCallStack> callStack)
|
| +void ScriptExecutionContext::reportException(PassRefPtr<ErrorEvent> event, PassRefPtr<ScriptCallStack> callStack)
|
| {
|
| + RefPtr<ErrorEvent> errorEvent = event;
|
| if (m_inDispatchErrorEvent) {
|
| if (!m_pendingExceptions)
|
| m_pendingExceptions = adoptPtr(new Vector<OwnPtr<PendingException> >());
|
| - m_pendingExceptions->append(adoptPtr(new PendingException(errorMessage, lineNumber, columnNumber, sourceURL, callStack)));
|
| + m_pendingExceptions->append(adoptPtr(new PendingException(errorEvent->message(), errorEvent->lineno(), errorEvent->colno(), errorEvent->filename(), callStack)));
|
| return;
|
| }
|
|
|
| // First report the original exception and only then all the nested ones.
|
| - if (!dispatchErrorEvent(errorMessage, lineNumber, columnNumber, sourceURL))
|
| - logExceptionToConsole(errorMessage, sourceURL, lineNumber, columnNumber, callStack);
|
| + if (!dispatchErrorEvent(errorEvent))
|
| + logExceptionToConsole(errorEvent->message(), errorEvent->filename(), errorEvent->lineno(), errorEvent->colno(), callStack);
|
|
|
| if (!m_pendingExceptions)
|
| return;
|
| @@ -234,21 +239,18 @@ 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)
|
| +bool ScriptExecutionContext::dispatchErrorEvent(PassRefPtr<ErrorEvent> event)
|
| {
|
| EventTarget* target = errorEventTarget();
|
| if (!target)
|
| return false;
|
|
|
| - String message = errorMessage;
|
| - int line = lineNumber;
|
| - int column = columnNumber;
|
| - String sourceName = sourceURL;
|
| - sanitizeScriptError(message, line, column, sourceName);
|
| + RefPtr<ErrorEvent> errorEvent = event;
|
| + if (shouldSanitizeScriptError(errorEvent->filename()))
|
| + errorEvent = ErrorEvent::createSanitizedError();
|
|
|
| ASSERT(!m_inDispatchErrorEvent);
|
| m_inDispatchErrorEvent = true;
|
| - RefPtr<ErrorEvent> errorEvent = ErrorEvent::create(message, sourceName, line, column);
|
| target->dispatchEvent(errorEvent);
|
| m_inDispatchErrorEvent = false;
|
| return errorEvent->defaultPrevented();
|
|
|