diff options
author | zvorygin@chromium.org <zvorygin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-20 13:41:47 +0000 |
---|---|---|
committer | zvorygin@chromium.org <zvorygin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-20 13:41:47 +0000 |
commit | dcadb3559e103423f86ac4ec7d2497fd79283919 (patch) | |
tree | bfca2f4ae3b27b1940c246582fbf14302b9bbbe2 /chrome/browser/resources/file_manager/js/function_sequence.js | |
parent | d08b6ce1370d4c5a9e26649065a5a907a4786b13 (diff) | |
download | chromium_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.js | 77 |
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; +} |