summaryrefslogtreecommitdiffstats
path: root/security/manager/ssl/tests/mochitest/browser/browser_bug627234_perwindowpb.js
blob: 564aca088d42240a840d281ce1519ec7dbe0c871 (plain)
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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";

function whenNewWindowLoaded(aOptions, aCallback) {
  let win = OpenBrowserWindow(aOptions);
  win.addEventListener(
    "load",
    function () {
      aCallback(win);
    },
    { once: true }
  );
}

// This is a template to help porting global private browsing tests
// to per-window private browsing tests
function test() {
  // initialization
  waitForExplicitFinish();
  let windowsToClose = [];
  let testURI = "about:blank";
  let uri;
  let gSSService = Cc["@mozilla.org/ssservice;1"].getService(
    Ci.nsISiteSecurityService
  );

  function originAttributes(aIsPrivateMode) {
    return aIsPrivateMode ? { privateBrowsingId: 1 } : {};
  }

  function doTest(aIsPrivateMode, aWindow, aCallback) {
    BrowserTestUtils.browserLoaded(aWindow.gBrowser.selectedBrowser).then(
      () => {
        uri = aWindow.Services.io.newURI("https://localhost/img.png");
        gSSService.processHeader(
          uri,
          "max-age=1000",
          originAttributes(aIsPrivateMode)
        );
        ok(
          gSSService.isSecureURI(uri, originAttributes(aIsPrivateMode)),
          "checking sts host"
        );

        aCallback();
      }
    );

    BrowserTestUtils.loadURIString(aWindow.gBrowser.selectedBrowser, testURI);
  }

  function testOnWindow(aOptions, aCallback) {
    whenNewWindowLoaded(aOptions, function (aWin) {
      windowsToClose.push(aWin);
      // execute should only be called when need, like when you are opening
      // web pages on the test. If calling executeSoon() is not necesary, then
      // call whenNewWindowLoaded() instead of testOnWindow() on your test.
      executeSoon(function () {
        aCallback(aWin);
      });
    });
  }

  // this function is called after calling finish() on the test.
  registerCleanupFunction(function () {
    windowsToClose.forEach(function (aWin) {
      aWin.close();
    });
    uri = Services.io.newURI("http://localhost");
    gSSService.resetState(uri);
  });

  // test first when on private mode
  testOnWindow({ private: true }, function (aWin) {
    doTest(true, aWin, function () {
      // test when not on private mode
      testOnWindow({}, function (aWin) {
        doTest(false, aWin, function () {
          // test again when on private mode
          testOnWindow({ private: true }, function (aWin) {
            doTest(true, aWin, function () {
              finish();
            });
          });
        });
      });
    });
  });
}