+2012-02-01 Vsevolod Vlasov <vsevik@chromium.org>
+
+ Web Inspector: [InspectorIndexedDB] Add tests for database names and database structure requests.
+ https://bugs.webkit.org/show_bug.cgi?id=77439
+
+ Reviewed by Pavel Feldman.
+
+ * http/tests/inspector/indexeddb/database-names-expected.txt: Added.
+ * http/tests/inspector/indexeddb/database-names.html: Added.
+ * http/tests/inspector/indexeddb/database-structure-expected.txt: Added.
+ * http/tests/inspector/indexeddb/database-structure.html: Added.
+ * http/tests/inspector/indexeddb/indexeddb-test.js: Added.
+ * platform/gtk/Skipped:
+ * platform/mac-leopard/Skipped:
+ * platform/mac-snowleopard/Skipped:
+ * platform/mac/Skipped:
+ * platform/qt/Skipped:
+ * platform/win/Skipped:
+
2012-02-01 Shawn Singh <shawnsingh@chromium.org>
Fix the semantics of passing contentsVisible flag to GraphicsLayers
--- /dev/null
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback1
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback2
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback3
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback4
+Tests that database names are correctly loaded and saved in IndexedDBModel.
+
+Dumping database names:
+Dumping database names:
+ testDatabase1
+
+Dumping database names:
+ testDatabase1
+ testDatabase2
+
+Dumping database names:
+ testDatabase1
+
+Dumping database names:
+
--- /dev/null
+<html>
+<head>
+<script src="../inspector-test.js"></script>
+<script src="indexeddb-test.js"></script>
+<script>
+function test()
+{
+ var indexedDBModel = new WebInspector.IndexedDBModel();
+ var mainFrameId = WebInspector.resourceTreeModel.mainFrame.id;
+
+ function dumpDatabaseNames()
+ {
+ InspectorTest.addResult("Dumping database names:");
+ var frame = indexedDBModel._frames[mainFrameId];
+ if (!frame)
+ return;
+
+ var securityOrigin = frame.securityOrigin;
+ var names = indexedDBModel._databaseNamesBySecurityOrigin[securityOrigin];
+ for (var i = 0; i < names.length; ++i)
+ InspectorTest.addResult(" " + names[i]);
+ InspectorTest.addResult("");
+ }
+
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseNamesLoaded", step2, false);
+
+ function step2()
+ {
+ dumpDatabaseNames();
+ InspectorTest.createDatabase(mainFrameId, "testDatabase1", step3);
+ }
+
+ function step3()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseNamesLoaded", step4, false);
+ indexedDBModel.refreshDatabaseNames();
+ }
+
+ function step4()
+ {
+ dumpDatabaseNames();
+ InspectorTest.createDatabase(mainFrameId, "testDatabase2", step5);
+ }
+
+ function step5()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseNamesLoaded", step6, false);
+ indexedDBModel.refreshDatabaseNames();
+ }
+
+ function step6()
+ {
+ dumpDatabaseNames();
+ InspectorTest.deleteDatabase(mainFrameId, "testDatabase2", step7);
+ }
+
+ function step7()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseNamesLoaded", step8, false);
+ indexedDBModel.refreshDatabaseNames();
+ }
+
+ function step8()
+ {
+ dumpDatabaseNames();
+ InspectorTest.deleteDatabase(mainFrameId, "testDatabase1", step9);
+ }
+
+ function step9()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseNamesLoaded", step10, false);
+ indexedDBModel.refreshDatabaseNames();
+ }
+
+ function step10()
+ {
+ dumpDatabaseNames();
+ InspectorTest.completeTest();
+ }
+}
+</script>
+</head>
+<body onload="runTest()">
+<p>Tests that database names are correctly loaded and saved in IndexedDBModel.</p>
+</body>
+</html>
--- /dev/null
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback1
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback2
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback3
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback4
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback5
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback6
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback7
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback8
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback9
+CONSOLE MESSAGE: line 77: InspectorTest.IndexedDB_callback10
+Tests that database names are correctly loaded and saved in IndexedDBModel.
+
+Dumping database:
+Dumping database:
+testDatabase1
+ version:
+ objectStores:
+
+Dumping database:
+testDatabase1
+ version: 1
+ objectStores:
+ testObjectStore1
+ keyPath: test.key.path
+ indexes:
+
+Dumping database:
+testDatabase1
+ version: 2
+ objectStores:
+ testObjectStore1
+ keyPath: test.key.path
+ indexes:
+ testObjectStore2
+ keyPath:
+ indexes:
+
+Dumping database:
+testDatabase1
+ version: 3
+ objectStores:
+ testObjectStore1
+ keyPath: test.key.path
+ indexes:
+ testObjectStore2
+ keyPath:
+ indexes:
+ testIndexName1
+ keyPath: key.path1
+ unique: false
+ multiEntry: true
+
+Dumping database:
+testDatabase1
+ version: 4
+ objectStores:
+ testObjectStore1
+ keyPath: test.key.path
+ indexes:
+ testObjectStore2
+ keyPath:
+ indexes:
+ testIndexName1
+ keyPath: key.path1
+ unique: false
+ multiEntry: true
+ testIndexName2
+ keyPath: key.path2
+ unique: true
+ multiEntry: false
+
+Dumping database:
+testDatabase1
+ version: 5
+ objectStores:
+ testObjectStore1
+ keyPath: test.key.path
+ indexes:
+ testObjectStore2
+ keyPath:
+ indexes:
+ testIndexName1
+ keyPath: key.path1
+ unique: false
+ multiEntry: true
+
+Dumping database:
+testDatabase1
+ version: 6
+ objectStores:
+ testObjectStore1
+ keyPath: test.key.path
+ indexes:
+ testObjectStore2
+ keyPath:
+ indexes:
+
+Dumping database:
+testDatabase1
+ version: 7
+ objectStores:
+ testObjectStore1
+ keyPath: test.key.path
+ indexes:
+
+Dumping database:
+testDatabase1
+ version: 8
+ objectStores:
+
+
--- /dev/null
+<html>
+<head>
+<script src="../inspector-test.js"></script>
+<script src="indexeddb-test.js"></script>
+<script>
+function test()
+{
+ var indexedDBModel = new WebInspector.IndexedDBModel();
+ var mainFrameId = WebInspector.resourceTreeModel.mainFrame.id;
+ var databaseName = "testDatabase1";
+
+ function dumpDatabase()
+ {
+ InspectorTest.addResult("Dumping database:");
+ var frame = indexedDBModel._frames[mainFrameId];
+ if (!frame)
+ return;
+ var database = frame.databases[databaseName];
+ if (!database)
+ return;
+ InspectorTest.addResult(database.name);
+ InspectorTest.addResult(" version: " + database.version);
+ InspectorTest.addResult(" objectStores:");
+ var objectStoreNames = [];
+ for (var objectStoreName in database.objectStores)
+ objectStoreNames.push(objectStoreName);
+ objectStoreNames.sort();
+ for (var i = 0; i < objectStoreNames.length; ++i) {
+ var objectStore = database.objectStores[objectStoreNames[i]];
+ InspectorTest.addResult(" " + objectStore.name);
+ InspectorTest.addResult(" keyPath: " + objectStore.keyPath);
+ InspectorTest.addResult(" indexes: ");
+ var indexNames = [];
+ for (var indexName in objectStore.indexes)
+ indexNames.push(indexName);
+ indexNames.sort();
+ for (var j = 0; j < indexNames.length; ++j) {
+ var index = objectStore.indexes[indexNames[j]];
+ InspectorTest.addResult(" " + index.name);
+ InspectorTest.addResult(" keyPath: " + index.keyPath);
+ InspectorTest.addResult(" unique: " + index.unique);
+ InspectorTest.addResult(" multiEntry: " + index.multiEntry);
+ }
+ }
+ InspectorTest.addResult("");
+ }
+
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseNamesLoaded", step2, false);
+
+ function step2()
+ {
+ InspectorTest.createDatabase(mainFrameId, databaseName, step3);
+ }
+
+ function step3()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseNamesLoaded", step4, false);
+ indexedDBModel.refreshDatabaseNames();
+ }
+
+ function step4()
+ {
+ dumpDatabase();
+
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step5, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step5()
+ {
+ dumpDatabase();
+
+ InspectorTest.createObjectStore(mainFrameId, databaseName, "testObjectStore1", "test.key.path", true, step6);
+ }
+
+ function step6()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step7, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step7()
+ {
+ dumpDatabase();
+
+ InspectorTest.createObjectStore(mainFrameId, databaseName, "testObjectStore2", "", false, step8);
+ }
+
+ function step8()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step9, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step9()
+ {
+ dumpDatabase();
+
+ InspectorTest.createObjectStoreIndex(mainFrameId, databaseName, "testObjectStore2", "testIndexName1", "key.path1", false, true, step10);
+ }
+
+ function step10()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step11, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step11()
+ {
+ dumpDatabase();
+
+ InspectorTest.createObjectStoreIndex(mainFrameId, databaseName, "testObjectStore2", "testIndexName2", "key.path2", true, false, step12);
+ }
+
+ function step12()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step13, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step13()
+ {
+ dumpDatabase();
+
+ InspectorTest.deleteObjectStoreIndex(mainFrameId, databaseName, "testObjectStore2", "testIndexName2", step14);
+ }
+
+ function step14()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step15, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step15()
+ {
+ dumpDatabase();
+
+ InspectorTest.deleteObjectStoreIndex(mainFrameId, databaseName, "testObjectStore2", "testIndexName1", step16);
+ }
+
+ function step16()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step17, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step17()
+ {
+ dumpDatabase();
+
+ InspectorTest.deleteObjectStore(mainFrameId, databaseName, "testObjectStore2", step18);
+ }
+
+ function step18()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step19, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step19()
+ {
+ dumpDatabase();
+
+ InspectorTest.deleteObjectStore(mainFrameId, databaseName, "testObjectStore1", step20);
+ }
+
+ function step20()
+ {
+ InspectorTest.addSniffer(WebInspector.IndexedDBDispatcher.prototype, "databaseLoaded", step21, false);
+ indexedDBModel.refreshDatabase(mainFrameId, databaseName);
+ }
+
+ function step21()
+ {
+ dumpDatabase();
+ InspectorTest.deleteDatabase(mainFrameId, databaseName, step22);
+ }
+
+ function step22()
+ {
+ InspectorTest.completeTest();
+ }
+}
+</script>
+</head>
+<body onload="runTest()">
+<p>Tests that database names are correctly loaded and saved in IndexedDBModel.</p>
+</body>
+</html>
--- /dev/null
+var initialize_IndexedDBTest = function() {
+
+var snifferInstalled = false;
+var lastCallbackId = 0;
+var callbacks = {};
+var callbackIdPrefix = "InspectorTest.IndexedDB_callback";
+InspectorTest.evaluateWithCallback = function(frameId, methodName, parameters, callback)
+{
+ if (!snifferInstalled)
+ InspectorTest._installIndexedDBSniffer();
+ var callbackId = ++lastCallbackId;
+ callbacks[callbackId] = callback;
+ var parametersString = "\"" + callbackIdPrefix + callbackId + "\"";
+ for (var i = 0; i < parameters.length; ++i) {
+ if (typeof(parameters[i]) === "string")
+ parametersString += ", \"" + parameters[i] + "\"";
+ else if ((typeof(parameters[i]) === "number") || (typeof(parameters[i]) === "boolean"))
+ parametersString += ", " + parameters[i];
+ }
+
+ var requestString = methodName + "(" + parametersString + ")";
+ InspectorTest.evaluateInPage(requestString);
+};
+
+InspectorTest._installIndexedDBSniffer = function()
+{
+ snifferInstalled = true;
+ InspectorTest.addConsoleSniffer(consoleMessageOverride, true);
+
+ function consoleMessageOverride(msg)
+ {
+ var text = msg._messageText;
+ if (text.indexOf(callbackIdPrefix) !== 0)
+ return;
+ var callbackId = text.substring(callbackIdPrefix.length);
+ callbacks[callbackId].call();
+ delete callbacks[callbackId];
+ }
+};
+
+InspectorTest.createDatabase = function(frameId, databaseName, callback)
+{
+ InspectorTest.evaluateWithCallback(frameId, "createDatabase", [databaseName], callback)
+};
+
+InspectorTest.deleteDatabase = function(frameId, databaseName, callback)
+{
+ InspectorTest.evaluateWithCallback(frameId, "deleteDatabase", [databaseName], callback)
+};
+
+InspectorTest.createObjectStore = function(frameId, databaseName, objectStoreName, keyPath, autoIncrement, callback)
+{
+ InspectorTest.evaluateWithCallback(frameId, "createObjectStore", [databaseName, objectStoreName, keyPath, autoIncrement], callback)
+};
+
+InspectorTest.deleteObjectStore = function(frameId, databaseName, objectStoreName, callback)
+{
+ InspectorTest.evaluateWithCallback(frameId, "deleteObjectStore", [databaseName, objectStoreName], callback)
+};
+
+InspectorTest.createObjectStoreIndex = function(frameId, databaseName, objectStoreName, objectStoreIndexName, keyPath, unique, multiEntry, callback)
+{
+ InspectorTest.evaluateWithCallback(frameId, "createObjectStoreIndex", [databaseName, objectStoreName, objectStoreIndexName, keyPath, unique, multiEntry], callback)
+};
+
+InspectorTest.deleteObjectStoreIndex = function(frameId, databaseName, objectStoreName, objectStoreIndexName, callback)
+{
+ InspectorTest.evaluateWithCallback(frameId, "deleteObjectStoreIndex", [databaseName, objectStoreName, objectStoreIndexName], callback)
+};
+
+};
+
+var indexedDB = window.indexeddb || window.webkitIndexedDB;
+
+function dispatchCallback(callbackId)
+{
+ console.log(callbackId);
+}
+
+function onIndexedDBError(e)
+{
+ console.log(e);
+}
+
+function doWithDatabase(databaseName, callback)
+{
+ function innerCallback()
+ {
+ var db = request.result;
+ callback(db);
+ }
+
+ var request = indexedDB.open(databaseName);
+ request.onblocked = onIndexedDBError;
+ request.onerror = onIndexedDBError;
+ request.onsuccess = innerCallback;
+}
+
+function doWithVersionTransaction(databaseName, callback, commitCallback)
+{
+ doWithDatabase(databaseName, step2);
+
+ function step2(db)
+ {
+ var request = db.setVersion(Number(db.version) + 1);
+ request.onblocked = onIndexedDBError;
+ request.onerror = onIndexedDBError;
+ request.onsuccess = step3;
+
+ function step3()
+ {
+ callback(db, request.result);
+ db.close();
+ commitCallback();
+ }
+ }
+}
+
+function createDatabase(callbackId, databaseName)
+{
+ var request = indexedDB.open(databaseName, 0);
+ request.onerror = onIndexedDBError;
+ request.onsuccess = closeDatabase;
+
+ function closeDatabase()
+ {
+ request.result.close();
+ dispatchCallback(callbackId);
+ }
+}
+
+function deleteDatabase(callbackId, databaseName)
+{
+ var request = indexedDB.deleteDatabase(databaseName);
+ request.onerror = onIndexedDBError;
+ request.onsuccess = dispatchCallback.bind(this, callbackId);
+}
+
+function createObjectStore(callbackId, databaseName, objectStoreName, keyPath, autoIncrement)
+{
+ doWithVersionTransaction(databaseName, withTransactionCallback, dispatchCallback.bind(this, callbackId));
+
+ function withTransactionCallback(db, transaction)
+ {
+ var store = db.createObjectStore(objectStoreName, { keyPath: keyPath, autoIncrement: autoIncrement });
+ }
+}
+
+function deleteObjectStore(callbackId, databaseName, objectStoreName)
+{
+ doWithVersionTransaction(databaseName, withTransactionCallback, dispatchCallback.bind(this, callbackId));
+
+ function withTransactionCallback(db, transaction)
+ {
+ var store = db.deleteObjectStore(objectStoreName);
+ }
+}
+
+function createObjectStoreIndex(callbackId, databaseName, objectStoreName, objectStoreIndexName, keyPath, unique, multiEntry)
+{
+ doWithVersionTransaction(databaseName, withTransactionCallback, dispatchCallback.bind(this, callbackId));
+
+ function withTransactionCallback(db, transaction)
+ {
+ var objectStore = transaction.objectStore(objectStoreName);
+ objectStore.createIndex(objectStoreIndexName, keyPath, { unique: unique, multiEntry: multiEntry });
+ }
+}
+
+function deleteObjectStoreIndex(callbackId, databaseName, objectStoreName, objectStoreIndexName)
+{
+ doWithVersionTransaction(databaseName, withTransactionCallback, dispatchCallback.bind(this, callbackId));
+
+ function withTransactionCallback(db, transaction)
+ {
+ var objectStore = transaction.objectStore(objectStoreName);
+ objectStore.deleteIndex(objectStoreIndexName);
+ }
+}
+
# IndexedDB is not yet enabled.
storage/indexeddb
+http/tests/inspector/indexeddb
# StorageTracker is not enabled.
storage/domstorage/localstorage/storagetracker
# IndexedDB is not yet enabled.
storage/indexeddb
+http/tests/inspector/indexeddb
# Disable the tests until the mesa renderer is integrated.
# https://bugs.webkit.org/show_bug.cgi?id=41545
# IndexedDB is not yet enabled.
storage/indexeddb
+http/tests/inspector/indexeddb
# Philip's canvas tests that fail on SnowLeopard only
canvas/philip/tests/2d.gradient.interpolate.overlap.html
# IndexedDB is not yet enabled.
storage/indexeddb
+http/tests/inspector/indexeddb
# This port doesn't support DeviceMotion or DeviceOrientation.
fast/dom/DeviceMotion
# ENABLE(INDEXED_DATABASE) is disabled.
storage/indexeddb
+http/tests/inspector/indexeddb
inspector/timeline/timeline-animation-frame.html
# IndexedDB is not yet enabled.
storage/indexeddb
+http/tests/inspector/indexeddb
# StorageTracker is not enabled.
storage/domstorage/localstorage/storagetracker
+2012-02-01 Vsevolod Vlasov <vsevik@chromium.org>
+
+ Web Inspector: [InspectorIndexedDB] Add tests for database names and database structure requests.
+ https://bugs.webkit.org/show_bug.cgi?id=77439
+
+ Reviewed by Pavel Feldman.
+
+ Tests: http/tests/inspector/indexeddb/database-names.html
+ http/tests/inspector/indexeddb/database-structure.html
+
+ * inspector/front-end/IndexedDBModel.js:
+ (WebInspector.IndexedDBModel.prototype.refreshDatabase):
+
2012-01-31 Vsevolod Vlasov <vsevik@chromium.org>
Web Inspector: Scripts navigator becomes empty after "show folders" settings change.
this._framesNavigatedRecursively(WebInspector.resourceTreeModel.mainFrame);
},
+ refreshDatabase: function(frameId, databaseName)
+ {
+ this._loadDatabase(frameId, databaseName);
+ },
+
/**
* @param {WebInspector.ResourceTreeFrame} resourceTreeFrame
*/