diff options
Diffstat (limited to 'toolkit/components/pdfjs/test/browser_pdfjs_editing_contextmenu.js')
-rw-r--r-- | toolkit/components/pdfjs/test/browser_pdfjs_editing_contextmenu.js | 140 |
1 files changed, 95 insertions, 45 deletions
diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_editing_contextmenu.js b/toolkit/components/pdfjs/test/browser_pdfjs_editing_contextmenu.js index d857bb6aac..779a3a6ad4 100644 --- a/toolkit/components/pdfjs/test/browser_pdfjs_editing_contextmenu.js +++ b/toolkit/components/pdfjs/test/browser_pdfjs_editing_contextmenu.js @@ -32,9 +32,9 @@ async function openContextMenuAt(browser, x, y) { * Open a context menu and get the pdfjs entries * @param {Object} browser * @param {Object} box - * @returns {Map<string,HTMLElement>} the pdfjs menu entries. + * @returns {Promise<Map<string,HTMLElement>>} the pdfjs menu entries. */ -async function getContextMenuItems(browser, box) { +function getContextMenuItems(browser, box) { return new Promise(resolve => { setTimeout(async () => { const { x, y, width, height } = box; @@ -48,6 +48,7 @@ async function getContextMenuItems(browser, box) { "context-pdfjs-delete", "context-pdfjs-selectall", "context-sep-pdfjs-selectall", + "context-pdfjs-highlight-selection", ]; await openContextMenuAt(browser, x + width / 2, y + height / 2); @@ -68,7 +69,7 @@ async function getContextMenuItems(browser, box) { * and returs the pdfjs menu entries. * @param {Object} browser * @param {string} selector - * @returns {Map<string,HTMLElement>} the pdfjs menu entries. + * @returns {Promise<Map<string,HTMLElement>>} the pdfjs menu entries. */ async function getContextMenuItemsOn(browser, selector) { const box = await SpecialPowers.spawn( @@ -129,35 +130,36 @@ function assertMenuitems(menuitems, expected) { elmt => !elmt.id.includes("-sep-") && !elmt.hidden && - elmt.getAttribute("disabled") === "false" + ["", "false"].includes(elmt.getAttribute("disabled")) ) .map(elmt => elmt.id), expected ); } -// Text copy, paste, undo, redo, delete and select all in using the context -// menu. -add_task(async function test() { - let mimeService = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService); - let handlerInfo = mimeService.getFromTypeAndExtension( - "application/pdf", - "pdf" - ); - - // Make sure pdf.js is the default handler. - is( - handlerInfo.alwaysAskBeforeHandling, - false, - "pdf handler defaults to always-ask is false" - ); - is( - handlerInfo.preferredAction, - Ci.nsIHandlerInfo.handleInternally, - "pdf handler defaults to internal" +async function waitAndCheckEmptyContextMenu(browser) { + // check that PDF is opened with internal viewer + await waitForPdfJSAllLayers(browser, TESTROOT + "file_pdfjs_test.pdf", [ + ["annotationEditorLayer", "annotationLayer", "textLayer", "canvasWrapper"], + ["annotationEditorLayer", "textLayer", "canvasWrapper"], + ]); + + const spanBox = await getSpanBox(browser, "and found references"); + const menuitems = await getContextMenuItems(browser, spanBox); + + // Nothing have been edited, hence the context menu doesn't contain any + // pdf entries. + Assert.ok( + [...menuitems.values()].every(elmt => elmt.hidden), + "No visible pdf menuitem" ); + await hideContextMenu(browser); +} - info("Pref action: " + handlerInfo.preferredAction); +// Text copy, paste, undo, redo, delete and select all in using the context +// menu. +add_task(async function test_copy_paste_undo_redo() { + makePDFJSHandler(); await BrowserTestUtils.withNewTab( { gBrowser, url: "about:blank" }, @@ -168,27 +170,8 @@ add_task(async function test() { set: [["pdfjs.annotationEditorMode", 0]], }); - // check that PDF is opened with internal viewer - await waitForPdfJSAllLayers(browser, TESTROOT + "file_pdfjs_test.pdf", [ - [ - "annotationEditorLayer", - "annotationLayer", - "textLayer", - "canvasWrapper", - ], - ["annotationEditorLayer", "textLayer", "canvasWrapper"], - ]); - + await waitAndCheckEmptyContextMenu(browser); const spanBox = await getSpanBox(browser, "and found references"); - let menuitems = await getContextMenuItems(browser, spanBox); - - // Nothing have been edited, hence the context menu doesn't contain any - // pdf entries. - Assert.ok( - [...menuitems.values()].every(elmt => elmt.hidden), - "No visible pdf menuitem" - ); - await hideContextMenu(browser); await enableEditor(browser, "FreeText"); await addFreeText(browser, "hello", spanBox); @@ -211,7 +194,7 @@ add_task(async function test() { Assert.equal(await countElements(browser, ".selectedEditor"), 0); - menuitems = await getContextMenuItems(browser, spanBox); + let menuitems = await getContextMenuItems(browser, spanBox); assertMenuitems(menuitems, [ "context-pdfjs-undo", // Last created editor is undoable "context-pdfjs-selectall", // and selectable. @@ -374,6 +357,73 @@ add_task(async function test() { await SpecialPowers.spawn(browser, [], async function () { var viewer = content.wrappedJSObject.PDFViewerApplication; + viewer.pdfDocument.annotationStorage.resetModified(); + await viewer.close(); + }); + } + ); +}); + +add_task(async function test_highlight_selection() { + makePDFJSHandler(); + + await BrowserTestUtils.withNewTab( + { gBrowser, url: "about:blank" }, + async function (browser) { + await SpecialPowers.pushPrefEnv({ + set: [ + ["pdfjs.annotationEditorMode", 0], + ["pdfjs.enableHighlightEditor", true], + ], + }); + + await waitAndCheckEmptyContextMenu(browser); + const spanBox = await getSpanBox(browser, "and found references"); + + const changePromise = BrowserTestUtils.waitForContentEvent( + browser, + "annotationeditorstateschanged", + false, + null, + true + ); + await clickAt( + browser, + spanBox.x + spanBox.width / 2, + spanBox.y + spanBox.height / 2, + 2 + ); + await changePromise; + await TestUtils.waitForTick(); + + const mozBox = await getSpanBox(browser, "Mozilla automated testing"); + const menuitems = await getContextMenuItems(browser, mozBox); + + assertMenuitems(menuitems, ["context-pdfjs-highlight-selection"]); + + const telemetryPromise = BrowserTestUtils.waitForContentEvent( + browser, + "reporttelemetry", + false, + null, + true + ); + await clickOnItem( + browser, + menuitems, + "context-pdfjs-highlight-selection" + ); + await telemetryPromise; + + Assert.equal( + await countElements(browser, ".highlightEditor"), + 1, + "An highlight editor must have been added" + ); + + await SpecialPowers.spawn(browser, [], async function () { + var viewer = content.wrappedJSObject.PDFViewerApplication; + viewer.pdfDocument.annotationStorage.resetModified(); await viewer.close(); }); } |