Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8950)

Unified Diff: chrome/browser/resources/file_manager/foreground/js/directory_tree.js

Issue 135753003: Get rid of the fake Drive/root entry. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/file_manager/foreground/js/directory_tree.js
diff --git a/chrome/browser/resources/file_manager/foreground/js/directory_tree.js b/chrome/browser/resources/file_manager/foreground/js/directory_tree.js
index 9869f9597132031120e107bdec1932e9af375258..3ee73c17120e01a6c9b9958baede3c3ffef6b26a 100644
--- a/chrome/browser/resources/file_manager/foreground/js/directory_tree.js
+++ b/chrome/browser/resources/file_manager/foreground/js/directory_tree.js
@@ -50,9 +50,11 @@ DirectoryItemTreeBaseMethods.updateSubElementsFromList = function(recursive) {
while (this.entries_[index]) {
var currentEntry = this.entries_[index];
var currentElement = this.items[index];
+ // TODO(mtomasz): Stop using full paths, and use getLocationInfo() instead.
+ var label = PathUtil.getFolderLabel(currentEntry.fullPath);
if (index >= this.items.length) {
- var item = new DirectoryItem(currentEntry, this, tree);
+ var item = new DirectoryItem(label, currentEntry, this, tree);
this.add(item);
index++;
} else if (currentEntry.fullPath == currentElement.fullPath) {
@@ -61,7 +63,7 @@ DirectoryItemTreeBaseMethods.updateSubElementsFromList = function(recursive) {
index++;
} else if (currentEntry.fullPath < currentElement.fullPath) {
- var item = new DirectoryItem(currentEntry, this, tree);
+ var item = new DirectoryItem(label, currentEntry, this, tree);
this.addAt(item, index);
index++;
} else if (currentEntry.fullPath > currentElement.fullPath) {
@@ -109,29 +111,31 @@ Object.freeze(DirectoryItemTreeBaseMethods);
/**
* A directory in the tree. Each element represents one directory.
*
+ * @param {string} label Label for this item.
* @param {DirectoryEntry} dirEntry DirectoryEntry of this item.
* @param {DirectoryItem|DirectoryTree} parentDirItem Parent of this item.
* @param {DirectoryTree} tree Current tree, which contains this item.
* @extends {cr.ui.TreeItem}
* @constructor
*/
-function DirectoryItem(dirEntry, parentDirItem, tree) {
+function DirectoryItem(label, dirEntry, parentDirItem, tree) {
var item = cr.doc.createElement('div');
- DirectoryItem.decorate(item, dirEntry, parentDirItem, tree);
+ DirectoryItem.decorate(item, label, dirEntry, parentDirItem, tree);
return item;
}
/**
* @param {HTMLElement} el Element to be DirectoryItem.
+ * @param {string} label Label for this item.
* @param {DirectoryEntry} dirEntry DirectoryEntry of this item.
* @param {DirectoryItem|DirectoryTree} parentDirItem Parent of this item.
* @param {DirectoryTree} tree Current tree, which contains this item.
*/
DirectoryItem.decorate =
- function(el, dirEntry, parentDirItem, tree) {
+ function(el, label, dirEntry, parentDirItem, tree) {
el.__proto__ = DirectoryItem.prototype;
(/** @type {DirectoryItem} */ el).decorate(
- dirEntry, parentDirItem, tree);
+ label, dirEntry, parentDirItem, tree);
};
DirectoryItem.prototype = {
@@ -178,12 +182,13 @@ DirectoryItem.prototype.searchAndSelectByEntry = function(entry) {
};
/**
+ * @param {string} label Localized label for this item.
* @param {DirectoryEntry} dirEntry DirectoryEntry of this item.
* @param {DirectoryItem|DirectoryTree} parentDirItem Parent of this item.
* @param {DirectoryTree} tree Current tree, which contains this item.
*/
DirectoryItem.prototype.decorate = function(
- dirEntry, parentDirItem, tree) {
+ label, dirEntry, parentDirItem, tree) {
this.className = 'tree-item';
this.innerHTML =
'<div class="tree-row">' +
@@ -197,7 +202,7 @@ DirectoryItem.prototype.decorate = function(
this.parentTree_ = tree;
this.directoryModel_ = tree.directoryModel;
this.parent_ = parentDirItem;
- this.label = dirEntry.label || dirEntry.name;
+ this.label = label;
this.fullPath = dirEntry.fullPath;
this.dirEntry_ = dirEntry;
this.fileFilter_ = this.directoryModel_.getFileFilter();
@@ -511,14 +516,6 @@ DirectoryTree.prototype.decorate = function(directoryModel, volumeManager) {
this.scrollBar_ = MainPanelScrollBar();
this.scrollBar_.initialize(this.parentNode, this);
-
- // Once, draws the list with the fake '/drive/' entry.
- this.redraw(false /* recursive */);
- // Resolves 'My Drive' entry and replaces the fake with the true one.
- this.maybeResolveMyDriveRoot_(function() {
- // After the true entry is resolved, draws the list again.
- this.redraw(true /* recursive */);
- }.bind(this));
};
/**
@@ -531,74 +528,56 @@ DirectoryTree.prototype.selectByEntry = function(entry) {
if (!DirectoryTreeUtil.isEligiblePathForDirectoryTree(entry.fullPath))
return;
- this.maybeResolveMyDriveRoot_(function() {
- if (this.selectedItem && util.isSameEntry(entry, this.selectedItem.entry))
- return;
-
- if (this.searchAndSelectByEntry(entry))
- return;
-
- this.selectedItem = null;
- this.updateSubDirectories(
- false /* recursive */,
- // Success callback, failure is not handled.
- function() {
- if (!this.searchAndSelectByEntry(entry))
- this.selectedItem = null;
- }.bind(this));
- }.bind(this));
-};
-
-/**
- * Resolves the My Drive root's entry, if it is a fake. If the entry is already
- * resolved to a DirectoryEntry, completionCallback() will be called
- * immediately.
- * @param {function()} completionCallback Called when the resolving is
- * done (or the entry is already resolved), regardless if it is
- * successfully done or not.
- * @private
- */
-DirectoryTree.prototype.maybeResolveMyDriveRoot_ = function(
- completionCallback) {
- var myDriveItem = this.items[0];
- if (!myDriveItem || !util.isFakeEntry(myDriveItem.entry)) {
- // The entry is already resolved. Don't need to try again.
- completionCallback();
+ var volumeInfo = this.volumeManager_.getVolumeInfo(entry);
+ if (this.selectedItem && util.isSameEntry(entry, this.selectedItem.entry))
return;
- }
- // The entry is a fake.
- this.directoryModel_.resolveDirectory(
- myDriveItem.fullPath,
- function(entry) {
- if (!util.isFakeEntry(entry))
- myDriveItem.dirEntry_ = entry;
+ if (this.searchAndSelectByEntry(entry))
+ return;
- completionCallback();
- },
- completionCallback);
+ this.updateSubDirectories(false /* recursive */);
+ // TODO(yoshiki, mtomasz): There may be a race in here.
+ volumeInfo.resolveDisplayRoot(function() {
+ if (!this.searchAndSelectByEntry(entry))
+ this.selectedItem = null;
+ }.bind(this));
};
/**
* Retrieves the latest subdirectories and update them on the tree.
+ *
* @param {boolean} recursive True if the update is recursively.
- * @param {function()=} opt_successCallback Callback called on success.
- * @param {function()=} opt_errorCallback Callback called on error.
+ * @param {function()=} opt_callback Called when subdirectories are fully
+ * updated.
*/
DirectoryTree.prototype.updateSubDirectories = function(
- recursive, opt_successCallback, opt_errorCallback) {
- var hasFakeEntries = this.currentVolumeInfo_ &&
- this.currentVolumeInfo_.volumeType === util.VolumeType.DRIVE;
- this.entries_ = hasFakeEntries ? [
- this.currentVolumeInfo_.fakeEntries[RootType.DRIVE],
- this.currentVolumeInfo_.fakeEntries[RootType.DRIVE_OFFLINE],
- this.currentVolumeInfo_.fakeEntries[RootType.DRIVE_SHARED_WITH_ME],
- this.currentVolumeInfo_.fakeEntries[RootType.DRIVE_RECENT]
- ] : [];
-
- this.redraw(recursive);
- if (opt_successCallback)
- opt_successCallback();
+ recursive, opt_callback) {
+ var callback = opt_callback || function() {};
+ this.entries_ = [];
+
+ var compareEntries = function(a, b) {
+ return a.toURL() < b.toURL();
+ };
+
+ // Add fakes (if any).
+ for (var key in this.currentVolumeInfo_.fakeEntries) {
+ this.entries_.push(this.currentVolumeInfo_.fakeEntries[key]);
+ }
+
+ // If the display root is not available yet, then redraw anyway with what
+ // we have. However, concurrently try to resolve the display root and then
+ // redraw.
+ if (!this.currentVolumeInfo_.displayRoot) {
+ this.entries_.sort(compareEntries);
+ this.redraw(recursive);
+ }
+
+ this.currentVolumeInfo_.resolveDisplayRoot(function(displayRoot) {
+ this.entries_.push(this.currentVolumeInfo_.displayRoot);
+ this.entries_.sort(compareEntries);
+ this.redraw(recursive); // Redraw.
+ callback();
+ }.bind(this), callback /* Ignore errors. */);
};
/**

Powered by Google App Engine
This is Rietveld 408576698