Index: chrome/browser/resources/file_manager/js/async_util.js |
diff --git a/chrome/browser/resources/file_manager/js/async_util.js b/chrome/browser/resources/file_manager/js/async_util.js |
deleted file mode 100644 |
index f74a9d493810a66f18f1bb0705665d0dfe80ad0e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/file_manager/js/async_util.js |
+++ /dev/null |
@@ -1,262 +0,0 @@ |
-// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-'use strict'; |
- |
-/** |
- * Namespace for async utility functions. |
- */ |
-var AsyncUtil = {}; |
- |
-/** |
- * Asynchronous version of Array.forEach. |
- * This executes a provided function callback once per array element, then |
- * run completionCallback to notify the completion. |
- * The callback can be an asynchronous function, but the execution is |
- * sequentially done. |
- * |
- * @param {Array.<T>} array The array to be iterated. |
- * @param {function(function(), T, number, Array.<T>} callback The iteration |
- * callback. The first argument is a callback to notify the completion of |
- * the iteration. |
- * @param {function()} completionCallback Called when all iterations are |
- * completed. |
- * @param {Object=} opt_thisObject Bound to callback if given. |
- * @template T |
- */ |
-AsyncUtil.forEach = function( |
- array, callback, completionCallback, opt_thisObject) { |
- if (opt_thisObject) |
- callback = callback.bind(opt_thisObject); |
- |
- var queue = new AsyncUtil.Queue(); |
- for (var i = 0; i < array.length; i++) { |
- queue.run(function(element, index, iterationCompletionCallback) { |
- callback(iterationCompletionCallback, element, index, array); |
- }.bind(null, array[i], i)); |
- } |
- queue.run(function(iterationCompletionCallback) { |
- completionCallback(); // Don't pass iteration completion callback. |
- }); |
-}; |
- |
-/** |
- * Creates a class for executing several asynchronous closures in a fifo queue. |
- * Added tasks will be executed sequentially in order they were added. |
- * |
- * @constructor |
- */ |
-AsyncUtil.Queue = function() { |
- this.running_ = false; |
- this.closures_ = []; |
-}; |
- |
-/** |
- * @return {boolean} True when a task is running, otherwise false. |
- */ |
-AsyncUtil.Queue.prototype.isRunning = function() { |
- return this.running_; |
-}; |
- |
-/** |
- * Enqueues a closure to be executed. |
- * @param {function(function())} closure Closure with a completion callback to |
- * be executed. |
- */ |
-AsyncUtil.Queue.prototype.run = function(closure) { |
- this.closures_.push(closure); |
- if (!this.running_) |
- this.continue_(); |
-}; |
- |
-/** |
- * Serves the next closure from the queue. |
- * @private |
- */ |
-AsyncUtil.Queue.prototype.continue_ = function() { |
- if (!this.closures_.length) { |
- this.running_ = false; |
- return; |
- } |
- |
- // Run the next closure. |
- this.running_ = true; |
- var closure = this.closures_.shift(); |
- closure(this.continue_.bind(this)); |
-}; |
- |
-/** |
- * Cancels all pending tasks. Note that this does NOT cancel the task running |
- * currently. |
- */ |
-AsyncUtil.Queue.prototype.cancel = function() { |
- this.closures_ = []; |
-}; |
- |
-/** |
- * Creates a class for executing several asynchronous closures in a group in |
- * a dependency order. |
- * |
- * @constructor |
- */ |
-AsyncUtil.Group = function() { |
- this.addedTasks_ = {}; |
- this.pendingTasks_ = {}; |
- this.finishedTasks_ = {}; |
- this.completionCallbacks_ = []; |
-}; |
- |
-/** |
- * Enqueues a closure to be executed after dependencies are completed. |
- * |
- * @param {function(function())} closure Closure with a completion callback to |
- * be executed. |
- * @param {Array.<string>=} opt_dependencies Array of dependencies. If no |
- * dependencies, then the the closure will be executed immediately. |
- * @param {string=} opt_name Task identifier. Specify to use in dependencies. |
- */ |
-AsyncUtil.Group.prototype.add = function(closure, opt_dependencies, opt_name) { |
- var length = Object.keys(this.addedTasks_).length; |
- var name = opt_name || ('(unnamed#' + (length + 1) + ')'); |
- |
- var task = { |
- closure: closure, |
- dependencies: opt_dependencies || [], |
- name: name |
- }; |
- |
- this.addedTasks_[name] = task; |
- this.pendingTasks_[name] = task; |
-}; |
- |
-/** |
- * Runs the enqueued closured in order of dependencies. |
- * |
- * @param {function()=} opt_onCompletion Completion callback. |
- */ |
-AsyncUtil.Group.prototype.run = function(opt_onCompletion) { |
- if (opt_onCompletion) |
- this.completionCallbacks_.push(opt_onCompletion); |
- this.continue_(); |
-}; |
- |
-/** |
- * Runs enqueued pending tasks whose dependencies are completed. |
- * @private |
- */ |
-AsyncUtil.Group.prototype.continue_ = function() { |
- // If all of the added tasks have finished, then call completion callbacks. |
- if (Object.keys(this.addedTasks_).length == |
- Object.keys(this.finishedTasks_).length) { |
- for (var index = 0; index < this.completionCallbacks_.length; index++) { |
- var callback = this.completionCallbacks_[index]; |
- callback(); |
- } |
- this.completionCallbacks_ = []; |
- return; |
- } |
- |
- for (var name in this.pendingTasks_) { |
- var task = this.pendingTasks_[name]; |
- var dependencyMissing = false; |
- for (var index = 0; index < task.dependencies.length; index++) { |
- var dependency = task.dependencies[index]; |
- // Check if the dependency has finished. |
- if (!this.finishedTasks_[dependency]) |
- dependencyMissing = true; |
- } |
- // All dependences finished, therefore start the task. |
- if (!dependencyMissing) { |
- delete this.pendingTasks_[task.name]; |
- task.closure(this.finish_.bind(this, task)); |
- } |
- } |
-}; |
- |
-/** |
- * Finishes the passed task and continues executing enqueued closures. |
- * |
- * @param {Object} task Task object. |
- * @private |
- */ |
-AsyncUtil.Group.prototype.finish_ = function(task) { |
- this.finishedTasks_[task.name] = task; |
- this.continue_(); |
-}; |
- |
-/** |
- * Aggregates consecutive calls and executes the closure only once instead of |
- * several times. The first call is always called immediately, and the next |
- * consecutive ones are aggregated and the closure is called only once once |
- * |delay| amount of time passes after the last call to run(). |
- * |
- * @param {function()} closure Closure to be aggregated. |
- * @param {number=} opt_delay Minimum aggregation time in milliseconds. Default |
- * is 50 milliseconds. |
- * @constructor |
- */ |
-AsyncUtil.Aggregation = function(closure, opt_delay) { |
- /** |
- * @type {number} |
- * @private |
- */ |
- this.delay_ = opt_delay || 50; |
- |
- /** |
- * @type {function()} |
- * @private |
- */ |
- this.closure_ = closure; |
- |
- /** |
- * @type {number?} |
- * @private |
- */ |
- this.scheduledRunsTimer_ = null; |
- |
- /** |
- * @type {number} |
- * @private |
- */ |
- this.lastRunTime_ = 0; |
-}; |
- |
-/** |
- * Runs a closure. Skips consecutive calls. The first call is called |
- * immediately. |
- */ |
-AsyncUtil.Aggregation.prototype.run = function() { |
- // If recently called, then schedule the consecutive call with a delay. |
- if (Date.now() - this.lastRunTime_ < this.delay_) { |
- this.cancelScheduledRuns_(); |
- this.scheduledRunsTimer_ = setTimeout(this.runImmediately_.bind(this), |
- this.delay_ + 1); |
- this.lastRunTime_ = Date.now(); |
- return; |
- } |
- |
- // Otherwise, run immediately. |
- this.runImmediately_(); |
-}; |
- |
-/** |
- * Calls the schedule immediately and cancels any scheduled calls. |
- * @private |
- */ |
-AsyncUtil.Aggregation.prototype.runImmediately_ = function() { |
- this.cancelScheduledRuns_(); |
- this.closure_(); |
- this.lastRunTime_ = Date.now(); |
-}; |
- |
-/** |
- * Cancels all scheduled runs (if any). |
- * @private |
- */ |
-AsyncUtil.Aggregation.prototype.cancelScheduledRuns_ = function() { |
- if (this.scheduledRunsTimer_) { |
- clearTimeout(this.scheduledRunsTimer_); |
- this.scheduledRunsTimer_ = null; |
- } |
-}; |