Skip to content

Commit 8cd07be

Browse files
committed
Theory 3: blocked operations
1 parent 7be2d40 commit 8cd07be

File tree

5 files changed

+72
-4
lines changed

5 files changed

+72
-4
lines changed

externs/idb.js

+3
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@ var IDBOpenDBRequest = function() {};
2323

2424
/** @type {!IDBDatabase} */
2525
IDBOpenDBRequest.prototype.result;
26+
27+
/** @type {function(!Event)} */
28+
IDBOpenDBRequest.prototype.onversionchange;

lib/offline/indexeddb/db_operation.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ shaka.offline.indexeddb.DBOperation = class {
3333
this.promise_.reject();
3434
};
3535
transaction.onerror = (event) => {
36+
window.dump('Transaction error');
3637
this.promise_.reject();
3738
};
3839
transaction.oncomplete = (event) => {
@@ -68,7 +69,10 @@ shaka.offline.indexeddb.DBOperation = class {
6869
forEachEntry(callback) {
6970
return new Promise((resolve, reject) => {
7071
const req = this.store_.openCursor();
71-
req.onerror = reject;
72+
req.onerror = (event) => {
73+
window.dump('Cursor error');
74+
reject(event);
75+
};
7276
req.onsuccess = async (event) => {
7377
// When we reach the end of the data that the cursor is iterating over,
7478
// |req.result| will be null to signal the end of the iteration.

lib/offline/indexeddb/storage_mechanism.js

+20-3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ shaka.offline.indexeddb.StorageMechanism = class {
4646
this.v5_ = null;
4747
/** @private {shaka.extern.EmeSessionStorageCell} */
4848
this.sessions_ = null;
49+
/** @private {string} */
50+
this.stack_ = '';
51+
try {
52+
throw new Error('');
53+
} catch (error) {
54+
this.stack_ = error.stack;
55+
}
4956
}
5057

5158
/**
@@ -62,6 +69,7 @@ shaka.offline.indexeddb.StorageMechanism = class {
6269
let timedOut = false;
6370
const timeOutTimer = new shaka.util.Timer(() => {
6471
timedOut = true;
72+
window.dump('TIMEOUT on open from: ' + this.stack_);
6573
p.reject(new shaka.util.Error(
6674
shaka.util.Error.Severity.CRITICAL,
6775
shaka.util.Error.Category.STORAGE,
@@ -89,6 +97,9 @@ shaka.offline.indexeddb.StorageMechanism = class {
8997
timeOutTimer.stop();
9098
p.resolve();
9199
};
100+
open.onversionchange = (event) => {
101+
window.dump('VERSIONCHANGE triggered for database from: ' + this.stack_);
102+
};
92103
open.onupgradeneeded = (event) => {
93104
// Add object stores for the latest version only.
94105
this.createStores_(open.result);
@@ -105,6 +116,10 @@ shaka.offline.indexeddb.StorageMechanism = class {
105116
open.error));
106117
timeOutTimer.stop();
107118
};
119+
open.onblocked = (event) => {
120+
window.dump('Opening ' + name + ' is being blocked from: ' + this.stack_);
121+
p.reject(new Error('Open blocked'));
122+
};
108123

109124
return p;
110125
}
@@ -191,7 +206,7 @@ shaka.offline.indexeddb.StorageMechanism = class {
191206
this.db_.close();
192207
}
193208

194-
await shaka.offline.indexeddb.StorageMechanism.deleteAll_();
209+
await this.deleteAll_();
195210

196211
// Reset before initializing.
197212
this.db_ = null;
@@ -329,14 +344,16 @@ shaka.offline.indexeddb.StorageMechanism = class {
329344
* @return {!Promise}
330345
* @private
331346
*/
332-
static deleteAll_() {
347+
deleteAll_() {
333348
const name = shaka.offline.indexeddb.StorageMechanism.DB_NAME;
334349

335350
const p = new shaka.util.PublicPromise();
336351

337352
const del = window.indexedDB.deleteDatabase(name);
338353
del.onblocked = (event) => {
339-
shaka.log.warning('Deleting', name, 'is being blocked', event);
354+
window.dump(
355+
'Deleting ' + name + ' is being blocked from: ' + this.stack_);
356+
p.reject(new Error('Delete blocked'));
340357
};
341358
del.onsuccess = (event) => {
342359
p.resolve();

test/test/util/canned_idb.js

+24
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,21 @@ shaka.test.CannedIDB = class {
160160
* @private
161161
*/
162162
static openDatabase_(name) {
163+
let stack;
164+
try {
165+
throw new Error('');
166+
} catch (error) { // eslint-disable-line
167+
stack = error.stack;
168+
}
169+
163170
return new Promise((resolve, reject) => {
164171
const request = indexedDB.open(name);
165172

173+
request.onversionchange = (event) => {
174+
window.dump(
175+
'VERSIONCHANGE from openDatabase_ in canned_idb from ' + stack);
176+
};
177+
166178
request.onupgradeneeded = (event) => {
167179
reject(new Error('DB did not exist!'));
168180
const transaction = event.target.transaction;
@@ -253,9 +265,21 @@ shaka.test.CannedIDB = class {
253265
* @private
254266
*/
255267
static createDatabase_(name, savedDatabase) {
268+
let stack;
269+
try {
270+
throw new Error('');
271+
} catch (error) { // eslint-disable-line
272+
stack = error.stack;
273+
}
274+
256275
return new Promise((resolve, reject) => {
257276
const request = indexedDB.open(name, savedDatabase.version);
258277

278+
request.onversionchange = (event) => {
279+
window.dump(
280+
'VERSIONCHANGE from createDatabase_ in canned_idb from ' + stack);
281+
};
282+
259283
request.onupgradeneeded = (event) => {
260284
shaka.log.debug('DB upgrade from', event.oldVersion, 'to',
261285
savedDatabase.version);

test/test/util/indexeddb_utils.js

+20
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,17 @@ shaka.test.IndexedDBUtils = class {
7777
/** @type {!shaka.util.PublicPromise} */
7878
const p = new shaka.util.PublicPromise();
7979

80+
let stack;
81+
try {
82+
throw new Error('');
83+
} catch (error) { // eslint-disable-line
84+
stack = error.stack;
85+
}
86+
8087
const open = window.indexedDB.open(name, version);
88+
open.onversionchange = (event) => {
89+
window.dump('VERSIONCHANGE from dbOpenNew_ in idb_utils from ' + stack);
90+
};
8191
open.onerror = (e) => {
8292
p.reject();
8393
};
@@ -111,7 +121,17 @@ shaka.test.IndexedDBUtils = class {
111121
/** @type {!shaka.util.PublicPromise} */
112122
const p = new shaka.util.PublicPromise();
113123

124+
let stack;
125+
try {
126+
throw new Error('');
127+
} catch (error) { // eslint-disable-line
128+
stack = error.stack;
129+
}
130+
114131
const open = window.indexedDB.open(name);
132+
open.onversionchange = (event) => {
133+
window.dump('VERSIONCHANGE from open in idb_utils from ' + stack);
134+
};
115135
open.onerror = (e) => {
116136
p.reject();
117137
};

0 commit comments

Comments
 (0)