Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <html> | 1 <html> |
| 2 <head> | 2 <head> |
| 3 <script src="../inspector-test.js"></script> | 3 <script src="../inspector-test.js"></script> |
| 4 <script src="../resources-test.js"></script> | 4 <script src="../resources-test.js"></script> |
| 5 <script src="../console-test.js"></script> | 5 <script src="../console-test.js"></script> |
| 6 <script src="indexeddb-test.js"></script> | 6 <script src="indexeddb-test.js"></script> |
| 7 <script> | 7 <script> |
| 8 | 8 |
| 9 function onIndexedDBError(e) { | |
| 10 console.error("IndexedDB error: " + e); | |
| 11 } | |
| 12 | |
| 13 function createDatabase(databaseName) { | |
| 14 var callback; | |
| 15 var promise = new Promise((fulfill) => callback = fulfill); | |
| 16 var request = indexedDB.open(databaseName); | |
| 17 request.onerror = onIndexedDBError; | |
| 18 request.onsuccess = function(event) { | |
| 19 request.result.close(); | |
| 20 callback(); | |
| 21 } | |
| 22 return promise; | |
| 23 } | |
| 24 | |
| 25 function createObjectStore(databaseName, objectStoreName, indexName, keyPath) { | |
| 26 var callback; | |
| 27 var promise = new Promise((fulfill) => callback = fulfill); | |
| 28 var request = indexedDB.open(databaseName); | |
| 29 request.onerror = onIndexedDBError; | |
| 30 request.onsuccess = function(event) { | |
| 31 var db = request.result; | |
| 32 var version = db.version; | |
| 33 db.close(); | |
| 34 | |
| 35 var upgradeRequest = indexedDB.open(databaseName, version + 1); | |
| 36 | |
| 37 upgradeRequest.onerror = onIndexedDBError; | |
| 38 upgradeRequest.onupgradeneeded = function(e) { | |
| 39 var upgradeDb = e.target.result; | |
| 40 var store = upgradeDb.createObjectStore(objectStoreName, { keyPath: "test", autoIncrement: false }); | |
| 41 store.createIndex(indexName, "test", { unique: false, multiEntry: fa lse }); | |
| 42 callback(); | |
| 43 } | |
| 44 upgradeRequest.onsuccess = function(e) { | |
| 45 var upgradeDb = e.target.result; | |
| 46 upgradeDb.close(); | |
| 47 callback(); | |
| 48 } | |
| 49 } | |
| 50 return promise; | |
| 51 } | |
| 52 | |
| 53 function addIDBValue(databaseName, objectStoreName, key, value) { | |
| 54 var callback; | |
| 55 var promise = new Promise((fulfill) => callback = fulfill); | |
| 56 var request = indexedDB.open(databaseName); | |
| 57 request.onerror = onIndexedDBError; | |
| 58 request.onsuccess = function(event) { | |
| 59 var db = request.result; | |
| 60 var transaction = db.transaction(objectStoreName, "readwrite"); | |
| 61 var store = transaction.objectStore(objectStoreName); | |
| 62 store.put({ test: key, testValue: value }); | |
| 63 | |
| 64 transaction.onerror = onIndexedDBError; | |
| 65 transaction.oncomplete = function() { | |
| 66 db.close(); | |
| 67 callback(); | |
| 68 }; | |
| 69 } | |
| 70 return promise; | |
| 71 } | |
| 72 | |
| 73 async function test() | 9 async function test() |
| 74 { | 10 { |
| 75 var databaseName = "testDatabase"; | 11 var databaseName = "testDatabase"; |
| 76 var objectStoreName1 = "testObjectStore1"; | 12 var objectStoreName1 = "testObjectStore1"; |
| 77 var objectStoreName2 = "testObjectStore2"; | 13 var objectStoreName2 = "testObjectStore2"; |
| 78 var indexName = "testIndex"; | 14 var indexName = "testIndex"; |
| 79 var keyPath = "testKey"; | 15 var keyPath = "testKey"; |
| 80 | 16 |
| 81 var indexedDBModel = InspectorTest.mainTarget.model(Resources.IndexedDBModel ); | 17 var indexedDBModel = InspectorTest.mainTarget.model(Resources.IndexedDBModel ); |
| 82 var databaseId; | 18 var databaseId; |
| 83 | 19 |
| 84 function waitRefreshDatabase(callback) { | 20 function waitRefreshDatabase(callback) { |
| 85 var view = UI.panels.resources._sidebar.indexedDBListTreeElement._idbDat abaseTreeElements[0]._view; | 21 var view = UI.panels.resources._sidebar.indexedDBListTreeElement._idbDat abaseTreeElements[0]._view; |
| 86 InspectorTest.addSniffer(Resources.IDBDatabaseView.prototype, "_updatedF orTests", callback, false); | 22 InspectorTest.addSniffer(Resources.IDBDatabaseView.prototype, "_updatedF orTests", callback, false); |
| 87 view._refreshDatabaseButtonClicked(); | 23 view._refreshDatabaseButtonClicked(); |
| 88 } | 24 } |
| 89 | 25 |
| 26 function waitRefreshDatabaseRightClick(callback) { | |
|
dmurph
2017/06/02 19:22:05
You use a lot of these callback in promises. Can y
kristipark
2017/06/03 01:42:44
Good point! Changed all but the event listeners to
| |
| 27 InspectorTest.addSniffer(Resources.IDBDataView.prototype, "_updatedDataF orTests", callback, false); | |
| 28 idbDatabaseTreeElement._refreshIndexedDB(); | |
| 29 } | |
| 30 | |
| 90 function waitUpdateDataView(callback) { | 31 function waitUpdateDataView(callback) { |
| 91 InspectorTest.addSniffer(Resources.IDBDataView.prototype, "_updatedDataF orTests", callback, false); | 32 InspectorTest.addSniffer(Resources.IDBDataView.prototype, "_updatedDataF orTests", callback, false); |
| 92 } | 33 } |
| 93 | 34 |
| 94 function waitDatabaseLoaded(callback) { | 35 function waitDatabaseLoaded(callback) { |
| 95 var event = indexedDBModel.addEventListener(Resources.IndexedDBModel.Eve nts.DatabaseLoaded, () => { | 36 var event = indexedDBModel.addEventListener(Resources.IndexedDBModel.Eve nts.DatabaseLoaded, () => { |
| 96 Common.EventTarget.removeEventListeners([event]); | 37 Common.EventTarget.removeEventListeners([event]); |
| 97 callback(); | 38 callback(); |
| 98 }); | 39 }); |
| 99 } | 40 } |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 121 for (var j = 0; j < entries.length; ++j) { | 62 for (var j = 0; j < entries.length; ++j) { |
| 122 InspectorTest.addResult(" Key = " + entries[j].key._v alue + ", value = " + entries[j].value); | 63 InspectorTest.addResult(" Key = " + entries[j].key._v alue + ", value = " + entries[j].value); |
| 123 } | 64 } |
| 124 } | 65 } |
| 125 } | 66 } |
| 126 | 67 |
| 127 // Initial tree | 68 // Initial tree |
| 128 InspectorTest.dumpIndexedDBTree(); | 69 InspectorTest.dumpIndexedDBTree(); |
| 129 | 70 |
| 130 // Create database | 71 // Create database |
| 131 await InspectorTest.evaluateInPageAsync("createDatabase('" + databaseName + "')"); | 72 await InspectorTest.createDatabaseAsync(databaseName); |
| 132 await new Promise(waitDatabaseAdded); | 73 await new Promise(waitDatabaseAdded); |
| 133 var idbDatabaseTreeElement = UI.panels.resources._sidebar.indexedDBListTreeE lement._idbDatabaseTreeElements[0]; | 74 var idbDatabaseTreeElement = UI.panels.resources._sidebar.indexedDBListTreeE lement._idbDatabaseTreeElements[0]; |
| 134 databaseId = idbDatabaseTreeElement._databaseId; | 75 databaseId = idbDatabaseTreeElement._databaseId; |
| 135 InspectorTest.addResult("Created database."); | 76 InspectorTest.addResult("Created database."); |
| 136 InspectorTest.dumpIndexedDBTree(); | 77 InspectorTest.dumpIndexedDBTree(); |
| 137 | 78 |
| 138 // Load indexedDb database view | 79 // Load indexedDb database view |
| 139 indexedDBModel.refreshDatabase(databaseId); // Initial database refresh. | 80 indexedDBModel.refreshDatabase(databaseId); // Initial database refresh. |
| 140 await new Promise(waitDatabaseLoaded); // Needed to initialize database view, otherwise | 81 await new Promise(waitDatabaseLoaded); // Needed to initialize database view, otherwise |
| 141 idbDatabaseTreeElement.onselect(false); // IDBDatabaseTreeElement.databa se would be undefined. | 82 idbDatabaseTreeElement.onselect(false); // IDBDatabaseTreeElement.databa se would be undefined. |
| 142 var databaseView = idbDatabaseTreeElement._view; | 83 var databaseView = idbDatabaseTreeElement._view; |
| 143 | 84 |
| 144 // Create first objectstore | 85 // Create first objectstore |
| 145 await InspectorTest.evaluateInPageAsync("createObjectStore('" + databaseName + "', '" + objectStoreName1 + "', '" + indexName + "', '" + keyPath + "')"); | 86 await InspectorTest.createObjectStoreAsync(databaseName, objectStoreName1, i ndexName, keyPath); |
| 146 await new Promise(waitRefreshDatabase); | 87 await new Promise(waitRefreshDatabase); |
| 147 InspectorTest.addResult("Created first objectstore."); | 88 InspectorTest.addResult("Created first objectstore."); |
| 148 InspectorTest.dumpIndexedDBTree(); | 89 InspectorTest.dumpIndexedDBTree(); |
| 149 | 90 |
| 150 // Create second objectstore | 91 // Create second objectstore |
| 151 await InspectorTest.evaluateInPageAsync("createObjectStore('" + databaseName + "', '" + objectStoreName2 + "', '" + indexName + "', '" + keyPath + "')"); | 92 await InspectorTest.createObjectStoreAsync(databaseName, objectStoreName2, i ndexName, keyPath); |
| 152 await new Promise(waitRefreshDatabase); | 93 await new Promise(waitRefreshDatabase); |
| 153 InspectorTest.addResult("Created second objectstore."); | 94 InspectorTest.addResult("Created second objectstore."); |
| 154 InspectorTest.dumpIndexedDBTree(); | 95 InspectorTest.dumpIndexedDBTree(); |
| 155 | 96 |
| 156 // Load objectstore data views | 97 // Load objectstore data views |
| 157 for (var i = 0; i < idbDatabaseTreeElement.childCount(); ++i) { | 98 for (var i = 0; i < idbDatabaseTreeElement.childCount(); ++i) { |
| 158 var objectStoreTreeElement = idbDatabaseTreeElement.childAt(i); | 99 var objectStoreTreeElement = idbDatabaseTreeElement.childAt(i); |
| 159 objectStoreTreeElement.onselect(false); | 100 objectStoreTreeElement.onselect(false); |
| 160 } | 101 } |
| 161 | 102 |
| 162 // Add entries | 103 // Add entries |
| 163 await InspectorTest.evaluateInPageAsync("addIDBValue('" + databaseName + "', '" + objectStoreName1 + "', 'testKey', 'testValue')"); | 104 await InspectorTest.addIDBValueAsync(databaseName, objectStoreName1, "testKe y", "testValue"); |
| 164 InspectorTest.addResult("Added " + objectStoreName1 + " entry."); | 105 InspectorTest.addResult("Added " + objectStoreName1 + " entry."); |
| 165 dumpObjectStores(); | 106 dumpObjectStores(); |
| 166 | 107 |
| 167 // Refresh database view | 108 // Refresh database view |
| 168 await new Promise(waitRefreshDatabase); | 109 await new Promise(waitRefreshDatabase); |
| 169 for (var i = 0; i < idbDatabaseTreeElement.childCount(); ++i) { | 110 await new Promise(waitUpdateDataView); // Wait for second objectstore data to load on page. |
| 170 var objectStoreTreeElement = idbDatabaseTreeElement.childAt(i); | 111 InspectorTest.addResult("Refreshed database view."); |
| 171 if (objectStoreTreeElement._objectStore.name === objectStoreName1) { | 112 dumpObjectStores(); |
| 172 objectStoreTreeElement.onselect(false); | 113 |
| 173 break; | 114 // Add entries |
| 174 } | 115 await InspectorTest.addIDBValueAsync(databaseName, objectStoreName2, "testKe y2", "testValue2"); |
| 175 } | 116 InspectorTest.addResult("Added " + objectStoreName2 + " entry."); |
| 176 await new Promise(waitUpdateDataView); // Wait for objectstore data to load on page. | 117 dumpObjectStores(); |
| 177 InspectorTest.addResult("Refreshed database."); | 118 |
| 119 // Right-click refresh database view | |
| 120 await new Promise(waitRefreshDatabaseRightClick); | |
| 121 await new Promise(waitUpdateDataView); // Wait for second objectstore data to load on page. | |
| 122 InspectorTest.addResult("Right-click refreshed database."); | |
| 178 dumpObjectStores(); | 123 dumpObjectStores(); |
| 179 | 124 |
| 180 InspectorTest.completeTest(); | 125 InspectorTest.completeTest(); |
| 181 } | 126 } |
| 182 </script> | 127 </script> |
| 183 </head> | 128 </head> |
| 184 <body onload="runTest()"> | 129 <body onload="runTest()"> |
| 185 <p>Tests refreshing the database information and data views.</p> | 130 <p>Tests refreshing the database information and data views.</p> |
| 186 </body> | 131 </body> |
| 187 </html> | 132 </html> |
| OLD | NEW |