| Index: Source/bindings/v8/V8Initializer.cpp
|
| diff --git a/Source/bindings/v8/V8Initializer.cpp b/Source/bindings/v8/V8Initializer.cpp
|
| index fa8be8f0948c6ef17a96a92aa343c1f988aaf8b4..d2e2d9c26a1e2b149bc5fc1e486d06d518e791fe 100644
|
| --- a/Source/bindings/v8/V8Initializer.cpp
|
| +++ b/Source/bindings/v8/V8Initializer.cpp
|
| @@ -35,6 +35,7 @@
|
| #include "bindings/v8/ScriptController.h"
|
| #include "bindings/v8/ScriptProfiler.h"
|
| #include "bindings/v8/V8Binding.h"
|
| +#include "bindings/v8/V8ErrorHandler.h"
|
| #include "bindings/v8/V8GCController.h"
|
| #include "bindings/v8/V8HiddenPropertyName.h"
|
| #include "bindings/v8/V8PerContextData.h"
|
| @@ -46,9 +47,9 @@
|
| #include "core/page/DOMWindow.h"
|
| #include "core/page/Frame.h"
|
| #include "core/platform/MemoryUsageSupport.h"
|
| -#include <v8-debug.h>
|
| #include "wtf/RefPtr.h"
|
| #include "wtf/text/WTFString.h"
|
| +#include <v8-debug.h>
|
|
|
| namespace WebCore {
|
|
|
| @@ -99,20 +100,14 @@ static void messageHandlerInMainThread(v8::Handle<v8::Message> message, v8::Hand
|
| bool shouldUseDocumentURL = resourceName.IsEmpty() || !resourceName->IsString();
|
| String resource = shouldUseDocumentURL ? firstWindow->document()->url() : toWebCoreString(resourceName);
|
| RefPtr<ErrorEvent> event = ErrorEvent::create(errorMessage, resource, message->GetLineNumber(), message->GetStartColumn());
|
| + AccessControlStatus corsStatus = message->IsSharedCrossOrigin() ? SharableCrossOrigin : NotSharableCrossOrigin;
|
|
|
| - // messageHandlerInMainThread can be called while we're creating a new context.
|
| - // Since we cannot create a wrapper in the intermediate timing, we need to skip
|
| - // creating a wrapper for |event|.
|
| + // This method might be called while we're creating a new context. In this case, we
|
| + // avoid storing the exception object, as we can't create a wrapper during context creation.
|
| DOMWrapperWorld* world = DOMWrapperWorld::current();
|
| Frame* frame = firstWindow->document()->frame();
|
| - if (world && frame && frame->script()->existingWindowShell(world)) {
|
| - 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);
|
| - }
|
| - }
|
| - AccessControlStatus corsStatus = message->IsSharedCrossOrigin() ? SharableCrossOrigin : NotSharableCrossOrigin;
|
| + if (world && frame && frame->script()->existingWindowShell(world))
|
| + V8ErrorHandler::storeExceptionOnErrorEventWrapper(event.get(), data, v8::Isolate::GetCurrent());
|
| firstWindow->document()->reportException(event.release(), callStack, corsStatus);
|
| }
|
|
|
| @@ -183,12 +178,9 @@ static void messageHandlerInWorker(v8::Handle<v8::Message> message, v8::Handle<v
|
| String errorMessage = toWebCoreString(message->Get());
|
| String sourceURL = toWebCoreString(message->GetScriptResourceName());
|
| 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);
|
| - }
|
| AccessControlStatus corsStatus = message->IsSharedCrossOrigin() ? SharableCrossOrigin : NotSharableCrossOrigin;
|
| +
|
| + V8ErrorHandler::storeExceptionOnErrorEventWrapper(event.get(), data, v8::Isolate::GetCurrent());
|
| context->reportException(event.release(), 0, corsStatus);
|
| }
|
|
|
|
|