Skip to content

Commit

Permalink
[api-minor] Limit the PDFDocumentLoadingTask.onUnsupportedFeature f…
Browse files Browse the repository at this point in the history
…unctionality to GENERIC builds (PR 15758 follow-up)

This was deprecated in PR 15758 but it's unfortunately quite difficult to tell if third-party users are depending on this, e.g. to implement custom error reporting, and if so to what extent.
However, thanks to the pre-processor we can limit *most* of this code to GENERIC builds which still seem like a worthwhile change.

These changes reduce the bundle size of the Firefox PDF Viewer by 3.8 kB in total.
  • Loading branch information
Snuffleupagus committed Jan 1, 2023
1 parent 0c1fb4e commit 1a69d53
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 105 deletions.
12 changes: 7 additions & 5 deletions src/core/document.js
Expand Up @@ -222,11 +222,13 @@ class Page {
*/
_onSubStreamError(handler, reason, objId) {
if (this.evaluatorOptions.ignoreErrors) {
// Error(s) when reading one of the /Contents sub-streams -- sending
// unsupported feature notification and allow parsing to continue.
handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorContentSubStream,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error(s) when reading one of the /Contents sub-streams -- sending
// unsupported feature notification and allow parsing to continue.
handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorContentSubStream,
});
}
warn(`getContentStream - ignoring sub-stream (${objId}): "${reason}".`);
return;
}
Expand Down
145 changes: 89 additions & 56 deletions src/core/evaluator.js
Expand Up @@ -929,11 +929,13 @@ class PartialEvaluator {
return;
}
if (this.options.ignoreErrors) {
// Error(s) in the TilingPattern -- sending unsupported feature
// notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorTilingPattern,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error(s) in the TilingPattern -- sending unsupported feature
// notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorTilingPattern,
});
}
warn(`handleTilingType - ignoring pattern: "${reason}".`);
return;
}
Expand Down Expand Up @@ -975,11 +977,13 @@ class PartialEvaluator {
return translated;
})
.catch(reason => {
// Error in the font data -- sending unsupported feature
// notification.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontLoadType3,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error in the font data -- sending unsupported feature
// notification.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontLoadType3,
});
}
return new TranslatedFont({
loadedName: "g_font_error",
font: new ErrorFont(`Type3 font load error: ${reason}`),
Expand Down Expand Up @@ -1029,11 +1033,13 @@ class PartialEvaluator {
);

if (this.options.ignoreErrors) {
// Missing setFont operator before text rendering operator -- sending
// unsupported feature notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontState,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Missing setFont operator before text rendering operator -- sending
// unsupported feature notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontState,
});
}
warn(`ensureStateFont: "${reason}".`);
return;
}
Expand Down Expand Up @@ -1191,10 +1197,12 @@ class PartialEvaluator {
warn(`${partialMsg}.`);
return errorFont();
}
// Font not found -- sending unsupported feature notification.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontMissing,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Font not found -- sending unsupported feature notification.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontMissing,
});
}
warn(`${partialMsg} -- attempting to fallback to a default font.`);

// Falling back to a default font to avoid completely broken rendering,
Expand Down Expand Up @@ -1313,10 +1321,12 @@ class PartialEvaluator {
})
.catch(reason => {
// TODO fontCapability.reject?
// Error in the font data -- sending unsupported feature notification.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontTranslate,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error in the font data -- sending unsupported feature notification.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontTranslate,
});
}
warn(`loadFont - translateFont failed: "${reason}".`);

