Chromium Code Reviews| Index: Source/bindings/v8/WorkerScriptController.cpp |
| diff --git a/Source/bindings/v8/WorkerScriptController.cpp b/Source/bindings/v8/WorkerScriptController.cpp |
| index 72884d9bfa0d8d04c82da8326ac00e97c195dc11..b067a4d34d7d0a5741e5a5066af1baa1b38eb83a 100644 |
| --- a/Source/bindings/v8/WorkerScriptController.cpp |
| +++ b/Source/bindings/v8/WorkerScriptController.cpp |
| @@ -167,10 +167,7 @@ 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()); |
| + state->exception = ScriptValue(block.Exception()); |
|
do-not-use
2013/08/07 18:05:05
Actually, it looks like we can remove WorkerGlobal
Mike West
2013/08/08 05:03:15
In this patch, yes. I plan to follow up with a pat
do-not-use
2013/08/08 06:25:00
I think it is fine to keep it if you plan to use i
|
| block.Reset(); |
| } else |
| @@ -182,7 +179,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 +187,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(); |
|
do-not-use
2013/08/07 18:05:05
This line looks superfluous since you release() th
Mike West
2013/08/08 05:03:15
Indeed.
|
| m_workerGlobalScope->reportException(event, 0, NotSharableCrossOrigin); |
| } |
| } |
| @@ -235,9 +235,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() |