| Index: chrome/browser/resources/file_manager/background/js/drive_sync_handler.js
|
| diff --git a/chrome/browser/resources/file_manager/background/js/drive_sync_handler.js b/chrome/browser/resources/file_manager/background/js/drive_sync_handler.js
|
| index 2ba9672fe47fbc2617defb2261ebed1a5b0fd885..c9c4f3a47266aae20dc7ec12aa9b996edc642252 100644
|
| --- a/chrome/browser/resources/file_manager/background/js/drive_sync_handler.js
|
| +++ b/chrome/browser/resources/file_manager/background/js/drive_sync_handler.js
|
| @@ -26,13 +26,19 @@ function DriveSyncHandler(progressCenter) {
|
| this.idCounter_ = 0;
|
|
|
| /**
|
| - * Progressing file names.
|
| - * @type {Object.<string, ProgressCenterItem>} Map a file URL and a progress
|
| - * center item.
|
| + * Map of file urls and progress center items.
|
| + * @type {Object.<string, ProgressCenterItem>}
|
| * @private
|
| */
|
| this.items_ = {};
|
|
|
| + /**
|
| + * Async queue.
|
| + * @type {AsyncUtil.Queue}
|
| + * @private
|
| + */
|
| + this.queue_ = new AsyncUtil.Queue();
|
| +
|
| // Register events.
|
| chrome.fileBrowserPrivate.onFileTransfersUpdated.addListener(
|
| this.onFileTransfersUpdated_.bind(this));
|
| @@ -102,25 +108,35 @@ DriveSyncHandler.prototype.onFileTransfersUpdated_ = function(statusList) {
|
| * @private
|
| */
|
| DriveSyncHandler.prototype.updateItem_ = function(status) {
|
| - webkitResolveLocalFileSystemURL(status.fileUrl, function(entry) {
|
| - var item;
|
| + this.queue_.run(function(callback) {
|
| if (!this.items_[status.fileUrl]) {
|
| - item = new ProgressCenterItem();
|
| - item.id = DriveSyncHandler.PROGRESS_ITEM_ID_PREFIX + (this.idCounter_++);
|
| - item.type = ProgressItemType.SYNC;
|
| - item.quiet = true;
|
| - item.message = strf('SYNC_FILE_NAME', entry.name);
|
| - item.cancelCallback = this.requestCancel_.bind(this, entry);
|
| - this.items_[status.fileUrl] = item;
|
| - } else {
|
| - item = this.items_[status.fileUrl];
|
| + webkitResolveLocalFileSystemURL(status.fileUrl, function(entry) {
|
| + var item = new ProgressCenterItem();
|
| + item.id =
|
| + DriveSyncHandler.PROGRESS_ITEM_ID_PREFIX + (this.idCounter_++);
|
| + item.type = ProgressItemType.SYNC;
|
| + item.quiet = true;
|
| + item.message = strf('SYNC_FILE_NAME', entry.name);
|
| + item.cancelCallback = this.requestCancel_.bind(this, entry);
|
| + this.items_[status.fileUrl] = item;
|
| + callback();
|
| + }.bind(this), function(error) {
|
| + console.warn('Resolving URL ' + status.fileUrl + ' is failed: ', error);
|
| + callback();
|
| + });
|
| + }
|
| + }.bind(this));
|
| + this.queue_.run(function(callback) {
|
| + var item = this.items_[status.fileUrl];
|
| + if (!item) {
|
| + callback();
|
| + return;
|
| }
|
| item.progressValue = status.processed || 0;
|
| item.progressMax = status.total || 1;
|
| this.progressCenter_.updateItem(item);
|
| - }.bind(this), function() {
|
| - console.error('Cannot resolve the URL: ' + status.fileUrl);
|
| - });
|
| + callback();
|
| + }.bind(this));
|
| };
|
|
|
| /**
|
| @@ -129,13 +145,18 @@ DriveSyncHandler.prototype.updateItem_ = function(status) {
|
| * @private
|
| */
|
| DriveSyncHandler.prototype.removeItem_ = function(status) {
|
| - var item = this.items_[status.fileUrl];
|
| - delete this.items_[status.fileUrl];
|
| - if (item) {
|
| + this.queue_.run(function(callback) {
|
| + var item = this.items_[status.fileUrl];
|
| + if (!item) {
|
| + callback();
|
| + return;
|
| + }
|
| item.state = status.transferState === 'completed' ?
|
| ProgressItemState.COMPLETED : ProgressItemState.CANCELED;
|
| this.progressCenter_.updateItem(item);
|
| - }
|
| + delete this.items_[status.fileUrl];
|
| + callback();
|
| + }.bind(this));
|
| };
|
|
|
| /**
|
|
|