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_ = []; |
+ } |
}; |
/** |