Index: Source/bindings/v8/V8Initializer.cpp |
diff --git a/Source/bindings/v8/V8Initializer.cpp b/Source/bindings/v8/V8Initializer.cpp |
index d521b34126f8e733ce1ee598f5ea7df1b29e7677..f9381c07fb088f69d980b2b8052b6c945bc3ddaa 100644 |
--- a/Source/bindings/v8/V8Initializer.cpp |
+++ b/Source/bindings/v8/V8Initializer.cpp |
@@ -26,13 +26,16 @@ |
#include "config.h" |
#include "bindings/v8/V8Initializer.h" |
+#include "V8ErrorEvent.h" |
#include "V8History.h" |
#include "V8Location.h" |
#include "V8Window.h" |
+#include "bindings/v8/DOMWrapperWorld.h" |
#include "bindings/v8/ScriptCallStackFactory.h" |
#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 +97,11 @@ 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() && wrappedEvent->IsObject()) |
adamk
2013/07/31 16:37:30
wrappedEvent->IsObject() can just be an ASSERT, I
Mike West
2013/08/01 07:52:15
Done.
|
+ wrappedEvent->ToObject()->SetHiddenValue(V8HiddenPropertyName::error(), data); |
adamk
2013/07/31 16:37:30
Rather than ToObject, I think this should be v8::L
Mike West
2013/08/01 07:52:15
Done.
|
+ firstWindow->document()->reportException(event.release(), callStack); |
} |
static void failedAccessCheckCallbackInMainThread(v8::Local<v8::Object> host, v8::AccessType type, v8::Local<v8::Value> data) |
@@ -162,10 +169,12 @@ 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() && wrappedEvent->IsObject()) |
adamk
2013/07/31 16:37:30
Same here as above
Mike West
2013/08/01 07:52:15
Done.
|
+ wrappedEvent->ToObject()->SetHiddenValue(V8HiddenPropertyName::error(), data); |
adamk
2013/07/31 16:37:30
and here too
Mike West
2013/08/01 07:52:15
Done.
|
+ context->reportException(event.release(), 0); |
} |
isReportingException = false; |