// Copyright 2014 The Chromium Authors. All rights reserved. // 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-page-indicator.js'; import './elements/viewer-password-screen.js'; import './elements/viewer-pdf-toolbar.js'; import './elements/viewer-zoom-toolbar.js'; import './elements/shared-vars.js'; // import './elements/viewer-ink-host.js'; import './elements/viewer-form-warning.js'; // import {BrowserApi, createBrowserApi} from './browser_api.js'; import {PDFViewer} from './pdf_viewer.js'; /** * Global PDFViewer object, accessible for testing. * * @type Object */ window.viewer = null; /** * 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); window.viewer = new PDFViewer(browserApi); while (pendingMessages.length > 0) { window.viewer.handleScriptingMessage(pendingMessages.shift()); } } /** * Determine if the content settings allow PDFs to execute javascript. * * @param {!BrowserApi} browserApi * @return {!Promise} */ 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 constructs a PDFViewer object with it. */ 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();