summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/siteIdentity/browser_session_store_pageproxystate.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/siteIdentity/browser_session_store_pageproxystate.js')
-rw-r--r--browser/base/content/test/siteIdentity/browser_session_store_pageproxystate.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/browser/base/content/test/siteIdentity/browser_session_store_pageproxystate.js b/browser/base/content/test/siteIdentity/browser_session_store_pageproxystate.js
new file mode 100644
index 0000000000..5d8c011727
--- /dev/null
+++ b/browser/base/content/test/siteIdentity/browser_session_store_pageproxystate.js
@@ -0,0 +1,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."
+ );
+});