Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1027)

Unified Diff: ui/file_manager/file_manager/common/js/importer_common.js

Issue 925233004: A grab-bag of small improvements (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to review comments. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/file_manager/common/js/importer_common.js
diff --git a/ui/file_manager/file_manager/common/js/importer_common.js b/ui/file_manager/file_manager/common/js/importer_common.js
index cb3bc01c47e37c1a9341d148fbe8c9e0f2adf010..6634ad3972dbea9f4da44e46565f62267855368c 100644
--- a/ui/file_manager/file_manager/common/js/importer_common.js
+++ b/ui/file_manager/file_manager/common/js/importer_common.js
@@ -13,6 +13,16 @@ importer.ScanEvent = {
};
/**
+ * Storage keys for settings saved by importer.
+ * @enum {string}
+ */
+importer.Setting = {
+ HAS_COMPLETED_IMPORT: 'importer-has-completed-import',
+ MACHINE_ID: 'importer-machine-id',
+ PHOTOS_APP_ENABLED: 'importer-photo-app-enabled'
+};
+
+/**
* @typedef {function(
* !importer.ScanEvent, importer.ScanResult)}
*/
@@ -135,33 +145,25 @@ importer.importEnabled = function() {
};
/**
- * Local storage key for machine id.
- * @const {string}
- */
-importer.PHOTOS_IMPORT_ENABLED_STORAGE_KEY_ = 'photo-auto-import-enabled';
-
-/**
* Handles a message from Pulsar...in which we presume we are being
* informed of its "Automatically import stuff." state.
*
* While the runtime message system is loosey goosey about types,
* we fully expect message to be a boolean value.
*
+ * @param {*} message
+ *
* @return {!Promise} Resolves once the message has been handled.
*/
importer.handlePhotosAppMessage = function(message) {
- return new Promise(
- function(resolve, reject) {
- if (typeof message === 'boolean') {
- var values = {};
- values[importer.PHOTOS_IMPORT_ENABLED_STORAGE_KEY_] = message;
- chrome.storage.local.set(values, /** @type {function()} */ (resolve));
- } else {
- console.error(
- 'Unrecognized message type received from photos app: ' + message);
- reject(undefined);
- }
- });
+ if (typeof message !== 'boolean') {
+ console.error(
+ 'Unrecognized message type received from photos app: ' + message);
+ return Promise.reject();
+ }
+
+ var storage = importer.ChromeLocalStorage.getInstance();
+ return storage.set(importer.Setting.PHOTOS_APP_ENABLED, message);
};
/**
@@ -169,23 +171,8 @@ importer.handlePhotosAppMessage = function(message) {
* is enabled.
*/
importer.isPhotosAppImportEnabled = function() {
- return new Promise(
- function(resolve, reject) {
- chrome.storage.local.get(
- importer.PHOTOS_IMPORT_ENABLED_STORAGE_KEY_,
- /** @param {Object.<string, ?>} values */
- function(values) {
- if (chrome.runtime.lastError) {
- reject(chrome.runtime.lastError);
- } else {
- // If photos app has never told us what's up with their
- // settings, we'll just assume they aren't disabled.
- resolve(
- importer.PHOTOS_IMPORT_ENABLED_STORAGE_KEY_ in values &&
- values[importer.PHOTOS_IMPORT_ENABLED_STORAGE_KEY_]);
- }
- });
- });
+ var storage = importer.ChromeLocalStorage.getInstance();
+ return storage.get(importer.Setting.PHOTOS_APP_ENABLED, false);
};
/**
@@ -209,46 +196,24 @@ importer.getDirectoryNameForDate = function(date) {
};
/**
- * Local storage key for machine id.
- * @const {string}
- */
-importer.MACHINE_ID_STORAGE_KEY_ = 'importer-machine-id';
-
-/**
* @return {!Promise.<number>} Resolves with an integer that is probably
* relatively unique to this machine (among a users machines).
*/
importer.getMachineId = function() {
- return new Promise(
- function(resolve, reject) {
- chrome.storage.local.get(
- importer.MACHINE_ID_STORAGE_KEY_,
- /** @param {Object.<string, ?>} values */
- function(values) {
- if (chrome.runtime.lastError) {
- reject(chrome.runtime.lastError);
- return;
- }
-
- var machineId = values[importer.MACHINE_ID_STORAGE_KEY_];
- if (!!machineId) {
- resolve(machineId);
- } else {
- var machineId = importer.generateMachineId_();
- var newValues = {};
- newValues[importer.MACHINE_ID_STORAGE_KEY_] = machineId;
- chrome.storage.local.set(
- newValues,
+ var storage = importer.ChromeLocalStorage.getInstance();
+ return storage.get(importer.Setting.MACHINE_ID)
+ .then(
+ function(id) {
+ if (id) {
+ return id;
+ }
+ var id = importer.generateMachineId_();
+ return storage.set(importer.Setting.MACHINE_ID, id)
+ .then(
function() {
- if (chrome.runtime.lastError) {
- reject(chrome.runtime.lastError);
- } else {
- resolve(machineId);
- }
+ return id;
});
- }
- });
- });
+ });
};
/**
@@ -769,3 +734,67 @@ importer.getLogger = function() {
}
return importer.logger_;
};
+
+/**
+ * Friendly wrapper around chrome.storage.local.
+ *
+ * NOTE: If you want to use this in a test, install MockChromeStorageAPI.
+ *
+ * @constructor
+ */
+importer.ChromeLocalStorage = function() {};
+
+/**
+ * @param {string} key
+ * @param {string|number|boolean} value
+ * @return {!Promise} Resolves when operation is complete
+ */
+importer.ChromeLocalStorage.prototype.set = function(key, value) {
+ return new Promise(
+ function(resolve, reject) {
+ var values = {};
+ values[key] = value;
+ chrome.storage.local.set(
+ values,
+ function() {
+ if (chrome.runtime.lastError) {
+ reject(chrome.runtime.lastError);
+ } else {
+ resolve(undefined);
+ }
+ });
+ });
+};
+
+/**
+ * @param {string} key
+ * @param {T=} opt_default
+ * @return {!Promise.<T>} Resolves with the value, or {@code opt_default} when
+ * no value entry existis, or {@code undefined}.
+ * @template T
+ */
+importer.ChromeLocalStorage.prototype.get = function(key, opt_default) {
+ return new Promise(
+ function(resolve, reject) {
+ chrome.storage.local.get(
+ key,
+ /** @param {Object.<string, ?>} values */
+ function(values) {
+ if (chrome.runtime.lastError) {
+ reject(chrome.runtime.lastError);
+ } else if (key in values) {
+ resolve(values[key]);
+ } else {
+ resolve(opt_default);
+ }
+ });
+ });
+};
+
+/** @private @const {!importer.ChromeLocalStorage} */
+importer.ChromeLocalStorage.INSTANCE_ = new importer.ChromeLocalStorage();
+
+/** @return {!importer.ChromeLocalStorage} */
+importer.ChromeLocalStorage.getInstance = function() {
+ return importer.ChromeLocalStorage.INSTANCE_;
+};

Powered by Google App Engine
This is Rietveld 408576698