Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: chrome/browser/resources/pdf/main.js

Issue 823813002: Modify pdf_scripting_api.js to support postMessage using BrowserPlugin (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/pdf/index.html ('k') | chrome/browser/resources/pdf/pdf.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
})();
« no previous file with comments | « chrome/browser/resources/pdf/index.html ('k') | chrome/browser/resources/pdf/pdf.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698