blob: 49949f40c69026127e183d5f758771cb9aacec65 [file] [log] [blame]
// Copyright 2017 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.
(async function() {
TestRunner.addResult(`Tests asynchronous call stacks for IndexedDB.\n`);
await TestRunner.loadModule('sources_test_runner');
await TestRunner.showPanel('sources');
await TestRunner.loadHTML(`
<input type="button" onclick="testFunction()" value="Test">
`);
await TestRunner.evaluateInPagePromise(`
var version = 1;
var db;
function testFunction()
{
setTimeout(openDB);
}
function onError()
{
console.error("FAIL: " + new Error().stack);
debugger;
}
function openDB()
{
var request = indexedDB.open("async-callstack-indexed-db", version);
request.onupgradeneeded = onUpgradeNeeded;
request.onsuccess = onSuccessOpenDB;
request.onerror = onError;
}
function onUpgradeNeeded(e)
{
debugger;
var db = e.target.result;
e.target.transaction.onerror = onError;
if (db.objectStoreNames.contains("foo"))
db.deleteObjectStore("foo");
db.createObjectStore("foo", { keyPath: "id" });
}
function onSuccessOpenDB(e)
{
debugger;
db = e.target.result;
populateDB();
}
function populateDB()
{
var trans = db.transaction(["foo"], "readwrite");
var store = trans.objectStore("foo");
var request = store.put({ "id" : 1, "bar": "baz" });
request.onsuccess = onSuccessStorePut;
request.onerror = onError;
}
function onSuccessStorePut(e)
{
debugger;
getAllItems();
}
function getAllItems()
{
var trans = db.transaction(["foo"], "readwrite");
var store = trans.objectStore("foo");
var keyRange = IDBKeyRange.lowerBound(0);
var cursorRequest = store.openCursor(keyRange);
cursorRequest.onsuccess = onSuccessCursorRequest;
cursorRequest.onerror = onError;
}
function onSuccessCursorRequest(e)
{
debugger;
deleteItem();
}
function deleteItem()
{
var trans = db.transaction(["foo"], "readwrite");
var store = trans.objectStore("foo");
var request = store.delete(1);
request.onsuccess = onSuccessDeleteItem;
request.onerror = onError;
}
function onSuccessDeleteItem()
{
debugger;
deleteDB();
}
function deleteDB()
{
db.close();
var request = indexedDB.deleteDatabase("async-callstack-indexed-db");
request.onsuccess = onSuccessDeleteDatabase;
request.onerror = onError;
}
function onSuccessDeleteDatabase()
{
debugger;
}
`);
var totalDebuggerStatements = 6;
SourcesTestRunner.runAsyncCallStacksTest(totalDebuggerStatements);
})();