Bug 1938475 [Wayland] Fallback to monitor screen scale if we're missing wayland surfa...
[gecko.git] / security / manager / ssl / tests / mochitest / browser / browser_bug627234_perwindowpb.js
blob79e7ad9b122cbab0118c414f9fc582f31f974537
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 "use strict";
6 function whenNewWindowLoaded(aOptions, aCallback) {
7   let win = OpenBrowserWindow(aOptions);
8   win.addEventListener(
9     "load",
10     function () {
11       aCallback(win);
12     },
13     { once: true }
14   );
17 // This is a template to help porting global private browsing tests
18 // to per-window private browsing tests
19 function test() {
20   // initialization
21   waitForExplicitFinish();
22   let windowsToClose = [];
23   let testURI = "about:blank";
24   let uri;
25   let gSSService = Cc["@mozilla.org/ssservice;1"].getService(
26     Ci.nsISiteSecurityService
27   );
29   function originAttributes(aIsPrivateMode) {
30     return aIsPrivateMode ? { privateBrowsingId: 1 } : {};
31   }
33   function doTest(aIsPrivateMode, aWindow, aCallback) {
34     BrowserTestUtils.browserLoaded(aWindow.gBrowser.selectedBrowser).then(
35       () => {
36         uri = aWindow.Services.io.newURI("https://localhost/img.png");
37         gSSService.processHeader(
38           uri,
39           "max-age=1000",
40           originAttributes(aIsPrivateMode)
41         );
42         ok(
43           gSSService.isSecureURI(uri, originAttributes(aIsPrivateMode)),
44           "checking sts host"
45         );
47         aCallback();
48       }
49     );
51     BrowserTestUtils.startLoadingURIString(
52       aWindow.gBrowser.selectedBrowser,
53       testURI
54     );
55   }
57   function testOnWindow(aOptions, aCallback) {
58     whenNewWindowLoaded(aOptions, function (aWin) {
59       windowsToClose.push(aWin);
60       // execute should only be called when need, like when you are opening
61       // web pages on the test. If calling executeSoon() is not necesary, then
62       // call whenNewWindowLoaded() instead of testOnWindow() on your test.
63       executeSoon(function () {
64         aCallback(aWin);
65       });
66     });
67   }
69   // this function is called after calling finish() on the test.
70   registerCleanupFunction(function () {
71     windowsToClose.forEach(function (aWin) {
72       aWin.close();
73     });
74     uri = Services.io.newURI("http://localhost");
75     gSSService.resetState(uri);
76   });
78   // test first when on private mode
79   testOnWindow({ private: true }, function (aWin) {
80     doTest(true, aWin, function () {
81       // test when not on private mode
82       testOnWindow({}, function (aWin) {
83         doTest(false, aWin, function () {
84           // test again when on private mode
85           testOnWindow({ private: true }, function (aWin) {
86             doTest(true, aWin, function () {
87               finish();
88             });
89           });
90         });
91       });
92     });
93   });