Index: chrome/browser/resources/pdf/pdf.js |
diff --git a/chrome/browser/resources/pdf/pdf.js b/chrome/browser/resources/pdf/pdf.js |
index 61dd1600f01b3e8c82e191763bc4fe2d7dc240d8..c3171f0b23588d2be51725f4d4e0701a9e682bc3 100644 |
--- a/chrome/browser/resources/pdf/pdf.js |
+++ b/chrome/browser/resources/pdf/pdf.js |
@@ -95,6 +95,7 @@ function PDFViewer(browserApi) { |
this.browserApi_ = browserApi; |
this.loadState_ = LoadState.LOADING; |
this.parentWindow_ = null; |
+ this.parentOrigin_ = null; |
this.delayedScriptingMessages_ = []; |
@@ -720,6 +721,7 @@ PDFViewer.prototype = { |
handleScriptingMessage: function(message) { |
if (this.parentWindow_ != message.source) { |
this.parentWindow_ = message.source; |
+ this.parentOrigin_ = message.origin; |
// Ensure that we notify the embedder if the document is loaded. |
if (this.loadState_ != LoadState.LOADING) |
this.sendDocumentLoadedMessage_(); |
@@ -806,11 +808,22 @@ PDFViewer.prototype = { |
* @param {Object} message the message to send. |
*/ |
sendScriptingMessage_: function(message) { |
- if (this.parentWindow_) |
- this.parentWindow_.postMessage(message, '*'); |
+ if (this.parentWindow_ && this.parentOrigin_) { |
+ var targetOrigin; |
+ // Only send data back to the embedder if it is from the same origin, |
+ // unless we're sending it to ourselves (which could happen in the case |
+ // of tests). We also allow documentLoaded messages through as this won't |
+ // leak important information. |
+ if (this.parentOrigin_ == window.location.origin) |
+ targetOrigin = this.parentOrigin_; |
+ else if (message.type == 'documentLoaded') |
+ targetOrigin = '*'; |
+ else |
+ targetOrigin = this.browserApi_.getStreamInfo().originalUrl; |
+ this.parentWindow_.postMessage(message, targetOrigin); |
+ } |
}, |
- |
/** |
* @type {Viewport} the viewport of the PDF viewer. |
*/ |