| 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 this.sizer_, | 64 this.sizer_, |
| 65 this.viewportChanged_.bind(this), | 65 this.viewportChanged_.bind(this), |
| 66 this.beforeZoom_.bind(this), | 66 this.beforeZoom_.bind(this), |
| 67 this.afterZoom_.bind(this), | 67 this.afterZoom_.bind(this), |
| 68 getScrollbarWidth()); | 68 getScrollbarWidth()); |
| 69 // Create the plugin object dynamically so we can set its src. The plugin | 69 // Create the plugin object dynamically so we can set its src. The plugin |
| 70 // element is sized to fill the entire window and is set to be fixed | 70 // element is sized to fill the entire window and is set to be fixed |
| 71 // positioning, acting as a viewport. The plugin renders into this viewport | 71 // positioning, acting as a viewport. The plugin renders into this viewport |
| 72 // according to the scroll position of the window. | 72 // according to the scroll position of the window. |
| 73 this.plugin_ = document.createElement('embed'); | 73 this.plugin_ = document.createElement('embed'); |
| 74 console.log('created plugin ' + this.plugin_ + ' ' + |
| 75 this.plugin_.postMessage); |
| 74 // NOTE: The plugin's 'id' field must be set to 'plugin' since | 76 // NOTE: The plugin's 'id' field must be set to 'plugin' since |
| 75 // chrome/renderer/printing/print_web_view_helper.cc actually references it. | 77 // chrome/renderer/printing/print_web_view_helper.cc actually references it. |
| 76 this.plugin_.id = 'plugin'; | 78 this.plugin_.id = 'plugin'; |
| 77 this.plugin_.type = 'application/x-google-chrome-pdf'; | 79 this.plugin_.type = 'application/x-google-chrome-pdf'; |
| 78 this.plugin_.addEventListener('message', this.handlePluginMessage_.bind(this), | 80 this.plugin_.addEventListener('message', this.handlePluginMessage_.bind(this), |
| 79 false); | 81 false); |
| 80 | 82 |
| 81 // Handle scripting messages from outside the extension that wish to interact | 83 // Handle scripting messages from outside the extension that wish to interact |
| 82 // with it. We also send a message indicating that extension has loaded and | 84 // with it. We also send a message indicating that extension has loaded and |
| 83 // is ready to receive messages. | 85 // is ready to receive messages. |
| 84 window.addEventListener('message', this.handleScriptingMessage.bind(this), | 86 window.addEventListener('message', this.handleScriptingMessage.bind(this), |
| 85 false); | 87 false); |
| 86 | 88 |
| 87 document.title = getFilenameFromURL(this.streamDetails_.originalUrl); | 89 document.title = getFilenameFromURL(this.streamDetails_.originalUrl); |
| 88 this.plugin_.setAttribute('src', this.streamDetails_.originalUrl); | 90 this.plugin_.setAttribute('src', this.streamDetails_.originalUrl); |
| 89 this.plugin_.setAttribute('stream-url', this.streamDetails_.streamUrl); | 91 this.plugin_.setAttribute('stream-url', this.streamDetails_.streamUrl); |
| 90 var headers = ''; | 92 var headers = ''; |
| 91 for (var header in this.streamDetails_.responseHeaders) { | 93 for (var header in this.streamDetails_.responseHeaders) { |
| 92 headers += header + ': ' + | 94 headers += header + ': ' + |
| 93 this.streamDetails_.responseHeaders[header] + '\n'; | 95 this.streamDetails_.responseHeaders[header] + '\n'; |
| 94 } | 96 } |
| 95 this.plugin_.setAttribute('headers', headers); | 97 this.plugin_.setAttribute('headers', headers); |
| 96 | 98 |
| 97 if (!this.streamDetails_.embedded) | 99 if (!this.streamDetails_.embedded) |
| 98 this.plugin_.setAttribute('full-frame', ''); | 100 this.plugin_.setAttribute('full-frame', ''); |
| 99 document.body.appendChild(this.plugin_); | 101 document.body.appendChild(this.plugin_); |
| 102 console.log('added plugin to DOM ' + this.plugin_ + ' ' + |
| 103 this.plugin_.postMessage); |
| 100 | 104 |
| 101 // Setup the button event listeners. | 105 // Setup the button event listeners. |
| 102 $('fit-to-width-button').addEventListener('click', | 106 $('fit-to-width-button').addEventListener('click', |
| 103 this.viewport_.fitToWidth.bind(this.viewport_)); | 107 this.viewport_.fitToWidth.bind(this.viewport_)); |
| 104 $('fit-to-page-button').addEventListener('click', | 108 $('fit-to-page-button').addEventListener('click', |
| 105 this.viewport_.fitToPage.bind(this.viewport_)); | 109 this.viewport_.fitToPage.bind(this.viewport_)); |
| 106 $('zoom-in-button').addEventListener('click', | 110 $('zoom-in-button').addEventListener('click', |
| 107 this.viewport_.zoomIn.bind(this.viewport_)); | 111 this.viewport_.zoomIn.bind(this.viewport_)); |
| 108 $('zoom-out-button').addEventListener('click', | 112 $('zoom-out-button').addEventListener('click', |
| 109 this.viewport_.zoomOut.bind(this.viewport_)); | 113 this.viewport_.zoomOut.bind(this.viewport_)); |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 position.y = message.data.y; | 401 position.y = message.data.y; |
| 398 this.viewport_.position = position; | 402 this.viewport_.position = position; |
| 399 break; | 403 break; |
| 400 case 'setTranslatedStrings': | 404 case 'setTranslatedStrings': |
| 401 this.passwordScreen_.text = message.data.getPasswordString; | 405 this.passwordScreen_.text = message.data.getPasswordString; |
| 402 this.progressBar_.text = message.data.loadingString; | 406 this.progressBar_.text = message.data.loadingString; |
| 403 this.progressBar_.style.visibility = 'visible'; | 407 this.progressBar_.style.visibility = 'visible'; |
| 404 this.errorScreen_.text = message.data.loadFailedString; | 408 this.errorScreen_.text = message.data.loadFailedString; |
| 405 break; | 409 break; |
| 406 case 'cancelStreamUrl': | 410 case 'cancelStreamUrl': |
| 407 chrome.streamsPrivate.abort(this.streamDetails_.streamUrl); | 411 chrome.mimeHandlerPrivate.abortStream(); |
| 408 break; | 412 break; |
| 409 } | 413 } |
| 410 }, | 414 }, |
| 411 | 415 |
| 412 /** | 416 /** |
| 413 * @private | 417 * @private |
| 414 * A callback that's called before the zoom changes. Notify the plugin to stop | 418 * A callback that's called before the zoom changes. Notify the plugin to stop |
| 415 * reacting to scroll events while zoom is taking place to avoid flickering. | 419 * reacting to scroll events while zoom is taking place to avoid flickering. |
| 416 */ | 420 */ |
| 417 beforeZoom_: function() { | 421 beforeZoom_: function() { |
| 418 this.plugin_.postMessage({ | 422 this.plugin_.postMessage({ |
| 419 type: 'stopScrolling' | 423 type: 'stopScrolling' |
| 420 }); | 424 }); |
| 421 }, | 425 }, |
| 422 | 426 |
| 423 /** | 427 /** |
| 424 * @private | 428 * @private |
| 425 * A callback that's called after the zoom changes. Notify the plugin of the | 429 * A callback that's called after the zoom changes. Notify the plugin of the |
| 426 * zoom change and to continue reacting to scroll events. | 430 * zoom change and to continue reacting to scroll events. |
| 427 */ | 431 */ |
| 428 afterZoom_: function() { | 432 afterZoom_: function() { |
| 429 var position = this.viewport_.position; | 433 var position = this.viewport_.position; |
| 430 var zoom = this.viewport_.zoom; | 434 var zoom = this.viewport_.zoom; |
| 431 if (this.shouldManageZoom_() && !this.setZoomInProgress_) { | 435 if (this.shouldManageZoom_() && !this.setZoomInProgress_) { |
| 432 this.setZoomInProgress_ = true; | 436 this.setZoomInProgress_ = true; |
| 433 chrome.tabs.setZoom(this.streamDetails_.tabId, zoom, | 437 chrome.tabs.setZoom(this.streamDetails_.tabId, zoom, |
| 434 this.setZoomComplete_.bind(this, zoom)); | 438 this.setZoomComplete_.bind(this, zoom)); |
| 435 } | 439 } |
| 440 console.log('afterZoom_ ' + this.plugin_ + ' ' + this.plugin_.postMessage); |
| 436 this.plugin_.postMessage({ | 441 this.plugin_.postMessage({ |
| 437 type: 'viewport', | 442 type: 'viewport', |
| 438 zoom: zoom, | 443 zoom: zoom, |
| 439 xOffset: position.x, | 444 xOffset: position.x, |
| 440 yOffset: position.y | 445 yOffset: position.y |
| 441 }); | 446 }); |
| 442 }, | 447 }, |
| 443 | 448 |
| 444 /** | 449 /** |
| 445 * @private | 450 * @private |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 this.streamDetails_.tabId != -1); | 610 this.streamDetails_.tabId != -1); |
| 606 }, | 611 }, |
| 607 | 612 |
| 608 /** | 613 /** |
| 609 * @type {Viewport} the viewport of the PDF viewer. | 614 * @type {Viewport} the viewport of the PDF viewer. |
| 610 */ | 615 */ |
| 611 get viewport() { | 616 get viewport() { |
| 612 return this.viewport_; | 617 return this.viewport_; |
| 613 } | 618 } |
| 614 }; | 619 }; |
| OLD | NEW |