Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp |
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp |
| index 64ef49d0956fb4792d637050c8119a1d735962ee..de12335b8c9f135b4a4691a285ffa9a902c3c431 100644 |
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp |
| +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp |
| @@ -40,9 +40,8 @@ ScriptPromise ScriptPromisePropertyBase::promise(DOMWrapperWorld& world) { |
| v8::Local<v8::Object> wrapper = ensureHolderWrapper(scriptState); |
| DCHECK(wrapper->CreationContext() == context); |
| - v8::Local<v8::Value> cachedPromise = |
| - V8HiddenValue::getHiddenValue(scriptState, wrapper, promiseName()); |
| - if (!cachedPromise.IsEmpty() && cachedPromise->IsPromise()) |
| + v8::Local<v8::Value> cachedPromise = promiseSymbol().getOrUndefined(wrapper); |
| + if (!cachedPromise->IsUndefined() && cachedPromise->IsPromise()) |
| return ScriptPromise(scriptState, cachedPromise); |
| // Create and cache the Promise |
| @@ -50,13 +49,12 @@ ScriptPromise ScriptPromisePropertyBase::promise(DOMWrapperWorld& world) { |
| if (!v8::Promise::Resolver::New(context).ToLocal(&resolver)) |
| return ScriptPromise(); |
| v8::Local<v8::Promise> promise = resolver->GetPromise(); |
| - V8HiddenValue::setHiddenValue(scriptState, wrapper, promiseName(), promise); |
| + promiseSymbol().set(wrapper, promise); |
| switch (m_state) { |
| case Pending: |
| // Cache the resolver too |
| - V8HiddenValue::setHiddenValue(scriptState, wrapper, resolverName(), |
| - resolver); |
| + resolverSymbol().set(wrapper, resolver); |
| break; |
| case Resolved: |
| case Rejected: |
| @@ -90,12 +88,12 @@ void ScriptPromisePropertyBase::resolveOrReject(State targetState) { |
| ScriptState* scriptState = ScriptState::from(wrapper->CreationContext()); |
| ScriptState::Scope scope(scriptState); |
| + V8PrivateProperty::Symbol symbol = resolverSymbol(); |
| + DCHECK(symbol.hasValue(wrapper)); |
| v8::Local<v8::Promise::Resolver> resolver = |
| - V8HiddenValue::getHiddenValue(scriptState, wrapper, resolverName()) |
| - .As<v8::Promise::Resolver>(); |
| - DCHECK(!resolver.IsEmpty()); |
| + symbol.getOrUndefined(wrapper).As<v8::Promise::Resolver>(); |
| - V8HiddenValue::deleteHiddenValue(scriptState, wrapper, resolverName()); |
| + symbol.deleteProperty(wrapper); |
| resolveOrRejectInternal(resolver); |
| ++i; |
| } |
| @@ -163,9 +161,9 @@ void ScriptPromisePropertyBase::clearWrappers() { |
| i != m_wrappers.end(); ++i) { |
| v8::Local<v8::Object> wrapper = (*i)->newLocal(m_isolate); |
| if (!wrapper.IsEmpty()) { |
| - ScriptState* scriptState = ScriptState::from(wrapper->CreationContext()); |
| - V8HiddenValue::deleteHiddenValue(scriptState, wrapper, resolverName()); |
| - V8HiddenValue::deleteHiddenValue(scriptState, wrapper, promiseName()); |
| + resolverSymbol().deleteProperty(wrapper); |
| + // TODO(peria): Use deleteProperty() if http://crbug.com/v8/6227 is fixed. |
| + promiseSymbol().set(wrapper, v8::Undefined(m_isolate)); |
|
peria
2017/04/07 09:43:37
v8::Object::DeleteProperty() seems to have a bug i
|
| } |
| } |
| m_wrappers.clear(); |
| @@ -182,32 +180,34 @@ void ScriptPromisePropertyBase::checkWrappers() { |
| } |
| } |
| -v8::Local<v8::String> ScriptPromisePropertyBase::promiseName() { |
| +V8PrivateProperty::Symbol ScriptPromisePropertyBase::promiseSymbol() { |
| switch (m_name) { |
| -#define P(Name) \ |
| - case Name: \ |
| - return V8HiddenValue::Name##Promise(m_isolate); |
| +#define P(Interface, Name) \ |
| + case Name: \ |
| + return V8PrivateProperty::V8_PRIVATE_PROPERTY_GETTER_NAME( \ |
| + Interface, Name##Promise)(m_isolate); |
| SCRIPT_PROMISE_PROPERTIES(P) |
| #undef P |
| } |
| - ASSERT_NOT_REACHED(); |
| - return v8::Local<v8::String>(); |
| + NOTREACHED(); |
| + return V8PrivateProperty::getSymbol(m_isolate, "noPromise"); |
| } |
| -v8::Local<v8::String> ScriptPromisePropertyBase::resolverName() { |
| +V8PrivateProperty::Symbol ScriptPromisePropertyBase::resolverSymbol() { |
| switch (m_name) { |
| -#define P(Name) \ |
| - case Name: \ |
| - return V8HiddenValue::Name##Resolver(m_isolate); |
| +#define P(Interface, Name) \ |
| + case Name: \ |
| + return V8PrivateProperty::V8_PRIVATE_PROPERTY_GETTER_NAME( \ |
| + Interface, Name##Resolver)(m_isolate); |
| SCRIPT_PROMISE_PROPERTIES(P) |
| #undef P |
| } |
| - ASSERT_NOT_REACHED(); |
| - return v8::Local<v8::String>(); |
| + NOTREACHED(); |
| + return V8PrivateProperty::getSymbol(m_isolate, "noResolver"); |
| } |
| DEFINE_TRACE(ScriptPromisePropertyBase) { |