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 f9aaffd3bbe18c44db3e4a5d30cccd5e259fe5fc..7eab038cd6c672ed6c37cf0de612eced5e0d0ee1 100644 |
--- a/chrome/browser/resources/file_manager/js/file_manager.js |
+++ b/chrome/browser/resources/file_manager/js/file_manager.js |
@@ -1484,6 +1484,11 @@ FileManager.prototype = { |
* go fetch data for the sort field that we may not have yet. |
*/ |
FileManager.prototype.prepareSort_ = function(field, callback) { |
+ this.prepareSortEntries_(this.dataModel_.slice(), field, callback); |
+ }; |
+ |
+ FileManager.prototype.prepareSortEntries_ = function(entries, field, |
+ callback) { |
var cacheFunction; |
if (field == 'name' || field == 'cachedMtime_') { |
@@ -1509,11 +1514,10 @@ FileManager.prototype = { |
} |
} |
- var dataModel = this.dataModel_; |
- var uncachedCount = dataModel.length; |
+ var uncachedCount = entries.length; |
for (var i = uncachedCount - 1; i >= 0 ; i--) { |
- var entry = dataModel.item(i); |
+ var entry = entries[i]; |
if (field in entry) { |
uncachedCount--; |
} else { |
@@ -3216,11 +3220,13 @@ FileManager.prototype = { |
}); |
} |
- spliceArgs.unshift(0, 0); // index, deleteCount |
- self.dataModel_.splice.apply(self.dataModel_, spliceArgs); |
+ self.prefetchCacheForSorting_(spliceArgs, function() { |
+ spliceArgs.unshift(0, 0); // index, deleteCount |
+ self.dataModel_.splice.apply(self.dataModel_, spliceArgs); |
- // Keep reading until entries.length is 0. |
- reader.readEntries(onReadSome, onError); |
+ // Keep reading until entries.length is 0. |
+ reader.readEntries(onReadSome, onError); |
+ }); |
}; |
metrics.startInterval('DirectoryScan'); |
@@ -3242,6 +3248,16 @@ FileManager.prototype = { |
opt_callback(); |
}; |
+ FileManager.prototype.prefetchCacheForSorting_ = function(entries, callback) { |
+ var field = this.dataModel_.sortStatus.field; |
+ if (field) { |
+ this.prepareSortEntries_(entries, field, callback); |
+ } else { |
+ callback(); |
+ return; |
+ } |
+ }; |
+ |
FileManager.prototype.findListItem_ = function(event) { |
var node = event.srcElement; |
while (node) { |