forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bug 1821408 - Add a test for testing SVG filters in pdf.js r=pdfjs-re…
…viewers,emilio,marco SVG filters weren't working correctly because of a mismatch between filter URI and document URI. The problem has been fixed in: mozilla/pdf.js#16153 and here's the test. Differential Revision: https://phabricator.services.mozilla.com/D172223
- Loading branch information
1 parent
41f6312
commit 8af8caa
Showing
3 changed files
with
96 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/* Any copyright is dedicated to the Public Domain. | ||
* http://creativecommons.org/publicdomain/zero/1.0/ */ | ||
|
||
const RELATIVE_DIR = "toolkit/components/pdfjs/test/"; | ||
const TESTROOT = "https://example.com/browser/" + RELATIVE_DIR; | ||
|
||
/** | ||
* Get the number of red pixels in the canvas. | ||
* @param {Object} browser | ||
* @returns {Object} | ||
*/ | ||
async function getRedPixels(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 = canvas | ||
.getContext("2d") | ||
.getImageData(0, 0, canvas.width, canvas.height).data; | ||
|
||
let redPixels = 0; | ||
let total = 0; | ||
|
||
for (let i = 0, ii = data.length; i < ii; i += 4) { | ||
const R = data[i]; | ||
const G = data[i + 1]; | ||
const B = data[i + 2]; | ||
|
||
if (R > 128 && R > 4 * G && R > 4 * B) { | ||
redPixels += 1; | ||
} | ||
total += 1; | ||
} | ||
|
||
return [redPixels, total]; | ||
}); | ||
} | ||
|
||
/** | ||
* Test that the pdf has the correct color thanks to the SVG filters. | ||
*/ | ||
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 BrowserTestUtils.withNewTab( | ||
{ gBrowser, url: "about:blank" }, | ||
async function(browser) { | ||
// check that PDF is opened with internal viewer | ||
await waitForPdfJSCanvas( | ||
browser, | ||
`${TESTROOT}file_pdfjs_transfer_map.pdf#zoom=100` | ||
); | ||
|
||
const [redPixels, total] = await getRedPixels(browser); | ||
Assert.ok( | ||
redPixels / total >= 0.1, | ||
`Not enough red pixels: only ${redPixels} / ${total} red pixels!` | ||
); | ||
} | ||
); | ||
}); |
Binary file not shown.