Index: chrome/browser/resources/pdf/pdf_scripting_api.js |
diff --git a/chrome/browser/resources/pdf/pdf_scripting_api.js b/chrome/browser/resources/pdf/pdf_scripting_api.js |
index 16dfcb17149727c772926e483093da8427cea3dc..69a0d531b39a031762a11354bb82651464a0b761 100644 |
--- a/chrome/browser/resources/pdf/pdf_scripting_api.js |
+++ b/chrome/browser/resources/pdf/pdf_scripting_api.js |
@@ -3,37 +3,40 @@ |
// found in the LICENSE file. |
/** |
- * Create a new PDFMessagingClient. This provides a scripting interface to |
+ * Create a new PDFScriptingAPI. This provides a scripting interface to |
* the PDF viewer so that it can be customized by things like print preview. |
- * @param {HTMLIFrameElement} iframe an iframe containing the PDF viewer. |
- * @param {Window} window the window of the page containing the iframe. |
+ * @param {Window} window the window of the page containing the pdf viewer. |
* @param {string} extensionUrl the url of the PDF extension. |
*/ |
-function PDFMessagingClient(iframe, window, extensionUrl) { |
- this.iframe_ = iframe; |
+function PDFScriptingAPI(window, extensionUrl) { |
this.extensionUrl_ = extensionUrl; |
- this.readyToReceive_ = false; |
+ this.readyToReceive = false; |
this.messageQueue_ = []; |
window.addEventListener('message', function(event) { |
+ if (event.origin != this.extensionUrl_) |
+ return; |
switch (event.data.type) { |
case 'readyToReceive': |
+ this.pdfWindow_ = event.source; |
this.flushPendingMessages_(); |
break; |
- case 'viewportChanged': |
- this.viewportChangedCallback_(event.data.pageX, |
- event.data.pageY, |
- event.data.pageWidth, |
- event.data.viewportWidth, |
- event.data.viewportHeight); |
+ case 'viewport': |
+ if (this.viewportChangedCallback_) |
+ this.viewportChangedCallback_(event.data.pageX, |
+ event.data.pageY, |
+ event.data.pageWidth, |
+ event.data.viewportWidth, |
+ event.data.viewportHeight); |
break; |
case 'documentLoaded': |
- this.loadCallback_(); |
+ if (this.loadCallback_) |
+ this.loadCallback_(); |
break; |
} |
}.bind(this), false); |
} |
-PDFMessagingClient.prototype = { |
+PDFScriptingAPI.prototype = { |
/** |
* @private |
* Send a message to the extension. If we try to send messages prior to the |
@@ -42,12 +45,12 @@ PDFMessagingClient.prototype = { |
* @param {MessageObject} the message to send. |
*/ |
sendMessage_: function(message) { |
- if (!this.readyToReceive_) { |
+ if (!this.readyToReceive) { |
this.messageQueue_.push(message); |
return; |
} |
- this.iframe_.contentWindow.postMessage(message, this.extensionUrl_); |
+ this.pdfWindow_.postMessage(message, this.extensionUrl_); |
}, |
/** |
@@ -55,10 +58,10 @@ PDFMessagingClient.prototype = { |
* Flushes all pending messages to the extension. |
*/ |
flushPendingMessages_: function() { |
- this.readyToReceive_ = true; |
+ this.readyToReceive = true; |
while (this.messageQueue_.length != 0) { |
- this.iframe_.contentWindow.postMessage(this.messageQueue_.shift(), |
- this.extensionUrl_); |
+ this.pdfWindow_.postMessage(this.messageQueue_.shift(), |
+ this.extensionUrl_); |
} |
}, |
@@ -131,7 +134,7 @@ function PDFCreateOutOfProcessPlugin(src) { |
var EXTENSION_URL = 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai'; |
var iframe = window.document.createElement('iframe'); |
iframe.setAttribute('src', EXTENSION_URL + '/index.html?' + src); |
- var client = new PDFMessagingClient(iframe, window, EXTENSION_URL); |
+ var client = new PDFScriptingAPI(window, EXTENSION_URL); |
// Add the functions to the iframe so that they can be called directly. |
iframe.setViewportChangedCallback = |
@@ -142,64 +145,3 @@ function PDFCreateOutOfProcessPlugin(src) { |
iframe.sendKeyEvent = client.sendKeyEvent.bind(client); |
return iframe; |
} |
- |
-/** |
- * Create a new PDFMessagingHost. This is the extension-side of the scripting |
- * interface to the PDF viewer. It handles requests from a page which contains |
- * a PDF viewer extension and translates them into actions on the viewer. |
- * @param {Window} window the window containing the PDF extension. |
- * @param {PDFViewer} pdfViewer the object which provides access to the viewer. |
- */ |
-function PDFMessagingHost(window, pdfViewer) { |
- this.window_ = window; |
- this.pdfViewer_ = pdfViewer; |
- this.viewport_ = pdfViewer.viewport; |
- |
- window.addEventListener('message', function(event) { |
- switch (event.data.type) { |
- case 'resetPrintPreviewMode': |
- this.pdfViewer_.resetPrintPreviewMode( |
- event.data.url, |
- event.data.grayscale, |
- event.data.pageNumbers, |
- event.data.modifiable); |
- |
- break; |
- case 'loadPreviewPage': |
- this.pdfViewer_.loadPreviewPage(event.data.url, event.data.index); |
- break; |
- } |
- }.bind(this), false); |
- |
- if (this.window_.parent != this.window_) |
- this.sendMessage_({type: 'readyToReceive'}); |
-} |
- |
-PDFMessagingHost.prototype = { |
- sendMessage_: function(message) { |
- if (this.window_.parent == this.window_) |
- return; |
- this.window_.parent.postMessage(message, '*'); |
- }, |
- |
- viewportChanged: function() { |
- var visiblePage = this.viewport_.getMostVisiblePage(); |
- var pageDimensions = this.viewport_.getPageScreenRect(visiblePage); |
- var size = this.viewport_.size; |
- |
- this.sendMessage_({ |
- type: 'viewportChanged', |
- pageX: pageDimensions.x, |
- pageY: pageDimensions.y, |
- pageWidth: pageDimensions.width, |
- viewportWidth: size.width, |
- viewportHeight: size.height, |
- }); |
- }, |
- |
- documentLoaded: function() { |
- if (this.window_.parent == this.window_) |
- return; |
- this.sendMessage_({ type: 'documentLoaded' }); |
- } |
-}; |