From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser/browser_asrouter_snippets_dismiss.js | 99 ++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 browser/components/newtab/test/browser/browser_asrouter_snippets_dismiss.js (limited to 'browser/components/newtab/test/browser/browser_asrouter_snippets_dismiss.js') diff --git a/browser/components/newtab/test/browser/browser_asrouter_snippets_dismiss.js b/browser/components/newtab/test/browser/browser_asrouter_snippets_dismiss.js new file mode 100644 index 0000000000..fb4387eb1d --- /dev/null +++ b/browser/components/newtab/test/browser/browser_asrouter_snippets_dismiss.js @@ -0,0 +1,99 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +/** + * Snippets endpoint has two snippets that share the same campaign id. + * We want to make sure that dismissing the snippet on the first about:newtab + * will clear the snippet on the next (preloaded) about:newtab. + */ + +const { ASRouter } = ChromeUtils.import( + "resource://activity-stream/lib/ASRouter.jsm" +); + +async function setup() { + await SpecialPowers.pushPrefEnv({ + set: [ + [ + "browser.newtabpage.activity-stream.asrouter.providers.snippets", + '{"id":"snippets","enabled":true,"type":"remote","url":"https://example.com/browser/browser/components/newtab/test/browser/snippet.json","updateCycleInMs":14400000}', + ], + ["browser.newtabpage.activity-stream.feeds.snippets", true], + // Disable onboarding, this would prevent snippets from showing up + [ + "browser.newtabpage.activity-stream.asrouter.providers.onboarding", + '{"id":"onboarding","type":"local","localProvider":"OnboardingMessageProvider","enabled":false,"exclude":[]}', + ], + // Ensure this is true, this is the main behavior we want to test for + ["browser.newtab.preload", true], + ], + }); +} + +add_task(async function test_campaign_dismiss() { + await setup(); + let tab1 = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: "about:home", + }); + await ContentTask.spawn(gBrowser.selectedBrowser, {}, async () => { + await ContentTaskUtils.waitForCondition( + () => content.document.querySelector(".activity-stream"), + `Should render Activity Stream` + ); + await ContentTaskUtils.waitForCondition( + () => + content.document.querySelector( + "#footer-asrouter-container .SimpleSnippet" + ), + "Should find the snippet inside the footer container" + ); + + content.document + .querySelector("#footer-asrouter-container .blockButton") + .click(); + + await ContentTaskUtils.waitForCondition( + () => + !content.document.querySelector( + "#footer-asrouter-container .SimpleSnippet" + ), + "Should wait for the snippet to block" + ); + }); + + ok( + ASRouter.state.messageBlockList.length, + "Should have the campaign blocked" + ); + + let tab2 = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: "about:newtab", + // This is important because the newtab is preloaded and doesn't behave + // like a regular page load + waitForLoad: false, + }); + + await ContentTask.spawn(gBrowser.selectedBrowser, {}, async () => { + await ContentTaskUtils.waitForCondition( + () => content.document.querySelector(".activity-stream"), + `Should render Activity Stream` + ); + let snippet = content.document.querySelector( + "#footer-asrouter-container .SimpleSnippet" + ); + Assert.equal( + snippet, + null, + "No snippets shown because campaign is blocked" + ); + }); + + BrowserTestUtils.removeTab(tab1); + BrowserTestUtils.removeTab(tab2); + await ASRouter.unblockMessageById(["10533", "10534"]); + await SpecialPowers.popPrefEnv(); +}); -- cgit v1.2.3