PassRefPtr<IDBKey> createIDBKeyFromSerializedValueAndKeyPath(PassRefPtr<SerializedScriptValue> value, const Vector<IDBKeyPathElement>& keyPath) { LocalContext localContext; v8::Handle<v8::Value> v8Value(value->deserialize()); v8::Handle<v8::Value> v8Key(getNthValueOnKeyPath(v8Value, keyPath, keyPath.size())); if (v8Key.IsEmpty()) return 0; return createIDBKeyFromValue(v8Key); }
PassRefPtr<SerializedScriptValue> injectIDBKeyIntoSerializedValue(PassRefPtr<IDBKey> key, PassRefPtr<SerializedScriptValue> value, const Vector<IDBKeyPathElement>& keyPath) { LocalContext localContext; if (!keyPath.size()) return 0; v8::Handle<v8::Value> v8Value(value->deserialize()); v8::Handle<v8::Value> parent(getNthValueOnKeyPath(v8Value, keyPath, keyPath.size() - 1)); if (parent.IsEmpty()) return 0; if (!set(parent, keyPath.last(), toV8(key.get()))) return 0; return SerializedScriptValue::create(v8Value); }
bool JSTestCallback::callbackWithSerializedScriptValueParam(PassRefPtr<SerializedScriptValue> srzParam, const String& strArg) { if (!canInvokeCallback()) return true; Ref<JSTestCallback> protect(*this); JSLockHolder lock(m_data->globalObject()->vm()); ExecState* exec = m_data->globalObject()->globalExec(); MarkedArgumentBuffer args; args.append(srzParam ? srzParam->deserialize(exec, castedThis->globalObject(), 0) : jsNull()); args.append(jsStringWithCache(exec, strArg)); bool raisedException = false; m_data->invokeCallback(args, JSCallbackData::CallbackType::Object, Identifier::fromString(exec, "callbackWithSerializedScriptValueParam"), &raisedException); return !raisedException; }
PassRefPtr<IDBKey> createIDBKeyFromSerializedValueAndKeyPath(PassRefPtr<SerializedScriptValue> value, const Vector<IDBKeyPathElement>& keyPath) { LocalContext localContext; v8::Handle<v8::Value> v8Value(value->deserialize()); for (size_t i = 0; i < keyPath.size(); ++i) { switch (keyPath[i].type) { case IDBKeyPathElement::IsIndexed: if (!v8Value->IsArray() || !getValueFrom(keyPath[i].index, v8Value)) return 0; break; case IDBKeyPathElement::IsNamed: if (!v8Value->IsObject() || !getValueFrom(v8String(keyPath[i].identifier), v8Value)) return 0; break; default: ASSERT_NOT_REACHED(); } } return createIDBKeyFromValue(v8Value); }
bool JSTestCallbackFunction::callbackWithSerializedScriptValueParam(PassRefPtr<SerializedScriptValue> srzParam, const String& strArg) { if (!canInvokeCallback()) return true; Ref<JSTestCallbackFunction> protectedThis(*this); JSLockHolder lock(m_data->globalObject()->vm()); ExecState* state = m_data->globalObject()->globalExec(); MarkedArgumentBuffer args; args.append(srzParam ? srzParam->deserialize(state, castedThis->globalObject(), 0) : jsNull()); args.append(jsStringWithCache(state, strArg)); NakedPtr<Exception> returnedException; UNUSED_PARAM(state); m_data->invokeCallback(args, JSCallbackData::CallbackType::Function, Identifier(), returnedException); if (returnedException) reportException(state, returnedException); return !returnedException; }
PassRefPtr<SerializedScriptValue> injectIDBKeyIntoSerializedValue(PassRefPtr<IDBKey> key, PassRefPtr<SerializedScriptValue> value, const IDBKeyPath& keyPath) { IDB_TRACE("injectIDBKeyIntoSerializedValue"); ASSERT(keyPath.type() == IDBKeyPath::StringType); Vector<String> keyPathElements; IDBKeyPathParseError error; IDBParseKeyPath(keyPath.string(), keyPathElements, error); ASSERT(error == IDBKeyPathParseErrorNone); if (!keyPathElements.size()) return 0; V8AuxiliaryContext context; v8::Handle<v8::Value> v8Value(value->deserialize()); v8::Handle<v8::Value> parent(ensureNthValueOnKeyPath(v8Value, keyPathElements, keyPathElements.size() - 1)); if (parent.IsEmpty()) return 0; if (!set(parent, keyPathElements.last(), toV8(key.get()))) return 0; return SerializedScriptValue::create(v8Value); }