forked from mirrors/gecko-dev
134 lines
4.1 KiB
JavaScript
134 lines
4.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
|
|
});
|
|
|
|
const histogramName = "FX_NUMBER_OF_UNIQUE_SITE_ORIGINS_PER_DOCUMENT";
|
|
const testRoot = getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
"http://mochi.test:8888"
|
|
);
|
|
|
|
function windowGlobalDestroyed(id) {
|
|
return BrowserUtils.promiseObserved(
|
|
"window-global-destroyed",
|
|
aWGP => aWGP.innerWindowId == id
|
|
);
|
|
}
|
|
|
|
async function openAndCloseTab(uri) {
|
|
const tab = await BrowserTestUtils.openNewForegroundTab({
|
|
gBrowser,
|
|
opening: uri,
|
|
});
|
|
|
|
const innerWindowId =
|
|
tab.linkedBrowser.browsingContext.currentWindowGlobal.innerWindowId;
|
|
|
|
const wgpDestroyed = windowGlobalDestroyed(innerWindowId);
|
|
BrowserTestUtils.removeTab(tab);
|
|
await wgpDestroyed;
|
|
}
|
|
|
|
add_task(async function test_numberOfSiteOriginsAfterTabClose() {
|
|
const histogram = TelemetryTestUtils.getAndClearHistogram(histogramName);
|
|
const testPage = `${testRoot}contain_iframe.html`;
|
|
|
|
await openAndCloseTab(testPage);
|
|
|
|
// testPage contains two origins: mochi.test:8888 and example.com.
|
|
TelemetryTestUtils.assertHistogram(histogram, 2, 1);
|
|
});
|
|
|
|
add_task(async function test_numberOfSiteOriginsAboutBlank() {
|
|
const histogram = TelemetryTestUtils.getAndClearHistogram(histogramName);
|
|
|
|
await openAndCloseTab("about:blank");
|
|
|
|
const { values } = histogram.snapshot();
|
|
Assert.deepEqual(
|
|
values,
|
|
{},
|
|
`Histogram should have no values; had ${JSON.stringify(values)}`
|
|
);
|
|
});
|
|
|
|
add_task(async function test_numberOfSiteOriginsMultipleNavigations() {
|
|
const histogram = TelemetryTestUtils.getAndClearHistogram(histogramName);
|
|
const testPage = `${testRoot}contain_iframe.html`;
|
|
|
|
const tab = await BrowserTestUtils.openNewForegroundTab({
|
|
gBrowser,
|
|
opening: testPage,
|
|
waitForStateStop: true,
|
|
});
|
|
|
|
const wgpDestroyedPromises = [
|
|
windowGlobalDestroyed(tab.linkedBrowser.innerWindowID),
|
|
];
|
|
|
|
// Navigate to an interstitial page.
|
|
BrowserTestUtils.loadURIString(tab.linkedBrowser, "about:blank");
|
|
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
|
|
// Navigate to another test page.
|
|
BrowserTestUtils.loadURIString(tab.linkedBrowser, testPage);
|
|
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
|
|
wgpDestroyedPromises.push(
|
|
windowGlobalDestroyed(tab.linkedBrowser.innerWindowID)
|
|
);
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
await Promise.all(wgpDestroyedPromises);
|
|
|
|
// testPage has been loaded twice and contains two origins: mochi.test:8888
|
|
// and example.com.
|
|
TelemetryTestUtils.assertHistogram(histogram, 2, 2);
|
|
});
|
|
|
|
add_task(async function test_numberOfSiteOriginsAddAndRemove() {
|
|
const histogram = TelemetryTestUtils.getAndClearHistogram(histogramName);
|
|
const testPage = `${testRoot}blank_iframe.html`;
|
|
|
|
const tab = await BrowserTestUtils.openNewForegroundTab({
|
|
gBrowser,
|
|
opening: testPage,
|
|
waitForStateStop: true,
|
|
});
|
|
|
|
// Load a subdocument in the page's iframe.
|
|
await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
|
|
const iframe = content.window.document.querySelector("iframe");
|
|
const loaded = new Promise(resolve => {
|
|
iframe.addEventListener("load", () => resolve(), { once: true });
|
|
});
|
|
iframe.src = "http://example.com";
|
|
|
|
await loaded;
|
|
});
|
|
|
|
// Load a *new* subdocument in the page's iframe. This will result in the page
|
|
// having had three different origins, but only two at any one time.
|
|
await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
|
|
const iframe = content.window.document.querySelector("iframe");
|
|
const loaded = new Promise(resolve => {
|
|
iframe.addEventListener("load", () => resolve(), { once: true });
|
|
});
|
|
iframe.src = "http://example.org";
|
|
|
|
await loaded;
|
|
});
|
|
|
|
const wgpDestroyed = windowGlobalDestroyed(tab.linkedBrowser.innerWindowID);
|
|
BrowserTestUtils.removeTab(tab);
|
|
await wgpDestroyed;
|
|
|
|
// The page only ever had two origins at once.
|
|
TelemetryTestUtils.assertHistogram(histogram, 2, 1);
|
|
});
|