63 lines
2.2 KiB
JavaScript
63 lines
2.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
// Ensure that the RDM container tab URL is not recorded in session history.
|
|
|
|
const TEST_URL = "http://example.com/";
|
|
const CONTAINER_URL = "chrome://devtools/content/responsive.html/index.xhtml";
|
|
|
|
const { TabStateFlusher } =
|
|
ChromeUtils.import("resource:///modules/sessionstore/TabStateFlusher.jsm", {});
|
|
const { OUTER_FRAME_LOADER_SYMBOL } =
|
|
require("devtools/client/responsive.html/browser/tunnel");
|
|
|
|
function flushContainerTabState(tab) {
|
|
let browser = tab.linkedBrowser;
|
|
let outerBrowser = {
|
|
permanentKey: browser.permanentKey,
|
|
messageManager: browser[OUTER_FRAME_LOADER_SYMBOL].messageManager,
|
|
};
|
|
// Try to flush the tab, but if that hangs for a while, resolve anyway.
|
|
// During this test, we actually expect this to hang because the container tab
|
|
// doesn't have the right epoch value to reply to the flush correctly.
|
|
return new Promise(resolve => {
|
|
TabStateFlusher.flush(outerBrowser).then(resolve);
|
|
waitForTime(10000).then(resolve);
|
|
});
|
|
}
|
|
|
|
add_task(async function() {
|
|
// Load test URL
|
|
let tab = await addTab(TEST_URL);
|
|
let browser = tab.linkedBrowser;
|
|
|
|
// Check session history state
|
|
let history = await getSessionHistory(browser);
|
|
is(history.index - 1, 0, "At page 0 in history");
|
|
is(history.entries.length, 1, "1 page in history");
|
|
is(history.entries[0].url, TEST_URL, "Page 0 URL matches");
|
|
|
|
// Open RDM
|
|
await openRDM(tab);
|
|
|
|
// Checking session history directly in content does show the container URL
|
|
// that we're trying to hide...
|
|
history = await getSessionHistory(browser);
|
|
is(history.index - 1, 0, "At page 0 in history");
|
|
is(history.entries.length, 1, "1 page in history");
|
|
is(history.entries[0].url, CONTAINER_URL, "Page 0 URL matches");
|
|
|
|
// However, checking the recorded tab state for the outer browser shows the
|
|
// container URL has been ignored correctly.
|
|
await flushContainerTabState(tab);
|
|
let tabState = JSON.parse(SessionStore.getTabState(tab));
|
|
is(tabState.index - 1, 0, "At page 0 in history");
|
|
is(tabState.entries.length, 1, "1 page in history");
|
|
is(tabState.entries[0].url, TEST_URL, "Page 0 URL matches");
|
|
|
|
await closeRDM(tab);
|
|
await removeTab(tab);
|
|
});
|