From a264975c9cc03c53f8d264dbb8783e2a8a85aef9 Mon Sep 17 00:00:00 2001 From: gorhill Date: Thu, 21 Sep 2017 08:59:40 -0400 Subject: [PATCH] improve handling of error condition: see https://github.com/gorhill/uBlock/issues/2985#issuecomment-330076141 --- platform/webext/vapi-cachestorage.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/platform/webext/vapi-cachestorage.js b/platform/webext/vapi-cachestorage.js index 180a8c32c..1c42a8fd7 100644 --- a/platform/webext/vapi-cachestorage.js +++ b/platform/webext/vapi-cachestorage.js @@ -112,13 +112,13 @@ vAPI.cacheStorage = (function() { var req = indexedDB.open(STORAGE_NAME, 1); req.onupgradeneeded = function(ev) { db = ev.target.result; - db.onerror = genericErrorHandler; + db.onerror = db.onabort = genericErrorHandler; var table = db.createObjectStore(STORAGE_NAME, { keyPath: 'key' }); table.createIndex('value', 'value', { unique: false }); }; req.onsuccess = function(ev) { db = ev.target.result; - db.onerror = genericErrorHandler; + db.onerror = db.onabort = genericErrorHandler; processPendings(); }; req.onerror = function() { @@ -141,7 +141,9 @@ vAPI.cacheStorage = (function() { getDb(function(db) { if ( !db ) { return callback(); } var transaction = db.transaction(STORAGE_NAME); - transaction.oncomplete = transaction.onerror = function() { + transaction.oncomplete = + transaction.onerror = + transaction.onabort = function() { // TODO: remove once storage.local is clean if ( notfoundKeys.size === 0 ) { vAPI.storage.remove(keys); @@ -199,7 +201,9 @@ vAPI.cacheStorage = (function() { if ( !db ) { return callback(); } var output = {}; var transaction = db.transaction(STORAGE_NAME); - transaction.oncomplete = transaction.onerror = function() { + transaction.oncomplete = + transaction.onerror = + transaction.onabort = function() { callback(output); }; var table = transaction.objectStore(STORAGE_NAME), @@ -222,7 +226,9 @@ vAPI.cacheStorage = (function() { getDb(function(db) { if ( !db ) { return callback(); } var transaction = db.transaction(STORAGE_NAME, 'readwrite'); - transaction.oncomplete = transaction.onerror = callback; + transaction.oncomplete = + transaction.onerror = + transaction.onabort = callback; var table = transaction.objectStore(STORAGE_NAME), entry = {}; for ( var key of keys ) { @@ -242,7 +248,9 @@ vAPI.cacheStorage = (function() { getDb(function(db) { if ( !db ) { return callback(); } var transaction = db.transaction(STORAGE_NAME, 'readwrite'); - transaction.oncomplete = transaction.onerror = callback; + transaction.oncomplete = + transaction.onerror = + transaction.onabort = callback; var table = transaction.objectStore(STORAGE_NAME); for ( var key of keys ) { table.delete(key);