Index: chrome/test/data/indexeddb/perf_shared.js |
diff --git a/chrome/test/data/indexeddb/perf_shared.js b/chrome/test/data/indexeddb/perf_shared.js |
index 9e8b3201801bacafe11219e34fe779034289288f..0d42f9287859f785f5514cbea8dfd51da96f6986 100644 |
--- a/chrome/test/data/indexeddb/perf_shared.js |
+++ b/chrome/test/data/indexeddb/perf_shared.js |
@@ -40,51 +40,65 @@ function assert(t) { |
} |
function onError(e) { |
- console.log(e); |
+ var s = "Caught error."; |
+ if (e.target && e.target.webkitErrorMessage) |
+ s += "\n" + e.target.webkitErrorMessage; |
+ console.log(s); |
+ automation.setStatus(s); |
e.stopPropagation(); |
throw new Error(e); |
} |
var version = 2; // The version with our object stores. |
-var db; |
-function createDatabase(name, objectStores, handler, errorHandler) { |
+// Valid options fields: |
+// indexName: the name of an index to create on each object store |
+// indexKeyPath: likewise |
+// indexIsUnique: the "unique" option for IDBIndexParameters |
+// indexIsMultiEntry: the "multiEntry" option for IDBIndexParameters |
+// |
+function createDatabase( |
+ name, objectStoreNames, handler, errorHandler, options) { |
var openRequest = indexedDB.open(name, version); |
openRequest.onblocked = errorHandler; |
function createObjectStores(db) { |
- for (var store in objectStores) { |
- var name = objectStores[store]; |
+ for (var store in objectStoreNames) { |
+ var name = objectStoreNames[store]; |
assert(!db.objectStoreNames.contains(name)); |
- db.createObjectStore(name); |
+ var os = db.createObjectStore(name); |
+ if (options && options.indexName) { |
+ assert('indexKeyPath' in options); |
+ os.createIndex(options.indexName, options.indexKeyPath, |
+ { unique: options.indexIsUnique, |
+ multiEntry: options.indexIsMultiEntry }); |
+ } |
} |
} |
openRequest.onupgradeneeded = function(ev) { |
// TODO: This is the spec-compliant path, which doesn't yet work in Chrome, |
// and isn't yet tested, as this function won't currently be called. |
assert(openRequest == ev.target); |
- db = openRequest.result; |
- createObjectStores(db); |
+ createObjectStores(openRequest.result); |
// onsuccess will get called after this exits. |
}; |
openRequest.onsuccess = function(ev) { |
assert(openRequest == ev.target); |
- db = openRequest.result; |
+ var db = openRequest.result; |
db.onerror = function(ev) { |
console.log("db error", arguments, openRequest.webkitErrorMessage); |
errorHandler(); |
- } |
+ }; |
if (db.version != version) { |
// This is the current Chrome path. |
var setVersionRequest = db.setVersion(version); |
setVersionRequest.onfailure = errorHandler; |
- setVersionRequest.onsuccess = |
- function(e) { |
- assert(setVersionRequest == e.target); |
- createObjectStores(db); |
- var versionTransaction = setVersionRequest.result; |
- versionTransaction.oncomplete = function() {handler(db); }; |
- versionTransaction.onerror = onError; |
- } |
+ setVersionRequest.onsuccess = function(e) { |
+ assert(setVersionRequest == e.target); |
+ createObjectStores(db); |
+ var versionTransaction = setVersionRequest.result; |
+ versionTransaction.oncomplete = function() {handler(db); }; |
+ versionTransaction.onerror = onError; |
+ }; |
} else { |
handler(db); |
} |
@@ -109,10 +123,19 @@ function deleteDatabase(name, opt_handler) { |
} |
} |
-function cleanUp(opt_handler) { |
- if (db) { |
- deleteDatabase(db, opt_handler); |
- db = null; |
+function getCompletionFunc(testName, startTime, onTestComplete) { |
+ function onDeleted() { |
+ automation.setStatus("Deleted database."); |
+ onTestComplete(); |
+ } |
+ return function() { |
+ var duration = Date.now() - startTime; |
+ // Ignore the cleanup time for this test. |
+ automation.addResult(testName, duration); |
+ automation.setStatus("Deleting database."); |
+ // TODO: Turn on actual deletion; for now it's way too slow. |
+ // deleteDatabase(testName, onDeleted); |
+ onTestComplete(); |
} |
} |