DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (5b81998bb7ab)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
<!DOCTYPE HTML>
<html>
<head>
  <title>Test bug 627616</title>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>        
  <script type="text/javascript" src="prompt_common.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<script class="testbody" type="text/javascript">
    SimpleTest.waitForExplicitFinish();

    var Cc = SpecialPowers.Cc;

    testNum = 1;

    var login, login2;

    var resolveCallback = SpecialPowers.wrapCallbackObject({

      QueryInterface : function (iid) {
        const interfaces = [Ci.nsIProtocolProxyCallback, Ci.nsISupports];

        if (!interfaces.some( function(v) { return iid.equals(v) } ))
          throw Components.results.NS_ERROR_NO_INTERFACE;
        return this;
      },

      onProxyAvailable : function (req, uri, pi, status) {
         init2(SpecialPowers.wrap(pi).host, SpecialPowers.wrap(pi).port);
      }
    });

    function init1() {
        var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
        var pps = Cc["@mozilla.org/network/protocol-proxy-service;1"].getService();

        var uri = ios.newURI("http://example.com", null, null);
        pps.asyncResolve(uri, 0, resolveCallback);
    }

    function init2(proxyHost, proxyPort) {

        var mozproxy = "moz-proxy://" + proxyHost + ":" + proxyPort;

        var pwmgr = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
        login = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);
        login.init(mozproxy, null, "proxy_realm", "proxy_user", "proxy_pass", "", "");
        pwmgr.addLogin(login);

        login2 = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);
        login2.init("http://mochi.test:8888", null, "mochirealm", "user1name", "user1pass", "", "");
        pwmgr.addLogin(login2);
        startCallbackTimer();
    }
    function cleanup() {
        var pwmgr = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
        pwmgr.removeLogin(login);        
        pwmgr.removeLogin(login2);
        timer.cancel();
    }

    function makeXHR(expectedStatus, expectedText, extra) {
      var xhr =  new XMLHttpRequest();
      xhr.open("GET", "authenticate.sjs?" +
                      "proxy_user=proxy_user&" +
                      "proxy_pass=proxy_pass&" +
                      "proxy_realm=proxy_realm&" +
                      "user=user1name&" +
                      "pass=user1pass&" +
                      "realm=mochirealm&" +
                      extra || "");
      xhr.onloadend = function() {
        is(xhr.status, expectedStatus, "xhr.status");
        is(xhr.statusText, expectedText, "xhr.statusText");
        runNextTest();
      }
      return xhr;
    }

    function testNonAnonymousCredentials() {
      var xhr = makeXHR(200, "OK");
      xhr.send();
    }

    function testAnonymousCredentials() {
      // Test that an anonymous request correctly performs proxy authentication
      var xhr = makeXHR(401, "Authentication required");
      SpecialPowers.wrap(xhr).channel.loadFlags |= Ci.nsIChannel.LOAD_ANONYMOUS;
      xhr.send();
    }

    function testAnonymousNoAuth() {
      // Next, test that an anonymous request still does not include any non-proxy
      // authentication headers.
      var xhr = makeXHR(200, "Authorization header not found", "anonymous=1");
      SpecialPowers.wrap(xhr).channel.loadFlags |= Ci.nsIChannel.LOAD_ANONYMOUS;
      xhr.send();
    }

    var gExpectedDialogs = 0;
    var gCurrentTest;
    function runNextTest() {
      is(gExpectedDialogs, 0, "received expected number of auth dialogs");
      Cc["@mozilla.org/network/http-auth-manager;1"].getService(SpecialPowers.Ci.nsIHttpAuthManager).clearAll();
      if (pendingTests.length > 0) {
        ({expectedDialogs: gExpectedDialogs,
          test: gCurrentTest}) = pendingTests.shift();
        gCurrentTest.call(this);
      } else {
        cleanup();
        SimpleTest.finish();
      }
    }

    var pendingTests = [{expectedDialogs: 2, test: testNonAnonymousCredentials},
                        {expectedDialogs: 1, test: testAnonymousCredentials},
                        {expectedDialogs: 0, test: testAnonymousNoAuth}];
    init1();
    runNextTest();

    function handleDialog(doc, testNum)
    {
        var dialog = doc.getElementById("commonDialog");
        dialog.acceptDialog();
        gExpectedDialogs--;
        startCallbackTimer();
    }
</script>
</body>
</html>