/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ /** * These tests load SERPs and click on links. */ "use strict"; const TEST_PROVIDER_INFO = [ { telemetryId: "example", searchPageRegexp: /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetry/, queryParamNames: ["s"], codeParamName: "abc", taggedCodes: ["ff"], adServerAttributes: ["mozAttr"], nonAdsLinkRegexps: [ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetry_redirect_with_js/, ], nonAdsLinkQueryParamNames: ["url"], extraAdServersRegexps: [/^https:\/\/example\.com\/ad/], shoppingTab: { regexp: "&page=shopping", selector: "nav a", inspectRegexpInSERP: true, }, components: [ { type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK, default: true, }, ], }, ]; add_setup(async function () { SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO); await waitForIdle(); registerCleanupFunction(async () => { SearchSERPTelemetry.overrideSearchTelemetryForTests(); resetTelemetry(); }); }); add_task(async function test_click_absolute_url_in_query_param() { resetTelemetry(); let url = getSERPUrl( "searchTelemetryAd_searchbox_with_redirecting_links.html" ); let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); await waitForPageWithAdImpressions(); let browserLoadedPromise = BrowserTestUtils.browserLoaded( tab.linkedBrowser, true ); await BrowserTestUtils.synthesizeMouseAtCenter( "#shopping-redirect-absolute-link", {}, tab.linkedBrowser ); await browserLoadedPromise; await waitForPageWithAdImpressions(); assertSERPTelemetry([ { impression: { provider: "example", tagged: "true", partner_code: "ff", source: "unknown", is_shopping_page: "false", is_private: "false", shopping_tab_displayed: "true", }, engagements: [ { action: SearchSERPTelemetryUtils.ACTIONS.CLICKED, target: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB, }, ], adImpressions: [ { component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB, ads_loaded: "1", ads_visible: "1", ads_hidden: "0", }, ], }, { impression: { provider: "example", tagged: "true", partner_code: "ff", source: "unknown", is_shopping_page: "true", is_private: "false", shopping_tab_displayed: "true", }, adImpressions: [ { component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB, ads_loaded: "1", ads_visible: "1", ads_hidden: "0", }, ], }, ]); BrowserTestUtils.removeTab(tab); // Reset state for other tests. SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO); await waitForIdle(); }); add_task(async function test_click_relative_href_in_query_param() { resetTelemetry(); let url = getSERPUrl( "searchTelemetryAd_searchbox_with_redirecting_links.html" ); let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); await waitForPageWithAdImpressions(); let browserLoadedPromise = BrowserTestUtils.browserLoaded( tab.linkedBrowser, true ); await BrowserTestUtils.synthesizeMouseAtCenter( "#shopping-redirect-relative-link", {}, tab.linkedBrowser ); await browserLoadedPromise; await waitForPageWithAdImpressions(); assertSERPTelemetry([ { impression: { provider: "example", tagged: "true", partner_code: "ff", source: "unknown", is_shopping_page: "false", is_private: "false", shopping_tab_displayed: "true", }, engagements: [ { action: SearchSERPTelemetryUtils.ACTIONS.CLICKED, target: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB, }, ], adImpressions: [ { component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB, ads_loaded: "1", ads_visible: "1", ads_hidden: "0", }, ], }, { impression: { provider: "example", tagged: "true", partner_code: "ff", source: "unknown", is_shopping_page: "true", is_private: "false", shopping_tab_displayed: "true", }, adImpressions: [ { component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB, ads_loaded: "1", ads_visible: "1", ads_hidden: "0", }, ], }, ]); BrowserTestUtils.removeTab(tab); // Reset state for other tests. SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO); await waitForIdle(); }); add_task(async function test_click_irrelevant_href_in_query_param() { resetTelemetry(); let url = getSERPUrl( "searchTelemetryAd_searchbox_with_redirecting_links.html" ); let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); await waitForPageWithAdImpressions(); let browserLoadedPromise = BrowserTestUtils.browserLoaded( tab.linkedBrowser, true, "https://example.org/foo/bar" ); await BrowserTestUtils.synthesizeMouseAtCenter( "#organic-redirect", {}, tab.linkedBrowser ); await browserLoadedPromise; assertSERPTelemetry([ { impression: { provider: "example", tagged: "true", partner_code: "ff", source: "unknown", is_shopping_page: "false", is_private: "false", shopping_tab_displayed: "true", }, engagements: [ { action: SearchSERPTelemetryUtils.ACTIONS.CLICKED, target: SearchSERPTelemetryUtils.COMPONENTS.NON_ADS_LINK, }, ], adImpressions: [ { component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB, ads_loaded: "1", ads_visible: "1", ads_hidden: "0", }, ], }, ]); BrowserTestUtils.removeTab(tab); // Reset state for other tests. SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO); await waitForIdle(); });