summaryrefslogtreecommitdiffstats
path: root/chrome/browser/resources/file_manager/js/function_sequence.js
diff options
context:
space:
mode:
authorzvorygin@chromium.org <zvorygin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-20 13:41:47 +0000
committerzvorygin@chromium.org <zvorygin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-20 13:41:47 +0000
commitdcadb3559e103423f86ac4ec7d2497fd79283919 (patch)
treebfca2f4ae3b27b1940c246582fbf14302b9bbbe2 /chrome/browser/resources/file_manager/js/function_sequence.js
parentd08b6ce1370d4c5a9e26649065a5a907a4786b13 (diff)
downloadchromium_src-dcadb3559e103423f86ac4ec7d2497fd79283919.zip
chromium_src-dcadb3559e103423f86ac4ec7d2497fd79283919.tar.gz
chromium_src-dcadb3559e103423f86ac4ec7d2497fd79283919.tar.bz2
Minor code style cleanup. Added id3 metadata parser to filemanager.
BUG=14879 TEST= Review URL: http://codereview.chromium.org/7217007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93187 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/resources/file_manager/js/function_sequence.js')
-rw-r--r--chrome/browser/resources/file_manager/js/function_sequence.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/chrome/browser/resources/file_manager/js/function_sequence.js b/chrome/browser/resources/file_manager/js/function_sequence.js
new file mode 100644
index 0000000..3ac6152
--- /dev/null
+++ b/chrome/browser/resources/file_manager/js/function_sequence.js
@@ -0,0 +1,77 @@
+// Copyright (c) 2011 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.
+
+/**
+ * @constructor
+ * @class FunctionSequence to invoke steps in sequence
+ *
+ * @param steps array of functions to invoke in sequence
+ * @param callback callback to invoke on success
+ * @param failureCallback callback to invoke on failure
+ */
+function FunctionSequence(steps, callback, failureCallback, logger) {
+ // Private variables hidden in closure
+ var _currentStepIdx = -1;
+ var _self = this;
+ var _failed = false;
+
+ this.onError = function(err) {
+ logger.vlog('Failed step: ' + steps[_currentStepIdx].name + ': ' + err);
+ if (!_failed) {
+ _failed = true;
+ failureCallback.apply(this, err, steps[_currentStepIdx].name);
+ }
+ };
+
+ this.finish = function() {
+ if (!_failed) {
+ _currentStepIdx = steps.length;
+ callback();
+ }
+ };
+
+ this.nextStep = function(var_args) {
+ logger.vlog('Starting new step');
+
+ if (_failed) {
+ return;
+ }
+
+ _currentStepIdx++;
+
+ if (_currentStepIdx >= steps.length) {
+ callback.apply(_self, arguments);
+ return;
+ }
+
+ var currentStep = steps[_currentStepIdx];
+
+ logger.vlog('Current step type is' + (typeof currentStep));
+
+ if (typeof currentStep == 'function') {
+ logger.vlog('nextstep : ' + currentStep.name);
+ currentStep.apply(_self, arguments);
+ } else {
+ logger.vlog('nextsep forking ' + currentStep.length + ' chains');
+ var remaining = currentStep.length;
+
+ function resume() {
+ if (--remaining == 0) {
+ logger.vlog('barrier passed');
+ _self.nextStep();
+ } else {
+ logger.vlog('waiting for [' + remaining + '] at barrier');
+ }
+ }
+
+ for (var i = 0; i < currentStep.length; i++) {
+ var sequence = new FunctionSequence(currentStep[i], resume,
+ _self.onError, logger);
+ sequence.start.apply(sequence, arguments);
+ }
+ }
+ };
+
+ this.start = this.nextStep;
+}