1/*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26var checkout = checkout || {};
27
28(function() {
29
30var g_haveSeenCheckoutAvailable = false;
31
32function callIfCheckoutAvailable(callback, checkoutUnavailable)
33{
34    if (g_haveSeenCheckoutAvailable) {
35        callback();
36        return;
37    }
38    checkout.isAvailable(function(isAvailable) {
39        if (isAvailable) {
40            g_haveSeenCheckoutAvailable = true;
41            callback();
42            return;
43        }
44        if (checkoutUnavailable)
45            checkoutUnavailable();
46    });
47}
48
49checkout.isAvailable = function(callback)
50{
51    net.ajax({
52        url: '/ping',
53        success: function() {
54            callback(true);
55        },
56        error: function() {
57            callback(false);
58        },
59    });
60};
61
62checkout.lastBlinkRollRevision = function(callback, checkoutUnavailable)
63{
64    callIfCheckoutAvailable(function() {
65        net.get('/lastroll', callback);
66    }, checkoutUnavailable);
67}
68
69checkout.rollout = function(revision, reason, callback, checkoutUnavailable)
70{
71    callIfCheckoutAvailable(function() {
72        net.post('/rollout?' + $.param({
73            'revision': revision,
74            'reason': reason
75        }), function() {
76            callback();
77        });
78    }, checkoutUnavailable);
79};
80
81checkout.rebaseline = function(failureInfoList, callback, progressCallback, checkoutUnavailable, debugBotsCallback)
82{
83    callIfCheckoutAvailable(function() {
84        var tests = {};
85        for (var i = 0; i < failureInfoList.length; i++) {
86            var failureInfo = failureInfoList[i];
87            if (failureInfo.builderName.indexOf('dbg') != -1) {
88                debugBotsCallback(failureInfo);
89                continue;
90            }
91            tests[failureInfo.testName] = tests[failureInfo.testName] || {};
92            tests[failureInfo.testName][failureInfo.builderName] =
93                base.uniquifyArray(base.flattenArray(failureInfo.failureTypeList.map(results.failureTypeToExtensionList)));
94        }
95        net.post('/rebaselineall', JSON.stringify(tests), function() { callback() });
96    }, checkoutUnavailable);
97};
98
99})();
100