Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
/**
* These tests load SERPs and click on both ad and non-ad links that can be
* redirected.
*/
"use strict";
const TEST_PROVIDER_INFO = [
{
telemetryId: "example",
searchPageRegexp:
/^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd_/,
queryParamNames: ["s"],
codeParamName: "abc",
taggedCodes: ["ff"],
adServerAttributes: ["mozAttr"],
nonAdsLinkRegexps: [
/^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd_nonAdsLink_redirect.html/,
],
extraAdServersRegexps: [
/^https:\/\/example\.com\/ad/,
/^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/redirect_ad/,
],
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_non_ads_link_redirected() {
resetTelemetry();
let url = getSERPUrl("searchTelemetryAd_components_text.html");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
await waitForPageWithAdImpressions();
let targetUrl = "https://example.com/hello_world";
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
tab.linkedBrowser,
true,
targetUrl
);
await BrowserTestUtils.synthesizeMouseAtCenter(
"#non_ads_link_redirected",
{},
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: "false",
is_signed_in: "false",
},
engagements: [
{
action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
target: SearchSERPTelemetryUtils.COMPONENTS.NON_ADS_LINK,
},
],
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "14",
ads_visible: "14",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
});
// If a provider does a re-direct and we open it in a new tab, we should
// record the click and have the correct number of engagements.
add_task(async function test_click_non_ads_link_redirected_new_tab() {
resetTelemetry();
let url = getSERPUrl("searchTelemetryAd_components_text.html");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
await waitForPageWithAdImpressions();
let redirectUrl =
getRootDirectory(gTestPath).replace(
) + "searchTelemetryAd_nonAdsLink_redirect.html";
let targetUrl = "https://example.com/hello_world";
let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser, targetUrl, true);
await SpecialPowers.spawn(tab.linkedBrowser, [redirectUrl], urls => {
content.document
.getElementById(["non_ads_link"])
.addEventListener("click", e => {
e.preventDefault();
content.window.open([urls], "_blank");
});
content.document.getElementById("non_ads_link").click();
});
let tab2 = await tabPromise;
assertSERPTelemetry([
{
impression: {
provider: "example",
tagged: "true",
partner_code: "ff",
source: "unknown",
is_shopping_page: "false",
is_private: "false",
shopping_tab_displayed: "false",
is_signed_in: "false",
},
engagements: [
{
action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
target: SearchSERPTelemetryUtils.COMPONENTS.NON_ADS_LINK,
},
],
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "14",
ads_visible: "14",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
BrowserTestUtils.removeTab(tab2);
});
// Some providers load a URL of a non ad within a subframe before loading the
// target website in the top level frame.
add_task(async function test_click_non_ads_link_redirect_non_top_level() {
resetTelemetry();
let url = getSERPUrl("searchTelemetryAd_components_text.html");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
await waitForPageWithAdImpressions();
let targetUrl = "https://example.com/hello_world";
let browserPromise = BrowserTestUtils.browserLoaded(
tab.linkedBrowser,
true,
targetUrl
);
await BrowserTestUtils.synthesizeMouseAtCenter(
"#non_ads_link_redirected_no_top_level",
{},
tab.linkedBrowser
);
await browserPromise;
assertSERPTelemetry([
{
impression: {
provider: "example",
tagged: "true",
partner_code: "ff",
source: "unknown",
is_shopping_page: "false",
is_private: "false",
shopping_tab_displayed: "false",
is_signed_in: "false",
},
engagements: [
{
action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
target: SearchSERPTelemetryUtils.COMPONENTS.NON_ADS_LINK,
},
],
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "14",
ads_visible: "14",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_multiple_redirects_non_ad_link() {
resetTelemetry();
let url = getSERPUrl("searchTelemetryAd_components_text.html");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
await waitForPageWithAdImpressions();
let targetUrl = "https://example.com/hello_world";
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
tab.linkedBrowser,
true,
targetUrl
);
await BrowserTestUtils.synthesizeMouseAtCenter(
"#non_ads_link_multiple_redirects",
{},
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: "false",
is_signed_in: "false",
},
engagements: [
{
action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
target: SearchSERPTelemetryUtils.COMPONENTS.NON_ADS_LINK,
},
],
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "14",
ads_visible: "14",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_click_ad_link_redirected() {
resetTelemetry();
let url = getSERPUrl("searchTelemetryAd_components_text.html");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
await waitForPageWithAdImpressions();
let targetUrl = "https://example.com/hello_world";
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
tab.linkedBrowser,
true,
targetUrl
);
await BrowserTestUtils.synthesizeMouseAtCenter(
"#ad_link_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: "false",
is_signed_in: "false",
},
engagements: [
{
action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
target: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
},
],
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "14",
ads_visible: "14",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_click_ad_link_redirected_new_tab() {
resetTelemetry();
let url = getSERPUrl("searchTelemetryAd_components_text.html");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
await waitForPageWithAdImpressions();
let targetUrl = "https://example.com/hello_world";
let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser, targetUrl, true);
await BrowserTestUtils.synthesizeMouseAtCenter(
"#ad_link_redirect",
{ button: 1 },
tab.linkedBrowser
);
let tab2 = await tabPromise;
assertSERPTelemetry([
{
impression: {
provider: "example",
tagged: "true",
partner_code: "ff",
source: "unknown",
is_shopping_page: "false",
is_private: "false",
shopping_tab_displayed: "false",
is_signed_in: "false",
},
engagements: [
{
action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
target: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
},
],
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "14",
ads_visible: "14",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
BrowserTestUtils.removeTab(tab2);
});