From 7aac2bf3614da4b4d41248f72753adbb92712576 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 8 Jul 2024 18:00:27 +0200 Subject: [PATCH] Create absolute filter-URLs when needed in `DOMFilterFactory` (issue 18406) This functionality is purposely limited to development mode and GENERIC builds, since it's unnecessary in e.g. the *built-in* Firefox PDF Viewer, and will only be used when a ``-element is actually present. *Please note:* We also have tests in mozilla-central that will *indirectly* ensure that relative filter-URLs work as intended in the Firefox PDF Viewer, see https://searchfox.org/mozilla-central/source/toolkit/components/pdfjs/test/browser_pdfjs_filters.js --- src/display/display_utils.js | 31 ++++++++++++++++++++++++++----- test/pdfs/.gitignore | 1 + test/pdfs/issue16287.pdf | Bin 0 -> 76570 bytes test/test_manifest.json | 8 ++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 test/pdfs/issue16287.pdf diff --git a/src/display/display_utils.js b/src/display/display_utils.js index 459df1f7c6b550..30964c9ab78c3d 100644 --- a/src/display/display_utils.js +++ b/src/display/display_utils.js @@ -49,6 +49,8 @@ class PixelsPerInch { * does the magic for us. */ class DOMFilterFactory extends BaseFilterFactory { + #baseUrl; + #_cache; #_defs; @@ -121,6 +123,25 @@ class DOMFilterFactory extends BaseFilterFactory { return [bufferR.join(","), bufferG.join(","), bufferB.join(",")]; } + #createUrl(id) { + if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { + if (this.#baseUrl === undefined) { + const url = this.#document.URL; + if (url === this.#document.baseURI) { + // No ``-element present, hence a relative URL should work. + this.#baseUrl = ""; + } else if (isDataScheme(url)) { + warn('#createUrl: ignore "data:"-URL for performance reasons.'); + this.#baseUrl = ""; + } else { + this.#baseUrl = url.split("#", 1)[0]; + } + } + return `url(${this.#baseUrl}#${id})`; + } + return `url(${id})`; + } + addFilter(maps) { if (!maps) { return "none"; @@ -146,7 +167,7 @@ class DOMFilterFactory extends BaseFilterFactory { // https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement const id = `g_${this.#docId}_transfer_map_${this.#id++}`; - const url = `url(#${id})`; + const url = this.#createUrl(id); this.#cache.set(maps, url); this.#cache.set(key, url); @@ -232,7 +253,7 @@ class DOMFilterFactory extends BaseFilterFactory { filter ); - info.url = `url(#${id})`; + info.url = this.#createUrl(id); return info.url; } @@ -254,7 +275,7 @@ class DOMFilterFactory extends BaseFilterFactory { } const id = `g_${this.#docId}_alpha_map_${this.#id++}`; - const url = `url(#${id})`; + const url = this.#createUrl(id); this.#cache.set(map, url); this.#cache.set(key, url); @@ -287,7 +308,7 @@ class DOMFilterFactory extends BaseFilterFactory { } const id = `g_${this.#docId}_luminosity_map_${this.#id++}`; - const url = `url(#${id})`; + const url = this.#createUrl(id); this.#cache.set(map, url); this.#cache.set(key, url); @@ -389,7 +410,7 @@ class DOMFilterFactory extends BaseFilterFactory { filter ); - info.url = `url(#${id})`; + info.url = this.#createUrl(id); return info.url; } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 13450e37cd32e1..211ffb9d0cb2b6 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -125,6 +125,7 @@ !issue7891_bc0.pdf !issue11242_reduced.pdf !issue16176.pdf +!issue16287.pdf !issue17064_readonly.pdf !issue11279.pdf !issue11362.pdf diff --git a/test/pdfs/issue16287.pdf b/test/pdfs/issue16287.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2a910231a8643ffb2a24266966fb3ddf2e4060ba GIT binary patch literal 76570 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