Index: third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.cpp |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.cpp b/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.cpp |
index c0e1cc64ca5db06b60c0461146fdd027c87356c2..478729ed4873cbb409a88d73f2c2988a44b6a951 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.cpp |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.cpp |
@@ -25,17 +25,25 @@ V8_HIDDEN_VALUES(V8_DEFINE_METHOD); |
v8::Local<v8::Value> V8HiddenValue::getHiddenValue(ScriptState* scriptState, v8::Local<v8::Object> object, v8::Local<v8::String> key) |
{ |
- return object->GetHiddenValue(key); |
+ v8::Local<v8::Context> context = scriptState->context(); |
+ v8::Local<v8::Private> privateKey = v8::Private::ForApi(scriptState->isolate(), key); |
+ v8::Local<v8::Value> value; |
+ // Callsites interpret an empty handle has absence of a result. |
+ if (!v8CallBoolean(object->HasPrivate(context, privateKey))) |
+ return v8::Local<v8::Value>(); |
+ if (object->GetPrivate(context, privateKey).ToLocal(&value)) |
+ return value; |
+ return v8::Local<v8::Value>(); |
} |
bool V8HiddenValue::setHiddenValue(ScriptState* scriptState, v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value) |
{ |
- return object->SetHiddenValue(key, value); |
+ return v8CallBoolean(object->SetPrivate(scriptState->context(), v8::Private::ForApi(scriptState->isolate(), key), value)); |
} |
bool V8HiddenValue::deleteHiddenValue(ScriptState* scriptState, v8::Local<v8::Object> object, v8::Local<v8::String> key) |
{ |
- return object->DeleteHiddenValue(key); |
+ return v8CallBoolean(object->DeletePrivate(scriptState->context(), v8::Private::ForApi(scriptState->isolate(), key))); |
} |
v8::Local<v8::Value> V8HiddenValue::getHiddenValueFromMainWorldWrapper(ScriptState* scriptState, ScriptWrappable* wrappable, v8::Local<v8::String> key) |