OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 return; | 197 return; |
198 } | 198 } |
199 idbOpenDBRequest->addEventListener(EventTypeNames::success, callback, false)
; | 199 idbOpenDBRequest->addEventListener(EventTypeNames::success, callback, false)
; |
200 } | 200 } |
201 | 201 |
202 static PassRefPtr<IDBTransaction> transactionForDatabase(ExecutionContext* execu
tionContext, IDBDatabase* idbDatabase, const String& objectStoreName, const Stri
ng& mode = IDBTransaction::modeReadOnly()) | 202 static PassRefPtr<IDBTransaction> transactionForDatabase(ExecutionContext* execu
tionContext, IDBDatabase* idbDatabase, const String& objectStoreName, const Stri
ng& mode = IDBTransaction::modeReadOnly()) |
203 { | 203 { |
204 TrackExceptionState exceptionState; | 204 TrackExceptionState exceptionState; |
205 RefPtr<IDBTransaction> idbTransaction = idbDatabase->transaction(executionCo
ntext, objectStoreName, mode, exceptionState); | 205 RefPtr<IDBTransaction> idbTransaction = idbDatabase->transaction(executionCo
ntext, objectStoreName, mode, exceptionState); |
206 if (exceptionState.hadException()) | 206 if (exceptionState.hadException()) |
207 return 0; | 207 return nullptr; |
208 return idbTransaction; | 208 return idbTransaction; |
209 } | 209 } |
210 | 210 |
211 static PassRefPtr<IDBObjectStore> objectStoreForTransaction(IDBTransaction* idbT
ransaction, const String& objectStoreName) | 211 static PassRefPtr<IDBObjectStore> objectStoreForTransaction(IDBTransaction* idbT
ransaction, const String& objectStoreName) |
212 { | 212 { |
213 TrackExceptionState exceptionState; | 213 TrackExceptionState exceptionState; |
214 RefPtr<IDBObjectStore> idbObjectStore = idbTransaction->objectStore(objectSt
oreName, exceptionState); | 214 RefPtr<IDBObjectStore> idbObjectStore = idbTransaction->objectStore(objectSt
oreName, exceptionState); |
215 if (exceptionState.hadException()) | 215 if (exceptionState.hadException()) |
216 return 0; | 216 return nullptr; |
217 return idbObjectStore; | 217 return idbObjectStore; |
218 } | 218 } |
219 | 219 |
220 static PassRefPtr<IDBIndex> indexForObjectStore(IDBObjectStore* idbObjectStore,
const String& indexName) | 220 static PassRefPtr<IDBIndex> indexForObjectStore(IDBObjectStore* idbObjectStore,
const String& indexName) |
221 { | 221 { |
222 TrackExceptionState exceptionState; | 222 TrackExceptionState exceptionState; |
223 RefPtr<IDBIndex> idbIndex = idbObjectStore->index(indexName, exceptionState)
; | 223 RefPtr<IDBIndex> idbIndex = idbObjectStore->index(indexName, exceptionState)
; |
224 if (exceptionState.hadException()) | 224 if (exceptionState.hadException()) |
225 return 0; | 225 return nullptr; |
226 return idbIndex; | 226 return idbIndex; |
227 } | 227 } |
228 | 228 |
229 static PassRefPtr<KeyPath> keyPathFromIDBKeyPath(const IDBKeyPath& idbKeyPath) | 229 static PassRefPtr<KeyPath> keyPathFromIDBKeyPath(const IDBKeyPath& idbKeyPath) |
230 { | 230 { |
231 RefPtr<KeyPath> keyPath; | 231 RefPtr<KeyPath> keyPath; |
232 switch (idbKeyPath.type()) { | 232 switch (idbKeyPath.type()) { |
233 case IDBKeyPath::NullType: | 233 case IDBKeyPath::NullType: |
234 keyPath = KeyPath::create().setType(KeyPath::Type::Null); | 234 keyPath = KeyPath::create().setType(KeyPath::Type::Null); |
235 break; | 235 break; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 , m_requestCallback(requestCallback) { } | 311 , m_requestCallback(requestCallback) { } |
312 RefPtr<RequestDatabaseCallback> m_requestCallback; | 312 RefPtr<RequestDatabaseCallback> m_requestCallback; |
313 }; | 313 }; |
314 | 314 |
315 static PassRefPtr<IDBKey> idbKeyFromInspectorObject(JSONObject* key) | 315 static PassRefPtr<IDBKey> idbKeyFromInspectorObject(JSONObject* key) |
316 { | 316 { |
317 RefPtr<IDBKey> idbKey; | 317 RefPtr<IDBKey> idbKey; |
318 | 318 |
319 String type; | 319 String type; |
320 if (!key->getString("type", &type)) | 320 if (!key->getString("type", &type)) |
321 return 0; | 321 return nullptr; |
322 | 322 |
323 DEFINE_STATIC_LOCAL(String, number, ("number")); | 323 DEFINE_STATIC_LOCAL(String, number, ("number")); |
324 DEFINE_STATIC_LOCAL(String, string, ("string")); | 324 DEFINE_STATIC_LOCAL(String, string, ("string")); |
325 DEFINE_STATIC_LOCAL(String, date, ("date")); | 325 DEFINE_STATIC_LOCAL(String, date, ("date")); |
326 DEFINE_STATIC_LOCAL(String, array, ("array")); | 326 DEFINE_STATIC_LOCAL(String, array, ("array")); |
327 | 327 |
328 if (type == number) { | 328 if (type == number) { |
329 double number; | 329 double number; |
330 if (!key->getNumber("number", &number)) | 330 if (!key->getNumber("number", &number)) |
331 return 0; | 331 return nullptr; |
332 idbKey = IDBKey::createNumber(number); | 332 idbKey = IDBKey::createNumber(number); |
333 } else if (type == string) { | 333 } else if (type == string) { |
334 String string; | 334 String string; |
335 if (!key->getString("string", &string)) | 335 if (!key->getString("string", &string)) |
336 return 0; | 336 return nullptr; |
337 idbKey = IDBKey::createString(string); | 337 idbKey = IDBKey::createString(string); |
338 } else if (type == date) { | 338 } else if (type == date) { |
339 double date; | 339 double date; |
340 if (!key->getNumber("date", &date)) | 340 if (!key->getNumber("date", &date)) |
341 return 0; | 341 return nullptr; |
342 idbKey = IDBKey::createDate(date); | 342 idbKey = IDBKey::createDate(date); |
343 } else if (type == array) { | 343 } else if (type == array) { |
344 IDBKey::KeyArray keyArray; | 344 IDBKey::KeyArray keyArray; |
345 RefPtr<JSONArray> array = key->getArray("array"); | 345 RefPtr<JSONArray> array = key->getArray("array"); |
346 for (size_t i = 0; i < array->length(); ++i) { | 346 for (size_t i = 0; i < array->length(); ++i) { |
347 RefPtr<JSONValue> value = array->get(i); | 347 RefPtr<JSONValue> value = array->get(i); |
348 RefPtr<JSONObject> object; | 348 RefPtr<JSONObject> object; |
349 if (!value->asObject(&object)) | 349 if (!value->asObject(&object)) |
350 return 0; | 350 return nullptr; |
351 keyArray.append(idbKeyFromInspectorObject(object.get())); | 351 keyArray.append(idbKeyFromInspectorObject(object.get())); |
352 } | 352 } |
353 idbKey = IDBKey::createArray(keyArray); | 353 idbKey = IDBKey::createArray(keyArray); |
354 } else { | 354 } else { |
355 return 0; | 355 return nullptr; |
356 } | 356 } |
357 | 357 |
358 return idbKey.release(); | 358 return idbKey.release(); |
359 } | 359 } |
360 | 360 |
361 static PassRefPtr<IDBKeyRange> idbKeyRangeFromKeyRange(JSONObject* keyRange) | 361 static PassRefPtr<IDBKeyRange> idbKeyRangeFromKeyRange(JSONObject* keyRange) |
362 { | 362 { |
363 RefPtr<JSONObject> lower = keyRange->getObject("lower"); | 363 RefPtr<JSONObject> lower = keyRange->getObject("lower"); |
364 RefPtr<IDBKey> idbLower = lower ? idbKeyFromInspectorObject(lower.get()) : 0
; | 364 RefPtr<IDBKey> idbLower = lower ? idbKeyFromInspectorObject(lower.get()) : n
ullptr; |
365 if (lower && !idbLower) | 365 if (lower && !idbLower) |
366 return 0; | 366 return nullptr; |
367 | 367 |
368 RefPtr<JSONObject> upper = keyRange->getObject("upper"); | 368 RefPtr<JSONObject> upper = keyRange->getObject("upper"); |
369 RefPtr<IDBKey> idbUpper = upper ? idbKeyFromInspectorObject(upper.get()) : 0
; | 369 RefPtr<IDBKey> idbUpper = upper ? idbKeyFromInspectorObject(upper.get()) : n
ullptr; |
370 if (upper && !idbUpper) | 370 if (upper && !idbUpper) |
371 return 0; | 371 return nullptr; |
372 | 372 |
373 bool lowerOpen; | 373 bool lowerOpen; |
374 if (!keyRange->getBoolean("lowerOpen", &lowerOpen)) | 374 if (!keyRange->getBoolean("lowerOpen", &lowerOpen)) |
375 return 0; | 375 return nullptr; |
376 IDBKeyRange::LowerBoundType lowerBoundType = lowerOpen ? IDBKeyRange::LowerB
oundOpen : IDBKeyRange::LowerBoundClosed; | 376 IDBKeyRange::LowerBoundType lowerBoundType = lowerOpen ? IDBKeyRange::LowerB
oundOpen : IDBKeyRange::LowerBoundClosed; |
377 | 377 |
378 bool upperOpen; | 378 bool upperOpen; |
379 if (!keyRange->getBoolean("upperOpen", &upperOpen)) | 379 if (!keyRange->getBoolean("upperOpen", &upperOpen)) |
380 return 0; | 380 return nullptr; |
381 IDBKeyRange::UpperBoundType upperBoundType = upperOpen ? IDBKeyRange::UpperB
oundOpen : IDBKeyRange::UpperBoundClosed; | 381 IDBKeyRange::UpperBoundType upperBoundType = upperOpen ? IDBKeyRange::UpperB
oundOpen : IDBKeyRange::UpperBoundClosed; |
382 | 382 |
383 RefPtr<IDBKeyRange> idbKeyRange = IDBKeyRange::create(idbLower, idbUpper, lo
werBoundType, upperBoundType); | 383 RefPtr<IDBKeyRange> idbKeyRange = IDBKeyRange::create(idbLower, idbUpper, lo
werBoundType, upperBoundType); |
384 return idbKeyRange.release(); | 384 return idbKeyRange.release(); |
385 } | 385 } |
386 | 386 |
387 class DataLoader; | 387 class DataLoader; |
388 | 388 |
389 class OpenCursorCallback FINAL : public EventListener { | 389 class OpenCursorCallback FINAL : public EventListener { |
390 public: | 390 public: |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 return; | 429 return; |
430 } | 430 } |
431 | 431 |
432 if (m_result->length() == m_pageSize) { | 432 if (m_result->length() == m_pageSize) { |
433 end(true); | 433 end(true); |
434 return; | 434 return; |
435 } | 435 } |
436 | 436 |
437 // Continue cursor before making injected script calls, otherwise transa
ction might be finished. | 437 // Continue cursor before making injected script calls, otherwise transa
ction might be finished. |
438 TrackExceptionState exceptionState; | 438 TrackExceptionState exceptionState; |
439 idbCursor->continueFunction(0, 0, exceptionState); | 439 idbCursor->continueFunction(nullptr, nullptr, exceptionState); |
440 if (exceptionState.hadException()) { | 440 if (exceptionState.hadException()) { |
441 m_requestCallback->sendFailure("Could not continue cursor."); | 441 m_requestCallback->sendFailure("Could not continue cursor."); |
442 return; | 442 return; |
443 } | 443 } |
444 | 444 |
445 Document* document = toDocument(context); | 445 Document* document = toDocument(context); |
446 if (!document) | 446 if (!document) |
447 return; | 447 return; |
448 ScriptState* scriptState = mainWorldScriptState(document->frame()); | 448 ScriptState* scriptState = mainWorldScriptState(document->frame()); |
449 | 449 |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 void InspectorIndexedDBAgent::requestData(ErrorString* errorString, const String
& securityOrigin, const String& databaseName, const String& objectStoreName, con
st String& indexName, int skipCount, int pageSize, const RefPtr<JSONObject>* key
Range, PassRefPtr<RequestDataCallback> requestCallback) | 662 void InspectorIndexedDBAgent::requestData(ErrorString* errorString, const String
& securityOrigin, const String& databaseName, const String& objectStoreName, con
st String& indexName, int skipCount, int pageSize, const RefPtr<JSONObject>* key
Range, PassRefPtr<RequestDataCallback> requestCallback) |
663 { | 663 { |
664 Frame* frame = findFrameWithSecurityOrigin(m_page, securityOrigin); | 664 Frame* frame = findFrameWithSecurityOrigin(m_page, securityOrigin); |
665 Document* document = assertDocument(errorString, frame); | 665 Document* document = assertDocument(errorString, frame); |
666 if (!document) | 666 if (!document) |
667 return; | 667 return; |
668 IDBFactory* idbFactory = assertIDBFactory(errorString, document); | 668 IDBFactory* idbFactory = assertIDBFactory(errorString, document); |
669 if (!idbFactory) | 669 if (!idbFactory) |
670 return; | 670 return; |
671 | 671 |
672 RefPtr<IDBKeyRange> idbKeyRange = keyRange ? idbKeyRangeFromKeyRange(keyRang
e->get()) : 0; | 672 RefPtr<IDBKeyRange> idbKeyRange = keyRange ? idbKeyRangeFromKeyRange(keyRang
e->get()) : nullptr; |
673 if (keyRange && !idbKeyRange) { | 673 if (keyRange && !idbKeyRange) { |
674 *errorString = "Can not parse key range."; | 674 *errorString = "Can not parse key range."; |
675 return; | 675 return; |
676 } | 676 } |
677 | 677 |
678 // FIXME: This should probably use ScriptState/ScriptScope instead of V8 API | 678 // FIXME: This should probably use ScriptState/ScriptScope instead of V8 API |
679 v8::Isolate* isolate = toIsolate(frame); | 679 v8::Isolate* isolate = toIsolate(frame); |
680 v8::HandleScope handleScope(isolate); | 680 v8::HandleScope handleScope(isolate); |
681 v8::Handle<v8::Context> context = toV8Context(isolate, document->frame(), DO
MWrapperWorld::mainWorld()); | 681 v8::Handle<v8::Context> context = toV8Context(isolate, document->frame(), DO
MWrapperWorld::mainWorld()); |
682 ASSERT(!context.IsEmpty()); | 682 ASSERT(!context.IsEmpty()); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 v8::HandleScope handleScope(isolate); | 785 v8::HandleScope handleScope(isolate); |
786 v8::Handle<v8::Context> context = toV8Context(isolate, document->frame(), DO
MWrapperWorld::mainWorld()); | 786 v8::Handle<v8::Context> context = toV8Context(isolate, document->frame(), DO
MWrapperWorld::mainWorld()); |
787 ASSERT(!context.IsEmpty()); | 787 ASSERT(!context.IsEmpty()); |
788 v8::Context::Scope contextScope(context); | 788 v8::Context::Scope contextScope(context); |
789 | 789 |
790 RefPtr<ClearObjectStore> clearObjectStore = ClearObjectStore::create(documen
t, objectStoreName, requestCallback); | 790 RefPtr<ClearObjectStore> clearObjectStore = ClearObjectStore::create(documen
t, objectStoreName, requestCallback); |
791 clearObjectStore->start(idbFactory, document->securityOrigin(), databaseName
); | 791 clearObjectStore->start(idbFactory, document->securityOrigin(), databaseName
); |
792 } | 792 } |
793 | 793 |
794 } // namespace WebCore | 794 } // namespace WebCore |
OLD | NEW |