Index: third_party/WebKit/LayoutTests/http/tests/inspector/indexeddb/database-refresh-view.html |
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/indexeddb/database-refresh-view.html b/third_party/WebKit/LayoutTests/http/tests/inspector/indexeddb/database-refresh-view.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d9c3bb0df10d3ba4772291f7e19008ec823914bb |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/indexeddb/database-refresh-view.html |
@@ -0,0 +1,187 @@ |
+<html> |
+<head> |
+<script src="../inspector-test.js"></script> |
+<script src="../resources-test.js"></script> |
+<script src="../console-test.js"></script> |
+<script src="indexeddb-test.js"></script> |
+<script> |
+ |
+function onIndexedDBError(e) { |
+ console.error("IndexedDB error: " + e); |
+} |
+ |
+function createDatabase(databaseName) { |
+ var callback; |
+ var promise = new Promise((fulfill) => callback = fulfill); |
+ var request = indexedDB.open(databaseName); |
+ request.onerror = onIndexedDBError; |
+ request.onsuccess = function(event) { |
+ request.result.close(); |
+ callback(); |
+ } |
+ return promise; |
+} |
+ |
+function createObjectStore(databaseName, objectStoreName, indexName, keyPath) { |
+ var callback; |
+ var promise = new Promise((fulfill) => callback = fulfill); |
+ var request = indexedDB.open(databaseName); |
+ request.onerror = onIndexedDBError; |
+ request.onsuccess = function(event) { |
+ var db = request.result; |
+ var version = db.version; |
+ db.close(); |
+ |
+ var upgradeRequest = indexedDB.open(databaseName, version + 1); |
+ |
+ upgradeRequest.onerror = onIndexedDBError; |
+ upgradeRequest.onupgradeneeded = function(e) { |
+ var upgradeDb = e.target.result; |
+ var store = upgradeDb.createObjectStore(objectStoreName, { keyPath: "test", autoIncrement: false }); |
+ store.createIndex(indexName, "test", { unique: false, multiEntry: false }); |
+ callback(); |
+ } |
+ upgradeRequest.onsuccess = function(e) { |
+ var upgradeDb = e.target.result; |
+ upgradeDb.close(); |
+ callback(); |
+ } |
+ } |
+ return promise; |
+} |
+ |
+function addIDBValue(databaseName, objectStoreName, key, value) { |
+ var callback; |
+ var promise = new Promise((fulfill) => callback = fulfill); |
+ var request = indexedDB.open(databaseName); |
+ request.onerror = onIndexedDBError; |
+ request.onsuccess = function(event) { |
+ var db = request.result; |
+ var transaction = db.transaction(objectStoreName, "readwrite"); |
+ var store = transaction.objectStore(objectStoreName); |
+ store.put({ test: key, testValue: value }); |
+ |
+ transaction.onerror = onIndexedDBError; |
+ transaction.oncomplete = function() { |
+ db.close(); |
+ callback(); |
+ }; |
+ } |
+ return promise; |
+} |
+ |
+async function test() |
+{ |
+ var databaseName = "testDatabase"; |
+ var objectStoreName1 = "testObjectStore1"; |
+ var objectStoreName2 = "testObjectStore2"; |
+ var indexName = "testIndex"; |
+ var keyPath = "testKey"; |
+ |
+ var indexedDBModel = InspectorTest.mainTarget.model(Resources.IndexedDBModel); |
+ var databaseId; |
+ |
+ function waitRefreshDatabase(callback) { |
+ var view = UI.panels.resources._sidebar.indexedDBListTreeElement._idbDatabaseTreeElements[0]._view; |
+ InspectorTest.addSniffer(Resources.IDBDatabaseView.prototype, "_updatedForTests", callback, false); |
+ view._refreshDatabaseButtonClicked(); |
+ } |
+ |
+ function waitUpdateDataView(callback) { |
+ InspectorTest.addSniffer(Resources.IDBDataView.prototype, "_updatedDataForTests", callback, false); |
+ } |
+ |
+ function waitDatabaseLoaded(callback) { |
+ var event = indexedDBModel.addEventListener(Resources.IndexedDBModel.Events.DatabaseLoaded, () => { |
+ Common.EventTarget.removeEventListeners([event]); |
+ callback(); |
+ }); |
+ } |
+ |
+ function waitDatabaseAdded(callback) { |
+ var event = indexedDBModel.addEventListener(Resources.IndexedDBModel.Events.DatabaseAdded, () => { |
+ Common.EventTarget.removeEventListeners([event]); |
+ callback(); |
+ }); |
+ UI.panels.resources._sidebar.indexedDBListTreeElement.refreshIndexedDB(); |
+ } |
+ |
+ function dumpObjectStores() { |
+ InspectorTest.addResult("Dumping ObjectStore data:"); |
+ |
+ var idbDatabaseTreeElement = UI.panels.resources._sidebar.indexedDBListTreeElement._idbDatabaseTreeElements[0]; |
+ for (var i = 0; i < idbDatabaseTreeElement.childCount(); ++i) { |
+ var objectStoreTreeElement = idbDatabaseTreeElement.childAt(i); |
+ InspectorTest.addResult(" Object store: " + objectStoreTreeElement.title); |
+ var entries = objectStoreTreeElement._view._entries; |
+ if (!entries.length) { |
+ InspectorTest.addResult(" (no entries)"); |
+ continue; |
+ } |
+ for (var j = 0; j < entries.length; ++j) { |
+ InspectorTest.addResult(" Key = " + entries[j].key._value + ", value = " + entries[j].value); |
+ } |
+ } |
+ } |
+ |
+ // Initial tree |
+ InspectorTest.dumpIndexedDBTree(); |
+ |
+ // Create database |
+ await InspectorTest.evaluateInPageAsync("createDatabase('" + databaseName + "')"); |
+ await new Promise(waitDatabaseAdded); |
+ var idbDatabaseTreeElement = UI.panels.resources._sidebar.indexedDBListTreeElement._idbDatabaseTreeElements[0]; |
+ databaseId = idbDatabaseTreeElement._databaseId; |
+ InspectorTest.addResult("Created database."); |
+ InspectorTest.dumpIndexedDBTree(); |
+ |
+ // Load indexedDb database view |
+ indexedDBModel.refreshDatabase(databaseId); // Initial database refresh. |
+ await new Promise(waitDatabaseLoaded); // Needed to initialize database view, otherwise |
+ idbDatabaseTreeElement.onselect(false); // IDBDatabaseTreeElement.database would be undefined. |
+ var databaseView = idbDatabaseTreeElement._view; |
+ |
+ // Create first objectstore |
+ await InspectorTest.evaluateInPageAsync("createObjectStore('" + databaseName + "', '" + objectStoreName1 + "', '" + indexName + "', '" + keyPath + "')"); |
+ await new Promise(waitRefreshDatabase); |
+ InspectorTest.addResult("Created first objectstore."); |
+ InspectorTest.dumpIndexedDBTree(); |
+ |
+ // Create second objectstore |
+ await InspectorTest.evaluateInPageAsync("createObjectStore('" + databaseName + "', '" + objectStoreName2 + "', '" + indexName + "', '" + keyPath + "')"); |
+ await new Promise(waitRefreshDatabase); |
+ InspectorTest.addResult("Created second objectstore."); |
+ InspectorTest.dumpIndexedDBTree(); |
+ |
+ // Load objectstore data views |
+ for (var i = 0; i < idbDatabaseTreeElement.childCount(); ++i) { |
+ var objectStoreTreeElement = idbDatabaseTreeElement.childAt(i); |
+ objectStoreTreeElement.onselect(false); |
+ } |
+ |
+ // Add entries |
+ await InspectorTest.evaluateInPageAsync("addIDBValue('" + databaseName + "', '" + objectStoreName1 + "', 'testKey', 'testValue')"); |
+ InspectorTest.addResult("Added " + objectStoreName1 + " entry."); |
+ dumpObjectStores(); |
+ |
+ // Refresh database view |
+ await new Promise(waitRefreshDatabase); |
+ for (var i = 0; i < idbDatabaseTreeElement.childCount(); ++i) { |
+ var objectStoreTreeElement = idbDatabaseTreeElement.childAt(i); |
+ if (objectStoreTreeElement._objectStore.name === objectStoreName1) { |
+ objectStoreTreeElement.onselect(false); |
+ break; |
+ } |
+ } |
+ await new Promise(waitUpdateDataView); // Wait for objectstore data to load on page. |
+ InspectorTest.addResult("Refreshed database."); |
+ dumpObjectStores(); |
+ |
+ InspectorTest.completeTest(); |
+} |
+</script> |
+</head> |
+<body onload="runTest()"> |
+<p>Tests refreshing the database information and data views.</p> |
+</body> |
+</html> |