summaryrefslogtreecommitdiffstats
path: root/netwerk/test/browser/browser_cookie_filtering_oa.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /netwerk/test/browser/browser_cookie_filtering_oa.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'netwerk/test/browser/browser_cookie_filtering_oa.js')
-rw-r--r--netwerk/test/browser/browser_cookie_filtering_oa.js190
1 files changed, 190 insertions, 0 deletions
diff --git a/netwerk/test/browser/browser_cookie_filtering_oa.js b/netwerk/test/browser/browser_cookie_filtering_oa.js
new file mode 100644
index 0000000000..f69ad09e81
--- /dev/null
+++ b/netwerk/test/browser/browser_cookie_filtering_oa.js
@@ -0,0 +1,190 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+"use strict";
+
+const {
+ HTTPS_EXAMPLE_ORG,
+ HTTPS_EXAMPLE_COM,
+ HTTP_EXAMPLE_COM,
+ browserTestPath,
+ waitForAllExpectedTests,
+ cleanupObservers,
+ checkExpectedCookies,
+ triggerSetCookieFromHttp,
+ triggerSetCookieFromHttpPrivate,
+ preclean_test,
+ cleanup_test,
+} = ChromeUtils.importESModule(
+ "resource://testing-common/cookie_filtering_helper.sys.mjs"
+);
+
+// TEST: OriginAttributes
+// * example.com OA-changed cookies don't go to example.com & vice-versa
+async function test_origin_attributes() {
+ var suite = oaSuite();
+
+ // example.com - start content process when loading page
+ let t2 = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ browserTestPath(HTTPS_EXAMPLE_COM)
+ );
+ let testStruct2 = {
+ name: "OA example.com",
+ browser: gBrowser.getBrowserForTab(t2),
+ tab: t2,
+ expected: [suite[0], suite[4]],
+ };
+
+ // open a tab with altered OA: userContextId
+ let t4 = await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ opening: (function () {
+ return function () {
+ // info("calling addTab from lambda");
+ gBrowser.selectedTab = BrowserTestUtils.addTab(
+ gBrowser,
+ HTTPS_EXAMPLE_COM,
+ { userContextId: 1 }
+ );
+ };
+ })(),
+ });
+ let testStruct4 = {
+ name: "OA example.com (contextId)",
+ browser: gBrowser.getBrowserForTab(t4),
+ tab: t4,
+ expected: [suite[2], suite[5]],
+ };
+
+ // example.com
+ await SpecialPowers.spawn(
+ testStruct2.browser,
+ [testStruct2.expected, testStruct2.name],
+ checkExpectedCookies
+ );
+ // example.com with different OA: userContextId
+ await SpecialPowers.spawn(
+ testStruct4.browser,
+ [testStruct4.expected, testStruct4.name],
+ checkExpectedCookies
+ );
+
+ await triggerOriginAttributesEmulatedSuite();
+
+ await SpecialPowers.spawn(testStruct2.browser, [], waitForAllExpectedTests);
+ await SpecialPowers.spawn(testStruct4.browser, [], waitForAllExpectedTests);
+ await SpecialPowers.spawn(testStruct2.browser, [], cleanupObservers);
+ await SpecialPowers.spawn(testStruct4.browser, [], cleanupObservers);
+ BrowserTestUtils.removeTab(testStruct2.tab);
+ BrowserTestUtils.removeTab(testStruct4.tab);
+}
+
+// TEST: Private
+// * example.com private cookies don't go to example.com process & vice-v
+async function test_private() {
+ var suite = oaSuite();
+
+ // example.com
+ let t2 = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ browserTestPath(HTTPS_EXAMPLE_COM)
+ );
+ let testStruct2 = {
+ name: "non-priv example.com",
+ browser: gBrowser.getBrowserForTab(t2),
+ tab: t2,
+ expected: [suite[0], suite[4]],
+ };
+
+ // private window example.com
+ let privateBrowserWindow = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+ let privateTab = (privateBrowserWindow.gBrowser.selectedTab =
+ BrowserTestUtils.addTab(
+ privateBrowserWindow.gBrowser,
+ browserTestPath(HTTPS_EXAMPLE_COM)
+ ));
+ let testStruct5 = {
+ name: "private example.com",
+ browser: privateBrowserWindow.gBrowser.getBrowserForTab(privateTab),
+ tab: privateTab,
+ expected: [suite[3], suite[6]],
+ };
+ await BrowserTestUtils.browserLoaded(testStruct5.tab.linkedBrowser);
+
+ let parentpid = Services.appinfo.processID;
+ let privatePid = testStruct5.browser.frameLoader.remoteTab.osPid;
+ let pid = testStruct2.browser.frameLoader.remoteTab.osPid;
+ ok(parentpid != privatePid, "Parent and private processes are unique");
+ ok(parentpid != pid, "Parent and non-private processes are unique");
+ ok(privatePid != pid, "Private and non-private processes are unique");
+
+ // example.com
+ await SpecialPowers.spawn(
+ testStruct2.browser,
+ [testStruct2.expected, testStruct2.name],
+ checkExpectedCookies
+ );
+
+ // example.com private
+ await SpecialPowers.spawn(
+ testStruct5.browser,
+ [testStruct5.expected, testStruct5.name],
+ checkExpectedCookies
+ );
+
+ await triggerOriginAttributesEmulatedSuite();
+
+ // wait for all tests and cleanup
+ await SpecialPowers.spawn(testStruct2.browser, [], waitForAllExpectedTests);
+ await SpecialPowers.spawn(testStruct5.browser, [], waitForAllExpectedTests);
+ await SpecialPowers.spawn(testStruct2.browser, [], cleanupObservers);
+ await SpecialPowers.spawn(testStruct5.browser, [], cleanupObservers);
+ BrowserTestUtils.removeTab(testStruct2.tab);
+ BrowserTestUtils.removeTab(testStruct5.tab);
+ await BrowserTestUtils.closeWindow(privateBrowserWindow);
+}
+
+function oaSuite() {
+ var suite = [];
+ suite.push("test-cookie=orgwontsee"); // 0
+ suite.push("test-cookie=firstparty"); // 1
+ suite.push("test-cookie=usercontext"); // 2
+ suite.push("test-cookie=privateonly"); // 3
+ suite.push("test-cookie=sentinelcom"); // 4
+ suite.push("test-cookie=sentineloa"); // 5
+ suite.push("test-cookie=sentinelprivate"); // 6
+ return suite;
+}
+
+// emulated because we are not making actual page requests
+// we are just directly invoking the api
+async function triggerOriginAttributesEmulatedSuite() {
+ var suite = oaSuite();
+
+ let uriCom = NetUtil.newURI(HTTPS_EXAMPLE_COM);
+ triggerSetCookieFromHttp(uriCom, suite[0]);
+
+ // FPD (OA) changed
+ triggerSetCookieFromHttp(uriCom, suite[1], "foo.com");
+
+ // context id (OA) changed
+ triggerSetCookieFromHttp(uriCom, suite[2], "", 1);
+
+ // private
+ triggerSetCookieFromHttpPrivate(uriCom, suite[3]);
+
+ // sentinels
+ triggerSetCookieFromHttp(uriCom, suite[4]);
+ triggerSetCookieFromHttp(uriCom, suite[5], "", 1);
+ triggerSetCookieFromHttpPrivate(uriCom, suite[6]);
+}
+
+add_task(preclean_test);
+add_task(test_origin_attributes); // 4
+add_task(test_private); // 7
+add_task(cleanup_test);