summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/resources/pdf/main.js
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/chrome/browser/resources/pdf/main.js
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/chrome/browser/resources/pdf/main.js')
-rw-r--r--chromium/chrome/browser/resources/pdf/main.js81
1 files changed, 70 insertions, 11 deletions
diff --git a/chromium/chrome/browser/resources/pdf/main.js b/chromium/chrome/browser/resources/pdf/main.js
index 28e1726b30b..4b65231c650 100644
--- a/chromium/chrome/browser/resources/pdf/main.js
+++ b/chromium/chrome/browser/resources/pdf/main.js
@@ -2,16 +2,75 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import './elements/viewer-error-screen.js';
-import './elements/viewer-password-screen.js';
-import './elements/viewer-pdf-toolbar.js';
-import './elements/viewer-zoom-toolbar.js';
-import './elements/shared-vars.js';
-// <if expr="chromeos">
-import './elements/viewer-ink-host.js';
-import './elements/viewer-form-warning.js';
-// </if>
-
-import {main} from './main_util.js';
+import './pdf_viewer.js';
+
+import {BrowserApi, createBrowserApi} from './browser_api.js';
+
+/**
+ * Stores any pending messages received which should be passed to the
+ * PDFViewer when it is created.
+ * @type Array
+ */
+const pendingMessages = [];
+
+/**
+ * Handles events that are received prior to the PDFViewer being created.
+ * @param {Object} message A message event received.
+ */
+function handleScriptingMessage(message) {
+ pendingMessages.push(message);
+}
+
+/**
+ * Initialize the global PDFViewer and pass any outstanding messages to it.
+ * @param {!BrowserApi} browserApi
+ */
+function initViewer(browserApi) {
+ // PDFViewer will handle any messages after it is created.
+ window.removeEventListener('message', handleScriptingMessage, false);
+ const viewer = document.querySelector('#viewer');
+ viewer.init(browserApi);
+ while (pendingMessages.length > 0) {
+ viewer.handleScriptingMessage(pendingMessages.shift());
+ }
+ window.viewer = viewer;
+}
+
+/**
+ * Determine if the content settings allow PDFs to execute javascript.
+ * @param {!BrowserApi} browserApi
+ * @return {!Promise<!BrowserApi>}
+ */
+function configureJavaScriptContentSetting(browserApi) {
+ return new Promise((resolve, reject) => {
+ chrome.contentSettings.javascript.get(
+ {
+ 'primaryUrl': browserApi.getStreamInfo().originalUrl,
+ 'secondaryUrl': window.location.origin
+ },
+ (result) => {
+ browserApi.getStreamInfo().javascript = result.setting;
+ resolve(browserApi);
+ });
+ });
+}
+
+/**
+ * Entrypoint for starting the PDF viewer. This function obtains the browser
+ * API for the PDF and initializes the PDF Viewer.
+ */
+function main() {
+ // Set up an event listener to catch scripting messages which are sent prior
+ // to the PDFViewer being created.
+ window.addEventListener('message', handleScriptingMessage, false);
+ let chain = createBrowserApi();
+
+ // Content settings may not be present in test environments.
+ if (chrome.contentSettings) {
+ chain = chain.then(configureJavaScriptContentSetting);
+ }
+
+ chain.then(initViewer);
+}
main();