OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 return 0; | 244 return 0; |
245 result.append(key); | 245 result.append(key); |
246 } | 246 } |
247 return IDBKey::createArray(result); | 247 return IDBKey::createArray(result); |
248 } | 248 } |
249 | 249 |
250 ASSERT(keyPath.type() == IDBKeyPath::StringType); | 250 ASSERT(keyPath.type() == IDBKeyPath::StringType); |
251 return createIDBKeyFromScriptValueAndKeyPath(value, keyPath.string(), isolat
e); | 251 return createIDBKeyFromScriptValueAndKeyPath(value, keyPath.string(), isolat
e); |
252 } | 252 } |
253 | 253 |
254 v8::Handle<v8::Value> deserializeIDBValueBuffer(SharedBuffer* buffer, v8::Isolat
e* isolate) | 254 v8::Handle<v8::Value> deserializeIDBValueBuffer(SharedBuffer* buffer, const Vect
or<BlobInfo>* blobInfo, v8::Isolate* isolate) |
255 { | 255 { |
256 ASSERT(v8::Context::InContext()); | 256 ASSERT(v8::Context::InContext()); |
257 if (!buffer) | 257 if (!buffer) |
258 return v8::Null(isolate); | 258 return v8::Null(isolate); |
259 | 259 |
260 // FIXME: The extra copy here can be eliminated by allowing SerializedScript
Value to take a raw const char* or const uint8_t*. | 260 // FIXME: The extra copy here can be eliminated by allowing SerializedScript
Value to take a raw const char* or const uint8_t*. |
261 Vector<uint8_t> value; | 261 Vector<uint8_t> value; |
262 value.append(buffer->data(), buffer->size()); | 262 value.append(buffer->data(), buffer->size()); |
263 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat
eFromWireBytes(value); | 263 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat
eFromWireBytes(value); |
264 return serializedValue->deserialize(isolate); | 264 return serializedValue->deserialize(isolate, 0, blobInfo); |
265 } | 265 } |
266 | 266 |
267 bool injectV8KeyIntoV8Value(v8::Handle<v8::Value> key, v8::Handle<v8::Value> val
ue, const IDBKeyPath& keyPath, v8::Isolate* isolate) | 267 bool injectV8KeyIntoV8Value(v8::Handle<v8::Value> key, v8::Handle<v8::Value> val
ue, const IDBKeyPath& keyPath, v8::Isolate* isolate) |
268 { | 268 { |
269 IDB_TRACE("injectIDBV8KeyIntoV8Value"); | 269 IDB_TRACE("injectIDBV8KeyIntoV8Value"); |
270 ASSERT(v8::Context::InContext()); | 270 ASSERT(v8::Context::InContext()); |
271 | 271 |
272 ASSERT(keyPath.type() == IDBKeyPath::StringType); | 272 ASSERT(keyPath.type() == IDBKeyPath::StringType); |
273 Vector<String> keyPathElements; | 273 Vector<String> keyPathElements; |
274 IDBKeyPathParseError error; | 274 IDBKeyPathParseError error; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 { | 338 { |
339 v8::Isolate* isolate = state ? state->context()->GetIsolate() : v8::Isolate:
:GetCurrent(); | 339 v8::Isolate* isolate = state ? state->context()->GetIsolate() : v8::Isolate:
:GetCurrent(); |
340 v8::HandleScope handleScope(isolate); | 340 v8::HandleScope handleScope(isolate); |
341 v8::Handle<v8::Value> value(scriptValue.v8Value()); | 341 v8::Handle<v8::Value> value(scriptValue.v8Value()); |
342 if (V8IDBKeyRange::hasInstance(value, isolate, worldType(isolate))) | 342 if (V8IDBKeyRange::hasInstance(value, isolate, worldType(isolate))) |
343 return V8IDBKeyRange::toNative(value.As<v8::Object>()); | 343 return V8IDBKeyRange::toNative(value.As<v8::Object>()); |
344 return 0; | 344 return 0; |
345 } | 345 } |
346 | 346 |
347 #ifndef NDEBUG | 347 #ifndef NDEBUG |
348 void assertPrimaryKeyValidOrInjectable(DOMRequestState* state, PassRefPtr<Shared
Buffer> buffer, PassRefPtr<IDBKey> prpKey, const IDBKeyPath& keyPath) | 348 void assertPrimaryKeyValidOrInjectable(DOMRequestState* state, PassRefPtr<Shared
Buffer> buffer, const Vector<BlobInfo>* blobInfo, PassRefPtr<IDBKey> prpKey, con
st IDBKeyPath& keyPath) |
349 { | 349 { |
350 RefPtr<IDBKey> key(prpKey); | 350 RefPtr<IDBKey> key(prpKey); |
351 | 351 |
352 DOMRequestState::Scope scope(*state); | 352 DOMRequestState::Scope scope(*state); |
353 v8::Isolate* isolate = state ? state->context()->GetIsolate() : v8::Isolate:
:GetCurrent(); | 353 v8::Isolate* isolate = state ? state->context()->GetIsolate() : v8::Isolate:
:GetCurrent(); |
354 | 354 |
355 ScriptValue keyValue = idbKeyToScriptValue(state, key); | 355 ScriptValue keyValue = idbKeyToScriptValue(state, key); |
356 ScriptValue scriptValue(deserializeIDBValueBuffer(buffer.get(), isolate), is
olate); | 356 ScriptValue scriptValue(deserializeIDBValueBuffer(buffer.get(), blobInfo, is
olate), isolate); |
357 | 357 |
358 RefPtr<IDBKey> expectedKey = createIDBKeyFromScriptValueAndKeyPath(state, sc
riptValue, keyPath); | 358 RefPtr<IDBKey> expectedKey = createIDBKeyFromScriptValueAndKeyPath(state, sc
riptValue, keyPath); |
359 ASSERT(!expectedKey || expectedKey->isEqual(key.get())); | 359 ASSERT(!expectedKey || expectedKey->isEqual(key.get())); |
360 | 360 |
361 bool injected = injectV8KeyIntoV8Value(keyValue.v8Value(), scriptValue.v8Val
ue(), keyPath, isolate); | 361 bool injected = injectV8KeyIntoV8Value(keyValue.v8Value(), scriptValue.v8Val
ue(), keyPath, isolate); |
362 ASSERT_UNUSED(injected, injected); | 362 ASSERT_UNUSED(injected, injected); |
363 } | 363 } |
364 #endif | 364 #endif |
365 | 365 |
366 } // namespace WebCore | 366 } // namespace WebCore |
OLD | NEW |