summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/siteIdentity/browser_session_store_pageproxystate.js
blob: 5d8c0117274f82465151e30bf2c05e737ae452af (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
92
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

const triggeringPrincipal_base64 = E10SUtils.SERIALIZED_SYSTEMPRINCIPAL;

let origBrowserState = SessionStore.getBrowserState();

add_setup(async function () {
  registerCleanupFunction(() => {
    SessionStore.setBrowserState(origBrowserState);
  });
});

// Test that when restoring tabs via SessionStore, we directly show the correct
// security state.
add_task(async function test_session_store_security_state() {
  const state = {
    windows: [
      {
        tabs: [
          {
            entries: [
              { url: "https://example.net", triggeringPrincipal_base64 },
            ],
          },
          {
            entries: [
              { url: "https://example.org", triggeringPrincipal_base64 },
            ],
          },
        ],
        selected: 1,
      },
    ],
  };

  // Create a promise that resolves when the tabs have finished restoring.
  let promiseTabsRestored = Promise.all([
    TestUtils.topicObserved("sessionstore-browser-state-restored"),
    BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "SSTabRestored"),
  ]);

  SessionStore.setBrowserState(JSON.stringify(state));

  await promiseTabsRestored;

  is(gBrowser.selectedTab, gBrowser.tabs[0], "First tab is selected initially");

  info("Switch to second tab which has not been loaded yet.");
  BrowserTestUtils.switchTab(gBrowser, gBrowser.tabs[1]);
  is(
    gURLBar.textbox.getAttribute("pageproxystate"),
    "invalid",
    "Page proxy state is invalid after tab switch"
  );

  // Wait for valid pageproxystate. As soon as we have a valid pageproxystate,
  // showing the identity box, it should indicate a secure connection.
  await BrowserTestUtils.waitForMutationCondition(
    gURLBar.textbox,
    {
      attributeFilter: ["pageproxystate"],
    },
    () => gURLBar.textbox.getAttribute("pageproxystate") == "valid"
  );

  // Wait for a tick for security state to apply.
  await new Promise(resolve => setTimeout(resolve, 0));

  is(
    gBrowser.currentURI.spec,
    "https://example.org/",
    "Should have loaded example.org"
  );
  is(
    gIdentityHandler._identityBox.getAttribute("pageproxystate"),
    "valid",
    "identityBox pageproxystate is valid"
  );

  ok(
    gIdentityHandler._isSecureConnection,
    "gIdentityHandler._isSecureConnection is true"
  );
  is(
    gIdentityHandler._identityBox.className,
    "verifiedDomain",
    "identityBox class signals secure connection."
  );
});