diff --git a/web/compatibility.js b/web/compatibility.js index 21ac29fc56200..31b6356fd4982 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -547,13 +547,20 @@ if (typeof PDFJS === 'undefined') { return; } } catch (e) { } - window.localStorage = { - data: Object.create(null), - getItem: function (key) { - return this.data[key]; - }, - setItem: function (key, value) { - this.data[key] = value; - } - }; + // When the generic viewer is used in Firefox the following code will fail + // when the preference 'network.cookie.lifetimePolicy' is set to 1, + // see Mozilla bug 365772. + try { + window.localStorage = { + data: Object.create(null), + getItem: function (key) { + return this.data[key]; + }, + setItem: function (key, value) { + this.data[key] = value; + } + }; + } catch (e) { + console.log('Unable to create polyfill for localStorage'); + } })(); diff --git a/web/view_history.js b/web/view_history.js index 5e5f81ed3912a..c1992f2b66da4 100644 --- a/web/view_history.js +++ b/web/view_history.js @@ -31,40 +31,12 @@ var ViewHistory = (function ViewHistoryClosure() { function ViewHistory(fingerprint) { this.fingerprint = fingerprint; - var initializedPromiseResolve; this.isInitializedPromiseResolved = false; - this.initializedPromise = new Promise(function (resolve) { - initializedPromiseResolve = resolve; - }); - - var resolvePromise = (function ViewHistoryResolvePromise(db) { + this.initializedPromise = + this._readFromStorage().then(function (databaseStr) { this.isInitializedPromiseResolved = true; - this.initialize(db || '{}'); - initializedPromiseResolve(); - }).bind(this); - -//#if B2G -// asyncStorage.getItem('database', resolvePromise); -//#endif - -//#if FIREFOX || MOZCENTRAL -// var sessionHistory; -// try { -// // Workaround for security error when the preference -// // network.cookie.lifetimePolicy is set to 1, see Mozilla Bug 365772. -// sessionHistory = sessionStorage.getItem('pdfjsHistory'); -// } catch (ex) {} -// resolvePromise(sessionHistory); -//#endif -//#if !(FIREFOX || MOZCENTRAL || B2G) - resolvePromise(localStorage.getItem('database')); -//#endif - } - - ViewHistory.prototype = { - initialize: function ViewHistory_initialize(database) { - database = JSON.parse(database); + var database = JSON.parse(databaseStr || '{}'); if (!('files' in database)) { database.files = []; } @@ -84,25 +56,44 @@ var ViewHistory = (function ViewHistoryClosure() { } this.file = database.files[index]; this.database = database; - }, + }.bind(this)); + } + ViewHistory.prototype = { _writeToStorage: function ViewHistory_writeToStorage() { - var databaseStr = JSON.stringify(this.database); + return new Promise(function (resolve) { + var databaseStr = JSON.stringify(this.database); //#if B2G -// asyncStorage.setItem('database', databaseStr); +// asyncStorage.setItem('database', databaseStr, resolve); //#endif //#if FIREFOX || MOZCENTRAL -// try { -// // See comment in try-catch block above. // sessionStorage.setItem('pdfjsHistory', databaseStr); -// } catch (ex) {} +// resolve(); +//#endif + +//#if !(FIREFOX || MOZCENTRAL || B2G) + localStorage.setItem('database', databaseStr); + resolve(); +//#endif + }.bind(this)); + }, + + _readFromStorage: function ViewHistory_readFromStorage() { + return new Promise(function (resolve) { +//#if B2G +// asyncStorage.getItem('database', resolve); +//#endif + +//#if FIREFOX || MOZCENTRAL +// resolve(sessionStorage.getItem('pdfjsHistory')); //#endif //#if !(FIREFOX || MOZCENTRAL || B2G) - localStorage.setItem('database', databaseStr); + resolve(localStorage.getItem('database')); //#endif + }); }, set: function ViewHistory_set(name, val) {