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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 function PDFViewer(browserApi) { | 124 function PDFViewer(browserApi) { |
125 this.browserApi_ = browserApi; | 125 this.browserApi_ = browserApi; |
126 this.originalUrl_ = this.browserApi_.getStreamInfo().originalUrl; | 126 this.originalUrl_ = this.browserApi_.getStreamInfo().originalUrl; |
127 this.loadState_ = LoadState.LOADING; | 127 this.loadState_ = LoadState.LOADING; |
128 this.parentWindow_ = null; | 128 this.parentWindow_ = null; |
129 this.parentOrigin_ = null; | 129 this.parentOrigin_ = null; |
130 this.isFormFieldFocused_ = false; | 130 this.isFormFieldFocused_ = false; |
131 | 131 |
132 this.delayedScriptingMessages_ = []; | 132 this.delayedScriptingMessages_ = []; |
133 | 133 |
134 this.isPrintPreview_ = this.originalUrl_.indexOf( | 134 this.isPrintPreview_ = this.originalUrl_.indexOf('chrome://print') == 0; |
135 'chrome://print') == 0; | 135 |
136 // Parse open pdf parameters. | 136 // Parse open pdf parameters. |
137 this.paramsParser_ = | 137 this.paramsParser_ = |
138 new OpenPDFParamsParser(this.getNamedDestination_.bind(this)); | 138 new OpenPDFParamsParser(this.getNamedDestination_.bind(this)); |
139 var toolbarEnabled = | 139 var toolbarEnabled = |
140 this.paramsParser_.getUiUrlParams(this.originalUrl_).toolbar && | 140 this.paramsParser_.getUiUrlParams(this.originalUrl_).toolbar && |
141 !this.isPrintPreview_; | 141 !this.isPrintPreview_; |
142 | 142 |
143 // The sizer element is placed behind the plugin element to cause scrollbars | 143 // The sizer element is placed behind the plugin element to cause scrollbars |
144 // to be displayed in the window. It is sized according to the document size | 144 // to be displayed in the window. It is sized according to the document size |
145 // of the pdf and zoom level. | 145 // of the pdf and zoom level. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 this.plugin_.type = 'application/x-google-chrome-pdf'; | 181 this.plugin_.type = 'application/x-google-chrome-pdf'; |
182 this.plugin_.addEventListener('message', this.handlePluginMessage_.bind(this), | 182 this.plugin_.addEventListener('message', this.handlePluginMessage_.bind(this), |
183 false); | 183 false); |
184 | 184 |
185 // Handle scripting messages from outside the extension that wish to interact | 185 // Handle scripting messages from outside the extension that wish to interact |
186 // with it. We also send a message indicating that extension has loaded and | 186 // with it. We also send a message indicating that extension has loaded and |
187 // is ready to receive messages. | 187 // is ready to receive messages. |
188 window.addEventListener('message', this.handleScriptingMessage.bind(this), | 188 window.addEventListener('message', this.handleScriptingMessage.bind(this), |
189 false); | 189 false); |
190 | 190 |
191 this.plugin_.setAttribute('src', | 191 this.plugin_.setAttribute('src', this.originalUrl_); |
192 this.originalUrl_); | |
193 this.plugin_.setAttribute('stream-url', | 192 this.plugin_.setAttribute('stream-url', |
194 this.browserApi_.getStreamInfo().streamUrl); | 193 this.browserApi_.getStreamInfo().streamUrl); |
195 var headers = ''; | 194 var headers = ''; |
196 for (var header in this.browserApi_.getStreamInfo().responseHeaders) { | 195 for (var header in this.browserApi_.getStreamInfo().responseHeaders) { |
197 headers += header + ': ' + | 196 headers += header + ': ' + |
198 this.browserApi_.getStreamInfo().responseHeaders[header] + '\n'; | 197 this.browserApi_.getStreamInfo().responseHeaders[header] + '\n'; |
199 } | 198 } |
200 this.plugin_.setAttribute('headers', headers); | 199 this.plugin_.setAttribute('headers', headers); |
201 | 200 |
202 var backgroundColor = PDFViewer.DARK_BACKGROUND_COLOR; | 201 var backgroundColor = PDFViewer.DARK_BACKGROUND_COLOR; |
(...skipping 20 matching lines...) Expand all Loading... |
223 this.toolbar_.hidden = false; | 222 this.toolbar_.hidden = false; |
224 this.toolbar_.addEventListener('save', this.save_.bind(this)); | 223 this.toolbar_.addEventListener('save', this.save_.bind(this)); |
225 this.toolbar_.addEventListener('print', this.print_.bind(this)); | 224 this.toolbar_.addEventListener('print', this.print_.bind(this)); |
226 this.toolbar_.addEventListener('rotate-right', | 225 this.toolbar_.addEventListener('rotate-right', |
227 this.rotateClockwise_.bind(this)); | 226 this.rotateClockwise_.bind(this)); |
228 // Must attach to mouseup on the plugin element, since it eats mousedown | 227 // Must attach to mouseup on the plugin element, since it eats mousedown |
229 // and click events. | 228 // and click events. |
230 this.plugin_.addEventListener('mouseup', | 229 this.plugin_.addEventListener('mouseup', |
231 this.toolbar_.hideDropdowns.bind(this.toolbar_)); | 230 this.toolbar_.hideDropdowns.bind(this.toolbar_)); |
232 | 231 |
233 this.toolbar_.docTitle = | 232 this.toolbar_.docTitle = getFilenameFromURL(this.originalUrl_); |
234 getFilenameFromURL(this.originalUrl_); | |
235 } | 233 } |
236 | 234 |
237 document.body.addEventListener('change-page', function(e) { | 235 document.body.addEventListener('change-page', function(e) { |
238 this.viewport_.goToPage(e.detail.page); | 236 this.viewport_.goToPage(e.detail.page); |
239 }.bind(this)); | 237 }.bind(this)); |
240 | 238 |
241 document.body.addEventListener('navigate', function(e) { | 239 document.body.addEventListener('navigate', function(e) { |
242 var disposition = | 240 var disposition = |
243 e.detail.newtab ? Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB : | 241 e.detail.newtab ? Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB : |
244 Navigator.WindowOpenDisposition.CURRENT_TAB; | 242 Navigator.WindowOpenDisposition.CURRENT_TAB; |
245 this.navigator_.navigate(e.detail.uri, disposition); | 243 this.navigator_.navigate(e.detail.uri, disposition); |
246 }.bind(this)); | 244 }.bind(this)); |
247 | 245 |
248 this.toolbarManager_ = | 246 this.toolbarManager_ = |
249 new ToolbarManager(window, this.toolbar_, this.zoomToolbar_); | 247 new ToolbarManager(window, this.toolbar_, this.zoomToolbar_); |
250 | 248 |
251 // Set up the ZoomManager. | 249 // Set up the ZoomManager. |
252 this.zoomManager_ = new ZoomManager( | 250 this.zoomManager_ = new ZoomManager( |
253 this.viewport_, this.browserApi_.setZoom.bind(this.browserApi_), | 251 this.viewport_, this.browserApi_.setZoom.bind(this.browserApi_), |
254 this.browserApi_.getInitialZoom()); | 252 this.browserApi_.getInitialZoom()); |
255 this.browserApi_.addZoomEventListener( | 253 this.browserApi_.addZoomEventListener( |
256 this.zoomManager_.onBrowserZoomChange.bind(this.zoomManager_)); | 254 this.zoomManager_.onBrowserZoomChange.bind(this.zoomManager_)); |
257 | 255 |
258 // Setup the keyboard event listener. | 256 // Setup the keyboard event listener. |
259 document.addEventListener('keydown', this.handleKeyEvent_.bind(this)); | 257 document.addEventListener('keydown', this.handleKeyEvent_.bind(this)); |
260 document.addEventListener('mousemove', this.handleMouseEvent_.bind(this)); | 258 document.addEventListener('mousemove', this.handleMouseEvent_.bind(this)); |
261 document.addEventListener('mouseout', this.handleMouseEvent_.bind(this)); | 259 document.addEventListener('mouseout', this.handleMouseEvent_.bind(this)); |
262 | 260 |
263 var isInTab = this.browserApi_.getStreamInfo().tabId != -1; | 261 var isInTab = this.browserApi_.getStreamInfo().tabId != -1; |
264 var isSourceFileUrl = | 262 var isSourceFileUrl = this.originalUrl_.indexOf('file://') == 0; |
265 this.originalUrl_.indexOf('file://') == 0; | |
266 this.navigator_ = new Navigator(this.originalUrl_, | 263 this.navigator_ = new Navigator(this.originalUrl_, |
267 this.viewport_, this.paramsParser_, | 264 this.viewport_, this.paramsParser_, |
268 onNavigateInCurrentTab.bind(undefined, | 265 onNavigateInCurrentTab.bind(undefined, |
269 isInTab, | 266 isInTab, |
270 isSourceFileUrl), | 267 isSourceFileUrl), |
271 onNavigateInNewTab); | 268 onNavigateInNewTab); |
272 this.viewportScroller_ = | 269 this.viewportScroller_ = |
273 new ViewportScroller(this.viewport_, this.plugin_, window); | 270 new ViewportScroller(this.viewport_, this.plugin_, window); |
274 | 271 |
275 // Request translated strings. | 272 // Request translated strings. |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 position.y = message.data.y; | 644 position.y = message.data.y; |
648 this.viewport_.position = position; | 645 this.viewport_.position = position; |
649 break; | 646 break; |
650 case 'cancelStreamUrl': | 647 case 'cancelStreamUrl': |
651 chrome.mimeHandlerPrivate.abortStream(); | 648 chrome.mimeHandlerPrivate.abortStream(); |
652 break; | 649 break; |
653 case 'metadata': | 650 case 'metadata': |
654 if (message.data.title) { | 651 if (message.data.title) { |
655 document.title = message.data.title; | 652 document.title = message.data.title; |
656 } else { | 653 } else { |
657 document.title = | 654 document.title = getFilenameFromURL(this.originalUrl_); |
658 getFilenameFromURL(this.originalUrl_); | |
659 } | 655 } |
660 this.bookmarks_ = message.data.bookmarks; | 656 this.bookmarks_ = message.data.bookmarks; |
661 if (this.toolbar_) { | 657 if (this.toolbar_) { |
662 this.toolbar_.docTitle = document.title; | 658 this.toolbar_.docTitle = document.title; |
663 this.toolbar_.bookmarks = this.bookmarks; | 659 this.toolbar_.bookmarks = this.bookmarks; |
664 } | 660 } |
665 break; | 661 break; |
666 case 'setIsSelecting': | 662 case 'setIsSelecting': |
667 this.viewportScroller_.setEnableScrolling(message.data.isSelecting); | 663 this.viewportScroller_.setEnableScrolling(message.data.isSelecting); |
668 break; | 664 break; |
669 case 'getNamedDestinationReply': | 665 case 'getNamedDestinationReply': |
670 this.paramsParser_.onNamedDestinationReceived( | 666 this.paramsParser_.onNamedDestinationReceived(message.data.pageNumber); |
671 message.data.pageNumber); | |
672 break; | 667 break; |
673 case 'formFocusChange': | 668 case 'formFocusChange': |
674 this.isFormFieldFocused_ = message.data.focused; | 669 this.isFormFieldFocused_ = message.data.focused; |
675 break; | 670 break; |
676 } | 671 } |
677 }, | 672 }, |
678 | 673 |
679 /** | 674 /** |
680 * @private | 675 * @private |
681 * A callback that's called before the zoom changes. Notify the plugin to stop | 676 * A callback that's called before the zoom changes. Notify the plugin to stop |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 * Each bookmark is an Object containing a: | 880 * Each bookmark is an Object containing a: |
886 * - title | 881 * - title |
887 * - page (optional) | 882 * - page (optional) |
888 * - array of children (themselves bookmarks) | 883 * - array of children (themselves bookmarks) |
889 * @type {Array} the top-level bookmarks of the PDF. | 884 * @type {Array} the top-level bookmarks of the PDF. |
890 */ | 885 */ |
891 get bookmarks() { | 886 get bookmarks() { |
892 return this.bookmarks_; | 887 return this.bookmarks_; |
893 } | 888 } |
894 }; | 889 }; |
OLD | NEW |