Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
const { PdfJsTelemetry } = ChromeUtils.importESModule(
"resource://pdf.js/PdfJsTelemetry.sys.mjs"
);
const { sinon } = ChromeUtils.importESModule(
);
const RELATIVE_DIR = "toolkit/components/pdfjs/test/";
const TESTROOT = "https://example.com/browser/" + RELATIVE_DIR;
Services.scriptloader.loadSubScript(
this
);
const commentPref = "pdfjs.enableComment";
const highlightPref = "pdfjs.enableHighlight";
const sandbox = sinon.createSandbox();
registerCleanupFunction(() => {
sandbox.restore();
});
const original = PdfJsTelemetry.report.bind(PdfJsTelemetry);
const resolvers = new Map();
sandbox.stub(PdfJsTelemetry, "report").callsFake(aData => {
const { type, data } = aData;
if (!type.includes("comment") || !data) {
return;
}
resolvers.get(type)?.resolve();
original(aData);
});
const getPromise = name => {
const resolver = Promise.withResolvers();
resolvers.set(name, resolver);
return resolver.promise;
};
let telemetryPromise;
async function enableComment(browser) {
await SpecialPowers.pushPrefEnv({
set: [
["pdfjs.annotationEditorMode", 0],
[commentPref, true],
[highlightPref, true],
],
});
await Services.fog.testFlushAllChildren();
Services.fog.testResetFOG();
await waitForPdfJSAllLayers(browser, TESTROOT + "file_pdfjs_test.pdf", [
["annotationEditorLayer", "annotationLayer", "textLayer", "canvasWrapper"],
]);
}
// Test telemetry for comment flow.
add_task(async function test_telemetry_no_comment() {
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "about:blank" },
async function (browser) {
await enableComment(browser);
Services.fog.testResetFOG();
telemetryPromise = getPromise("commentSidebar");
await clickOn(browser, "#editorCommentButton");
await waitForSelector(browser, "#editorCommentsSidebar");
await telemetryPromise;
await testTelemetryEventExtra(
Glean.pdfjsComment.sidebar,
[
{
comments_count: "0",
},
],
false
);
await waitForPdfJSClose(browser);
await SpecialPowers.popPrefEnv();
}
);
});
add_task(async function test_telemetry_one_comment() {
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "about:blank" },
async function (browser) {
await enableComment(browser);
await enableEditor(browser, "Highlight", 1);
const spanBox = await getSpanBox(browser, "In production");
await clickAt(
browser,
spanBox.x + 0.75 * spanBox.width,
spanBox.y + 0.5 * spanBox.height,
2
);
await waitForEditors(browser, ".highlightEditor", 1);
await Services.fog.testFlushAllChildren();
await clickOn(browser, "button.comment");
await waitForSelector(browser, "#commentManagerDialog");
await clickOn(browser, "#commentManagerTextInput");
await write(browser, "Hello Pdf.js World");
Services.fog.testResetFOG();
telemetryPromise = getPromise("comment");
await clickOn(browser, "#commentManagerSaveButton");
await telemetryPromise;
let value = Glean.pdfjsComment.edit.edited.testGetValue();
Assert.equal(value, 1, "Should have a comment");
Services.fog.testResetFOG();
telemetryPromise = getPromise("commentSidebar");
await clickOn(browser, "#editorCommentButton");
await waitForSelector(browser, "#editorCommentsSidebar");
await telemetryPromise;
await testTelemetryEventExtra(
Glean.pdfjsComment.sidebar,
[
{
comments_count: "1",
},
],
false
);
Services.fog.testResetFOG();
await clickOn(browser, "#editorCommentsSidebarList li:first-child");
telemetryPromise = getPromise("comment");
await clickOn(browser, "button.commentPopupDelete");
await telemetryPromise;
value = Glean.pdfjsComment.edit.deleted.testGetValue();
Assert.equal(value, 1, "Should have a deleted comment");
await waitForPdfJSClose(browser);
await SpecialPowers.popPrefEnv();
}
);
});