| Index: chrome/browser/resources/pdf/main.js
|
| diff --git a/chrome/browser/resources/pdf/main.js b/chrome/browser/resources/pdf/main.js
|
| index cb7f0732ba92f2ae69adb128f1e8b635e064a479..47d795098f8d97c6788135d4a1090f4e899a89f4 100644
|
| --- a/chrome/browser/resources/pdf/main.js
|
| +++ b/chrome/browser/resources/pdf/main.js
|
| @@ -10,47 +10,84 @@
|
| */
|
| var viewer;
|
|
|
| -/**
|
| - * Entrypoint for starting the PDF viewer. This function obtains the details
|
| - * of the PDF 'stream' (the data that points to the PDF) and constructs a
|
| - * PDFViewer object with it.
|
| - */
|
| -(function main() {
|
| - // If the viewer is started from the browser plugin, the view ID will be
|
| - // passed in which identifies the instance of the plugin.
|
| - var params = window.location.search.substring(1).split('=');
|
| - if (params.length == 2 && params[0] == 'id') {
|
| - var viewId = params[1];
|
| -
|
| - // Send a message to the background page to obtain the stream details. It
|
| - // will run the callback function passed in to initialize the viewer.
|
| - chrome.runtime.sendMessage(
|
| - 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
|
| - {viewId: viewId},
|
| - function(streamDetails) { viewer = new PDFViewer(streamDetails); });
|
| - return;
|
| +
|
| +(function() {
|
| + /**
|
| + * Stores any pending messages received which should be passed to the
|
| + * PDFViewer when it is created.
|
| + * @type Array
|
| + */
|
| + var 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);
|
| }
|
|
|
| - // The viewer may be started directly by passing in the URL of the PDF to load
|
| - // as the query string. This is used for print preview in particular. The URL
|
| - // of this page will be of the form
|
| - // 'chrome-extension://<extension id>?<pdf url>'. We pull out the <pdf url>
|
| - // part here.
|
| - var url = window.location.search.substring(1);
|
| - var streamDetails = {
|
| - streamUrl: url,
|
| - originalUrl: url,
|
| - responseHeaders: '',
|
| - embedded: window.parent != window,
|
| - tabId: -1
|
| - };
|
| - if (!chrome.tabs) {
|
| + /**
|
| + * Initialize the global PDFViewer and pass any outstanding messages to it.
|
| + * @param {Object} streamDetails The stream object which points to the data
|
| + * contained in the PDF.
|
| + */
|
| + function initViewer(streamDetails) {
|
| + // PDFViewer will handle any messages after it is created.
|
| + window.removeEventListener('message', handleScriptingMessage, false);
|
| viewer = new PDFViewer(streamDetails);
|
| - return;
|
| + while (pendingMessages.length > 0)
|
| + viewer.handleScriptingMessage(pendingMessages.shift());
|
| }
|
| - chrome.tabs.getCurrent(function(tab) {
|
| - if (tab && tab.id != undefined)
|
| - streamDetails.tabId = tab.id;
|
| - viewer = new PDFViewer(streamDetails);
|
| - });
|
| +
|
| + /**
|
| + * Entrypoint for starting the PDF viewer. This function obtains the details
|
| + * of the PDF 'stream' (the data that points to 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);
|
| +
|
| + // If the viewer is started from the browser plugin, the view ID will be
|
| + // passed in which identifies the instance of the plugin.
|
| + var params = window.location.search.substring(1).split('=');
|
| + if (params.length == 2 && params[0] == 'id') {
|
| + var viewId = params[1];
|
| +
|
| + // Send a message to the background page to obtain the stream details. It
|
| + // will run the callback function passed in to initialize the viewer.
|
| + chrome.runtime.sendMessage(
|
| + 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
|
| + {viewId: viewId},
|
| + initViewer);
|
| + return;
|
| + }
|
| +
|
| + // The viewer may be started directly by passing in the URL of the PDF to
|
| + // load as the query string. This is used for print preview in particular.
|
| + // The URL of this page will be of the form
|
| + // 'chrome-extension://<extension id>?<pdf url>'. We pull out the <pdf url>
|
| + // part here.
|
| + var url = window.location.search.substring(1);
|
| + var streamDetails = {
|
| + streamUrl: url,
|
| + originalUrl: url,
|
| + responseHeaders: '',
|
| + embedded: window.parent != window,
|
| + tabId: -1
|
| + };
|
| + if (!chrome.tabs) {
|
| + initViewer(streamDetails);
|
| + return;
|
| + }
|
| + chrome.tabs.getCurrent(function(tab) {
|
| + if (tab && tab.id != undefined)
|
| + streamDetails.tabId = tab.id;
|
| + initViewer(streamDetails);
|
| + });
|
| + }
|
| +
|
| + main();
|
| })();
|
|
|