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;