Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(397)

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/inspector/indexeddb/database-refresh-view.html

Issue 2914293002: [IndexedDB] [DevTools] Right-click 'Refresh' on database now updates object store view, also fixed … (Closed)
Patch Set: Better handling of null database in view, removed extra lines in test file, moved utility test func… Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698