Chromium Code Reviews| Index: Source/core/events/PromiseRejectionEvent.cpp |
| diff --git a/Source/core/events/PromiseRejectionEvent.cpp b/Source/core/events/PromiseRejectionEvent.cpp |
| index 2a4eb14da3e3e3f7db1e1889e116c6543a59e2ba..a2a2dee628511892a0dd54459fb2349d96fd2648 100644 |
| --- a/Source/core/events/PromiseRejectionEvent.cpp |
| +++ b/Source/core/events/PromiseRejectionEvent.cpp |
| @@ -6,14 +6,17 @@ |
| #include "config.h" |
| #include "core/events/PromiseRejectionEvent.h" |
| +#include "bindings/core/v8/DOMWrapperWorld.h" |
| + |
| namespace blink { |
| PromiseRejectionEvent::PromiseRejectionEvent() |
| { |
| } |
| -PromiseRejectionEvent::PromiseRejectionEvent(const AtomicString& type, const PromiseRejectionEventInit& initializer) |
| +PromiseRejectionEvent::PromiseRejectionEvent(ScriptState* state, const AtomicString& type, const PromiseRejectionEventInit& initializer) |
| : Event(type, initializer) |
| + , m_scriptState(state) |
| { |
| if (initializer.hasPromise()) { |
| m_promise.set(initializer.promise().isolate(), initializer.promise().v8Value()); |
| @@ -31,14 +34,18 @@ PromiseRejectionEvent::~PromiseRejectionEvent() |
| ScriptPromise PromiseRejectionEvent::promise(ScriptState* state) const |
| { |
| - v8::Local<v8::Value> value = m_promise.newLocal(state->isolate()); |
| - return ScriptPromise(state, value); |
| + // Return null when the promise is accessed by a different world than the world that created the promise. |
| + if (!m_scriptState || !m_scriptState->contextIsValid() || m_scriptState->world().worldId() != state->world().worldId()) |
| + return ScriptPromise(); |
|
haraken
2015/06/19 13:46:55
One idea would be to add an ability to create a nu
|
| + return ScriptPromise(m_scriptState.get(), m_promise.newLocal(m_scriptState->isolate())); |
| } |
| ScriptValue PromiseRejectionEvent::reason(ScriptState* state) const |
| { |
| - v8::Local<v8::Value> value = m_reason.newLocal(state->isolate()); |
| - return ScriptValue(state, value); |
| + // Return null when the value is accessed by a different world than the world that created the value. |
| + if (!m_scriptState || !m_scriptState->contextIsValid() || m_scriptState->world().worldId() != state->world().worldId()) |
| + return ScriptValue(); |
|
haraken
2015/06/19 13:46:55
If we return ScriptValue(v8::Null()), we won't nee
|
| + return ScriptValue(m_scriptState.get(), m_reason.newLocal(m_scriptState->isolate())); |
| } |
| const AtomicString& PromiseRejectionEvent::interfaceName() const |