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

Unified Diff: ui/file_manager/file_manager/background/js/file_operation_manager.js

Issue 463783002: Combine consecutive entry-changed events into one. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed pointed bugs and handle errors. Created 6 years, 4 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: ui/file_manager/file_manager/background/js/file_operation_manager.js
diff --git a/ui/file_manager/file_manager/background/js/file_operation_manager.js b/ui/file_manager/file_manager/background/js/file_operation_manager.js
index 82e20e5471cadc62f2fe3102d8d6a37e8debf817..2400ed18d7b0717885405e488647d1ccfed080a4 100644
--- a/ui/file_manager/file_manager/background/js/file_operation_manager.js
+++ b/ui/file_manager/file_manager/background/js/file_operation_manager.js
@@ -376,6 +376,10 @@ function FileOperationManager() {
* @extends {cr.EventTarget}
*/
FileOperationManager.EventRouter = function() {
+ this.pendingDeletedEntries_ = [];
+ this.pendingCreatedEntries_ = [];
+ this.entryChangedEventRateLimiter_ = new AsyncUtil.RateLimiter(
+ this.dispatchEntryChangedEvent_.bind(this), 500);
};
/**
@@ -407,17 +411,42 @@ FileOperationManager.EventRouter.prototype.sendProgressEvent = function(
};
/**
- * Dispatches an event to notify that an entry is changed (created or deleted).
+ * Stores changed (created or deleted) entry temporarily, and maybe dispatch
+ * entries-changed event with stored entries.
* @param {util.EntryChangedKind} kind The enum to represent if the entry is
* created or deleted.
* @param {Entry} entry The changed entry.
*/
FileOperationManager.EventRouter.prototype.sendEntryChangedEvent = function(
kind, entry) {
- var event = new Event('entry-changed');
- event.kind = kind;
- event.entry = entry;
- this.dispatchEvent(event);
+ if (kind === util.EntryChangedKind.DELETED)
+ this.pendingDeletedEntries_.push(entry);
+ if (kind === util.EntryChangedKind.CREATED)
+ this.pendingCreatedEntries_.push(entry);
+
+ this.entryChangedEventRateLimiter_.run();
+};
+
+/**
+ * Dispatches an event to notify that entries are changed (created or deleted).
+ * @private
+ */
+FileOperationManager.EventRouter.prototype.dispatchEntryChangedEvent_ =
+ function() {
+ if (this.pendingDeletedEntries_.length > 0) {
+ var event = new Event('entries-changed');
+ event.kind = util.EntryChangedKind.DELETED;
+ event.entries = this.pendingDeletedEntries_;
+ this.dispatchEvent(event);
+ this.pendingDeletedEntries_ = [];
+ }
+ if (this.pendingCreatedEntries_.length > 0) {
+ var event = new Event('entries-changed');
+ event.kind = util.EntryChangedKind.CREATED;
+ event.entries = this.pendingCreatedEntries_;
+ this.dispatchEvent(event);
+ this.pendingCreatedEntries_ = [];
+ }
};
/**

Powered by Google App Engine
This is Rietveld 408576698