Index: chrome/browser/resources/file_manager/js/file_manager.js |
diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js |
index 247988fe2a40ce58b2417fd6727ce0fcef5d8afd..9e7d3c7435905eefd364dbd02d13890f0d8e5444 100644 |
--- a/chrome/browser/resources/file_manager/js/file_manager.js |
+++ b/chrome/browser/resources/file_manager/js/file_manager.js |
@@ -542,7 +542,8 @@ FileManager.prototype = { |
this.directoryModel_.fileListSelection, |
GridItem.bind(null, this), |
this.copyManager_, |
- this.directoryModel_); |
+ this.directoryModel_, |
+ this.commands_); |
controller.attachDragSource(this.table_.list); |
controller.attachDropTarget(this.table_.list); |
controller.attachDragSource(this.grid_); |
@@ -1906,7 +1907,7 @@ FileManager.prototype = { |
if (entry.gdata_.isHosted) { |
listItem.classList.add('gdata-hosted'); |
} |
- if (entry.isDirectory || FileManager.isAvaliableOffline_(entry.gdata_)) { |
+ if (entry.isDirectory || FileType.isAvaliableOffline_(entry.gdata_)) { |
listItem.classList.add('gdata-present'); |
} |
}.bind(this)); |
@@ -2038,7 +2039,7 @@ FileManager.prototype = { |
FileManager.prototype.displayDateInDiv_ = function(div, filesystemProps) { |
if (!filesystemProps) return; |
- if (this.directoryModel_.isSystemDirectoy && |
+ if (this.directoryModel_.isSystemDirectory && |
filesystemProps.modificationTime.getTime() == 0) { |
// Mount points for FAT volumes have this time associated with them. |
// We'd rather display nothing than this bogus date. |
@@ -2151,6 +2152,7 @@ FileManager.prototype = { |
directoryCount: 0, |
bytes: 0, |
showBytes: false, |
+ allGDataFilesPresent: false, |
iconType: null, |
indexes: this.currentList_.selectionModel.selectedIndexes |
}; |
@@ -2265,6 +2267,14 @@ FileManager.prototype = { |
this.dispatchEvent(new cr.Event('selection-summarized')); |
}.bind(this)); |
+ |
+ if (this.isOnGData()) { |
+ FileType.checkOfflineAvailability( |
+ selection.entries, selection.urls, function(result) { |
+ selection.allGDataFilesPresent = result; |
+ this.updateOkButton_(); |
+ }.bind(this)); |
+ } |
}; |
/** |
@@ -2386,8 +2396,7 @@ FileManager.prototype = { |
FileManager.prototype.isOnGData = function() { |
- return this.directoryModel_ && |
- this.directoryModel_.rootPath == '/' + DirectoryModel.GDATA_DIRECTORY; |
+ return this.directoryModel_.isOnGData; |
}; |
FileManager.prototype.getMetadataProvider = function() { |
@@ -2574,18 +2583,17 @@ FileManager.prototype = { |
FileManager.prototype.executeIfAvailable_ = function(urls, callback) { |
if (this.isOnGDataOffline()) { |
- chrome.fileBrowserPrivate.getGDataFileProperties(urls, function(props) { |
- for (var i = 0; i != props.length; i++) { |
- if (!FileManager.isAvaliableOffline_(props[i])) { |
- this.alert.showHtml( |
- str('OFFLINE_HEADER'), |
- strf( |
- urls.length == 1 ? |
- 'OFFLINE_MESSAGE' : |
- 'OFFLINE_MESSAGE_PLURAL', |
- str('OFFLINE_COLUMN_LABEL'))); |
- return; |
- } |
+ FileType.checkOfflineAvailability( |
+ null /* entries */, urls, function(result) { |
+ if (!result) { |
+ this.alert.showHtml( |
+ str('OFFLINE_HEADER'), |
+ strf( |
+ urls.length == 1 ? |
+ 'OFFLINE_MESSAGE' : |
+ 'OFFLINE_MESSAGE_PLURAL', |
+ str('OFFLINE_COLUMN_LABEL'))); |
+ return; |
} |
callback(urls); |
}.bind(this)); |
@@ -2594,10 +2602,6 @@ FileManager.prototype = { |
} |
}; |
- FileManager.isAvaliableOffline_ = function(gdata) { |
- return gdata.isPresent && !gdata.isHosted; |
- }; |
- |
FileManager.prototype.isOffline = function() { |
return !navigator.onLine; |
}; |
@@ -2611,6 +2615,7 @@ FileManager.prototype = { |
this.dialogContainer_.removeAttribute('offline'); |
} |
this.directoryModel_.offline = this.isOffline(); |
+ this.updateOkButton_(); |
}; |
FileManager.prototype.isOnGDataOffline = function() { |
@@ -3288,18 +3293,32 @@ FileManager.prototype = { |
this.updateSelectAllCheckboxState_(selectAllCheckbox); |
}; |
+ /** |
+ * Check if all the files in the current selection are available. The only |
+ * case when files might be not available is when the selection contains |
+ * uncached GData files and the browser is offline. |
+ * @return {boolean} True if all files in the current selection are available. |
+ */ |
+ FileManager.prototype.isSelectionAvailable = function() { |
+ return !this.isOnGDataOffline() || this.selection.allGDataFilesPresent; |
+ }; |
+ |
FileManager.prototype.updateOkButton_ = function(event) { |
var selectable; |
- if (this.dialogType_ == FileManager.DialogType.SELECT_FOLDER) { |
+ if (!this.selection) { |
+ selectable = false; |
+ } else if (this.dialogType_ == FileManager.DialogType.SELECT_FOLDER) { |
selectable = this.selection.directoryCount == 1 && |
this.selection.fileCount == 0; |
} else if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE) { |
- selectable = (this.selection.directoryCount == 0 && |
+ selectable = (this.isSelectionAvailable() && |
+ this.selection.directoryCount == 0 && |
this.selection.fileCount == 1); |
} else if (this.dialogType_ == |
FileManager.DialogType.SELECT_OPEN_MULTI_FILE) { |
- selectable = (this.selection.directoryCount == 0 && |
+ selectable = (this.isSelectionAvailable() && |
+ this.selection.directoryCount == 0 && |
this.selection.fileCount >= 1); |
} else if (this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE) { |
if (this.isOnReadonlyDirectory()) { |