diff --git a/web/app_options.js b/web/app_options.js index caf2455ca..f65b637b6 100644 --- a/web/app_options.js +++ b/web/app_options.js @@ -265,6 +265,12 @@ if ( : "../build/pdf.sandbox.js", kind: OptionKind.VIEWER, }; +} else if (PDFJSDev.test("CHROME")) { + defaultOptions.sandboxBundleSrc = { + /** @type {string} */ + value: "../build/pdf.sandbox.js", + kind: OptionKind.VIEWER, + }; } const userOptions = Object.create(null); diff --git a/web/chromecom.js b/web/chromecom.js index df055fb17..f3dec140b 100644 --- a/web/chromecom.js +++ b/web/chromecom.js @@ -19,6 +19,7 @@ import { AppOptions } from "./app_options.js"; import { BasePreferences } from "./preferences.js"; import { DownloadManager } from "./download_manager.js"; import { GenericL10n } from "./genericl10n.js"; +import { GenericScripting } from "./generic_scripting.js"; if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("CHROME")) { throw new Error( @@ -428,6 +429,10 @@ class ChromeExternalServices extends DefaultExternalServices { static createL10n(options) { return new GenericL10n(navigator.language); } + + static get scripting() { + return new GenericScripting(); + } } PDFViewerApplication.externalServices = ChromeExternalServices; diff --git a/web/generic_scripting.js b/web/generic_scripting.js new file mode 100644 index 000000000..4c2f9164c --- /dev/null +++ b/web/generic_scripting.js @@ -0,0 +1,45 @@ +/* Copyright 2020 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { AppOptions } from "./app_options.js"; +import { loadScript } from "pdfjs-lib"; + +class GenericScripting { + constructor() { + this._ready = loadScript( + AppOptions.get("sandboxBundleSrc"), + /* removeScriptElement = */ true + ).then(() => { + return window.pdfjsSandbox.QuickJSSandbox(); + }); + } + + async createSandbox(data) { + const sandbox = await this._ready; + sandbox.create(data); + } + + async dispatchEventInSandbox(event) { + const sandbox = await this._ready; + sandbox.dispatchEvent(event); + } + + async destroySandbox() { + const sandbox = await this._ready; + sandbox.nukeSandbox(); + } +} + +export { GenericScripting }; diff --git a/web/genericcom.js b/web/genericcom.js index 0f914218d..abca71efc 100644 --- a/web/genericcom.js +++ b/web/genericcom.js @@ -14,11 +14,10 @@ */ import { DefaultExternalServices, PDFViewerApplication } from "./app.js"; -import { AppOptions } from "./app_options.js"; import { BasePreferences } from "./preferences.js"; import { DownloadManager } from "./download_manager.js"; import { GenericL10n } from "./genericl10n.js"; -import { loadScript } from "pdfjs-lib"; +import { GenericScripting } from "./generic_scripting.js"; if (typeof PDFJSDev !== "undefined" && !PDFJSDev.test("GENERIC")) { throw new Error( @@ -39,32 +38,6 @@ class GenericPreferences extends BasePreferences { } } -class GenericScripting { - constructor() { - this._ready = loadScript( - AppOptions.get("sandboxBundleSrc"), - /* removeScriptElement = */ true - ).then(() => { - return window.pdfjsSandbox.QuickJSSandbox(); - }); - } - - async createSandbox(data) { - const sandbox = await this._ready; - sandbox.create(data); - } - - async dispatchEventInSandbox(event) { - const sandbox = await this._ready; - sandbox.dispatchEvent(event); - } - - async destroySandbox() { - const sandbox = await this._ready; - sandbox.nukeSandbox(); - } -} - class GenericExternalServices extends DefaultExternalServices { static createDownloadManager(options) { return new DownloadManager();