From 233b3274bf7973aa06a674dddef585f4313f3742 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 30 Jul 2018 16:48:16 +0200 Subject: [PATCH] Refactor the `Preferences` classes to utilize `async` methods rather than manually returning `Promise`s --- web/chromecom.js | 4 +- web/firefoxcom.js | 4 +- web/genericcom.js | 14 ++----- web/preferences.js | 92 +++++++++++++++++++++++----------------------- 4 files changed, 53 insertions(+), 61 deletions(-) diff --git a/web/chromecom.js b/web/chromecom.js index da39d2b52..48eecb6cc 100644 --- a/web/chromecom.js +++ b/web/chromecom.js @@ -300,7 +300,7 @@ function setReferer(url, callback) { let storageArea = chrome.storage.sync || chrome.storage.local; class ChromePreferences extends BasePreferences { - _writeToStorage(prefObj) { + async _writeToStorage(prefObj) { return new Promise((resolve) => { if (prefObj === this.defaults) { let keysToRemove = Object.keys(this.defaults); @@ -317,7 +317,7 @@ class ChromePreferences extends BasePreferences { }); } - _readFromStorage(prefObj) { + async _readFromStorage(prefObj) { return new Promise((resolve) => { let getPreferences = (defaultPrefs) => { if (chrome.runtime.lastError) { diff --git a/web/firefoxcom.js b/web/firefoxcom.js index 2aea61b0f..9100102e7 100644 --- a/web/firefoxcom.js +++ b/web/firefoxcom.js @@ -124,13 +124,13 @@ class DownloadManager { } class FirefoxPreferences extends BasePreferences { - _writeToStorage(prefObj) { + async _writeToStorage(prefObj) { return new Promise(function(resolve) { FirefoxCom.request('setPreferences', prefObj, resolve); }); } - _readFromStorage(prefObj) { + async _readFromStorage(prefObj) { return new Promise(function(resolve) { FirefoxCom.request('getPreferences', prefObj, function(prefStr) { let readPrefs = JSON.parse(prefStr); diff --git a/web/genericcom.js b/web/genericcom.js index 89ffd90e3..794bfbfbd 100644 --- a/web/genericcom.js +++ b/web/genericcom.js @@ -26,18 +26,12 @@ if (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('GENERIC')) { let GenericCom = {}; class GenericPreferences extends BasePreferences { - _writeToStorage(prefObj) { - return new Promise(function(resolve) { - localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj)); - resolve(); - }); + async _writeToStorage(prefObj) { + localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj)); } - _readFromStorage(prefObj) { - return new Promise(function(resolve) { - let readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences')); - resolve(readPrefs); - }); + async _readFromStorage(prefObj) { + return JSON.parse(localStorage.getItem('pdfjs.preferences')); } } diff --git a/web/preferences.js b/web/preferences.js index a5fa67388..7cc9f3a15 100644 --- a/web/preferences.js +++ b/web/preferences.js @@ -83,8 +83,8 @@ class BasePreferences { * @return {Promise} A promise that is resolved when the preference values * have been written. */ - _writeToStorage(prefObj) { - return Promise.reject(new Error('Not implemented: _writeToStorage')); + async _writeToStorage(prefObj) { + throw new Error('Not implemented: _writeToStorage'); } /** @@ -93,8 +93,8 @@ class BasePreferences { * @return {Promise} A promise that is resolved with an {Object} containing * the preferences that have been read. */ - _readFromStorage(prefObj) { - return Promise.reject(new Error('Not implemented: _readFromStorage')); + async _readFromStorage(prefObj) { + throw new Error('Not implemented: _readFromStorage'); } /** @@ -102,11 +102,10 @@ class BasePreferences { * @return {Promise} A promise that is resolved when the preference values * have been reset. */ - reset() { - return this._initializedPromise.then(() => { - this.prefs = Object.assign(Object.create(null), this.defaults); - return this._writeToStorage(this.defaults); - }); + async reset() { + await this._initializedPromise; + this.prefs = Object.assign(Object.create(null), this.defaults); + return this._writeToStorage(this.defaults); } /** @@ -116,31 +115,32 @@ class BasePreferences { * @return {Promise} A promise that is resolved when the value has been set, * provided that the preference exists and the types match. */ - set(name, value) { - return this._initializedPromise.then(() => { - if (this.defaults[name] === undefined) { - throw new Error(`Set preference: "${name}" is undefined.`); - } else if (value === undefined) { - throw new Error('Set preference: no value is specified.'); - } - let valueType = typeof value; - let defaultType = typeof this.defaults[name]; + async set(name, value) { + await this._initializedPromise; + let defaultValue = this.defaults[name]; - if (valueType !== defaultType) { - if (valueType === 'number' && defaultType === 'string') { - value = value.toString(); - } else { - throw new Error(`Set preference: "${value}" is a ${valueType}, ` + - `expected a ${defaultType}.`); - } + if (defaultValue === undefined) { + throw new Error(`Set preference: "${name}" is undefined.`); + } else if (value === undefined) { + throw new Error('Set preference: no value is specified.'); + } + let valueType = typeof value; + let defaultType = typeof defaultValue; + + if (valueType !== defaultType) { + if (valueType === 'number' && defaultType === 'string') { + value = value.toString(); } else { - if (valueType === 'number' && !Number.isInteger(value)) { - throw new Error(`Set preference: "${value}" must be an integer.`); - } + throw new Error(`Set preference: "${value}" is a ${valueType}, ` + + `expected a ${defaultType}.`); } - this.prefs[name] = value; - return this._writeToStorage(this.prefs); - }); + } else { + if (valueType === 'number' && !Number.isInteger(value)) { + throw new Error(`Set preference: "${value}" must be an integer.`); + } + } + this.prefs[name] = value; + return this._writeToStorage(this.prefs); } /** @@ -149,21 +149,20 @@ class BasePreferences { * @return {Promise} A promise that is resolved with a {boolean|number|string} * containing the value of the preference. */ - get(name) { - return this._initializedPromise.then(() => { - let defaultValue = this.defaults[name]; + async get(name) { + await this._initializedPromise; + let defaultValue = this.defaults[name]; - if (defaultValue === undefined) { - throw new Error(`Get preference: "${name}" is undefined.`); - } else { - let prefValue = this.prefs[name]; + if (defaultValue === undefined) { + throw new Error(`Get preference: "${name}" is undefined.`); + } else { + let prefValue = this.prefs[name]; - if (prefValue !== undefined) { - return prefValue; - } + if (prefValue !== undefined) { + return prefValue; } - return defaultValue; - }); + } + return defaultValue; } /** @@ -171,10 +170,9 @@ class BasePreferences { * @return {Promise} A promise that is resolved with an {Object} containing * the values of all preferences. */ - getAll() { - return this._initializedPromise.then(() => { - return Object.assign(Object.create(null), this.defaults, this.prefs); - }); + async getAll() { + await this._initializedPromise; + return Object.assign(Object.create(null), this.defaults, this.prefs); } }