blob: 48e31d901ceccf03c7ffd59d98e746da941c6955 [file] [log] [blame]
<!doctype html>
<title>IDB Offline Google Docs Load Runner</title>
<div id="content"></div>
<script src="resources/shared.js"></script>
<script src="resources/idb-load-docs-shared.js"></script>
<script>
let openRequest = window.indexedDB.open(databaseName);
openRequest.onsuccess = async () => {
let db = openRequest.result;
// https://docs.google.com/document/d/1JC1RgMyxBAjUPSHjm2Bd1KPzcqpPPvxRomKevOkMPm0/edit
// contiains information about each transaction and their ordering.
let txn1 = () => {
let txn = db.transaction("Users", "readonly");
txn.onabort = reportError;
let users = txn.objectStore("Users");
let get = users.get("ufa1a865c6eb48d97");
get.onsuccess = () => {
logToDocumentBody(["Txn1 got user ", get.result.emailAddress]);
}
return transactionCompletePromise(txn).then(() => {
logToDocumentBody("Txn1 done");
});
};
let txn2 = () => {
let txn = db.transaction(["DocumentLocks"], "readwrite");
txn.onabort = reportError;
let locks = txn.objectStore("DocumentLocks");
let get = locks.get([docId1]);
get.onsuccess = () => {
logToDocumentBody(["Txn2 got lock", get.result.e]);
}
t2_DocumentLocksValues.forEach((value) => (locks.put(value)));
return transactionCompletePromise(txn).then(() => {
logToDocumentBody("Txn2 done.");
});
};
let txn3 = () => {
let txn = db.transaction(["Documents"], "readonly");
txn.onabort = reportError;
let documents = txn.objectStore("Documents");
let get = documents.get(docId1);
get.onsuccess = () => {
var div = logToDocumentBody(
"Txn3 done, got the document, with image: ");
let img = document.createElement("img");
div.appendChild(img);
img.src = get.result.docosKeyData[8][2];
}
return transactionCompletePromise(txn).then(() => {
logToDocumentBody("Txn3 done.");
});
};
let txn4 = () => {
let txn = db.transaction(["PendingQueues"], "readonly");
txn.onabort = reportError;
let queues = txn.objectStore("PendingQueues");
let get = queues.get(docId1);
get.onsuccess = () => {
logToDocumentBody(["Txn4 got queue: ", get.result.r]);
}
return transactionCompletePromise(txn).then(() => {
logToDocumentBody("Txn4 done.");
});
};
let txn5 = () => {
let txn = db.transaction(["SyncObjects"], "readwrite");
txn.onabort = reportError;
let syncs = txn.objectStore("SyncObjects");
t5_SyncObjectsValues.forEach((value) => { syncs.put(value); });
return transactionCompletePromise(txn).then(() => {
logToDocumentBody(
["Txn5 done, set ", t5_SyncObjectsValues.length, " values."]);
});
};
let txn6_15 = () => {
let promises = [];
for (let i = 0; i < 9; ++i) {
let txn = db.transaction("FontMetadata", "readonly");
txn.onabort = reportError;
let get = txn.objectStore("FontMetadata").get("Cambria");
let name = "Txn " + (i + 6);
get.onsuccess = () => {
logToDocumentBody([name, " got font with ",
get.result.fontFaces.length, " faces."]);
}
promises.push(transactionCompletePromise(txn).then(() => {
logToDocumentBody([name, " done."]);
}));
}
return Promise.all(promises);
};
let txn16 = () => {
let txn = db.transaction("BlobMetadata", "readonly");
txn.onabort = reportError;
let request = txn.objectStore("BlobMetadata")
.openCursor(IDBKeyRange.only("test"));
request.onsuccess = function(event) {
logToDocumentBody("Checked blob metadata.");
}
return transactionCompletePromise(txn).then(() => {
logToDocumentBody("Txn16 done.");
});
};
let txn17 = (docGetCallback) => {
let txn = db.transaction(["DocumentLocks", "Documents", "PendingQueues",
"BlobMetadata", "DocumentCommands"],
"readwrite");
txn.onabort = reportError;
let locks = txn.objectStore("DocumentLocks");
let documents = txn.objectStore("Documents");
let documentCommands = txn.objectStore("DocumentCommands");
let queues = txn.objectStore("PendingQueues");
let lockGet;
let documentGet;
let commandsDelete;
let queuesGet;
let gets_done = () => {
logToDocumentBody(["Starting edit, got lock: ", lockGet.result.e]);
let div = logToDocumentBody("Document with picture: ");
let img = document.createElement("img");
div.appendChild(img);
img.src = documentGet.result.docosKeyData[8][2];
logToDocumentBody(["And the queue: ", queuesGet.result.r]);
locks.put(t17_DocumentLocksValue);
documents.put(t17_DocumentsValue);
documentCommands.put(t17_DocumentCommandsValue);
queues.put(t17_PendingQueuesValue);
};
let incrementBarrier = createIncrementalBarrier(gets_done);
lockGet = locks.get([docId1]);
documentGet = documents.get(docId1);
queuesGet = queues.get(docId1);
commandsDelete = documentCommands.delete(
IDBKeyRange.bound([docId1], [docId1, []], false, false));
lockGet.onsuccess = incrementBarrier();
let docGetBarrier = incrementBarrier();
let docGetCallbackPromise;
documentGet.onsuccess = () => {
docGetCallbackPromise = docGetCallback();
docGetBarrier();
};
commandsDelete.onsuccess = incrementBarrier();
queuesGet.onsuccess = incrementBarrier();
return transactionCompletePromise(txn).then(async () => {
await docGetCallbackPromise;
logToDocumentBody("Txn17 done.");
});
};
let txn18 = () => {
let txn = db.transaction(["Documents"], "readonly");
txn.onabort = reportError;
let documents = txn.objectStore("Documents");
documents.get(docId1).onsuccess = () => {
logToDocumentBody("Got final document!");
}
return transactionCompletePromise(txn).then(() => {
logToDocumentBody("Txn18 done");
});
};
// https://docs.google.com/document/d/1JC1RgMyxBAjUPSHjm2Bd1KPzcqpPPvxRomKevOkMPm0/edit
// has an explanation of transaction order.
await txn1();
await Promise.all([txn2(), txn3(), txn4()]);
await Promise.all([txn5(), txn6_15(), txn16(), txn17(txn18)]);
reportDone();
};
</script>