| Index: chrome/browser/resources/pdf/pdf.js
|
| diff --git a/chrome/browser/resources/pdf/pdf.js b/chrome/browser/resources/pdf/pdf.js
|
| index 1c70c959f5aa7982dac9b26e5f44ed636dca9e1b..3a35c97e2087d6e44f818152fdf9effd77220947 100644
|
| --- a/chrome/browser/resources/pdf/pdf.js
|
| +++ b/chrome/browser/resources/pdf/pdf.js
|
| @@ -134,6 +134,22 @@ function PDFViewer() {
|
|
|
| // Setup the keyboard event listener.
|
| document.onkeydown = this.handleKeyEvent_.bind(this);
|
| +
|
| + // Set up the zoom API.
|
| + if (chrome.tabs) {
|
| + chrome.tabs.setZoomSettings({mode: 'manual', scope: 'per-tab'},
|
| + this.afterZoom_.bind(this));
|
| + chrome.tabs.onZoomChange.addListener(function(zoomChangeInfo) {
|
| + // If the zoom level is close enough to the current zoom level, don't
|
| + // change it. This avoids us getting into an infinite loop of zoom changes
|
| + // due to floating point error.
|
| + var MIN_ZOOM_DELTA = 0.01;
|
| + var zoomDelta = Math.abs(this.viewport_.zoom -
|
| + zoomChangeInfo.newZoomFactor);
|
| + if (zoomDelta > MIN_ZOOM_DELTA)
|
| + this.viewport_.setZoom(zoomChangeInfo.newZoomFactor);
|
| + }.bind(this));
|
| + }
|
| }
|
|
|
| PDFViewer.prototype = {
|
| @@ -205,22 +221,6 @@ PDFViewer.prototype = {
|
| this.viewport.position = position;
|
| }
|
| return;
|
| - case 187: // +/= key.
|
| - case 107: // Numpad + key.
|
| - if (e.ctrlKey || e.metaKey) {
|
| - this.viewport_.zoomIn();
|
| - // Since we do the zooming of the page.
|
| - e.preventDefault();
|
| - }
|
| - return;
|
| - case 189: // -/_ key.
|
| - case 109: // Numpad - key.
|
| - if (e.ctrlKey || e.metaKey) {
|
| - this.viewport_.zoomOut();
|
| - // Since we do the zooming of the page.
|
| - e.preventDefault();
|
| - }
|
| - return;
|
| case 83: // s key.
|
| if (e.ctrlKey || e.metaKey) {
|
| // Simulate a click on the button so that the <a download ...>
|
| @@ -381,6 +381,10 @@ PDFViewer.prototype = {
|
| afterZoom_: function() {
|
| var position = this.viewport_.position;
|
| var zoom = this.viewport_.zoom;
|
| + if (chrome.tabs && !this.setZoomInProgress_) {
|
| + this.setZoomInProgress_ = true;
|
| + chrome.tabs.setZoom(zoom, this.setZoomComplete_.bind(this, zoom));
|
| + }
|
| this.plugin_.postMessage({
|
| type: 'viewport',
|
| zoom: zoom,
|
| @@ -391,6 +395,22 @@ PDFViewer.prototype = {
|
|
|
| /**
|
| * @private
|
| + * A callback that's called after chrome.tabs.setZoom is complete. This will
|
| + * call chrome.tabs.setZoom again if the zoom level has changed since it was
|
| + * last called.
|
| + * @param {number} lastZoom the zoom level that chrome.tabs.setZoom was called
|
| + * with.
|
| + */
|
| + setZoomComplete_: function(lastZoom) {
|
| + var zoom = this.viewport_.zoom;
|
| + if (zoom != lastZoom)
|
| + chrome.tabs.setZoom(zoom, this.setZoomComplete_.bind(this, zoom));
|
| + else
|
| + this.setZoomInProgress_ = false;
|
| + },
|
| +
|
| + /**
|
| + * @private
|
| * A callback that's called after the viewport changes.
|
| */
|
| viewportChanged_: function() {
|
|
|