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 cacheable links.
*/
"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: [],
extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
components: [
{
type: SearchSERPTelemetryUtils.COMPONENTS.AD_CAROUSEL,
included: {
parent: {
selector: ".moz-carousel",
},
children: [
{
selector: ".moz-carousel-card",
countChildren: true,
},
],
related: {
selector: "button",
},
},
},
{
type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
included: {
parent: {
selector: ".moz_ad",
},
children: [
{
selector: ".multi-col",
type: SearchSERPTelemetryUtils.COMPONENTS.AD_SITELINK,
},
],
related: {
selector: "button",
},
},
excluded: {
parent: {
selector: ".rhs",
},
},
},
{
type: SearchSERPTelemetryUtils.COMPONENTS.INCONTENT_SEARCHBOX,
included: {
parent: {
selector: "form",
},
children: [
{
selector: "input",
},
],
related: {
selector: "div",
},
},
topDown: true,
},
{
type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
default: true,
},
],
},
];
add_setup(async function () {
SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
await waitForIdle();
// Enable local telemetry recording for the duration of the tests.
let oldCanRecord = Services.telemetry.canRecordExtended;
Services.telemetry.canRecordExtended = true;
registerCleanupFunction(async () => {
SearchSERPTelemetry.overrideSearchTelemetryForTests();
Services.telemetry.canRecordExtended = oldCanRecord;
resetTelemetry();
});
});
add_task(async function test_click_cached_page() {
let url = getSERPUrl("searchTelemetryAd_components_text.html");
let cacheableUrl =
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
await waitForPageWithAdImpressions();
let pageLoadPromise = BrowserTestUtils.waitForLocationChange(
gBrowser,
cacheableUrl
);
await BrowserTestUtils.synthesizeMouseAtCenter(
"a#non_ads_link",
{},
tab.linkedBrowser
);
await pageLoadPromise;
gBrowser.goBack();
await waitForPageWithAdImpressions();
pageLoadPromise = BrowserTestUtils.waitForLocationChange(
gBrowser,
cacheableUrl
);
await BrowserTestUtils.synthesizeMouseAtCenter(
"a#non_ads_link",
{},
tab.linkedBrowser
);
await pageLoadPromise;
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_SITELINK,
ads_loaded: "1",
ads_visible: "1",
ads_hidden: "0",
},
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "5",
ads_visible: "5",
ads_hidden: "0",
},
],
},
{
impression: {
provider: "example",
tagged: "true",
partner_code: "ff",
source: "tabhistory",
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_SITELINK,
ads_loaded: "1",
ads_visible: "1",
ads_hidden: "0",
},
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "5",
ads_visible: "5",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
});