Index: ui/file_manager/file_manager/foreground/js/file_manager_commands.js |
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js |
index 3d99359c54cdcbddccb073e08b5ea21196608178..84ea15633ce8b840d01fecff49a6acae8ace5685 100644 |
--- a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js |
+++ b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js |
@@ -665,6 +665,12 @@ CommandHandler.COMMANDS_['delete'] = /** @type {Command} */ ({ |
execute: function(event, fileManager) { |
var entries = CommandUtil.getCommandEntries(event.target); |
+ // Execute might be called without a call of canExecute method, e.g. called |
+ // directly from code. Double check here not to delete undeletable entries. |
+ if (this.containsFakeOrRootEntry_(entries, fileManager) || |
+ this.containsReadOnlyEntry_(entries, fileManager)) |
+ return; |
+ |
var message = entries.length === 1 ? |
strf('GALLERY_CONFIRM_DELETE_ONE', entries[0].name) : |
strf('GALLERY_CONFIRM_DELETE_SOME', entries.length); |
@@ -680,25 +686,44 @@ CommandHandler.COMMANDS_['delete'] = /** @type {Command} */ ({ |
canExecute: function(event, fileManager) { |
var entries = CommandUtil.getCommandEntries(event.target); |
- // If it contains a fake entry, hide command. |
- var containsFakeEntry = entries.some(function(entry) { |
- return util.isFakeEntry(entry); |
- }); |
- if (containsFakeEntry) { |
+ // If entries contain fake or root entry, hide delete option. |
+ if (this.containsFakeOrRootEntry_(entries, fileManager)) { |
event.canExecute = false; |
event.command.setHidden(true); |
return; |
} |
- // If it contains an entry which is on read only volume or no item is |
- // selected, disable command. |
- var containsReadOnlyEntry = entries.some(function(entry) { |
+ event.canExecute = entries.length > 0 && |
+ !this.containsReadOnlyEntry_(entries, fileManager); |
+ event.command.setHidden(false); |
+ }, |
+ /** |
+ * @param {!Array<!Entry>} entries |
+ * @param {!FileManager} fileManager |
+ * @return {boolean} True if entries contain fake or root entry. |
+ */ |
+ containsFakeOrRootEntry_: function(entries, fileManager) { |
+ return entries.some(function(entry) { |
+ if (util.isFakeEntry(entry)) |
+ return true; |
+ |
+ var volumeInfo = fileManager.volumeManager.getVolumeInfo(entry); |
+ if (!volumeInfo) |
+ return true; |
+ |
+ return volumeInfo.displayRoot === entry; |
+ }); |
+ }, |
+ /** |
+ * @param {!Array<!Entry>} entries |
+ * @param {!FileManager} fileManager |
+ * @return {boolean} True if entries contain read only entry. |
+ */ |
+ containsReadOnlyEntry_: function(entries, fileManager) { |
+ return entries.some(function(entry) { |
var locationInfo = fileManager.volumeManager.getLocationInfo(entry); |
return locationInfo && locationInfo.isReadOnly; |
}); |
- |
- event.canExecute = !containsReadOnlyEntry && entries.length > 0; |
- event.command.setHidden(false); |
} |
}); |