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 50692bee27dfb05150a3f1504d53aa751c66c576..bd5e5c03a9d89a004718514363bbff4928c52c5c 100644 |
--- a/chrome/browser/resources/file_manager/js/file_manager.js |
+++ b/chrome/browser/resources/file_manager/js/file_manager.js |
@@ -1482,6 +1482,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_') { |
@@ -1507,11 +1512,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 { |
@@ -3212,11 +3216,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'); |
@@ -3238,6 +3244,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) { |