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

Side by Side Diff: chrome/test/data/indexeddb/perf_shared.js

Issue 10856002: Make tests work in Firefox. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comment fixes Created 8 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/test/data/indexeddb/perf_test.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 window.indexedDB = window.indexedDB || window.webkitIndexedDB || 5 window.indexedDB = window.indexedDB || window.webkitIndexedDB ||
6 window.mozIndexedDB || window.msIndexedDB; 6 window.mozIndexedDB || window.msIndexedDB;
7 window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange; 7 window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
8 8
9 var automation = { 9 var automation = {
10 results: {} 10 results: {}
11 }; 11 };
12 12
13 automation.setDone = function() { 13 automation.setDone = function() {
14 this.setStatus("Test complete."); 14 this.setStatus("Test complete.");
15 document.cookie = '__done=1; path=/'; 15 document.cookie = '__done=1; path=/';
16 }; 16 };
17 17
18 automation.addResult = function(name, result) { 18 automation.addResult = function(name, result) {
19 result = "" + result; 19 result = "" + result;
20 this.results[name] = result; 20 this.results[name] = result;
21 var elt = document.getElementById('results'); 21 var elt = document.getElementById('results');
22 var div = document.createElement('div'); 22 var div = document.createElement('div');
23 div.innerText = name + ": " + result; 23 div.textContent = name + ": " + result;
24 elt.appendChild(div); 24 elt.appendChild(div);
25 }; 25 };
26 26
27 automation.getResults = function() { 27 automation.getResults = function() {
28 return this.results; 28 return this.results;
29 }; 29 };
30 30
31 automation.setStatus = function(s) { 31 automation.setStatus = function(s) {
32 document.getElementById('status').innerText = s; 32 document.getElementById('status').textContent = s;
33 }; 33 };
34 34
35 function assert(t) { 35 function assert(t) {
36 if (!t) { 36 if (!t) {
37 var e = new Error("Assertion failed!"); 37 var e = new Error("Assertion failed!");
38 console.log(e.stack); 38 console.log(e.stack);
39 throw e; 39 throw e;
40 } 40 }
41 } 41 }
42 42
43 function onError(e) { 43 function onError(e) {
44 var s = "Caught error."; 44 var s = "Caught error.";
45 if (e.target && e.target.webkitErrorMessage) 45 if (e.target && e.target.webkitErrorMessage)
46 s += "\n" + e.target.webkitErrorMessage; 46 s += "\n" + e.target.webkitErrorMessage;
47 else if (e.target && e.target.error)
48 s += "\n" + e.target.error.name;
47 console.log(s); 49 console.log(s);
48 automation.setStatus(s); 50 automation.setStatus(s);
49 e.stopPropagation(); 51 e.stopPropagation();
50 throw new Error(e); 52 throw new Error(e);
51 } 53 }
52 54
53 var baseVersion = 2; // The version with our object stores. 55 var baseVersion = 2; // The version with our object stores.
54 var curVersion; 56 var curVersion;
55 57
56 // Valid options fields: 58 // Valid options fields:
57 // indexName: the name of an index to create on each object store 59 // indexName: the name of an index to create on each object store
58 // indexKeyPath: the key path for that index 60 // indexKeyPath: the key path for that index
59 // indexIsUnique: the "unique" option for IDBIndexParameters 61 // indexIsUnique: the "unique" option for IDBIndexParameters
60 // indexIsMultiEntry: the "multiEntry" option for IDBIndexParameters 62 // indexIsMultiEntry: the "multiEntry" option for IDBIndexParameters
61 // 63 //
62 function createDatabase( 64 function createDatabase(
63 name, objectStoreNames, handler, errorHandler, optionSets) { 65 name, objectStoreNames, handler, errorHandler, optionSets) {
64 var openRequest = indexedDB.open(name, baseVersion); 66 var openRequest = indexedDB.open(name, baseVersion);
65 openRequest.onblocked = errorHandler; 67 openRequest.onblocked = errorHandler;
68 openRequest.onerror = errorHandler;
66 function createObjectStores(db) { 69 function createObjectStores(db) {
67 for (var store in objectStoreNames) { 70 for (var store in objectStoreNames) {
68 var name = objectStoreNames[store]; 71 var name = objectStoreNames[store];
69 assert(!db.objectStoreNames.contains(name)); 72 assert(!db.objectStoreNames.contains(name));
70 var os = db.createObjectStore(name); 73 var os = db.createObjectStore(name);
71 if (optionSets) { 74 if (optionSets) {
72 for (o in optionSets) { 75 for (o in optionSets) {
73 var options = optionSets[o]; 76 var options = optionSets[o];
74 assert(options.indexName); 77 assert(options.indexName);
75 assert('indexKeyPath' in options); 78 assert('indexKeyPath' in options);
76 os.createIndex(options.indexName, options.indexKeyPath, 79 os.createIndex(options.indexName, options.indexKeyPath,
77 { unique: options.indexIsUnique, 80 { unique: options.indexIsUnique,
78 multiEntry: options.indexIsMultiEntry }); 81 multiEntry: options.indexIsMultiEntry });
79 } 82 }
80 } 83 }
81 } 84 }
82 } 85 }
83 openRequest.onupgradeneeded = function(ev) { 86 openRequest.onupgradeneeded = function(ev) {
84 // TODO(ericu): This is the spec-compliant path, which doesn't yet work in 87 // This is the spec-compliant path, which doesn't yet run in Chrome, but
85 // Chrome, and isn't yet tested, as this function won't currently be called. 88 // works in Firefox.
86 assert(openRequest == ev.target); 89 assert(openRequest == ev.target);
87 createObjectStores(openRequest.result); 90 var db = openRequest.result;
91 db.onerror = errorHandler;
92 createObjectStores(db);
88 // onsuccess will get called after this exits. 93 // onsuccess will get called after this exits.
89 }; 94 };
90 openRequest.onsuccess = function(ev) { 95 openRequest.onsuccess = function(ev) {
91 assert(openRequest == ev.target); 96 assert(openRequest == ev.target);
92 var db = openRequest.result; 97 var db = openRequest.result;
98 curVersion = db.version;
93 db.onerror = function(ev) { 99 db.onerror = function(ev) {
94 console.log("db error", arguments, openRequest.webkitErrorMessage); 100 console.log("db error", arguments, openRequest.webkitErrorMessage);
95 errorHandler(); 101 errorHandler(ev);
96 } 102 }
97 if (db.version != baseVersion) { 103 if (curVersion != baseVersion) {
98 // This is the current Chrome path. 104 // This is the legacy path, which runs only in Chrome.
99 var setVersionRequest = db.setVersion(baseVersion); 105 var setVersionRequest = db.setVersion(baseVersion);
100 setVersionRequest.onerror = errorHandler; 106 setVersionRequest.onerror = errorHandler;
101 setVersionRequest.onsuccess = function(e) { 107 setVersionRequest.onsuccess = function(e) {
102 curVersion = db.version;
103 assert(setVersionRequest == e.target); 108 assert(setVersionRequest == e.target);
104 createObjectStores(db); 109 createObjectStores(db);
105 var versionTransaction = setVersionRequest.result; 110 var versionTransaction = setVersionRequest.result;
106 versionTransaction.oncomplete = function() { handler(db); }; 111 versionTransaction.oncomplete = function() { handler(db); };
107 versionTransaction.onerror = onError; 112 versionTransaction.onerror = onError;
108 } 113 }
109 } else { 114 } else {
110 handler(db); 115 handler(db);
111 } 116 }
112 } 117 }
113 } 118 }
114 119
115 // You must close all database connections before calling this. 120 // You must close all database connections before calling this.
116 function alterObjectStores( 121 function alterObjectStores(
117 name, objectStoreNames, func, handler, errorHandler) { 122 name, objectStoreNames, func, handler, errorHandler) {
118 var version = curVersion + 1; 123 var version = curVersion + 1;
119 var openRequest = indexedDB.open(name, version); 124 var openRequest = indexedDB.open(name, version);
120 openRequest.onblocked = errorHandler; 125 openRequest.onblocked = errorHandler;
121 // TODO(ericu): This won't work in Firefox yet; see above in createDatabase. 126 openRequest.onupgradeneeded = function(ev) {
127 // This is the spec-compliant path, which doesn't yet run in Chrome, but
128 // works in Firefox.
129 doAlteration(ev.target.transaction);
130 // onsuccess will get called after this exits.
131 };
122 openRequest.onsuccess = function(ev) { 132 openRequest.onsuccess = function(ev) {
123 assert(openRequest == ev.target); 133 assert(openRequest == ev.target);
124 var db = openRequest.result; 134 var db = openRequest.result;
125 db.onerror = function(ev) { 135 db.onerror = function(ev) {
126 console.log("error altering db", arguments, 136 console.log("error altering db", arguments,
127 openRequest.webkitErrorMessage); 137 openRequest.webkitErrorMessage);
128 errorHandler(); 138 errorHandler();
129 } 139 }
130 if (db.version != version) { 140 if (db.version != version) {
141 // This is the legacy path, which runs only in Chrome.
131 var setVersionRequest = db.setVersion(version); 142 var setVersionRequest = db.setVersion(version);
132 setVersionRequest.onerror = errorHandler; 143 setVersionRequest.onerror = errorHandler;
133 setVersionRequest.onsuccess = 144 setVersionRequest.onsuccess =
134 function(e) { 145 function(e) {
135 curVersion = db.version; 146 curVersion = db.version;
136 assert(setVersionRequest == e.target); 147 assert(setVersionRequest == e.target);
137 var versionTransaction = setVersionRequest.result; 148 var versionTransaction = setVersionRequest.result;
138 versionTransaction.oncomplete = function() { handler(db); }; 149 versionTransaction.oncomplete = function() { handler(db); };
139 versionTransaction.onerror = onError; 150 versionTransaction.onerror = onError;
140 for (var store in objectStoreNames) { 151 doAlteration(versionTransaction);
141 func(versionTransaction.objectStore(objectStoreNames[store]));
142 }
143 } 152 }
144 } else { 153 } else {
145 errorHandler(); 154 handler(db);
155 }
156 }
157 function doAlteration(target) {
158 for (var store in objectStoreNames) {
159 func(target.objectStore(objectStoreNames[store]));
146 } 160 }
147 } 161 }
148 } 162 }
149 163
150 function getTransaction(db, objectStoreNames, mode, opt_handler) { 164 function getTransaction(db, objectStoreNames, mode, opt_handler) {
151 var transaction = db.transaction(objectStoreNames, mode); 165 var transaction = db.transaction(objectStoreNames, mode);
152 transaction.onerror = onError; 166 transaction.onerror = onError;
153 transaction.onabort = onError; 167 transaction.onabort = onError;
154 if (opt_handler) { 168 if (opt_handler) {
155 transaction.oncomplete = opt_handler; 169 transaction.oncomplete = opt_handler;
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 // outside its range. 353 // outside its range.
340 oos.put(cursor.value, numKeys + Math.random()); 354 oos.put(cursor.value, numKeys + Math.random());
341 values.push({key: cursor.key, value: cursor.value}); 355 values.push({key: cursor.key, value: cursor.value});
342 cursor.continue(); 356 cursor.continue();
343 } else { 357 } else {
344 assert(!numReadsLeft); 358 assert(!numReadsLeft);
345 } 359 }
346 } 360 }
347 request.onerror = onError; 361 request.onerror = onError;
348 } 362 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/indexeddb/perf_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698