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() { |