Skip to content

Commit

Permalink
Create absolute filter-URLs when needed in DOMFilterFactory (issue …
Browse files Browse the repository at this point in the history
…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 `<base>`-element is actually present.

*Please note:* We enforce relative filter-URLs when running tests, such that we test the same code as used in the Firefox PDF Viewer.
  • Loading branch information
Snuffleupagus committed Jul 10, 2024
1 parent 7ffea2f commit 4905386
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions src/display/display_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class PixelsPerInch {
* does the magic for us.
*/
class DOMFilterFactory extends BaseFilterFactory {
#baseUrl;

#_cache;

#_defs;
Expand Down Expand Up @@ -121,6 +123,28 @@ class DOMFilterFactory extends BaseFilterFactory {
return [bufferR.join(","), bufferG.join(","), bufferB.join(",")];
}

#createUrl(id) {
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("GENERIC && !TESTING")
) {
if (this.#baseUrl === undefined) {
const url = this.#document.URL;
if (url === this.#document.baseURI) {
// No `<base>`-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";
Expand All @@ -146,7 +170,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);

Expand Down Expand Up @@ -232,7 +256,7 @@ class DOMFilterFactory extends BaseFilterFactory {
filter
);

info.url = `url(#${id})`;
info.url = this.#createUrl(id);
return info.url;
}

Expand All @@ -254,7 +278,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);

Expand Down Expand Up @@ -287,7 +311,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);

Expand Down Expand Up @@ -389,7 +413,7 @@ class DOMFilterFactory extends BaseFilterFactory {
filter
);

info.url = `url(#${id})`;
info.url = this.#createUrl(id);
return info.url;
}

Expand Down

0 comments on commit 4905386

Please sign in to comment.