102 lines
2.9 KiB
JavaScript
102 lines
2.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
https://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
NewTabContentPing: "resource://newtab/lib/NewTabContentPing.sys.mjs",
|
|
});
|
|
|
|
const MAX_SUBMISSION_DELAY = Services.prefs.getIntPref(
|
|
"browser.newtabpage.activity-stream.telemetry.privatePing.maxSubmissionDelayMs",
|
|
5000
|
|
);
|
|
|
|
add_setup(() => {
|
|
do_get_profile();
|
|
Services.fog.initializeFOG();
|
|
});
|
|
|
|
/**
|
|
* Tests that the recordEvent method will cause a delayed ping submission to be
|
|
* scheduled, and that the right extra fields are stripped from events.
|
|
*/
|
|
add_task(async function test_recordEvent_sanitizes_and_buffers() {
|
|
let ping = new NewTabContentPing();
|
|
|
|
// These fields are expected to be stripped before they get recorded in the
|
|
// event.
|
|
let sanitizedFields = {
|
|
newtab_visit_id: "some visit id",
|
|
tile_id: "some tile id",
|
|
matches_selected_topic: "not-set",
|
|
recommended_at: "1748877997039",
|
|
received_rank: 0,
|
|
event_source: "card",
|
|
};
|
|
|
|
// These fields are expected to survive the sanitization.
|
|
let expectedFields = {
|
|
section: "business",
|
|
section_position: "2",
|
|
position: "12",
|
|
selected_topics: "",
|
|
corpus_item_id: "7fc404a1-74ec-450b-8eef-4f52b45ec510",
|
|
topic: "business",
|
|
format: "medium-card",
|
|
scheduled_corpus_item_id: "40f9ba69-1288-4778-8cfa-937df633819c",
|
|
is_sponsored: "false",
|
|
is_section_followed: "false",
|
|
};
|
|
|
|
ping.recordEvent("click", {
|
|
// These should be sanitized out.
|
|
...sanitizedFields,
|
|
|
|
...expectedFields,
|
|
});
|
|
|
|
let extraMetrics = {
|
|
utcOffset: "1",
|
|
experimentBranch: "some-branch",
|
|
};
|
|
ping.scheduleSubmission(extraMetrics);
|
|
|
|
await GleanPings.newtabContent.testSubmission(
|
|
() => {
|
|
let [clickEvent] = Glean.newtabContent.click.testGetValue();
|
|
Assert.ok(clickEvent, "Found click event.");
|
|
for (let fieldName of Object.keys(sanitizedFields)) {
|
|
Assert.equal(
|
|
clickEvent.extra[fieldName],
|
|
undefined,
|
|
`Should not have gotten sanitized extra field: ${fieldName}`
|
|
);
|
|
}
|
|
for (let fieldName of Object.keys(expectedFields)) {
|
|
Assert.equal(
|
|
clickEvent.extra[fieldName],
|
|
expectedFields[fieldName],
|
|
`Should have recorded expected extra field: ${fieldName}`
|
|
);
|
|
}
|
|
|
|
for (let metricName of Object.keys(extraMetrics)) {
|
|
Assert.equal(
|
|
Glean.newtabContent[metricName].testGetValue(),
|
|
extraMetrics[metricName],
|
|
`Should have recorded metric: ${metricName}`
|
|
);
|
|
}
|
|
},
|
|
() => {
|
|
let delay = ping.testOnlyForceFlush();
|
|
Assert.greater(delay, 1000, "Picked a random value greater than 1000");
|
|
Assert.less(
|
|
delay,
|
|
MAX_SUBMISSION_DELAY,
|
|
"Picked a random value less than MAX_SUBMISSION_DELAY"
|
|
);
|
|
}
|
|
);
|
|
});
|