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

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

Issue 266413002: Refactor pdf_scripting_api.js to remove the PDFMessagingHost in OOP PDF (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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/pdf.js ('k') | chrome/test/data/pdf/basic_plugin_test.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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' });
- }
-};
« no previous file with comments | « chrome/browser/resources/pdf/pdf.js ('k') | chrome/test/data/pdf/basic_plugin_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698