IndexedDB 2.0: Support IDBIndex getAll/getAllKeys.
<rdar://problem/28806933> and https://bugs.webkit.org/show_bug.cgi?id=164294
Reviewed by Alex Christensen.
LayoutTests/imported/w3c:
* web-platform-tests/IndexedDB/idbindex_getAll-expected.txt:
* web-platform-tests/IndexedDB/idbindex_getAllKeys-expected.txt:
Source/WebCore:
Tests: storage/indexeddb/modern/idbindex-getall-1-private.html
storage/indexeddb/modern/idbindex-getall-1.html
storage/indexeddb/modern/idbindex-getallkeys-1-private.html
storage/indexeddb/modern/idbindex-getallkeys-1.html
Existing imported W3C tests.
* Modules/indexeddb/IDBIndex.cpp:
(WebCore::IDBIndex::getAll):
(WebCore::IDBIndex::getAllKeys):
* Modules/indexeddb/IDBIndex.h:
* Modules/indexeddb/IDBIndex.idl:
* Modules/indexeddb/IDBRequest.cpp:
(WebCore::IDBRequest::create):
(WebCore::IDBRequest::createIndexGet):
(WebCore::IDBRequest::createCount): Deleted.
(WebCore::IDBRequest::createGet): Deleted.
* Modules/indexeddb/IDBRequest.h:
* Modules/indexeddb/IDBTransaction.cpp:
(WebCore::IDBTransaction::requestGetAllIndexRecords):
(WebCore::IDBTransaction::requestIndexRecord):
(WebCore::IDBTransaction::requestCount):
* Modules/indexeddb/IDBTransaction.h:
* Modules/indexeddb/server/IndexValueStore.cpp:
(WebCore::IDBServer::IndexValueStore::allValuesForKey):
* Modules/indexeddb/server/IndexValueStore.h:
* Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
(WebCore::IDBServer::MemoryIDBBackingStore::getAllRecords):
* Modules/indexeddb/server/MemoryIndex.cpp:
(WebCore::IDBServer::MemoryIndex::getAllRecords):
* Modules/indexeddb/server/MemoryIndex.h:
* Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
(WebCore::IDBServer::SQLiteIDBBackingStore::getAllRecords):
(WebCore::IDBServer::queryForGetAllObjectStoreRecords):
(WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
(WebCore::IDBServer::SQLiteIDBBackingStore::getAllIndexRecords):
(WebCore::IDBServer::queryForGetAllRecords): Deleted.
* Modules/indexeddb/server/SQLiteIDBBackingStore.h:
LayoutTests:
* resources/js-test.js:
(areObjectsEqual):
* storage/indexeddb/modern/idbindex-getall-1-expected.txt: Added.
* storage/indexeddb/modern/idbindex-getall-1-private-expected.txt: Added.
* storage/indexeddb/modern/idbindex-getall-1-private.html: Added.
* storage/indexeddb/modern/idbindex-getall-1.html: Added.
* storage/indexeddb/modern/idbindex-getallkeys-1-expected.txt: Added.
* storage/indexeddb/modern/idbindex-getallkeys-1-private-expected.txt: Added.
* storage/indexeddb/modern/idbindex-getallkeys-1-private.html: Added.
* storage/indexeddb/modern/idbindex-getallkeys-1.html: Added.
* storage/indexeddb/modern/resources/idbindex-getall-1.js: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@208261 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/resources/js-test.js b/LayoutTests/resources/js-test.js
index 4512a42..c8c6401 100644
--- a/LayoutTests/resources/js-test.js
+++ b/LayoutTests/resources/js-test.js
@@ -711,6 +711,34 @@
testRunner.notifyDone();
}
+function areObjectsEqual(a, b) {
+ for (var property in a) {
+ if (!b.hasOwnProperty(property))
+ return false;
+
+ switch (typeof (a[property])) {
+ case 'function':
+ if (typeof b[property] == 'undefined' || a[property].toString() != b[property].toString())
+ return false;
+ break;
+ case 'object':
+ if (!areObjectsEqual(a, b))
+ return false;
+ break;
+ default:
+ if (a[property] != b[property])
+ return false;
+ }
+ }
+
+ for (var property in b) {
+ if (!a.hasOwnProperty(property))
+ return false;
+ }
+
+ return true;
+};
+
function startWorker(testScriptURL)
{
self.jsTestIsAsync = true;