| Index: Source/bindings/v8/V8Initializer.cpp
|
| diff --git a/Source/bindings/v8/V8Initializer.cpp b/Source/bindings/v8/V8Initializer.cpp
|
| index d521b34126f8e733ce1ee598f5ea7df1b29e7677..7e709618e015fdb65c812005162df45194018fde 100644
|
| --- a/Source/bindings/v8/V8Initializer.cpp
|
| +++ b/Source/bindings/v8/V8Initializer.cpp
|
| @@ -26,6 +26,7 @@
|
| #include "config.h"
|
| #include "bindings/v8/V8Initializer.h"
|
|
|
| +#include "V8ErrorEvent.h"
|
| #include "V8History.h"
|
| #include "V8Location.h"
|
| #include "V8Window.h"
|
| @@ -33,6 +34,7 @@
|
| #include "bindings/v8/ScriptProfiler.h"
|
| #include "bindings/v8/V8Binding.h"
|
| #include "bindings/v8/V8GCController.h"
|
| +#include "bindings/v8/V8HiddenPropertyName.h"
|
| #include "bindings/v8/V8PerContextData.h"
|
| #include "core/dom/Document.h"
|
| #include "core/dom/ExceptionCode.h"
|
| @@ -94,7 +96,13 @@ static void messageHandlerInMainThread(v8::Handle<v8::Message> message, v8::Hand
|
| v8::Handle<v8::Value> resourceName = message->GetScriptResourceName();
|
| bool shouldUseDocumentURL = resourceName.IsEmpty() || !resourceName->IsString();
|
| String resource = shouldUseDocumentURL ? firstWindow->document()->url() : toWebCoreString(resourceName);
|
| - firstWindow->document()->reportException(errorMessage, message->GetLineNumber(), message->GetStartColumn(), resource, callStack);
|
| + RefPtr<ErrorEvent> event = ErrorEvent::create(errorMessage, resource, message->GetLineNumber(), message->GetStartColumn());
|
| + v8::Local<v8::Value> wrappedEvent = toV8(event.get(), v8::Handle<v8::Object>(), v8::Isolate::GetCurrent());
|
| + if (!wrappedEvent.IsEmpty()) {
|
| + ASSERT(wrappedEvent->IsObject());
|
| + v8::Local<v8::Object>::Cast(wrappedEvent)->SetHiddenValue(V8HiddenPropertyName::error(), data);
|
| + }
|
| + firstWindow->document()->reportException(event.release(), callStack);
|
| }
|
|
|
| static void failedAccessCheckCallbackInMainThread(v8::Local<v8::Object> host, v8::AccessType type, v8::Local<v8::Value> data)
|
| @@ -162,10 +170,14 @@ static void messageHandlerInWorker(v8::Handle<v8::Message> message, v8::Handle<v
|
| // During the frame teardown, there may not be a valid context.
|
| if (ScriptExecutionContext* context = getScriptExecutionContext()) {
|
| String errorMessage = toWebCoreString(message->Get());
|
| - int lineNumber = message->GetLineNumber();
|
| - int columnNumber = message->GetStartColumn();
|
| String sourceURL = toWebCoreString(message->GetScriptResourceName());
|
| - context->reportException(errorMessage, lineNumber, columnNumber, sourceURL, 0);
|
| + RefPtr<ErrorEvent> event = ErrorEvent::create(errorMessage, sourceURL, message->GetLineNumber(), message->GetStartColumn());
|
| + v8::Local<v8::Value> wrappedEvent = toV8(event.get(), v8::Handle<v8::Object>(), v8::Isolate::GetCurrent());
|
| + if (!wrappedEvent.IsEmpty()) {
|
| + ASSERT(wrappedEvent->IsObject());
|
| + v8::Local<v8::Object>::Cast(wrappedEvent)->SetHiddenValue(V8HiddenPropertyName::error(), data);
|
| + }
|
| + context->reportException(event.release(), 0);
|
| }
|
|
|
| isReportingException = false;
|
|
|