Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp

Issue 2774233007: [Bindings] Move ScriptPromiseProperties from V8HiddenValue to V8PrivateProperty (Closed)
Patch Set: workaround Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698