Merge pull request #4705 from Snuffleupagus/ViewHistory-refactor-read

Refactor how the database is read in ViewHistory
This commit is contained in:
Yury Delendik 2014-04-29 10:18:46 -05:00
commit 6a800eb206
2 changed files with 45 additions and 47 deletions

View File

@ -547,13 +547,20 @@ if (typeof PDFJS === 'undefined') {
return; return;
} }
} catch (e) { } } catch (e) { }
window.localStorage = { // When the generic viewer is used in Firefox the following code will fail
data: Object.create(null), // when the preference 'network.cookie.lifetimePolicy' is set to 1,
getItem: function (key) { // see Mozilla bug 365772.
return this.data[key]; try {
}, window.localStorage = {
setItem: function (key, value) { data: Object.create(null),
this.data[key] = value; 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');
}
})(); })();

View File

@ -31,40 +31,12 @@
var ViewHistory = (function ViewHistoryClosure() { var ViewHistory = (function ViewHistoryClosure() {
function ViewHistory(fingerprint) { function ViewHistory(fingerprint) {
this.fingerprint = fingerprint; this.fingerprint = fingerprint;
var initializedPromiseResolve;
this.isInitializedPromiseResolved = false; this.isInitializedPromiseResolved = false;
this.initializedPromise = new Promise(function (resolve) { this.initializedPromise =
initializedPromiseResolve = resolve; this._readFromStorage().then(function (databaseStr) {
});
var resolvePromise = (function ViewHistoryResolvePromise(db) {
this.isInitializedPromiseResolved = true; this.isInitializedPromiseResolved = true;
this.initialize(db || '{}');
initializedPromiseResolve();
}).bind(this);
//#if B2G var database = JSON.parse(databaseStr || '{}');
// 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);
if (!('files' in database)) { if (!('files' in database)) {
database.files = []; database.files = [];
} }
@ -84,25 +56,44 @@ var ViewHistory = (function ViewHistoryClosure() {
} }
this.file = database.files[index]; this.file = database.files[index];
this.database = database; this.database = database;
}, }.bind(this));
}
ViewHistory.prototype = {
_writeToStorage: function ViewHistory_writeToStorage() { _writeToStorage: function ViewHistory_writeToStorage() {
var databaseStr = JSON.stringify(this.database); return new Promise(function (resolve) {
var databaseStr = JSON.stringify(this.database);
//#if B2G //#if B2G
// asyncStorage.setItem('database', databaseStr); // asyncStorage.setItem('database', databaseStr, resolve);
//#endif //#endif
//#if FIREFOX || MOZCENTRAL //#if FIREFOX || MOZCENTRAL
// try {
// // See comment in try-catch block above.
// sessionStorage.setItem('pdfjsHistory', databaseStr); // sessionStorage.setItem('pdfjsHistory', databaseStr);
// } catch (ex) {} // resolve();
//#endif //#endif
//#if !(FIREFOX || MOZCENTRAL || B2G) //#if !(FIREFOX || MOZCENTRAL || B2G)
localStorage.setItem('database', databaseStr); localStorage.setItem('database', databaseStr);
resolve();
//#endif //#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)
resolve(localStorage.getItem('database'));
//#endif
});
}, },
set: function ViewHistory_set(name, val) { set: function ViewHistory_set(name, val) {