fontCapability.resolve(
Expand Down Expand Up @@ -1422,11 +1432,13 @@ class PartialEvaluator {
return null;
}
if (this.options.ignoreErrors) {
// Error(s) in the ColorSpace -- sending unsupported feature
// notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorColorSpace,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error(s) in the ColorSpace -- sending unsupported feature
// notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorColorSpace,
});
}
warn(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
return null;
}
Expand Down Expand Up @@ -1811,11 +1823,16 @@ class PartialEvaluator {
return;
}
if (self.options.ignoreErrors) {
// Error(s) in the XObject -- sending unsupported feature
// notification and allow rendering to continue.
self.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorXObject,
});
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("GENERIC")
) {
// Error(s) in the XObject -- sending unsupported feature
// notification and allow rendering to continue.
self.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorXObject,
});
}
warn(`getOperatorList - ignoring XObject: "${reason}".`);
return;
}
Expand Down Expand Up @@ -2130,11 +2147,16 @@ class PartialEvaluator {
return;
}
if (self.options.ignoreErrors) {
// Error(s) in the ExtGState -- sending unsupported feature
// notification and allow parsing/rendering to continue.
self.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorExtGState,
});
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("GENERIC")
) {
// Error(s) in the ExtGState -- sending unsupported feature
// notification and allow parsing/rendering to continue.
self.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorExtGState,
});
}
warn(`getOperatorList - ignoring ExtGState: "${reason}".`);
return;
}
Expand Down Expand Up @@ -2182,9 +2204,14 @@ class PartialEvaluator {
return;
}
if (self.options.ignoreErrors) {
self.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorMarkedContent,
});
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("GENERIC")
) {
self.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorMarkedContent,
});
}
warn(
`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`
);
Expand Down Expand Up @@ -2235,11 +2262,13 @@ class PartialEvaluator {
return;
}
if (this.options.ignoreErrors) {
// Error(s) in the OperatorList -- sending unsupported feature
// notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorOperatorList,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error(s) in the OperatorList -- sending unsupported feature
// notification and allow rendering to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorOperatorList,
});
}
warn(
`getOperatorList - ignoring errors during "${task.name}" ` +
`task: "${reason}".`
Expand Down Expand Up @@ -3734,11 +3763,13 @@ class PartialEvaluator {
return null;
}
if (this.options.ignoreErrors) {
// Error in the ToUnicode data -- sending unsupported feature
// notification and allow font parsing to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontToUnicode,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error in the ToUnicode data -- sending unsupported feature
// notification and allow font parsing to continue.
this.handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontToUnicode,
});
}
warn(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
return null;
}
Expand Down Expand Up @@ -4312,11 +4343,13 @@ class PartialEvaluator {
]);
} catch (reason) {
if (evaluatorOptions.ignoreErrors) {
// Error in the font data -- sending unsupported feature notification
// and allow glyph path building to continue.
handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontBuildPath,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// Error in the font data -- sending unsupported feature
// notification and allow glyph path building to continue.
handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.errorFontBuildPath,
});
}
warn(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`);
return;
}
Expand Down
8 changes: 5 additions & 3 deletions src/core/pattern.js
Expand Up @@ -82,9 +82,11 @@ class Pattern {
if (ex instanceof MissingDataException) {
throw ex;
}
handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.shadingPattern,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
handler.send("UnsupportedFeature", {
featureId: UNSUPPORTED_FEATURES.shadingPattern,
});
}
warn(ex);
return new DummyShading();
}
Expand Down
28 changes: 17 additions & 11 deletions src/display/api.js
Expand Up @@ -609,10 +609,12 @@ class PDFDocumentLoadingTask {
* @type {function}
*/
set onUnsupportedFeature(callback) {
deprecated(
"The PDFDocumentLoadingTask onUnsupportedFeature property will be removed in the future."
);
this.#onUnsupportedFeature = callback;
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
deprecated(
"The PDFDocumentLoadingTask onUnsupportedFeature property will be removed in the future."
);
this.#onUnsupportedFeature = callback;
}
}

/**
Expand Down Expand Up @@ -2748,10 +2750,12 @@ class WorkerTransport {
});
});

messageHandler.on(
"UnsupportedFeature",
this._onUnsupportedFeature.bind(this)
);
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
messageHandler.on(
"UnsupportedFeature",
this._onUnsupportedFeature.bind(this)
);
}

messageHandler.on("FetchBuiltInCMap", data => {
if (this.destroyed) {
Expand Down Expand Up @@ -2783,10 +2787,12 @@ class WorkerTransport {
}

_onUnsupportedFeature({ featureId }) {
if (this.destroyed) {
return; // Ignore any pending requests if the worker was terminated.
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
if (this.destroyed) {
return; // Ignore any pending requests if the worker was terminated.
}
this.loadingTask.onUnsupportedFeature?.(featureId);
}
this.loadingTask.onUnsupportedFeature?.(featureId);
}

getData() {
Expand Down
24 changes: 16 additions & 8 deletions src/display/font_loader.js
Expand Up @@ -30,7 +30,9 @@ class FontLoader {
ownerDocument = globalThis.document,
styleElement = null, // For testing only.
}) {
this._onUnsupportedFeature = onUnsupportedFeature;
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
this._onUnsupportedFeature = onUnsupportedFeature;
}
this._document = ownerDocument;

this.nativeFontFaces = [];
Expand Down Expand Up @@ -88,9 +90,11 @@ class FontLoader {
try {
await nativeFontFace.loaded;
} catch (ex) {
this._onUnsupportedFeature({
featureId: UNSUPPORTED_FEATURES.errorFontLoadNative,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
this._onUnsupportedFeature({
featureId: UNSUPPORTED_FEATURES.errorFontLoadNative,
});
}
warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);

// When font loading failed, fall back to the built-in font renderer.
Expand Down Expand Up @@ -340,7 +344,9 @@ class FontFaceObject {
this.isEvalSupported = isEvalSupported !== false;
this.disableFontFace = disableFontFace === true;
this.ignoreErrors = ignoreErrors === true;
this._onUnsupportedFeature = onUnsupportedFeature;
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
this._onUnsupportedFeature = onUnsupportedFeature;
}
this.fontRegistry = fontRegistry;
}

Expand Down Expand Up @@ -403,9 +409,11 @@ class FontFaceObject {
if (!this.ignoreErrors) {
throw ex;
}
this._onUnsupportedFeature({
featureId: UNSUPPORTED_FEATURES.errorFontGetPath,
});
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
this._onUnsupportedFeature({
featureId: UNSUPPORTED_FEATURES.errorFontGetPath,
});
}
warn(`getPathGenerator - ignoring character: "${ex}".`);

return (this.compiledGlyphs[character] = function (c, size) {
Expand Down

0 comments on commit 1a69d53

Please sign in to comment.