| Index: Source/bindings/modules/v8/V8BindingForModules.cpp
|
| diff --git a/Source/bindings/modules/v8/V8BindingForModules.cpp b/Source/bindings/modules/v8/V8BindingForModules.cpp
|
| index f18e70460f20f307c9dfce08fe9e9f7cff7e2ec9..2ceb11b65f5e7b24ef4395902250910ba6b520fd 100644
|
| --- a/Source/bindings/modules/v8/V8BindingForModules.cpp
|
| +++ b/Source/bindings/modules/v8/V8BindingForModules.cpp
|
| @@ -303,7 +303,7 @@ static v8::Local<v8::Value> ensureNthValueOnKeyPath(v8::Isolate* isolate, v8::Lo
|
| return currentValue;
|
| }
|
|
|
| -static IDBKey* createIDBKeyFromScriptValueAndKeyPathInternal(v8::Isolate* isolate, const ScriptValue& value, const String& keyPath, bool allowExperimentalTypes)
|
| +static IDBKey* createIDBKeyFromScriptValueAndKeyPathInternal(v8::Isolate* isolate, v8::Local<v8::Value> v8Value, const String& keyPath, bool allowExperimentalTypes)
|
| {
|
| Vector<String> keyPathElements;
|
| IDBKeyPathParseError error;
|
| @@ -312,14 +312,13 @@ static IDBKey* createIDBKeyFromScriptValueAndKeyPathInternal(v8::Isolate* isolat
|
| ASSERT(isolate->InContext());
|
|
|
| v8::HandleScope handleScope(isolate);
|
| - v8::Local<v8::Value> v8Value(value.v8Value());
|
| v8::Local<v8::Value> v8Key(getNthValueOnKeyPath(isolate, v8Value, keyPathElements, keyPathElements.size()));
|
| if (v8Key.IsEmpty())
|
| return 0;
|
| return createIDBKeyFromValue(isolate, v8Key, allowExperimentalTypes);
|
| }
|
|
|
| -static IDBKey* createIDBKeyFromScriptValueAndKeyPathInternal(v8::Isolate* isolate, const ScriptValue& value, const IDBKeyPath& keyPath, bool allowExperimentalTypes = false)
|
| +static IDBKey* createIDBKeyFromScriptValueAndKeyPathInternal(v8::Isolate* isolate, v8::Local<v8::Value> v8Value, const IDBKeyPath& keyPath, bool allowExperimentalTypes = false)
|
| {
|
| ASSERT(!keyPath.isNull());
|
| v8::HandleScope handleScope(isolate);
|
| @@ -327,7 +326,7 @@ static IDBKey* createIDBKeyFromScriptValueAndKeyPathInternal(v8::Isolate* isolat
|
| IDBKey::KeyArray result;
|
| const Vector<String>& array = keyPath.array();
|
| for (size_t i = 0; i < array.size(); ++i) {
|
| - IDBKey* key = createIDBKeyFromScriptValueAndKeyPathInternal(isolate, value, array[i], allowExperimentalTypes);
|
| + IDBKey* key = createIDBKeyFromScriptValueAndKeyPathInternal(isolate, v8Value, array[i], allowExperimentalTypes);
|
| if (!key)
|
| return 0;
|
| result.append(key);
|
| @@ -336,13 +335,7 @@ static IDBKey* createIDBKeyFromScriptValueAndKeyPathInternal(v8::Isolate* isolat
|
| }
|
|
|
| ASSERT(keyPath.type() == IDBKeyPath::StringType);
|
| - return createIDBKeyFromScriptValueAndKeyPathInternal(isolate, value, keyPath.string(), allowExperimentalTypes);
|
| -}
|
| -
|
| -IDBKey* createIDBKeyFromScriptValueAndKeyPath(v8::Isolate* isolate, const ScriptValue& value, const IDBKeyPath& keyPath)
|
| -{
|
| - IDB_TRACE("createIDBKeyFromScriptValueAndKeyPath");
|
| - return createIDBKeyFromScriptValueAndKeyPathInternal(isolate, value, keyPath);
|
| + return createIDBKeyFromScriptValueAndKeyPathInternal(isolate, v8Value, keyPath.string(), allowExperimentalTypes);
|
| }
|
|
|
| static v8::Local<v8::Value> deserializeIDBValueBuffer(v8::Isolate* isolate, SharedBuffer* buffer, const Vector<blink::WebBlobInfo>* blobInfo)
|
| @@ -435,9 +428,12 @@ SQLValue NativeValueTraits<SQLValue>::nativeValue(v8::Local<v8::Value> value, v8
|
| return SQLValue(stringValue);
|
| }
|
|
|
| -IDBKey* NativeValueTraits<IDBKey*>::nativeValue(v8::Local<v8::Value> value, v8::Isolate* isolate, ExceptionState& exceptionState)
|
| +IDBKey* NativeValueTraits<IDBKey*>::nativeValue(v8::Local<v8::Value> value, v8::Isolate* isolate, ExceptionState& exceptionState, const IDBKeyPath& keyPath)
|
| {
|
| - return createIDBKeyFromValue(isolate, value);
|
| + if (keyPath.isNull())
|
| + return createIDBKeyFromValue(isolate, value);
|
| + IDB_TRACE("createIDBKeyFromScriptValueAndKeyPath)");
|
| + return createIDBKeyFromScriptValueAndKeyPathInternal(isolate, value, keyPath);
|
| }
|
|
|
| IDBKeyRange* NativeValueTraits<IDBKeyRange*>::nativeValue(v8::Local<v8::Value> value, v8::Isolate* isolate, ExceptionState& exceptionState)
|
| @@ -455,7 +451,7 @@ void assertPrimaryKeyValidOrInjectable(ScriptState* scriptState, PassRefPtr<Shar
|
|
|
| // This assertion is about already persisted data, so allow experimental types.
|
| const bool allowExperimentalTypes = true;
|
| - IDBKey* expectedKey = createIDBKeyFromScriptValueAndKeyPathInternal(isolate, scriptValue, keyPath, allowExperimentalTypes);
|
| + IDBKey* expectedKey = createIDBKeyFromScriptValueAndKeyPathInternal(isolate, scriptValue.v8Value(), keyPath, allowExperimentalTypes);
|
| ASSERT(!expectedKey || expectedKey->isEqual(key));
|
|
|
| bool injected = injectV8KeyIntoV8Value(isolate, keyValue.v8Value(), scriptValue.v8Value(), keyPath);
|
|
|