[GENERIC viewer] Warn about AppOptions being overridden by Preferences during loading

Currently any AppOptions set using e.g. the "webviewerloaded" event listener can/will by default be overridden when the Preferences are read.
To avoid that happening the "disablePreferences"-option can be used, however unless it's been explicitly set all non-default AppOptions will be silently ignored. This patch thus attempts to improve the current situation somewhat, for third-party implementations, by logging a warning in the console when this happens.
This commit is contained in:
Jonas Jenwald 2021-09-22 13:26:17 +02:00
parent 6381158855
commit 96b38f6cbd
2 changed files with 20 additions and 6 deletions

View File

@ -301,14 +301,21 @@ const PDFViewerApplication = {
*/ */
async _readPreferences() { async _readPreferences() {
if ( if (
(typeof PDFJSDev === "undefined" || typeof PDFJSDev === "undefined" ||
PDFJSDev.test("!PRODUCTION || GENERIC")) && PDFJSDev.test("!PRODUCTION || GENERIC")
AppOptions.get("disablePreferences")
) { ) {
if (AppOptions.get("disablePreferences")) {
// Give custom implementations of the default viewer a simpler way to // Give custom implementations of the default viewer a simpler way to
// opt-out of having the `Preferences` override existing `AppOptions`. // opt-out of having the `Preferences` override existing `AppOptions`.
return; return;
} }
if (AppOptions._hasUserOptions()) {
console.warn(
"_readPreferences: The Preferences may override manually set AppOptions; " +
'please use the "disablePreferences"-option in order to prevent that.'
);
}
}
try { try {
AppOptions.setAll(await this.preferences.getAll()); AppOptions.setAll(await this.preferences.getAll());
} catch (reason) { } catch (reason) {

View File

@ -379,6 +379,13 @@ class AppOptions {
static remove(name) { static remove(name) {
delete userOptions[name]; delete userOptions[name];
} }
/**
* @ignore
*/
static _hasUserOptions() {
return Object.keys(userOptions).length > 0;
}
} }
export { AppOptions, compatibilityParams, OptionKind }; export { AppOptions, compatibilityParams, OptionKind };