| 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 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 | 714 |
| 714 /** | 715 /** |
| 715 * Handle a scripting message from outside the extension (typically sent by | 716 * Handle a scripting message from outside the extension (typically sent by |
| 716 * PDFScriptingAPI in a page containing the extension) to interact with the | 717 * PDFScriptingAPI in a page containing the extension) to interact with the |
| 717 * plugin. | 718 * plugin. |
| 718 * @param {MessageObject} message the message to handle. | 719 * @param {MessageObject} message the message to handle. |
| 719 */ | 720 */ |
| 720 handleScriptingMessage: function(message) { | 721 handleScriptingMessage: function(message) { |
| 721 if (this.parentWindow_ != message.source) { | 722 if (this.parentWindow_ != message.source) { |
| 722 this.parentWindow_ = message.source; | 723 this.parentWindow_ = message.source; |
| 724 this.parentOrigin_ = message.origin; |
| 723 // Ensure that we notify the embedder if the document is loaded. | 725 // Ensure that we notify the embedder if the document is loaded. |
| 724 if (this.loadState_ != LoadState.LOADING) | 726 if (this.loadState_ != LoadState.LOADING) |
| 725 this.sendDocumentLoadedMessage_(); | 727 this.sendDocumentLoadedMessage_(); |
| 726 } | 728 } |
| 727 | 729 |
| 728 if (this.handlePrintPreviewScriptingMessage_(message)) | 730 if (this.handlePrintPreviewScriptingMessage_(message)) |
| 729 return; | 731 return; |
| 730 | 732 |
| 731 // Delay scripting messages from users of the scripting API until the | 733 // Delay scripting messages from users of the scripting API until the |
| 732 // document is loaded. This simplifies use of the APIs. | 734 // document is loaded. This simplifies use of the APIs. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 return false; | 801 return false; |
| 800 }, | 802 }, |
| 801 | 803 |
| 802 /** | 804 /** |
| 803 * @private | 805 * @private |
| 804 * Send a scripting message outside the extension (typically to | 806 * Send a scripting message outside the extension (typically to |
| 805 * PDFScriptingAPI in a page containing the extension). | 807 * PDFScriptingAPI in a page containing the extension). |
| 806 * @param {Object} message the message to send. | 808 * @param {Object} message the message to send. |
| 807 */ | 809 */ |
| 808 sendScriptingMessage_: function(message) { | 810 sendScriptingMessage_: function(message) { |
| 809 if (this.parentWindow_) | 811 if (this.parentWindow_ && this.parentOrigin_) { |
| 810 this.parentWindow_.postMessage(message, '*'); | 812 var targetOrigin; |
| 813 // Only send data back to the embedder if it is from the same origin, |
| 814 // unless we're sending it to ourselves (which could happen in the case |
| 815 // of tests). We also allow documentLoaded messages through as this won't |
| 816 // leak important information. |
| 817 if (this.parentOrigin_ == window.location.origin) |
| 818 targetOrigin = this.parentOrigin_; |
| 819 else if (message.type == 'documentLoaded') |
| 820 targetOrigin = '*'; |
| 821 else |
| 822 targetOrigin = this.browserApi_.getStreamInfo().originalUrl; |
| 823 this.parentWindow_.postMessage(message, targetOrigin); |
| 824 } |
| 811 }, | 825 }, |
| 812 | 826 |
| 813 | |
| 814 /** | 827 /** |
| 815 * @type {Viewport} the viewport of the PDF viewer. | 828 * @type {Viewport} the viewport of the PDF viewer. |
| 816 */ | 829 */ |
| 817 get viewport() { | 830 get viewport() { |
| 818 return this.viewport_; | 831 return this.viewport_; |
| 819 }, | 832 }, |
| 820 | 833 |
| 821 /** | 834 /** |
| 822 * Each bookmark is an Object containing a: | 835 * Each bookmark is an Object containing a: |
| 823 * - title | 836 * - title |
| 824 * - page (optional) | 837 * - page (optional) |
| 825 * - array of children (themselves bookmarks) | 838 * - array of children (themselves bookmarks) |
| 826 * @type {Array} the top-level bookmarks of the PDF. | 839 * @type {Array} the top-level bookmarks of the PDF. |
| 827 */ | 840 */ |
| 828 get bookmarks() { | 841 get bookmarks() { |
| 829 return this.bookmarks_; | 842 return this.bookmarks_; |
| 830 } | 843 } |
| 831 }; | 844 }; |
| OLD | NEW |