| Index: chrome/browser/resources/file_manager/js/directory_model.js
|
| diff --git a/chrome/browser/resources/file_manager/js/directory_model.js b/chrome/browser/resources/file_manager/js/directory_model.js
|
| index 9713bdba96589860c8a007f97dc9fb7682bbe5b9..74828a0aa93c5001b5397c064987aa3f86ac6be1 100644
|
| --- a/chrome/browser/resources/file_manager/js/directory_model.js
|
| +++ b/chrome/browser/resources/file_manager/js/directory_model.js
|
| @@ -525,10 +525,25 @@ DirectoryModel.prototype = {
|
| this.dispatchEvent(e);
|
| },
|
|
|
| - setupPath: function(path, opt_pathResolveCallback) {
|
| + /**
|
| + * Change the state of the model to reflect the specified path (either a
|
| + * file or directory).
|
| + *
|
| + * @param {string} path The root path to use
|
| + * @param {function} opt_loadedCallback Invoked when the entire directory has
|
| + * been loaded.
|
| + * @param {function} opt_pathResolveCallback Invoked as soon as the path has
|
| + * been resolved, and called with the base and leaf portions of the path name.
|
| + */
|
| + setupPath: function(path, opt_loadedCallback, opt_pathResolveCallback) {
|
| // Split the dirname from the basename.
|
| var ary = path.match(/^(?:(.*)\/)?([^\/]*)$/);
|
| - var autoSelect = this.selectIndex.bind(this, this.autoSelectIndex_);
|
| + var autoSelect = function() {
|
| + this.selectIndex(this.autoSelectIndex_);
|
| + if (opt_loadedCallback)
|
| + opt_loadedCallback();
|
| + }.bind(this);
|
| +
|
| if (!ary) {
|
| console.warn('Unable to split default path: ' + path);
|
| this.changeDirectoryEntry_(this.root_, autoSelect, true);
|
| @@ -538,7 +553,7 @@ DirectoryModel.prototype = {
|
| var baseName = ary[1];
|
| var leafName = ary[2];
|
|
|
| - function callBack() {
|
| + function resolvedCallback() {
|
| if (opt_pathResolveCallback)
|
| opt_pathResolveCallback(baseName, leafName);
|
| }
|
| @@ -547,20 +562,23 @@ DirectoryModel.prototype = {
|
| if (leafEntry.isDirectory) {
|
| baseName = path;
|
| leafName = '';
|
| - callBack();
|
| + resolvedCallback();
|
| this.changeDirectoryEntry_(leafEntry, autoSelect, true);
|
| return;
|
| }
|
|
|
| - callBack();
|
| + resolvedCallback();
|
| // Leaf is an existing file, cd to its parent directory and select it.
|
| - this.changeDirectoryEntry_(baseDirEntry,
|
| - this.selectEntry.bind(this, leafEntry.name),
|
| - true);
|
| + var loadedCallback = function() {
|
| + this.selectEntry(leafEntry.name);
|
| + if (opt_loadedCallback)
|
| + opt_loadedCallback();
|
| + }.bind(this);
|
| + this.changeDirectoryEntry_(baseDirEntry, loadedCallback, true);
|
| }
|
|
|
| function onLeafError(baseDirEntry, err) {
|
| - callBack();
|
| + resolvedCallback();
|
| // Usually, leaf does not exist, because it's just a suggested file name.
|
| if (err != FileError.NOT_FOUND_ERR)
|
| console.log('Unexpected error resolving default leaf: ' + err);
|
| @@ -568,16 +586,16 @@ DirectoryModel.prototype = {
|
| }
|
|
|
| var onBaseError = function(err) {
|
| - callBack();
|
| + resolvedCallback();
|
| console.log('Unexpected error resolving default base "' +
|
| baseName + '": ' + err);
|
| if (path != '/' + DirectoryModel.DOWNLOADS_DIRECTORY) {
|
| // Can't find the provided path, let's go to default one instead.
|
| - this.setupDefaultPath();
|
| + this.setupDefaultPath(opt_loadedCallback);
|
| } else {
|
| // Well, we can't find the downloads dir. Let's just show something,
|
| // or we will get an infinite recursion.
|
| - this.changeDirectory('/', undefined, true);
|
| + this.changeDirectory('/', opt_loadedCallback, true);
|
| }
|
| }.bind(this);
|
|
|
| @@ -606,8 +624,10 @@ DirectoryModel.prototype = {
|
| }
|
| },
|
|
|
| - setupDefaultPath: function() {
|
| - this.getDefaultDirectory_(this.setupPath.bind(this));
|
| + setupDefaultPath: function(opt_callback) {
|
| + this.getDefaultDirectory_(function(path) {
|
| + this.setupPath(path, opt_callback);
|
| + }.bind(this));
|
| },
|
|
|
| getDefaultDirectory_: function(callback) {
|
| @@ -738,7 +758,7 @@ DirectoryModel.prototype = {
|
| append.bind(this, 'removables'));
|
| },
|
|
|
| - updateRoots: function(opt_changeDirectoryTo) {
|
| + updateRoots: function(opt_callback) {
|
| var self = this;
|
| this.resolveRoots_(function(rootEntries) {
|
| var dm = self.rootsList_;
|
| @@ -746,9 +766,8 @@ DirectoryModel.prototype = {
|
| dm.splice.apply(dm, args);
|
|
|
| self.updateRootsListSelection_();
|
| -
|
| - if (opt_changeDirectoryTo)
|
| - self.changeDirectory(opt_changeDirectoryTo);
|
| + if (opt_callback)
|
| + opt_callback();
|
| });
|
| },
|
|
|
|
|