Refactors history and how the database is stored

This commit is contained in:
Yury Delendik 2014-04-03 13:23:18 -05:00
parent 9c59437ac3
commit b39f0c311c
7 changed files with 37 additions and 55 deletions

View File

@ -43,13 +43,6 @@ function getBoolPref(pref, def) {
} }
} }
function setStringPref(pref, value) {
var str = Cc['@mozilla.org/supports-string;1']
.createInstance(Ci.nsISupportsString);
str.data = value;
Services.prefs.setComplexValue(pref, Ci.nsISupportsString, str);
}
function log(str) { function log(str) {
if (!getBoolPref(EXT_PREFIX + '.pdfBugEnabled', false)) { if (!getBoolPref(EXT_PREFIX + '.pdfBugEnabled', false)) {
return; return;
@ -176,9 +169,10 @@ function shutdown(aData, aReason) {
} }
function install(aData, aReason) { function install(aData, aReason) {
// TODO remove after some time -- cleanup of unused preferences
Services.prefs.clearUserPref(EXT_PREFIX + '.database');
} }
function uninstall(aData, aReason) { function uninstall(aData, aReason) {
setStringPref(EXT_PREFIX + '.database', '{}');
} }

View File

@ -128,15 +128,19 @@ let PdfJs = {
}, },
_migrate: function migrate() { _migrate: function migrate() {
const VERSION = 1; const VERSION = 2;
var currentVersion = getIntPref(PREF_MIGRATION_VERSION, 0); var currentVersion = getIntPref(PREF_MIGRATION_VERSION, 0);
if (currentVersion >= VERSION) { if (currentVersion >= VERSION) {
return; return;
} }
// Make pdf.js the default pdf viewer on the first migration. // Make pdf.js the default pdf viewer on the first migration.
if (currentVersion < 2) { if (currentVersion < 1) {
this._becomeHandler(); this._becomeHandler();
} }
if (currentVersion < 2) {
// cleaning up of unused database preference (see #3994)
Services.prefs.clearUserPref(PREF_PREFIX + '.database');
}
Services.prefs.setIntPref(PREF_MIGRATION_VERSION, VERSION); Services.prefs.setIntPref(PREF_MIGRATION_VERSION, VERSION);
}, },

View File

@ -32,7 +32,6 @@ const PDFJS_EVENT_ID = 'pdf.js.message';
const PDF_CONTENT_TYPE = 'application/pdf'; const PDF_CONTENT_TYPE = 'application/pdf';
const PREF_PREFIX = 'PDFJSSCRIPT_PREF_PREFIX'; const PREF_PREFIX = 'PDFJSSCRIPT_PREF_PREFIX';
const PDF_VIEWER_WEB_PAGE = 'resource://pdf.js/web/viewer.html'; const PDF_VIEWER_WEB_PAGE = 'resource://pdf.js/web/viewer.html';
const MAX_DATABASE_LENGTH = 4096;
const MAX_NUMBER_OF_PREFS = 50; const MAX_NUMBER_OF_PREFS = 50;
const MAX_STRING_PREF_LENGTH = 128; const MAX_STRING_PREF_LENGTH = 128;
@ -295,19 +294,6 @@ ChromeActions.prototype = {
channel.asyncOpen(listener, null); channel.asyncOpen(listener, null);
}); });
}, },
setDatabase: function(data) {
if (this.isInPrivateBrowsing())
return;
// Protect against something sending tons of data to setDatabase.
if (data.length > MAX_DATABASE_LENGTH)
return;
setStringPref(PREF_PREFIX + '.database', data);
},
getDatabase: function() {
if (this.isInPrivateBrowsing())
return '{}';
return getStringPref(PREF_PREFIX + '.database', '{}');
},
getLocale: function() { getLocale: function() {
return getStringPref('general.useragent.locale', 'en-US'); return getStringPref('general.useragent.locale', 'en-US');
}, },

View File

