134 lines
3.6 KiB
JavaScript
134 lines
3.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
"use strict";
|
|
|
|
const TEST_URL =
|
|
"https://example.com/browser/netwerk/cookie/test/browser/file_empty.html";
|
|
|
|
async function validateTelemetryValues(
|
|
{ setCookies, setForeigns, setPartitioneds, setForeignPartitioneds },
|
|
message
|
|
) {
|
|
await Services.fog.testFlushAllChildren();
|
|
let setCookieTelemetry = Glean.networking.setCookie.testGetValue();
|
|
is(
|
|
setCookieTelemetry ?? undefined,
|
|
setCookies,
|
|
message + " - all set cookies"
|
|
);
|
|
let foreignTelemetry = Glean.networking.setCookieForeign.testGetValue();
|
|
is(
|
|
foreignTelemetry?.numerator,
|
|
setForeigns,
|
|
message + " - foreign set cookies"
|
|
);
|
|
is(
|
|
foreignTelemetry?.denominator,
|
|
setCookies,
|
|
message + " - foreign set cookies denominator"
|
|
);
|
|
let partitonedTelemetry =
|
|
Glean.networking.setCookiePartitioned.testGetValue();
|
|
is(
|
|
partitonedTelemetry?.numerator,
|
|
setPartitioneds,
|
|
message + " - partitioned set cookies"
|
|
);
|
|
is(
|
|
partitonedTelemetry?.denominator,
|
|
setCookies,
|
|
message + " - partitioned set cookies denominator"
|
|
);
|
|
let foreignPartitonedTelemetry =
|
|
Glean.networking.setCookieForeignPartitioned.testGetValue();
|
|
is(
|
|
foreignPartitonedTelemetry?.numerator,
|
|
setForeignPartitioneds,
|
|
message + " - foreign partitioned set cookies"
|
|
);
|
|
is(
|
|
foreignPartitonedTelemetry?.denominator,
|
|
setCookies,
|
|
message + " - foreign partitioned set cookies denominator"
|
|
);
|
|
}
|
|
|
|
add_task(async () => {
|
|
await Services.fog.testFlushAllChildren();
|
|
Services.fog.testResetFOG();
|
|
await validateTelemetryValues({}, "initially empty");
|
|
|
|
// open a browser window for the test
|
|
let tab = BrowserTestUtils.addTab(gBrowser, TEST_URL);
|
|
let browser = gBrowser.getBrowserForTab(tab);
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
// Set cookies with Javascript
|
|
await SpecialPowers.spawn(browser, [], function () {
|
|
content.document.cookie = "a=1; Partitioned; SameSite=None; Secure";
|
|
content.document.cookie = "b=2; SameSite=None; Secure";
|
|
});
|
|
await validateTelemetryValues(
|
|
{
|
|
setCookies: 2,
|
|
setForeigns: 0,
|
|
setPartitioneds: 1,
|
|
setForeignPartitioneds: 0,
|
|
},
|
|
"javascript cookie"
|
|
);
|
|
|
|
// Set cookies with HTTP
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
await content.fetch("partitioned.sjs");
|
|
});
|
|
await validateTelemetryValues(
|
|
{
|
|
setCookies: 4,
|
|
setForeigns: 0,
|
|
setPartitioneds: 2,
|
|
setForeignPartitioneds: 0,
|
|
},
|
|
"same site fetch"
|
|
);
|
|
|
|
// Set cookies with cross-site HTTP
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
await content.fetch(
|
|
"https://example.org/browser/netwerk/cookie/test/browser/partitioned.sjs",
|
|
{ credentials: "include" }
|
|
);
|
|
});
|
|
await validateTelemetryValues(
|
|
{
|
|
setCookies: 6,
|
|
setForeigns: 2,
|
|
setPartitioneds: 3,
|
|
setForeignPartitioneds: 1,
|
|
},
|
|
"foreign fetch"
|
|
);
|
|
|
|
// Set cookies with cross-site HTTP redirect
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
await content.fetch(
|
|
encodeURI(
|
|
"https://example.org/browser/netwerk/cookie/test/browser/partitioned.sjs?redirect=https://example.com/browser/netwerk/cookie/test/browser/partitioned.sjs?nocookie"
|
|
),
|
|
{ credentials: "include" }
|
|
);
|
|
});
|
|
|
|
await validateTelemetryValues(
|
|
{
|
|
setCookies: 8,
|
|
setForeigns: 4,
|
|
setPartitioneds: 4,
|
|
setForeignPartitioneds: 2,
|
|
},
|
|
"foreign fetch redirect"
|
|
);
|
|
|
|
// remove the tab
|
|
gBrowser.removeTab(tab);
|
|
});
|