| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 /** | 88 /** |
| 89 * Creates a new PDFViewer. There should only be one of these objects per | 89 * Creates a new PDFViewer. There should only be one of these objects per |
| 90 * document. | 90 * document. |
| 91 * @constructor | 91 * @constructor |
| 92 * @param {!BrowserApi} browserApi An object providing an API to the browser. | 92 * @param {!BrowserApi} browserApi An object providing an API to the browser. |
| 93 */ | 93 */ |
| 94 function PDFViewer(browserApi) { | 94 function PDFViewer(browserApi) { |
| 95 this.browserApi_ = browserApi; | 95 this.browserApi_ = browserApi; |
| 96 this.loadState_ = LoadState.LOADING; | 96 this.loadState_ = LoadState.LOADING; |
| 97 this.parentWindow_ = null; | 97 this.parentWindow_ = null; |
| 98 this.parentOrigin_ = null; |
| 98 | 99 |
| 99 this.delayedScriptingMessages_ = []; | 100 this.delayedScriptingMessages_ = []; |
| 100 | 101 |
| 101 this.isPrintPreview_ = this.browserApi_.getStreamInfo().originalUrl.indexOf( | 102 this.isPrintPreview_ = this.browserApi_.getStreamInfo().originalUrl.indexOf( |
| 102 'chrome://print') == 0; | 103 'chrome://print') == 0; |
| 103 this.isMaterial_ = location.pathname.substring(1) === 'index-material.html'; | 104 this.isMaterial_ = location.pathname.substring(1) === 'index-material.html'; |
| 104 | 105 |
| 105 // The sizer element is placed behind the plugin element to cause scrollbars | 106 // The sizer element is placed behind the plugin element to cause scrollbars |
| 106 // to be displayed in the window. It is sized according to the document size | 107 // to be displayed in the window. It is sized according to the document size |
| 107 // of the pdf and zoom level. | 108 // of the pdf and zoom level. |
| (...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 | 716 |
| 716 /** | 717 /** |
| 717 * Handle a scripting message from outside the extension (typically sent by | 718 * Handle a scripting message from outside the extension (typically sent by |
| 718 * PDFScriptingAPI in a page containing the extension) to interact with the | 719 * PDFScriptingAPI in a page containing the extension) to interact with the |
| 719 * plugin. | 720 * plugin. |
| 720 * @param {MessageObject} message the message to handle. | 721 * @param {MessageObject} message the message to handle. |
| 721 */ | 722 */ |
| 722 handleScriptingMessage: function(message) { | 723 handleScriptingMessage: function(message) { |
| 723 if (this.parentWindow_ != message.source) { | 724 if (this.parentWindow_ != message.source) { |
| 724 this.parentWindow_ = message.source; | 725 this.parentWindow_ = message.source; |
| 726 this.parentOrigin_ = message.origin; |
| 725 // Ensure that we notify the embedder if the document is loaded. | 727 // Ensure that we notify the embedder if the document is loaded. |
| 726 if (this.loadState_ != LoadState.LOADING) | 728 if (this.loadState_ != LoadState.LOADING) |
| 727 this.sendDocumentLoadedMessage_(); | 729 this.sendDocumentLoadedMessage_(); |
| 728 } | 730 } |
| 729 | 731 |
| 730 if (this.handlePrintPreviewScriptingMessage_(message)) | 732 if (this.handlePrintPreviewScriptingMessage_(message)) |
| 731 return; | 733 return; |
| 732 | 734 |
| 733 // Delay scripting messages from users of the scripting API until the | 735 // Delay scripting messages from users of the scripting API until the |
| 734 // document is loaded. This simplifies use of the APIs. | 736 // document is loaded. This simplifies use of the APIs. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 return false; | 803 return false; |
| 802 }, | 804 }, |
| 803 | 805 |
| 804 /** | 806 /** |
| 805 * @private | 807 * @private |
| 806 * Send a scripting message outside the extension (typically to | 808 * Send a scripting message outside the extension (typically to |
| 807 * PDFScriptingAPI in a page containing the extension). | 809 * PDFScriptingAPI in a page containing the extension). |
| 808 * @param {Object} message the message to send. | 810 * @param {Object} message the message to send. |
| 809 */ | 811 */ |
| 810 sendScriptingMessage_: function(message) { | 812 sendScriptingMessage_: function(message) { |
| 811 if (this.parentWindow_) | 813 if (this.parentWindow_ && this.parentOrigin_) { |
| 812 this.parentWindow_.postMessage(message, '*'); | 814 var targetOrigin; |
| 815 // Only send data back to the embedder if it is from the same origin, |
| 816 // unless we're sending it to ourselves (which could happen in the case |
| 817 // of tests). We also allow documentLoaded messages through as this won't |
| 818 // leak important information. |
| 819 if (this.parentOrigin_ == window.location.origin) |
| 820 targetOrigin = this.parentOrigin_; |
| 821 else if (message.type == 'documentLoaded') |
| 822 targetOrigin = '*'; |
| 823 else |
| 824 targetOrigin = this.browserApi_.getStreamInfo().originalUrl; |
| 825 this.parentWindow_.postMessage(message, targetOrigin); |
| 826 } |
| 813 }, | 827 }, |
| 814 | 828 |
| 815 | |
| 816 /** | 829 /** |
| 817 * @type {Viewport} the viewport of the PDF viewer. | 830 * @type {Viewport} the viewport of the PDF viewer. |
| 818 */ | 831 */ |
| 819 get viewport() { | 832 get viewport() { |
| 820 return this.viewport_; | 833 return this.viewport_; |
| 821 }, | 834 }, |
| 822 | 835 |
| 823 /** | 836 /** |
| 824 * Each bookmark is an Object containing a: | 837 * Each bookmark is an Object containing a: |
| 825 * - title | 838 * - title |
| 826 * - page (optional) | 839 * - page (optional) |
| 827 * - array of children (themselves bookmarks) | 840 * - array of children (themselves bookmarks) |
| 828 * @type {Array} the top-level bookmarks of the PDF. | 841 * @type {Array} the top-level bookmarks of the PDF. |
| 829 */ | 842 */ |
| 830 get bookmarks() { | 843 get bookmarks() { |
| 831 return this.bookmarks_; | 844 return this.bookmarks_; |
| 832 } | 845 } |
| 833 }; | 846 }; |
| OLD | NEW |