Index: Source/bindings/v8/WorkerScriptController.cpp |
diff --git a/Source/bindings/v8/WorkerScriptController.cpp b/Source/bindings/v8/WorkerScriptController.cpp |
index 72884d9bfa0d8d04c82da8326ac00e97c195dc11..a0d3b2f5b1e385ae92e92f69391c5715d13e680e 100644 |
--- a/Source/bindings/v8/WorkerScriptController.cpp |
+++ b/Source/bindings/v8/WorkerScriptController.cpp |
@@ -167,11 +167,6 @@ ScriptValue WorkerScriptController::evaluate(const String& script, const String& |
state->lineNumber = message->GetLineNumber(); |
state->columnNumber = message->GetStartColumn(); |
state->sourceURL = toWebCoreString(message->GetScriptResourceName()); |
- if (m_workerGlobalScope->shouldSanitizeScriptError(state->sourceURL, NotSharableCrossOrigin)) |
- state->exception = throwError(v8GeneralError, "Script error.", m_isolate); |
- else |
- state->exception = ScriptValue(block.Exception()); |
- |
block.Reset(); |
} else |
state->hadException = false; |
@@ -182,7 +177,7 @@ ScriptValue WorkerScriptController::evaluate(const String& script, const String& |
return ScriptValue(result); |
} |
-void WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode, ScriptValue* exception) |
+void WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode, RefPtr<ErrorEvent>* errorEvent) |
{ |
if (isExecutionForbidden()) |
return; |
@@ -190,10 +185,13 @@ void WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode, Script |
WorkerGlobalScopeExecutionState state; |
evaluate(sourceCode.source(), sourceCode.url().string(), sourceCode.startPosition(), &state); |
if (state.hadException) { |
- if (exception) { |
- *exception = state.exception; |
+ if (errorEvent) { |
+ *errorEvent = m_workerGlobalScope->shouldSanitizeScriptError(state.sourceURL, NotSharableCrossOrigin) ? |
+ ErrorEvent::createSanitizedError() : ErrorEvent::create(state.errorMessage, state.sourceURL, state.lineNumber, state.columnNumber); |
} else { |
- RefPtr<ErrorEvent> event = ErrorEvent::create(state.errorMessage, state.sourceURL, state.lineNumber, state.columnNumber); |
+ ASSERT(!m_workerGlobalScope->shouldSanitizeScriptError(state.sourceURL, NotSharableCrossOrigin)); |
+ RefPtr<ErrorEvent> event = m_errorEventFromImportedScript ? m_errorEventFromImportedScript.release() : ErrorEvent::create(state.errorMessage, state.sourceURL, state.lineNumber, state.columnNumber); |
+ m_errorEventFromImportedScript.clear(); |
m_workerGlobalScope->reportException(event, 0, NotSharableCrossOrigin); |
} |
} |
@@ -235,9 +233,10 @@ void WorkerScriptController::disableEval(const String& errorMessage) |
m_disableEvalPending = errorMessage; |
} |
-void WorkerScriptController::setException(const ScriptValue& exception) |
+void WorkerScriptController::rethrowExceptionFromImportedScript(PassRefPtr<ErrorEvent> errorEvent) |
{ |
- throwError(exception.v8Value()); |
+ m_errorEventFromImportedScript = errorEvent; |
+ throwError(V8ThrowException::createError(v8GeneralError, m_errorEventFromImportedScript->message(), m_isolate)); |
} |
WorkerScriptController* WorkerScriptController::controllerForContext() |