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

Unified Diff: chrome/browser/resources/file_manager/js/file_manager.js

Issue 7697014: [filebrowser] Enable fileBrowserHandlers only for files, not directories. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/file_manager/js/file_manager.js
===================================================================
--- chrome/browser/resources/file_manager/js/file_manager.js (revision 97296)
+++ chrome/browser/resources/file_manager/js/file_manager.js (working copy)
@@ -229,6 +229,11 @@
};
/**
+ * Regexp for archive files. Used to show mount-archive task.
+ */
+ const ARCHIVES_REGEXP = /.zip$/;
+
+ /**
* Return a translated string.
*
* Wrapper function to make dealing with translated strings more concise.
@@ -1532,13 +1537,18 @@
};
if (this.dialogType_ == FileManager.DialogType.FULL_PAGE) {
- // Since unmount task cannot be defined in terms of file patterns,
- // we manually include it here, if all selected items are mount points.
this.taskButtons_.innerHTML = '';
- chrome.fileBrowserPrivate.getFileTasks(
- selection.urls,
- this.onTasksFound_.bind(this,
- this.shouldShowUnmount_(selection.urls)));
+ // Some internal tasks cannot be defined in terms of file patterns,
+ // so we pass selection to check for them manually.
+ if (selection.directoryCount == 0 && selection.fileCount > 0) {
+ // Only files, not directories, are supported for external tasks.
+ chrome.fileBrowserPrivate.getFileTasks(
+ selection.urls,
+ this.onTasksFound_.bind(this, selection));
+ } else {
+ // There may be internal tasks for directories.
+ this.onTasksFound_(selection, []);
+ }
}
cacheNextFile();
@@ -1602,17 +1612,11 @@
/**
* Callback called when tasks for selected files are determined.
- * @param {boolean} unmount Whether unmount task should be included.
+ * @param {Object} selection Selection is passed here, since this.selection
+ * can change before tasks were found, and we should be accurate.
* @param {Array.<Task>} tasksList The tasks list.
*/
- FileManager.prototype.onTasksFound_ = function(unmount, tasksList) {
- if (unmount) {
- tasksList.push({
- taskId: this.getExtensionId_() + '|unmount-archive',
- iconUrl: '',
- title: ''
- });
- }
+ FileManager.prototype.onTasksFound_ = function(selection, tasksList) {
for (var i = 0; i < tasksList.length; i++) {
var task = tasksList[i];
@@ -1642,17 +1646,14 @@
task.iconUrl =
chrome.extension.getURL('images/icon_mount_archive_16x16.png');
task.title = str('MOUNT_ARCHIVE');
- } else if (task_parts[1] == 'unmount-archive') {
- task.iconUrl =
- chrome.extension.getURL('images/icon_unmount_archive_16x16.png');
- task.title = str('UNMOUNT_ARCHIVE');
}
}
this.renderTaskButton_(task);
}
- // This needs to be done in sparate function, as check requires
+ this.maybeRenderUnmountTask_(selection);
+ // This needs to be done in separate function, as check requires
// asynchronous function calls.
- this.maybeRenderFormattingTask_();
+ this.maybeRenderFormattingTask_(selection);
};
FileManager.prototype.renderTaskButton_ = function(task) {
@@ -1671,14 +1672,36 @@
};
/**
+ * Checks whether unmount task should be displayed and if the answer is
+ * affirmative renders it.
+ * @param {Object} selection Selected files object.
+ */
+ FileManager.prototype.maybeRenderUnmountTask_ = function(selection) {
+ for (var index = 0; index < selection.urls.length; ++index) {
+ // Each url should be a mount point.
+ var path = selection.urls[index];
+ if (!this.mountPoints_.hasOwnProperty(path) ||
+ this.mountPoints_[path].type != 'file')
+ return;
+ }
+ this.renderTaskButton_({
+ taskId: this.getExtensionId_() + '|unmount-archive',
+ iconUrl:
+ chrome.extension.getURL('images/icon_unmount_archive_16x16.png'),
+ title: str('UNMOUNT_ARCHIVE')
+ });
+ };
+
+ /**
* Checks whether formatting task should be displayed and if the answer is
* affirmative renders it. Includes asynchronous calls, so it's splitted into
* three parts.
+ * @param {Object} selection Selected files object.
*/
- FileManager.prototype.maybeRenderFormattingTask_ = function() {
- // Not to make unnecesary getMountPoints() call we doublecheck if there is
+ FileManager.prototype.maybeRenderFormattingTask_ = function(selection) {
+ // Not to make unnecessary getMountPoints() call we doublecheck if there is
// only one selected entry.
- if (this.selection.entries.length != 1)
+ if (selection.entries.length != 1)
return;
var self = this;
function onMountPointsFound(mountPoints) {
@@ -1693,8 +1716,8 @@
function onVolumeMetadataFound(volumeMetadata) {
if (volumeMetadata.deviceType == "flash") {
- if (self.selection.entries.length != 1 ||
- normalize(self.selection.entries[0].fullPath) !=
+ if (selection.entries.length != 1 ||
+ normalize(selection.entries[0].fullPath) !=
normalize(volumeMetadata.mountPath)) {
return;
}
@@ -1707,9 +1730,9 @@
}
}
- if (self.selection.entries.length != 1)
+ if (selection.entries.length != 1)
return;
- var selectedPath = self.selection.entries[0].fullPath;
+ var selectedPath = selection.entries[0].fullPath;
for (var i = 0; i < mountPoints.length; i++) {
if (mountPoints[i].mountType == "device" &&
normalize(mountPoints[i].mountPath) == normalize(selectedPath)) {
@@ -1803,21 +1826,6 @@
}
};
- /**
- * Determines whether unmount task should present for selected files.
- */
- FileManager.prototype.shouldShowUnmount_ = function(urls) {
- for (var index = 0; index < urls.length; ++index) {
- // Each url should be a mount point.
- var path = urls[index];
- if (!this.mountPoints_.hasOwnProperty(path) ||
- this.mountPoints_[path].type != 'file') {
- return false;
- }
- }
- return true;
- };
-
FileManager.prototype.openImageEditor_ = function(entry) {
var self = this;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698