Files
shaka-player/lib/offline/indexeddb/db_connection.js
T
Joey Parrish 64896d70b0 Use shorter license header
This reflects changes in Google's policy on JavaScript license
headers, which should be smaller to avoid increasing the size of the
binary unnecessarily.

This also updates the company name from "Google, Inc" to "Google LLC".

Change-Id: I3f8b9ed3700b6351f43173d50c94d35c333e82b4
2019-11-22 18:18:36 +00:00

88 lines
2.4 KiB
JavaScript

/** @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.offline.indexeddb.DBConnection');
goog.require('shaka.offline.indexeddb.DBOperation');
goog.require('shaka.util.ArrayUtils');
/**
* DBConnection is used to manage an IndexedDB connection. It can create new
* operations. If the connection is killed (via |destroy|) all pending
* operations will be cancelled.
*/
shaka.offline.indexeddb.DBConnection = class {
/**
* @param {IDBDatabase} connection A connection to an IndexedDB instance.
*/
constructor(connection) {
/** @private {IDBDatabase} */
this.connection_ = connection;
/** @private {!Array.<shaka.offline.indexeddb.DBOperation>} */
this.pending_ = [];
}
/**
* @return {!Promise}
*/
destroy() {
return Promise.all(this.pending_.map((op) => {
return op.abort();
}));
}
/**
* @param {string} store The name of the store that the operation should
* occur on.
* @return {!shaka.offline.indexeddb.DBOperation}
*/
startReadOnlyOperation(store) {
return this.startOperation_(store, 'readonly');
}
/**
* @param {string} store The name of the store that the operation should
* occur on.
* @return {!shaka.offline.indexeddb.DBOperation}
*/
startReadWriteOperation(store) {
return this.startOperation_(store, 'readwrite');
}
/**
* @param {string} store The name of the store that the operation should
* occur on.
* @param {string} type The type of operation being performed on the store.
* This determines what commands may be performed. This
* can either be "readonly" or "readwrite".
* @return {!shaka.offline.indexeddb.DBOperation}
* @private
*/
startOperation_(store, type) {
const transaction = this.connection_.transaction([store], type);
const operation =
new shaka.offline.indexeddb.DBOperation(transaction, store);
this.pending_.push(operation);
// Once the operation is done (regardless of outcome) stop tracking it.
operation.promise().then(
() => this.stopTracking_(operation),
() => this.stopTracking_(operation)
);
return operation;
}
/**
* @param {!shaka.offline.indexeddb.DBOperation} operation
* @private
*/
stopTracking_(operation) {
shaka.util.ArrayUtils.remove(this.pending_, operation);
}
};