@ -537,3 +537,23 @@ if (typeof PDFJS === 'undefined') {
} }
} }
})(); })();
(function checkStorages() {
// Feature test as per http://diveintohtml5.info/storage.html
// The additional localStorage call is to get around a FF quirk, see
// bug #495747 in bugzilla
try {
if ('localStorage' in window && window['localStorage'] !== null) {
return;
}
} catch (e) { }
window.localStorage = {
data: Object.create(null),
getItem: function (key) {
return this.data[key];
},
setItem: function (key, value) {
this.data[key] = value;
}
};
})();

View File

@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* globals DEFAULT_PREFERENCES, isLocalStorageEnabled, Promise */ /* globals DEFAULT_PREFERENCES, Promise */
'use strict'; 'use strict';
@ -174,19 +174,14 @@ var Preferences = {
//#if !(FIREFOX || MOZCENTRAL || B2G) //#if !(FIREFOX || MOZCENTRAL || B2G)
Preferences._writeToStorage = function (prefObj) { Preferences._writeToStorage = function (prefObj) {
return new Promise(function (resolve) { return new Promise(function (resolve) {
if (isLocalStorageEnabled) { localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj));
localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj));
}
resolve(); resolve();
}); });
}; };
Preferences._readFromStorage = function (prefObj) { Preferences._readFromStorage = function (prefObj) {
return new Promise(function (resolve) { return new Promise(function (resolve) {
var readPrefs; var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences'));
if (isLocalStorageEnabled) {
readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences'));
}
resolve(readPrefs); resolve(readPrefs);
}); });
}; };

View File

@ -257,16 +257,3 @@ var Cache = function cacheCache(size) {
}; };
}; };
//#if !(FIREFOX || MOZCENTRAL || B2G)
var isLocalStorageEnabled = (function isLocalStorageEnabledClosure() {
// Feature test as per http://diveintohtml5.info/storage.html
// The additional localStorage call is to get around a FF quirk, see
// bug #495747 in bugzilla
try {
return ('localStorage' in window && window['localStorage'] !== null &&
localStorage);
} catch (e) {
return false;
}
})();
//#endif

View File

@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* globals PDFJS, VIEW_HISTORY_MEMORY, isLocalStorageEnabled, Promise */ /* globals PDFJS, VIEW_HISTORY_MEMORY, Promise */
'use strict'; 'use strict';
@ -24,7 +24,7 @@
* *
* The way that the view parameters are stored depends on how PDF.js is built, * The way that the view parameters are stored depends on how PDF.js is built,
* for 'node make <flag>' the following cases exist: * for 'node make <flag>' the following cases exist:
* - FIREFOX or MOZCENTRAL - uses about:config. * - FIREFOX or MOZCENTRAL - uses sessionStorage.
* - B2G - uses asyncStorage. * - B2G - uses asyncStorage.
* - GENERIC or CHROME - uses localStorage, if it is available. * - GENERIC or CHROME - uses localStorage, if it is available.
*/ */
@ -48,13 +48,11 @@ var ViewHistory = (function ViewHistoryClosure() {
//#endif //#endif
//#if FIREFOX || MOZCENTRAL //#if FIREFOX || MOZCENTRAL
// resolvePromise(FirefoxCom.requestSync('getDatabase', null)); // resolvePromise(sessionStorage.getItem('pdfjsHistory'));
//#endif //#endif
//#if !(FIREFOX || MOZCENTRAL || B2G) //#if !(FIREFOX || MOZCENTRAL || B2G)
if (isLocalStorageEnabled) { resolvePromise(localStorage.getItem('database'));
resolvePromise(localStorage.getItem('database'));
}
//#endif //#endif
} }
@ -95,13 +93,11 @@ var ViewHistory = (function ViewHistoryClosure() {
//#endif //#endif
//#if FIREFOX || MOZCENTRAL //#if FIREFOX || MOZCENTRAL
// FirefoxCom.requestSync('setDatabase', database); // sessionStorage.setItem('pdfjsHistory',database);
//#endif //#endif
//#if !(FIREFOX || MOZCENTRAL || B2G) //#if !(FIREFOX || MOZCENTRAL || B2G)
if (isLocalStorageEnabled) { localStorage.setItem('database', database);
localStorage.setItem('database', database);
}
//#endif //#endif
}, },