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

Side by Side Diff: chrome/browser/resources/file_manager/js/async_util.js

Issue 17212002: Add cancellation feature to the AsyncUtil.Queue for Files.app. (Abandoned) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * Namespace for async utility functions. 8 * Namespace for async utility functions.
9 */ 9 */
10 var AsyncUtil = {}; 10 var AsyncUtil = {};
11 11
12 /** 12 /**
13 * Creates a class for executing several asynchronous closures in a fifo queue. 13 * Creates a class for executing several asynchronous closures in a fifo queue.
14 * Added tasks will be executed sequentially in order they were added. 14 * Added tasks will be executed sequentially in order they were added.
15 * 15 *
16 * Once the queue is cancelled, any pending tasks in the queue as well as later
17 * added ones will not be executed. The current one being executed will not be
18 * terminated.
19 *
16 * @constructor 20 * @constructor
17 */ 21 */
18 AsyncUtil.Queue = function() { 22 AsyncUtil.Queue = function() {
19 this.running_ = false; 23 this.running_ = false;
20 this.closures_ = []; 24 this.cancelled_ = false;
25 this.tasks_ = [];
26 };
27
28 /**
29 * Cancels the queue. Any pending and later added tasks will not be executed.
30 * If there is a task being executed, then it will not be terminated. Once
31 * the queue is cancelled, it can't be resumed.
32 */
33 AsyncUtil.Queue.prototype.cancel = function() {
34 this.cancelled_ = true;
35 this.running_ = false;
36 for (var index = 0; index < this.tasks_.length; index++) {
37 this.tasks_[index].onCancelled();
38 }
39 this.tasks_ = [];
40 };
41
42 /**
43 * Returns true if the queue is cancelled. Once cancelled, it can't be resumed.
44 * @return {boolean} True if cancelled, false otherwise.
45 */
46 AsyncUtil.Queue.prototype.isCancelled = function() {
47 return this.cancelled_;
21 }; 48 };
22 49
23 /** 50 /**
24 * Enqueues a closure to be executed. 51 * Enqueues a closure to be executed.
52 *
25 * @param {function(function())} closure Closure with a completion callback to 53 * @param {function(function())} closure Closure with a completion callback to
26 * be executed. 54 * be executed.
55 * @param {function()=} opt_onCancelled Called when the task hasn't been
56 * executed because the queue has been terminated.
27 */ 57 */
28 AsyncUtil.Queue.prototype.run = function(closure) { 58 AsyncUtil.Queue.prototype.run = function(closure, opt_onCancelled) {
29 this.closures_.push(closure); 59 var onCancelled = opt_onCancelled || function() {};
60
61 if (this.cancelled_) {
62 onCancelled();
63 return;
64 }
65
66 this.tasks_.push({closure: closure, onCancelled: onCancelled});
30 if (!this.running_) 67 if (!this.running_)
31 this.continue_(); 68 this.continue_();
32 }; 69 };
33 70
34 /** 71 /**
35 * Serves the next closure from the queue. 72 * Serves the next closure from the queue.
36 * @private 73 * @private
37 */ 74 */
38 AsyncUtil.Queue.prototype.continue_ = function() { 75 AsyncUtil.Queue.prototype.continue_ = function() {
39 if (!this.closures_.length) { 76 if (!this.tasks_.length) {
40 this.running_ = false; 77 this.running_ = false;
41 return; 78 return;
42 } 79 }
43 80
44 // Run the next closure. 81 // Run the next closure.
45 this.running_ = true; 82 if (!this.cancelled_) {
46 var closure = this.closures_.shift(); 83 this.running_ = true;
47 closure(this.continue_.bind(this)); 84 var task = this.tasks_.shift();
85 task.closure(this.continue_.bind(this));
86 }
48 }; 87 };
49 88
50 /** 89 /**
51 * Creates a class for executing several asynchronous closures in a group in 90 * Creates a class for executing several asynchronous closures in a group in
52 * a dependency order. 91 * a dependency order.
53 * 92 *
54 * @constructor 93 * @constructor
55 */ 94 */
56 AsyncUtil.Group = function() { 95 AsyncUtil.Group = function() {
57 this.addedTasks_ = {}; 96 this.addedTasks_ = {};
(...skipping 19 matching lines...) Expand all
77 closure: closure, 116 closure: closure,
78 dependencies: opt_dependencies || [], 117 dependencies: opt_dependencies || [],
79 name: name 118 name: name
80 }; 119 };
81 120
82 this.addedTasks_[name] = task; 121 this.addedTasks_[name] = task;
83 this.pendingTasks_[name] = task; 122 this.pendingTasks_[name] = task;
84 }; 123 };
85 124
86 /** 125 /**
87 * Runs the enqueued closured in order of dependencies. 126 * Runs the enqueued closures in order of dependencies.
88 * 127 *
89 * @param {function()=} opt_onCompletion Completion callback. 128 * @param {function()=} opt_onCompletion Completion callback.
90 */ 129 */
91 AsyncUtil.Group.prototype.run = function(opt_onCompletion) { 130 AsyncUtil.Group.prototype.run = function(opt_onCompletion) {
92 if (opt_onCompletion) 131 if (opt_onCompletion)
93 this.completionCallbacks_.push(opt_onCompletion); 132 this.completionCallbacks_.push(opt_onCompletion);
94 this.continue_(); 133 this.continue_();
95 }; 134 };
96 135
97 /** 136 /**
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 /** 245 /**
207 * Cancels all scheduled runs (if any). 246 * Cancels all scheduled runs (if any).
208 * @private 247 * @private
209 */ 248 */
210 AsyncUtil.Aggregation.prototype.cancelScheduledRuns_ = function() { 249 AsyncUtil.Aggregation.prototype.cancelScheduledRuns_ = function() {
211 if (this.scheduledRunsTimer_) { 250 if (this.scheduledRunsTimer_) {
212 clearTimeout(this.scheduledRunsTimer_); 251 clearTimeout(this.scheduledRunsTimer_);
213 this.scheduledRunsTimer_ = null; 252 this.scheduledRunsTimer_ = null;
214 } 253 }
215 }; 254 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698