From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- dom/push/test/xpcshell/test_clear_origin_data.js | 132 +++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 dom/push/test/xpcshell/test_clear_origin_data.js (limited to 'dom/push/test/xpcshell/test_clear_origin_data.js') diff --git a/dom/push/test/xpcshell/test_clear_origin_data.js b/dom/push/test/xpcshell/test_clear_origin_data.js new file mode 100644 index 0000000000..7c743148a6 --- /dev/null +++ b/dom/push/test/xpcshell/test_clear_origin_data.js @@ -0,0 +1,132 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const userAgentID = "bd744428-f125-436a-b6d0-dd0c9845837f"; + +let clearForPattern = async function (testRecords, pattern) { + let patternString = JSON.stringify(pattern); + await PushService._clearOriginData(patternString); + + for (let length = testRecords.length; length--; ) { + let test = testRecords[length]; + let originSuffix = ChromeUtils.originAttributesToSuffix( + test.originAttributes + ); + + let registration = await PushService.registration({ + scope: test.scope, + originAttributes: originSuffix, + }); + + let url = test.scope + originSuffix; + + if (ObjectUtils.deepEqual(test.clearIf, pattern)) { + ok( + !registration, + "Should clear registration " + url + " for pattern " + patternString + ); + testRecords.splice(length, 1); + } else { + ok( + registration, + "Should not clear registration " + url + " for pattern " + patternString + ); + } + } +}; + +function run_test() { + do_get_profile(); + setPrefs({ + userAgentID, + requestTimeout: 1000, + retryBaseInterval: 150, + }); + run_next_test(); +} + +add_task(async function test_webapps_cleardata() { + let db = PushServiceWebSocket.newPushDB(); + registerCleanupFunction(() => { + return db.drop().then(_ => db.close()); + }); + + let testRecords = [ + { + scope: "https://example.org/1", + originAttributes: {}, + clearIf: { inIsolatedMozBrowser: false }, + }, + { + scope: "https://example.org/1", + originAttributes: { inIsolatedMozBrowser: true }, + clearIf: {}, + }, + ]; + + let unregisterDone; + let unregisterPromise = new Promise( + resolve => (unregisterDone = after(testRecords.length, resolve)) + ); + + PushService.init({ + serverURI: "wss://push.example.org", + db, + makeWebSocket(uri) { + return new MockWebSocket(uri, { + onHello(data) { + equal(data.messageType, "hello", "Handshake: wrong message type"); + ok( + !data.uaid, + "Should not send UAID in handshake without local subscriptions" + ); + this.serverSendMsg( + JSON.stringify({ + messageType: "hello", + status: 200, + uaid: userAgentID, + }) + ); + }, + onRegister(data) { + equal(data.messageType, "register", "Register: wrong message type"); + this.serverSendMsg( + JSON.stringify({ + messageType: "register", + status: 200, + channelID: data.channelID, + uaid: userAgentID, + pushEndpoint: "https://example.com/update/" + Math.random(), + }) + ); + }, + onUnregister(data) { + equal(data.code, 200, "Expected manual unregister reason"); + unregisterDone(); + }, + }); + }, + }); + + await Promise.all( + testRecords.map(test => + PushService.register({ + scope: test.scope, + originAttributes: ChromeUtils.originAttributesToSuffix( + test.originAttributes + ), + }) + ) + ); + + // Removes all the records, Excluding where `inIsolatedMozBrowser` is true. + await clearForPattern(testRecords, { inIsolatedMozBrowser: false }); + + // Removes the all the remaining records where `inIsolatedMozBrowser` is true. + await clearForPattern(testRecords, {}); + + equal(testRecords.length, 0, "Should remove all test records"); + await unregisterPromise; +}); -- cgit v1.2.3