blob: 3580411cf5ffade525b34562c382c6b0f11d0967 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
let db;
const dbName = 'testdb';
const dbVersion = 1;
async function setupIndexedDBConnection() {
db = await new Promise((resolve, reject) => {
let request = window.indexedDB.open(dbName, dbVersion);
request.onsuccess = () => resolve(request.result);
request.onerror = (error) => reject(error);;
request.onupgradeneeded = () => {
request.result.createObjectStore('store');
};
});
}
async function setupNewIndexedDBConnectionWithSameVersion() {
let db2 = await new Promise((resolve, reject) => {
let request = window.indexedDB.open(dbName, dbVersion);
request.onsuccess = () => resolve(request.result);
request.onerror = (error) => reject(error);
});
}
async function setupNewIndexedDBConnectionWithHigherVersion() {
let db3 = await new Promise((resolve, reject) => {
let request = window.indexedDB.open(dbName, dbVersion + 1);
request.onsuccess = () => {
window.domAutomationController.send('onsuccess');
resolve(request.result);
};
request.onerror = (error) => reject(error);
});
}
async function setupIndexedDBVersionChangeHandlerToCloseConnectionAndNavigateTo(url) {
let db4 = await new Promise((resolve, reject) => {
let request = window.indexedDB.open(dbName, dbVersion);
request.onsuccess = () => resolve(request.result);
request.onerror = (error) => reject(error);
});
db4.onversionchange = (event) => {
db4.close();
window.domAutomationController.send('onversionchange');
location.href = url;
};
}
async function setupIndexedDBVersionChangeHandlerToNavigateTo(url) {
let db4 = await new Promise((resolve, reject) => {
let request = window.indexedDB.open(dbName, dbVersion);
request.onsuccess = () => resolve(request.result);
request.onerror = (error) => reject(error);
});
db4.onversionchange = (event) => {
window.domAutomationController.send('onversionchange');
location.href = url;
};
}
function startIndexedDBTransaction() {
let transaction = db.transaction(['store'], 'readwrite');
let store = transaction.objectStore('store');
store.put("key", "value");
}
function runInfiniteIndexedDBTransactionLoop() {
let transaction = db.transaction(['store'], 'readwrite');
let store = transaction.objectStore('store');
let infiniteLoop = () => {
let request = store.put("key", "value");
request.onsuccess = infiniteLoop;
}
infiniteLoop();
}
function registerPagehideToCloseIndexedDBConnection() {
addEventListener('pagehide', () => {
db.close();
});
}
function registerPagehideToStartTransaction() {
addEventListener('pagehide', () => {
let transaction = db.transaction(['store'], 'readwrite');
let store = transaction.objectStore('store');
store.put("key", "value");
// Queue a request to close the connection.
db.close();
});
}
function registerPagehideToStartAndCommitTransaction() {
addEventListener('pagehide', () => {
let transaction = db.transaction(['store'], 'readwrite');
let store = transaction.objectStore('store');
store.put("key", "value");
// Call commit to run the transaction right away.
transaction.commit();
// Close the connection.
db.close();
});
}