OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 'use strict'; | 5 'use strict'; |
6 | 6 |
7 /** | 7 /** |
8 * @return {number} Width of a scrollbar in pixels | 8 * @return {number} Width of a scrollbar in pixels |
9 */ | 9 */ |
10 function getScrollbarWidth() { | 10 function getScrollbarWidth() { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 /** | 77 /** |
78 * Creates a new PDFViewer. There should only be one of these objects per | 78 * Creates a new PDFViewer. There should only be one of these objects per |
79 * document. | 79 * document. |
80 * @constructor | 80 * @constructor |
81 * @param {!BrowserApi} browserApi An object providing an API to the browser. | 81 * @param {!BrowserApi} browserApi An object providing an API to the browser. |
82 */ | 82 */ |
83 function PDFViewer(browserApi) { | 83 function PDFViewer(browserApi) { |
84 this.browserApi_ = browserApi; | 84 this.browserApi_ = browserApi; |
85 this.loadState_ = LoadState.LOADING; | 85 this.loadState_ = LoadState.LOADING; |
86 this.parentWindow_ = null; | 86 this.parentWindow_ = null; |
| 87 this.parentOrigin_ = null; |
87 | 88 |
88 this.delayedScriptingMessages_ = []; | 89 this.delayedScriptingMessages_ = []; |
89 | 90 |
90 this.isPrintPreview_ = this.browserApi_.getStreamInfo().originalUrl.indexOf( | 91 this.isPrintPreview_ = this.browserApi_.getStreamInfo().originalUrl.indexOf( |
91 'chrome://print') == 0; | 92 'chrome://print') == 0; |
92 this.isMaterial_ = location.pathname.substring(1) === 'index-material.html'; | 93 this.isMaterial_ = location.pathname.substring(1) === 'index-material.html'; |
93 | 94 |
94 // The sizer element is placed behind the plugin element to cause scrollbars | 95 // The sizer element is placed behind the plugin element to cause scrollbars |
95 // to be displayed in the window. It is sized according to the document size | 96 // to be displayed in the window. It is sized according to the document size |
96 // of the pdf and zoom level. | 97 // of the pdf and zoom level. |
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 | 668 |
668 /** | 669 /** |
669 * Handle a scripting message from outside the extension (typically sent by | 670 * Handle a scripting message from outside the extension (typically sent by |
670 * PDFScriptingAPI in a page containing the extension) to interact with the | 671 * PDFScriptingAPI in a page containing the extension) to interact with the |
671 * plugin. | 672 * plugin. |
672 * @param {MessageObject} message the message to handle. | 673 * @param {MessageObject} message the message to handle. |
673 */ | 674 */ |
674 handleScriptingMessage: function(message) { | 675 handleScriptingMessage: function(message) { |
675 if (this.parentWindow_ != message.source) { | 676 if (this.parentWindow_ != message.source) { |
676 this.parentWindow_ = message.source; | 677 this.parentWindow_ = message.source; |
| 678 this.parentOrigin_ = message.origin; |
677 // Ensure that we notify the embedder if the document is loaded. | 679 // Ensure that we notify the embedder if the document is loaded. |
678 if (this.loadState_ != LoadState.LOADING) | 680 if (this.loadState_ != LoadState.LOADING) |
679 this.sendDocumentLoadedMessage_(); | 681 this.sendDocumentLoadedMessage_(); |
680 } | 682 } |
681 | 683 |
682 if (this.handlePrintPreviewScriptingMessage_(message)) | 684 if (this.handlePrintPreviewScriptingMessage_(message)) |
683 return; | 685 return; |
684 | 686 |
685 // Delay scripting messages from users of the scripting API until the | 687 // Delay scripting messages from users of the scripting API until the |
686 // document is loaded. This simplifies use of the APIs. | 688 // document is loaded. This simplifies use of the APIs. |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 return false; | 755 return false; |
754 }, | 756 }, |
755 | 757 |
756 /** | 758 /** |
757 * @private | 759 * @private |
758 * Send a scripting message outside the extension (typically to | 760 * Send a scripting message outside the extension (typically to |
759 * PDFScriptingAPI in a page containing the extension). | 761 * PDFScriptingAPI in a page containing the extension). |
760 * @param {Object} message the message to send. | 762 * @param {Object} message the message to send. |
761 */ | 763 */ |
762 sendScriptingMessage_: function(message) { | 764 sendScriptingMessage_: function(message) { |
763 if (this.parentWindow_) | 765 if (this.parentWindow_ && this.parentOrigin_) { |
764 this.parentWindow_.postMessage(message, '*'); | 766 var targetOrigin; |
| 767 // Only send data back to the embedder if it is from the same origin, |
| 768 // unless we're sending it to ourselves (which could happen in the case |
| 769 // of tests). We also allow documentLoaded messages through as this won't |
| 770 // leak important information. |
| 771 if (this.parentOrigin_ == window.location.origin) |
| 772 targetOrigin = this.parentOrigin_; |
| 773 else if (message.type == 'documentLoaded') |
| 774 targetOrigin = '*'; |
| 775 else |
| 776 targetOrigin = this.browserApi_.getStreamInfo().originalUrl; |
| 777 this.parentWindow_.postMessage(message, targetOrigin); |
| 778 } |
765 }, | 779 }, |
766 | 780 |
767 | |
768 /** | 781 /** |
769 * @type {Viewport} the viewport of the PDF viewer. | 782 * @type {Viewport} the viewport of the PDF viewer. |
770 */ | 783 */ |
771 get viewport() { | 784 get viewport() { |
772 return this.viewport_; | 785 return this.viewport_; |
773 }, | 786 }, |
774 | 787 |
775 /** | 788 /** |
776 * Each bookmark is an Object containing a: | 789 * Each bookmark is an Object containing a: |
777 * - title | 790 * - title |
778 * - page (optional) | 791 * - page (optional) |
779 * - array of children (themselves bookmarks) | 792 * - array of children (themselves bookmarks) |
780 * @type {Array} the top-level bookmarks of the PDF. | 793 * @type {Array} the top-level bookmarks of the PDF. |
781 */ | 794 */ |
782 get bookmarks() { | 795 get bookmarks() { |
783 return this.bookmarks_; | 796 return this.bookmarks_; |
784 } | 797 } |
785 }; | 798 }; |
OLD | NEW |