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

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: Simplify how to make the promises. 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 36311a03e950cf8d347bf7af35bd30b138b44e17..ad6ccc28e6f60d25869249915566c597c0413ed7 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
@@ -382,6 +382,10 @@ function FileOperationManager() {
* @extends {cr.EventTarget}
*/
FileOperationManager.EventRouter = function() {
+ this.pendingDeletedEntries_ = [];
+ this.pendingCreatedEntries_ = [];
+ this.entryChangedEventRateLimiter_ = new AsyncUtil.RateLimiter(
+ this.dispatchEntryChangedEvent_.bind(this), 500);
};
/**
@@ -403,6 +407,10 @@ FileOperationManager.EventRouter.prototype.__proto__ = cr.EventTarget.prototype;
*/
FileOperationManager.EventRouter.prototype.sendProgressEvent = function(
reason, status, taskId, opt_error) {
+ // Before finishing operation, dispatch pending entries-changed events.
+ if (reason === 'SUCCESS' || reason === 'CANCELED')
+ this.entryChangedEventRateLimiter_.runImmediately();
+
var event = new Event('copy-progress');
event.reason = reason;
event.status = status;
@@ -413,17 +421,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