summaryrefslogtreecommitdiffstats
path: root/toolkit/components/pdfjs/test/browser_pdfjs_hcm.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/pdfjs/test/browser_pdfjs_hcm.js')
-rw-r--r--toolkit/components/pdfjs/test/browser_pdfjs_hcm.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_hcm.js b/toolkit/components/pdfjs/test/browser_pdfjs_hcm.js
new file mode 100644
index 0000000000..cc5f098f1e
--- /dev/null
+++ b/toolkit/components/pdfjs/test/browser_pdfjs_hcm.js
@@ -0,0 +1,104 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const RELATIVE_DIR = "toolkit/components/pdfjs/test/";
+const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR;
+
+/**
+ * Get the first and last pixels on the drawn canvas.
+ * @param {Object} browser
+ * @returns {Object}
+ */
+async function getFirstLastPixels(browser) {
+ return SpecialPowers.spawn(browser, [], async function () {
+ const { document } = content;
+ const canvas = document.querySelector("canvas");
+
+ Assert.ok(!!canvas, "We must have a canvas");
+
+ const data = Array.from(
+ canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height)
+ .data
+ );
+
+ return {
+ first: data.slice(0, 3),
+ last: data.slice(-4, -1),
+ };
+ });
+}
+
+/**
+ * Test that the pdf has the correct color depending on the high contrast mode.
+ */
+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"
+ );
+
+ info("Pref action: " + handlerInfo.preferredAction);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.display.document_color_use", 0],
+ ["browser.display.background_color", "#ff0000"],
+ ["browser.display.foreground_color", "#00ff00"],
+ ["browser.display.use_system_colors", false],
+ ],
+ });
+
+ await BrowserTestUtils.withNewTab(
+ { gBrowser, url: "about:blank" },
+ async function (browser) {
+ // check that PDF is opened with internal viewer
+ await waitForPdfJSCanvas(
+ browser,
+ `${TESTROOT}file_pdfjs_hcm.pdf#zoom=800`
+ );
+
+ const { first, last } = await getFirstLastPixels(browser);
+ // The first pixel must be black and not green.
+ Assert.deepEqual(first, [0, 0, 0]);
+
+ // The last pixel must be white and not red.
+ Assert.deepEqual(last, [255, 255, 255]);
+ }
+ );
+
+ // Enable HCM.
+ await SpecialPowers.pushPrefEnv({
+ set: [["ui.useAccessibilityTheme", 1]],
+ });
+
+ await BrowserTestUtils.withNewTab(
+ { gBrowser, url: "about:blank" },
+ async function (browser) {
+ // check that PDF is opened with internal viewer
+ await waitForPdfJSCanvas(
+ browser,
+ `${TESTROOT}file_pdfjs_hcm.pdf#zoom=800`
+ );
+
+ const { first, last } = await getFirstLastPixels(browser);
+ // The first pixel must be green.
+ Assert.deepEqual(first, [0, 255, 0]);
+
+ // The last pixel must be red.
+ Assert.deepEqual(last, [255, 0, 0]);
+ }
+ );
+});