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

Unified Diff: chrome/browser/resources/file_manager/js/directory_contents.js

Issue 25263003: Refactor DirectoryContents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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
« no previous file with comments | « no previous file | chrome/browser/resources/file_manager/js/directory_model.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/file_manager/js/directory_contents.js
diff --git a/chrome/browser/resources/file_manager/js/directory_contents.js b/chrome/browser/resources/file_manager/js/directory_contents.js
index fece6f207fd0335fe38c46a933683be436821ae8..059138a0ad64d55e5c6a09432e4b56448fe60f5f 100644
--- a/chrome/browser/resources/file_manager/js/directory_contents.js
+++ b/chrome/browser/resources/file_manager/js/directory_contents.js
@@ -54,12 +54,6 @@ DirectoryContentScanner.prototype.__proto__ = ContentScanner.prototype;
/**
* Starts to read the entries in the directory.
- * @param {function(Array.<Entry>)} entriesCallback Called when some chunk of
- * entries are read. This can be called a couple of times until the
- * completion.
- * @param {function()} successCallback Called when the scan is completed
- * successfully.
- * @param {function(FileError)} errorCallback Called an error occurs.
* @override
*/
DirectoryContentScanner.prototype.scan = function(
@@ -130,12 +124,6 @@ DriveSearchContentScanner.MAX_RESULTS_ = 100;
/**
* Starts to search on Drive File System.
- * @param {function(Array.<Entry>)} entriesCallback Called when some chunk of
- * entries are read. This can be called a couple of times until the
- * completion.
- * @param {function()} successCallback Called when the scan is completed
- * successfully.
- * @param {function(FileError)} errorCallback Called an error occurs.
* @override
*/
DriveSearchContentScanner.prototype.scan = function(
@@ -211,12 +199,6 @@ LocalSearchContentScanner.prototype.__proto__ = ContentScanner.prototype;
/**
* Starts the file name search.
- * @param {function(Array.<Entry>)} entriesCallback Called when some chunk of
- * entries are read. This can be called a couple of times until the
- * completion.
- * @param {function()} successCallback Called when the scan is completed
- * successfully.
- * @param {function(FileError)} errorCallback Called an error occurs.
* @override
*/
LocalSearchContentScanner.prototype.scan = function(
@@ -307,12 +289,6 @@ DriveMetadataSearchContentScanner.SearchType = Object.freeze({
/**
* Starts to metadata-search on Drive File System.
- * @param {function(Array.<Entry>)} entriesCallback Called when some chunk of
- * entries are read. This can be called a couple of times until the
- * completion.
- * @param {function()} successCallback Called when the scan is completed
- * successfully.
- * @param {function(FileError)} errorCallback Called an error occurs.
* @override
*/
DriveMetadataSearchContentScanner.prototype.scan = function(
@@ -455,13 +431,31 @@ function FileListContext(fileFilter, metadataCache) {
* and filling the fileList. Different descendants handle various types of
* directory contents shown: basic directory, drive search results, local search
* results.
+ * TODO(hidehiko): Remove EventTarget from this.
+ *
* @param {FileListContext} context The file list context.
+ * @param {boolean} isSearch True for search directory contents, otherwise
+ * false.
+ * @param {DirectoryEntry} directoryEntry The entry of the current directory.
+ * @param {DirectoryEntry} lastNonSearchDirectoryEntry The entry of the last
+ * non-search directroy.
+ * @param {function():ContentScanner} scannerFactory The factory to create
+ * ContentScanner instance.
* @constructor
* @extends {cr.EventTarget}
*/
-function DirectoryContents(context) {
+function DirectoryContents(context, isSearch, directoryEntry,
+ lastNonSearchDirectoryEntry,
+ scannerFactory) {
this.context_ = context;
this.fileList_ = context.fileList;
+
+ this.isSearch_ = isSearch;
+ this.directoryEntry_ = directoryEntry;
+ this.lastNonSearchDirectoryEntry_ = lastNonSearchDirectoryEntry;
+
+ this.scannerFactory_ = scannerFactory;
+ this.scanner_ = null;
this.prefetchMetadataQueue_ = new AsyncUtil.Queue();
this.scanCancelled_ = false;
this.fileList_.prepareSort = this.prepareSort_.bind(this);
@@ -477,7 +471,9 @@ DirectoryContents.prototype.__proto__ = cr.EventTarget.prototype;
* @return {DirectoryContents} Object copy.
*/
DirectoryContents.prototype.clone = function() {
- return new DirectoryContents(this.context_);
+ return new DirectoryContents(
+ this.context_, this.isSearch_, this.directoryEntry_,
+ this.lastNonSearchDirectoryEntry_, this.scannerFactory_);
};
/**
@@ -514,7 +510,7 @@ DirectoryContents.prototype.isScanning = function() {
* @return {boolean} True if search results (drive or local).
*/
DirectoryContents.prototype.isSearch = function() {
- return false;
+ return this.isSearch_;
};
/**
@@ -522,14 +518,14 @@ DirectoryContents.prototype.isSearch = function() {
* search -- the top directory from which search is run.
*/
DirectoryContents.prototype.getDirectoryEntry = function() {
- throw 'Not implemented.';
+ return this.directoryEntry_;
};
/**
* @return {DirectoryEntry} A DirectoryEntry for the last non search contents.
*/
DirectoryContents.prototype.getLastNonSearchDirectoryEntry = function() {
- throw 'Not implemented.';
+ return this.lastNonSearchDirectoryEntry_;
};
/**
@@ -537,7 +533,12 @@ DirectoryContents.prototype.getLastNonSearchDirectoryEntry = function() {
* 'scan-failed' event will be fired upon completion.
*/
DirectoryContents.prototype.scan = function() {
- throw 'Not implemented.';
+ // TODO(hidehiko,mtomasz): this scan method must be called at most once.
+ // Remove such a limitation.
+ this.scanner_ = this.scannerFactory_();
+ this.scanner_.scan(this.onNewEntries_.bind(this),
+ this.onScanCompleted_.bind(this),
+ this.onScanError_.bind(this));
};
/**
@@ -556,9 +557,9 @@ DirectoryContents.prototype.cancelScan = function() {
/**
* Called when the scanning by scanner_ is done.
- * @protected
+ * @private
*/
-DirectoryContents.prototype.onScanCompleted = function() {
+DirectoryContents.prototype.onScanCompleted_ = function() {
this.scanner_ = null;
if (this.scanCancelled_)
return;
@@ -574,9 +575,9 @@ DirectoryContents.prototype.onScanCompleted = function() {
/**
* Called in case scan has failed. Should send the event.
- * @protected
+ * @private
*/
-DirectoryContents.prototype.onScanError = function() {
+DirectoryContents.prototype.onScanError_ = function() {
this.scanner_ = null;
if (this.scanCancelled_)
return;
@@ -590,9 +591,9 @@ DirectoryContents.prototype.onScanError = function() {
/**
* Called when some chunk of entries are read by scanner.
* @param {Array.<Entry>} entries The list of the scanned entries.
- * @protected
+ * @private
*/
-DirectoryContents.prototype.onNewEntries = function(entries) {
+DirectoryContents.prototype.onNewEntries_ = function(entries) {
if (this.scanCancelled_)
return;
@@ -658,70 +659,9 @@ DirectoryContents.prototype.reloadMetadata = function(entries, callback) {
*/
DirectoryContents.prototype.createDirectory = function(
name, successCallback, errorCallback) {
- throw 'Not implemented.';
-};
-
-
-/**
- * @param {FileListContext} context File list context.
- * @param {DirectoryEntry} entry DirectoryEntry for current directory.
- * @constructor
- * @extends {DirectoryContents}
- */
-function DirectoryContentsBasic(context, entry) {
- DirectoryContents.call(this, context);
- this.entry_ = entry;
-}
-
-/**
- * Extends DirectoryContents
- */
-DirectoryContentsBasic.prototype.__proto__ = DirectoryContents.prototype;
-
-/**
- * Create the copy of the object, but without scan started.
- * @return {DirectoryContentsBasic} Object copy.
- */
-DirectoryContentsBasic.prototype.clone = function() {
- return new DirectoryContentsBasic(this.context_, this.entry_);
-};
-
-/**
- * @return {DirectoryEntry} DirectoryEntry of the current directory.
- */
-DirectoryContentsBasic.prototype.getDirectoryEntry = function() {
- return this.entry_;
-};
-
-/**
- * @return {DirectoryEntry} DirectoryEntry for the currnet entry.
- */
-DirectoryContentsBasic.prototype.getLastNonSearchDirectoryEntry = function() {
- return this.entry_;
-};
-
-/**
- * Start directory scan.
- */
-DirectoryContentsBasic.prototype.scan = function() {
- // TODO(hidehiko,mtomasz): this scan method must be called at most once.
- // Remove such a limitation.
- this.scanner_ = new DirectoryContentScanner(this.entry_);
- this.scanner_.scan(this.onNewEntries.bind(this),
- this.onScanCompleted.bind(this),
- this.onScanError.bind(this));
-};
-
-/**
- * @param {string} name Directory name.
- * @param {function(Entry)} successCallback Called on success.
- * @param {function(FileError)} errorCallback On error.
- */
-DirectoryContentsBasic.prototype.createDirectory = function(
- name, successCallback, errorCallback) {
// TODO(hidehiko): createDirectory should not be the part of
// DirectoryContent.
- if (!this.entry_) {
+ if (this.isSearch_ || !this.directoryEntry_) {
errorCallback(util.createFileError(FileError.INVALID_MODIFICATION_ERR));
return;
}
@@ -732,215 +672,95 @@ DirectoryContentsBasic.prototype.createDirectory = function(
});
};
- this.entry_.getDirectory(name, {create: true, exclusive: true},
- onSuccess.bind(this), errorCallback);
+ this.directoryEntry_.getDirectory(name, {create: true, exclusive: true},
+ onSuccess.bind(this), errorCallback);
};
/**
+ * Creates a DirectoryContents instance to show entries in a directory.
+ *
* @param {FileListContext} context File list context.
- * @param {DirectoryEntry} dirEntry Current directory.
- * @param {DirectoryEntry} previousDirEntry DirectoryEntry that was current
- * before the search.
- * @param {string} query Search query.
- * @constructor
- * @extends {DirectoryContents}
- */
-function DirectoryContentsDriveSearch(context,
- dirEntry,
- previousDirEntry,
- query) {
- DirectoryContents.call(this, context);
- this.directoryEntry_ = dirEntry;
- this.previousDirectoryEntry_ = previousDirEntry;
- this.query_ = query;
-}
-
-/**
- * Extends DirectoryContents.
- */
-DirectoryContentsDriveSearch.prototype.__proto__ = DirectoryContents.prototype;
-
-/**
- * Create the copy of the object, but without scan started.
- * @return {DirectoryContentsBasic} Object copy.
- */
-DirectoryContentsDriveSearch.prototype.clone = function() {
- return new DirectoryContentsDriveSearch(
- this.context_, this.directoryEntry_,
- this.previousDirectoryEntry_, this.query_);
-};
-
-/**
- * @return {boolean} True if this is search results (yes).
- */
-DirectoryContentsDriveSearch.prototype.isSearch = function() {
- return true;
-};
-
-/**
- * @return {DirectoryEntry} A DirectoryEntry for the top directory from which
- * search is run (i.e. drive root).
- */
-DirectoryContentsDriveSearch.prototype.getDirectoryEntry = function() {
- return this.directoryEntry_;
-};
-
-/**
- * @return {DirectoryEntry} DirectoryEntry for the directory that was current
- * before the search.
- */
-DirectoryContentsDriveSearch.prototype.getLastNonSearchDirectoryEntry =
- function() {
- return this.previousDirectoryEntry_;
-};
-
-/**
- * Start directory scan.
- */
-DirectoryContentsDriveSearch.prototype.scan = function() {
- this.scanner_ = new DriveSearchContentScanner(this.query_);
- this.scanner_.scan(this.onNewEntries.bind(this),
- this.onScanCompleted.bind(this),
- this.onScanError.bind(this));
+ * @param {DirectoryEntry} directoryEntry The current directory entry.
+ * @return {DirectoryContents} Created DirectoryContents instance.
+ */
+DirectoryContents.createForDirectory = function(context, directoryEntry) {
+ return new DirectoryContents(
+ context,
+ false, // Non search.
+ directoryEntry,
+ directoryEntry,
+ function() {
+ return new DirectoryContentScanner(directoryEntry);
+ });
};
/**
+ * Creates a DirectoryContents instance to show the result of the search on
+ * Drive File System.
+ *
* @param {FileListContext} context File list context.
- * @param {DirectoryEntry} dirEntry Current directory.
+ * @param {DirectoryEntry} directoryEntry The current directory entry.
+ * @param {DirectoryEntry} previousDirectoryEntry The DirectoryEntry that was
+ * current before the search.
* @param {string} query Search query.
- * @constructor
- * @extends {DirectoryContents}
- */
-function DirectoryContentsLocalSearch(context, dirEntry, query) {
- DirectoryContents.call(this, context);
- this.directoryEntry_ = dirEntry;
- this.query_ = query;
-}
-
-/**
- * Extends DirectoryContents
- */
-DirectoryContentsLocalSearch.prototype.__proto__ = DirectoryContents.prototype;
-
-/**
- * Create the copy of the object, but without scan started.
- * @return {DirectoryContentsBasic} Object copy.
- */
-DirectoryContentsLocalSearch.prototype.clone = function() {
- return new DirectoryContentsLocalSearch(
- this.context_, this.directoryEntry_, this.query_);
-};
-
-/**
- * @return {boolean} True if search results (drive or local).
- */
-DirectoryContentsLocalSearch.prototype.isSearch = function() {
- return true;
-};
-
-/**
- * @return {DirectoryEntry} A DirectoryEntry for the top directory from which
- * search is run.
- */
-DirectoryContentsLocalSearch.prototype.getDirectoryEntry = function() {
- return this.directoryEntry_;
-};
-
-/**
- * @return {DirectoryEntry} DirectoryEntry for current directory (the search is
- * run from the directory that was current before search).
- */
-DirectoryContentsLocalSearch.prototype.getLastNonSearchDirectoryEntry =
- function() {
- return this.directoryEntry_;
-};
-
-/**
- * Start directory scan/search operation. Either 'scan-completed' or
- * 'scan-failed' event will be fired upon completion.
- */
-DirectoryContentsLocalSearch.prototype.scan = function() {
- this.scanner_ =
- new LocalSearchContentScanner(this.directoryEntry_, this.query_);
- this.scanner_.scan(this.onNewEntries.bind(this),
- this.onScanCompleted.bind(this),
- this.onScanError.bind(this));
+ * @return {DirectoryContents} Created DirectoryContents instance.
+ */
+DirectoryContents.createForDriveSearch = function(
+ context, directoryEntry, previousDirectoryEntry, query) {
+ return new DirectoryContents(
+ context,
+ true, // Search.
+ directoryEntry,
+ previousDirectoryEntry,
+ function() {
+ return new DriveSearchContentScanner(query);
+ });
};
/**
- * DirectoryContents to list Drive files using searchDriveMetadata().
+ * Creates a DirectoryContents instance to show the result of the search on
+ * Local File System.
*
* @param {FileListContext} context File list context.
- * @param {DirectoryEntry} driveDirEntry Directory for actual Drive.
- * @param {DirectoryEntry} fakeDirEntry Fake directory representing the set of
- * result files. This serves as a top directory for this search.
- * @param {string} query Search query to filter the files.
- * @param {DriveMetadataSearchContentScanner.SearchType} searchType
- * Type of search. searchDriveMetadata will restricts the entries based on
- * the given search type.
- * @constructor
- * @extends {DirectoryContents}
- */
-function DirectoryContentsDriveSearchMetadata(context,
- driveDirEntry,
- fakeDirEntry,
- query,
- searchType) {
- DirectoryContents.call(this, context);
- this.driveDirEntry_ = driveDirEntry;
- this.fakeDirEntry_ = fakeDirEntry;
- this.query_ = query;
- this.searchType_ = searchType;
-}
-
-/**
- * Creates a copy of the object, but without scan started.
- * @return {DirectoryContents} Object copy.
- */
-DirectoryContentsDriveSearchMetadata.prototype.clone = function() {
- return new DirectoryContentsDriveSearchMetadata(
- this.context_, this.driveDirEntry_, this.fakeDirEntry_, this.query_,
- this.searchType_);
-};
-
-/**
- * Extends DirectoryContents.
- */
-DirectoryContentsDriveSearchMetadata.prototype.__proto__ =
- DirectoryContents.prototype;
-
-/**
- * @return {boolean} True if this is search results (yes).
- */
-DirectoryContentsDriveSearchMetadata.prototype.isSearch = function() {
- return true;
-};
-
-/**
- * @return {DirectoryEntry} An Entry representing the current contents
- * (i.e. fake root for "Shared with me").
- */
-DirectoryContentsDriveSearchMetadata.prototype.getDirectoryEntry = function() {
- return this.fakeDirEntry_;
-};
-
-/**
- * @return {DirectoryEntry} DirectoryEntry for the directory that was current
- * before the search.
- */
-DirectoryContentsDriveSearchMetadata.prototype.getLastNonSearchDirectoryEntry =
- function() {
- return this.driveDirEntry_;
+ * @param {DirectoryEntry} directoryEntry The current directory entry.
+ * @param {string} query Search query.
+ * @return {DirectoryContents} Created DirectoryContents instance.
+ */
+DirectoryContents.createForLocalSearch = function(
+ context, directoryEntry, query) {
+ return new DirectoryContents(
+ context,
+ true, // Search.
+ directoryEntry,
+ directoryEntry,
+ function() {
+ return new LocalSearchContentScanner(directoryEntry, query);
+ });
};
/**
- * Start directory scan/search operation. Either 'scan-completed' or
- * 'scan-failed' event will be fired upon completion.
- */
-DirectoryContentsDriveSearchMetadata.prototype.scan = function() {
- this.scanner_ =
- new DriveMetadataSearchContentScanner(this.query_, this.searchType_);
- this.scanner_.scan(this.onNewEntries.bind(this),
- this.onScanCompleted.bind(this),
- this.onScanError.bind(this));
+ * Creates a DirectoryContents instance to show the result of metadata search
+ * on Drive File System.
+ *
+ * @param {FileListContext} context File list context.
+ * @param {DirectoryEntry} fakeDirectoryEntry Fake directory entry representing
+ * the set of result entries. This serves as a top directory for the
+ * search.
+ * @param {DirectoryEntry} driveDirectoryEntry Directory for the actual drive.
+ * @param {string} query Search query.
+ * @param {DriveMetadataSearchContentScanner.SearchType} searchType The type of
+ * the search. The scanner will restricts the entries based on the given
+ * type.
+ * @return {DirectoryContents} Created DirectoryContents instance.
+ */
+DirectoryContents.createForDriveMetadataSearch = function(
+ context, fakeDirectoryEntry, driveDirectoryEntry, query, searchType) {
+ return new DirectoryContents(
+ context,
+ true, // Search
+ fakeDirectoryEntry,
+ driveDirectoryEntry,
+ function() {
+ return new DriveMetadataSearchContentScanner(query, searchType);
+ });
};
« no previous file with comments | « no previous file | chrome/browser/resources/file_manager/js/directory_model.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698