Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
/*
* Main tests for SearchSERPTelemetry - general engine visiting and link clicking.
*/
"use strict";
// Note: example.org is used for the SERP page, and example.com is used to serve
// the ads. This is done to simulate different domains like the real servers.
const TEST_PROVIDER_INFO = [
{
telemetryId: "example",
searchPageRegexp:
/^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetry(?:Ad)?.html/,
queryParamNames: ["s"],
codeParamName: "abc",
taggedCodes: ["ff"],
followOnParamNames: ["a"],
extraAdServersRegexps: [/^https:\/\/example\.com\/ad2?/],
components: [
{
type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
default: true,
},
],
},
];
function getSERPFollowOnUrl(page) {
return page + "?s=test&abc=ff&a=foo";
}
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_simple_search_page_visit() {
resetTelemetry();
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: getSERPUrl("searchTelemetry.html"),
},
async () => {
await assertSearchSourcesTelemetry(
{},
{
"browser.search.content.unknown": { "example:tagged:ff": 1 },
}
);
}
);
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",
},
abandonment: {
reason: SearchSERPTelemetryUtils.ABANDONMENTS.TAB_CLOSE,
},
},
]);
});
add_task(async function test_simple_search_page_visit_telemetry() {
resetTelemetry();
await BrowserTestUtils.withNewTab(
{
gBrowser,
/* URL must not be in the cache */
url: getSERPUrl("searchTelemetry.html") + `&random=${Math.random()}`,
},
async () => {
let scalars = {};
const key = "browser.search.data_transferred";
await TestUtils.waitForCondition(() => {
scalars =
Services.telemetry.getSnapshotForKeyedScalars("main", false).parent ||
{};
return key in scalars;
}, "should have the expected keyed scalars");
const scalar = scalars[key];
Assert.ok("example" in scalar, "correct telemetry category");
Assert.notEqual(scalars[key].example, 0, "bandwidth logged");
}
);
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",
},
abandonment: {
reason: SearchSERPTelemetryUtils.ABANDONMENTS.TAB_CLOSE,
},
},
]);
});
add_task(async function test_follow_on_visit() {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: getSERPFollowOnUrl(getPageUrl()),
},
async () => {
await assertSearchSourcesTelemetry(
{},
{
"browser.search.content.unknown": {
"example:tagged:ff": 1,
"example:tagged-follow-on:ff": 1,
},
}
);
}
);
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",
},
abandonment: {
reason: SearchSERPTelemetryUtils.ABANDONMENTS.TAB_CLOSE,
},
},
{
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",
},
abandonment: {
reason: SearchSERPTelemetryUtils.ABANDONMENTS.TAB_CLOSE,
},
},
]);
});
add_task(async function test_track_ad() {
resetTelemetry();
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
getSERPUrl("searchTelemetryAd.html")
);
await waitForPageWithAdImpressions();
await assertSearchSourcesTelemetry(
{},
{
"browser.search.content.unknown": { "example:tagged:ff": 1 },
"browser.search.withads.unknown": { "example:tagged": 1 },
}
);
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",
},
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "2",
ads_visible: "2",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_track_ad_organic() {
resetTelemetry();
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
getSERPUrl("searchTelemetryAd.html", true)
);
await waitForPageWithAdImpressions();
await assertSearchSourcesTelemetry(
{},
{
"browser.search.content.unknown": { "example:organic:none": 1 },
"browser.search.withads.unknown": { "example:organic": 1 },
}
);
assertSERPTelemetry([
{
impression: {
provider: "example",
tagged: "false",
partner_code: "",
source: "unknown",
is_shopping_page: "false",
is_private: "false",
shopping_tab_displayed: "false",
is_signed_in: "false",
},
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "2",
ads_visible: "2",
ads_hidden: "0",
},
],
},
]);
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_track_ad_new_window() {
resetTelemetry();
let win = await BrowserTestUtils.openNewBrowserWindow();
let url = getSERPUrl("searchTelemetryAd.html");
BrowserTestUtils.startLoadingURIString(win.gBrowser.selectedBrowser, url);
await BrowserTestUtils.browserLoaded(
win.gBrowser.selectedBrowser,
false,
url
);
await waitForPageWithAdImpressions();
await assertSearchSourcesTelemetry(
{},
{
"browser.search.content.unknown": { "example:tagged:ff": 1 },
"browser.search.withads.unknown": { "example:tagged": 1 },
}
);
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",
},
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "2",
ads_visible: "2",
ads_hidden: "0",
},
],
},
]);
await BrowserTestUtils.closeWindow(win);
});
add_task(async function test_track_ad_pages_without_ads() {
// Note: the above tests have already checked a page with no ad-urls.
resetTelemetry();
let tabs = [];
tabs.push(
await BrowserTestUtils.openNewForegroundTab(
gBrowser,
getSERPUrl("searchTelemetry.html")
)
);
await waitForPageWithAdImpressions();
tabs.push(
await BrowserTestUtils.openNewForegroundTab(
gBrowser,
getSERPUrl("searchTelemetryAd.html")
)
);
await waitForPageWithAdImpressions();
await assertSearchSourcesTelemetry(
{},
{
"browser.search.content.unknown": { "example:tagged:ff": 2 },
"browser.search.withads.unknown": { "example:tagged": 1 },
}
);
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",
},
},
{
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",
},
adImpressions: [
{
component: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
ads_loaded: "2",
ads_visible: "2",
ads_hidden: "0",
},
],
},
]);
for (let tab of tabs) {
BrowserTestUtils.removeTab(tab);
}
});