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

Unified Diff: ui/file_manager/file_manager/background/js/background.js

Issue 858563005: Immediately open MTP and other eligible removable devices with media directory on mount. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to review comments. Created 5 years, 11 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
« no previous file with comments | « no previous file | ui/file_manager/file_manager/background/js/device_handler.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/file_manager/file_manager/background/js/background.js
diff --git a/ui/file_manager/file_manager/background/js/background.js b/ui/file_manager/file_manager/background/js/background.js
index a815a8116c6e887709e73b09e322c6d7b52e1458..1c5a027bc7641df82fefde18dce1b65e3cb84ee1 100644
--- a/ui/file_manager/file_manager/background/js/background.js
+++ b/ui/file_manager/file_manager/background/js/background.js
@@ -58,11 +58,11 @@ function FileBrowserBackground() {
* @private {!DeviceHandler}
*/
this.deviceHandler_ = new DeviceHandler();
+
+ // Handle device navigation requests.
this.deviceHandler_.addEventListener(
DeviceHandler.VOLUME_NAVIGATION_REQUESTED,
- function(event) {
- this.navigateToVolume_(event.devicePath, event.filePath);
- }.bind(this));
+ this.handleViewEvent_.bind(this));
/**
* Drive sync handler.
@@ -205,60 +205,84 @@ FileBrowserBackground.prototype.canClose = function() {
};
/**
- * Opens the root directory of the volume in Files.app.
- * @param {string} devicePath Device path to a volume to be opened.
+ * Opens the volume root (or opt directoryPath) in main UI.
+ *
+ * @param {!Event} event An event with the volumeId or
+ * devicePath.
+ * @private
+ */
+FileBrowserBackground.prototype.handleViewEvent_ =
+ function(event) {
+ VolumeManager.getInstance()
+ .then(
+ /**
+ * Retrieves the root file entry of the volume on the requested
+ * device.
+ * @param {!VolumeManager} volumeManager
+ */
+ function(volumeManager) {
+ if (event.devicePath) {
+ var volume = volumeManager.volumeInfoList.findByDevicePath(
+ event.devicePath);
+ if (volume) {
+ this.navigateToVolume_(volume);
+ } else {
+ console.error('Got view event with invalid volume id.');
+ }
+ } else if (event.volumeId) {
+ volumeManager.volumeInfoList.whenVolumeInfoReady(event.volumeId)
+ .then(
+ function(volume) {
+ this.navigateToVolume_(volume, event.filePath);
+ }.bind(this))
+ .catch(
+ function(e) {
+ console.error(
+ 'Unable to find volume for id: ' + event.volumeId +
+ '. Error: ' + e.message);
+ });
+ } else {
+ console.error('Got view event with no actionable destination.');
+ }
+ }.bind(this));
+};
+
+/**
+ * Opens the volume root (or opt directoryPath) in main UI.
+ *
+ * @param {!VolumeInfo} volume
* @param {string=} opt_directoryPath Optional directory path to be opened.
* @private
*/
FileBrowserBackground.prototype.navigateToVolume_ =
- function(devicePath, opt_directoryPath) {
- /**
- * Retrieves the root file entry of the volume on the requested device.
- * @param {!VolumeManager} volumeManager
- * @return {!Promise<!DirectoryEntry>}
- */
- var getDeviceRoot = function(volumeManager) {
- var volume = volumeManager.volumeInfoList.findByDevicePath(devicePath);
- if (volume) {
- // TODO(kenobi): Remove this cast once typing is fixed on
- // VolumeInfo#resolveDisplayRoot.
- return /** @type {!Promise<!DirectoryEntry>} */ (
- volume.resolveDisplayRoot());
- } else {
- return Promise.reject('Volume having the device path: ' +
- devicePath + ' is not found.');
- }
- };
-
- /**
- * If a path was specified, retrieve that directory entry; otherwise just
- * return the unmodified root entry.
- * @param {!DirectoryEntry} entry
- * @return {!Promise<!DirectoryEntry>}
- */
- var maybeNavigateToPath = function(entry) {
- if (opt_directoryPath) {
- return new Promise(
- entry.getDirectory.bind(entry, opt_directoryPath, {create:false}));
- } else {
- return Promise.resolve(entry);
- }
- };
-
- VolumeManager.getInstance()
- .then(getDeviceRoot)
- .then(maybeNavigateToPath)
+ function(volume, opt_directoryPath) {
+ volume.resolveDisplayRoot()
.then(
- /** @param {!DirectoryEntry} entry */
- function(entry) {
+ /**
+ * If a path was specified, retrieve that directory entry,
+ * otherwise just return the unmodified root entry.
+ * @param {DirectoryEntry} root
+ * @return {!Promise<DirectoryEntry>}
+ */
+ function(root) {
+ if (opt_directoryPath) {
+ return new Promise(
+ root.getDirectory.bind(
+ root, opt_directoryPath, {create: false}));
+ } else {
+ return Promise.resolve(root);
+ }
+ })
+ .then(
+ /**
+ * Launches app opened on {@code directory}.
+ * @param {DirectoryEntry} directory
+ */
+ function(directory) {
launchFileManager(
- {currentDirectoryURL: entry.toURL()},
+ {currentDirectoryURL: directory.toURL()},
/* App ID */ undefined,
LaunchType.FOCUS_SAME_OR_CREATE);
- })
- .catch(
- function(error) {
- console.error(error.stack || error);
});
};
« no previous file with comments | « no previous file | ui/file_manager/file_manager/background/js/device_handler.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698