Chromium Code Reviews| Index: content/test/data/indexeddb/corrupted_open_db_detection.html |
| diff --git a/content/test/data/indexeddb/corrupted_open_db_detection.html b/content/test/data/indexeddb/corrupted_open_db_detection.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c8721bafee3b571c5a930c45067c198cfe39e406 |
| --- /dev/null |
| +++ b/content/test/data/indexeddb/corrupted_open_db_detection.html |
| @@ -0,0 +1,114 @@ |
| +<!DOCTYPE html> |
| +<html> |
| +<!-- |
| + Copyright 2014 The Chromium Authors. All rights reserved. |
| + Use of this source code is governed by a BSD-style license that can be |
| + found in the LICENSE file. |
| +--> |
| +<head> |
| +<title>IDB test that db's corrupted while open are properly handled Part 1 / 2</title> |
| +<script type="text/javascript" src="common.js"></script> |
| +<script> |
| + |
| +function test() { |
| + indexedDBTest(upgradeCallback, openCallback); |
| +} |
| + |
| +var numObjectsWrittenToDb = 500; |
| +var numTransactions = 0; |
| +var numTransactionErrors = 0; |
| +var numTransactionAborts = 0; |
| +var numKeys = 0; |
| +var transaction; |
| +var request; |
| + |
| +function upgradeCallback() { |
| + window.db = event.target.result; |
|
jsbell
2014/03/26 18:16:58
We should be consistent and either use 'window.XXX
cmumford
2014/03/26 21:40:36
Done.
|
| + deleteAllObjectStores(window.db); |
| + window.objectStore = window.db.createObjectStore('storeName', { autoIncrement : true }); |
| + |
| + var i; |
| + var len = 80; |
| + var data = Array(len); |
| + for (i = 0; i < len; i++) { |
|
jsbell
2014/03/26 18:16:58
Nit: pre-increment
cmumford
2014/03/26 21:40:36
Done.
|
| + data[i] = i; |
| + } |
| + |
| + for (i = 0; i < numObjectsWrittenToDb; i++) { |
|
jsbell
2014/03/26 18:16:58
Nit: pre-increment
cmumford
2014/03/26 21:40:36
Done.
|
| + var key = 'key-' + i; |
| + request = window.objectStore.add(data, key); |
| + request.onerror = unexpectedErrorCallback; |
| + request.onsuccess = upgradeTransactionComplete; |
| + } |
| +} |
| + |
| +function upgradeTransactionComplete() { |
| + numTransactions++; |
|
jsbell
2014/03/26 18:16:58
Nit: pre-increment
cmumford
2014/03/26 21:40:36
Done, but just curious why?
jsbell
2014/03/26 22:49:00
It's just Chromium/Blink coding convention. Post-i
|
| + if (numTransactions == numObjectsWrittenToDb) { |
|
jsbell
2014/03/26 18:16:58
Nit: ===
cmumford
2014/03/26 21:40:36
Done, but just curious why?
jsbell
2014/03/26 22:49:00
double-equals is really busted in JS due to type c
|
| + debug("All transactions written"); |
| + } |
| +} |
| + |
| +function transactionError(event) { |
| + if (event.target.error) { |
| + numTransactionErrors += 1; |
| + } |
| + else { |
|
jsbell
2014/03/26 18:16:58
nit: } and else on same line
cmumford
2014/03/26 21:40:36
Done.
|
| + fail("Transaction onerror had no error"); |
| + } |
| +} |
| + |
| +function transactionAbort() { |
| + if (event.target.error) { |
| + numTransactionAborts += 1; |
| + } |
| + else { |
|
jsbell
2014/03/26 18:16:58
nit: } and else on same line
cmumford
2014/03/26 21:40:36
Done.
|
| + fail("Transaction onabort had no error"); |
| + } |
| +} |
| + |
| +function requestError(event) { |
| + if (!event.target.error) { |
| + fail("get request had no/invalid error"); |
| + } |
| +} |
| + |
| +function databaseClosed(event) { |
| + shouldBe("numTransactionErrors", "1"); |
| + shouldBe("numTransactionAborts", "1"); |
| + |
| + done("Closed as expected"); |
| +} |
| + |
| +function getData() { |
| + transaction = window.db.transaction('storeName'); |
| + window.db.onclose = databaseClosed; |
| + transaction.onabort = transactionAbort; |
| + transaction.onerror = transactionError; |
| + request.oncomplete = unexpectedCompleteCallback; |
| + store = transaction.objectStore('storeName'); |
| + request = store.get('key-0'); |
| + request.onsuccess = unexpectedSuccessCallback; |
| + request.onerror = requestError; |
| +} |
| + |
| +function openCallback() { |
| + var xmlhttp = new window.XMLHttpRequest(); |
| + xmlhttp.open("GET", "/corrupt/test/corruptdb?storeName", false /*sync*/); |
| + xmlhttp.onreadystatechange = function() { |
| + if (xmlhttp.readyState == 4) { |
|
jsbell
2014/03/26 18:16:58
Nit: === (and below)
cmumford
2014/03/26 21:40:36
Done.
|
| + if (xmlhttp.status == 200) { |
| + // The database is now corrupt. |
| + getData(); |
| + } |
| + } |
| + }; |
| + xmlhttp.send(); |
| +} |
| + |
| +</script> |
| +</head> |
| +<body onLoad="test()"> |
| +<div id="status">Starting...</div> |
| +</body> |
| +</html> |