From e2649ce7d82c6ab3cef9a96318805f05cead7786 Mon Sep 17 00:00:00 2001 From: Paul Betts Date: Mon, 21 Nov 2016 14:59:27 -0500 Subject: [PATCH 1/9] Add new method to set layout-based zoom level limit --- atom/renderer/api/atom_api_web_frame.cc | 5 +++++ atom/renderer/api/atom_api_web_frame.h | 1 + lib/browser/api/web-contents.js | 1 + lib/renderer/web-view/web-view.js | 1 + 4 files changed, 8 insertions(+) diff --git a/atom/renderer/api/atom_api_web_frame.cc b/atom/renderer/api/atom_api_web_frame.cc index d4cf54b684a6..d00f2deb3266 100644 --- a/atom/renderer/api/atom_api_web_frame.cc +++ b/atom/renderer/api/atom_api_web_frame.cc @@ -92,6 +92,10 @@ void WebFrame::SetZoomLevelLimits(double min_level, double max_level) { web_frame_->view()->setDefaultPageScaleLimits(min_level, max_level); } +void WebFrame::SetLayoutZoomLevelLimits(double min_level, double max_level) { + web_frame_->view()->zoomLimitsChanged(min_level, max_level); +} + v8::Local WebFrame::RegisterEmbedderCustomElement( const base::string16& name, v8::Local options) { blink::WebExceptionCode c = 0; @@ -228,6 +232,7 @@ void WebFrame::BuildPrototype( .SetMethod("setZoomFactor", &WebFrame::SetZoomFactor) .SetMethod("getZoomFactor", &WebFrame::GetZoomFactor) .SetMethod("setZoomLevelLimits", &WebFrame::SetZoomLevelLimits) + .SetMethod("setLayoutZoomLevelLimits", &WebFrame::SetLayoutZoomLevelLimits) .SetMethod("registerEmbedderCustomElement", &WebFrame::RegisterEmbedderCustomElement) .SetMethod("registerElementResizeCallback", diff --git a/atom/renderer/api/atom_api_web_frame.h b/atom/renderer/api/atom_api_web_frame.h index f530612a4840..37bb94ac8fae 100644 --- a/atom/renderer/api/atom_api_web_frame.h +++ b/atom/renderer/api/atom_api_web_frame.h @@ -46,6 +46,7 @@ class WebFrame : public mate::Wrappable { double GetZoomFactor() const; void SetZoomLevelLimits(double min_level, double max_level); + void SetLayoutZoomLevelLimits(double min_level, double max_level); v8::Local RegisterEmbedderCustomElement( const base::string16& name, v8::Local options); diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index d363bb051b8b..7e359e6c2d7f 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -100,6 +100,7 @@ WebContents.prototype.sendToAll = function (channel, ...args) { // Following methods are mapped to webFrame. const webFrameMethods = [ 'insertText', + 'setLayoutZoomLevelLimits', 'setZoomFactor', 'setZoomLevel', 'setZoomLevelLimits' diff --git a/lib/renderer/web-view/web-view.js b/lib/renderer/web-view/web-view.js index c8033bea0468..59bbbd89b141 100644 --- a/lib/renderer/web-view/web-view.js +++ b/lib/renderer/web-view/web-view.js @@ -390,6 +390,7 @@ var registerWebViewElement = function () { 'insertText', 'send', 'sendInputEvent', + 'setLayoutZoomLevelLimits', 'setZoomFactor', 'setZoomLevel', 'setZoomLevelLimits' From 7445f9bdccfd341ed883495e1eda67e8bae4cd3c Mon Sep 17 00:00:00 2001 From: Paul Betts Date: Mon, 21 Nov 2016 15:13:34 -0500 Subject: [PATCH 2/9] Lint --- atom/renderer/api/atom_api_web_frame.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/atom/renderer/api/atom_api_web_frame.cc b/atom/renderer/api/atom_api_web_frame.cc index d00f2deb3266..8cd74d08ad36 100644 --- a/atom/renderer/api/atom_api_web_frame.cc +++ b/atom/renderer/api/atom_api_web_frame.cc @@ -232,7 +232,8 @@ void WebFrame::BuildPrototype( .SetMethod("setZoomFactor", &WebFrame::SetZoomFactor) .SetMethod("getZoomFactor", &WebFrame::GetZoomFactor) .SetMethod("setZoomLevelLimits", &WebFrame::SetZoomLevelLimits) - .SetMethod("setLayoutZoomLevelLimits", &WebFrame::SetLayoutZoomLevelLimits) + .SetMethod("setLayoutZoomLevelLimits", + &WebFrame::SetLayoutZoomLevelLimits) .SetMethod("registerEmbedderCustomElement", &WebFrame::RegisterEmbedderCustomElement) .SetMethod("registerElementResizeCallback", From 3e85d7759b2d1d2de912e866c62a6ec2176fe508 Mon Sep 17 00:00:00 2001 From: Paul Betts Date: Mon, 21 Nov 2016 15:16:13 -0500 Subject: [PATCH 3/9] :memo: --- docs/api/web-frame.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/api/web-frame.md b/docs/api/web-frame.md index f35ea3eed386..47d520b9b927 100644 --- a/docs/api/web-frame.md +++ b/docs/api/web-frame.md @@ -44,7 +44,18 @@ Returns `Number` - The current zoom level. * `minimumLevel` Number * `maximumLevel` Number -Sets the maximum and minimum zoom level. +Sets the maximum and minimum pinch-to-zoom level. In future versions of Electron +this method will be called `setVisualZoomLevelLimits`. + +### `webFrame.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` + +* `minimumLevel` Number +* `maximumLevel` Number + +Sets the maximum and minimum layout-based (i.e. non-visual only) zoom level. In +future versions of Electron this will be renamed `setZoomLevelLimits`, but the +current naming is kept for backwards-compatibility purposes. + ### `webFrame.setSpellCheckProvider(language, autoCorrectWord, provider)` From e887fb69bdcf88d5474c5f42fce159f661298a4f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Nov 2016 07:53:02 -0800 Subject: [PATCH 4/9] Export a setVisualZoomLevelLimits method --- atom/renderer/api/atom_api_web_frame.cc | 6 ++++-- atom/renderer/api/atom_api_web_frame.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/atom/renderer/api/atom_api_web_frame.cc b/atom/renderer/api/atom_api_web_frame.cc index 8cd74d08ad36..455073c14cd9 100644 --- a/atom/renderer/api/atom_api_web_frame.cc +++ b/atom/renderer/api/atom_api_web_frame.cc @@ -88,7 +88,7 @@ double WebFrame::GetZoomFactor() const { return blink::WebView::zoomLevelToZoomFactor(GetZoomLevel()); } -void WebFrame::SetZoomLevelLimits(double min_level, double max_level) { +void WebFrame::SetVisualZoomLevelLimits(double min_level, double max_level) { web_frame_->view()->setDefaultPageScaleLimits(min_level, max_level); } @@ -231,7 +231,9 @@ void WebFrame::BuildPrototype( .SetMethod("getZoomLevel", &WebFrame::GetZoomLevel) .SetMethod("setZoomFactor", &WebFrame::SetZoomFactor) .SetMethod("getZoomFactor", &WebFrame::GetZoomFactor) - .SetMethod("setZoomLevelLimits", &WebFrame::SetZoomLevelLimits) + .SetMethod("setZoomLevelLimits", &WebFrame::SetVisualZoomLevelLimits) + .SetMethod("setVisualZoomLevelLimits", + &WebFrame::SetVisualZoomLevelLimits) .SetMethod("setLayoutZoomLevelLimits", &WebFrame::SetLayoutZoomLevelLimits) .SetMethod("registerEmbedderCustomElement", diff --git a/atom/renderer/api/atom_api_web_frame.h b/atom/renderer/api/atom_api_web_frame.h index 37bb94ac8fae..4b5610cd149b 100644 --- a/atom/renderer/api/atom_api_web_frame.h +++ b/atom/renderer/api/atom_api_web_frame.h @@ -45,7 +45,7 @@ class WebFrame : public mate::Wrappable { double SetZoomFactor(double factor); double GetZoomFactor() const; - void SetZoomLevelLimits(double min_level, double max_level); + void SetVisualZoomLevelLimits(double min_level, double max_level); void SetLayoutZoomLevelLimits(double min_level, double max_level); v8::Local RegisterEmbedderCustomElement( From 756a338b051eeb5d4ca3427f4e4f643a9193bb5f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Nov 2016 08:03:04 -0800 Subject: [PATCH 5/9] Document webFrame.setVisualZoomLevelLimits as public --- docs/api/web-frame.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/api/web-frame.md b/docs/api/web-frame.md index 47d520b9b927..12d9167bc7c5 100644 --- a/docs/api/web-frame.md +++ b/docs/api/web-frame.md @@ -44,18 +44,22 @@ Returns `Number` - The current zoom level. * `minimumLevel` Number * `maximumLevel` Number -Sets the maximum and minimum pinch-to-zoom level. In future versions of Electron -this method will be called `setVisualZoomLevelLimits`. +**Deprecated:** Call `setVisualZoomLevelLimits` instead to set the visual zoom +level limits. This method will be removed in Electron 2.0. + +### `webFrame.setVisualZoomLevelLimits(minimumLevel, maximumLevel)` + +* `minimumLevel` Number +* `maximumLevel` Number + +Sets the maximum and minimum pinch-to-zoom level. ### `webFrame.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` * `minimumLevel` Number * `maximumLevel` Number -Sets the maximum and minimum layout-based (i.e. non-visual only) zoom level. In -future versions of Electron this will be renamed `setZoomLevelLimits`, but the -current naming is kept for backwards-compatibility purposes. - +Sets the maximum and minimum layout-based (i.e. non-visual) zoom level. ### `webFrame.setSpellCheckProvider(language, autoCorrectWord, provider)` From 9a5df9da418c7628303a357fb7aae722ee3ef29d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Nov 2016 08:07:55 -0800 Subject: [PATCH 6/9] Expose setVisualZoomLevelLimits on webContents and --- docs/api/web-contents.md | 17 ++++++++++++++++- lib/browser/api/web-contents.js | 2 ++ lib/renderer/web-view/web-view.js | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/api/web-contents.md b/docs/api/web-contents.md index eed5468510c0..ba0dcdfec29a 100644 --- a/docs/api/web-contents.md +++ b/docs/api/web-contents.md @@ -691,7 +691,22 @@ Sends a request to get current zoom level, the `callback` will be called with * `minimumLevel` Number * `maximumLevel` Number -Sets the maximum and minimum zoom level. +**Deprecated:** Call `setVisualZoomLevelLimits` instead to set the visual zoom +level limits. This method will be removed in Electron 2.0. + +#### `contents.setVisualZoomLevelLimits(minimumLevel, maximumLevel)` + +* `minimumLevel` Number +* `maximumLevel` Number + +Sets the maximum and minimum pinch-to-zoom level. + +#### `contents.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` + +* `minimumLevel` Number +* `maximumLevel` Number + +Sets the maximum and minimum layout-based (i.e. non-visual) zoom level. #### `contents.undo()` diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 7e359e6c2d7f..a02fddb7d0a2 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -101,8 +101,10 @@ WebContents.prototype.sendToAll = function (channel, ...args) { const webFrameMethods = [ 'insertText', 'setLayoutZoomLevelLimits', + 'setVisualZoomLevelLimits', 'setZoomFactor', 'setZoomLevel', + // TODO(kevinsawicki): Remove in 2.0, deprecate before then with warnings 'setZoomLevelLimits' ] const webFrameMethodsWithResult = [ diff --git a/lib/renderer/web-view/web-view.js b/lib/renderer/web-view/web-view.js index 59bbbd89b141..ba8ae32d46d5 100644 --- a/lib/renderer/web-view/web-view.js +++ b/lib/renderer/web-view/web-view.js @@ -391,8 +391,10 @@ var registerWebViewElement = function () { 'send', 'sendInputEvent', 'setLayoutZoomLevelLimits', + 'setVisualZoomLevelLimits', 'setZoomFactor', 'setZoomLevel', + // TODO(kevinsawicki): Remove in 2.0, deprecate before then with warnings 'setZoomLevelLimits' ] From d4368fabb95dec22e69ce60e80d95d0d902c11ed Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Nov 2016 08:09:14 -0800 Subject: [PATCH 7/9] Add 2.0 comment about setZoomLevelLimits --- atom/renderer/api/atom_api_web_frame.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/atom/renderer/api/atom_api_web_frame.cc b/atom/renderer/api/atom_api_web_frame.cc index 455073c14cd9..fcfc50cf7f13 100644 --- a/atom/renderer/api/atom_api_web_frame.cc +++ b/atom/renderer/api/atom_api_web_frame.cc @@ -231,7 +231,6 @@ void WebFrame::BuildPrototype( .SetMethod("getZoomLevel", &WebFrame::GetZoomLevel) .SetMethod("setZoomFactor", &WebFrame::SetZoomFactor) .SetMethod("getZoomFactor", &WebFrame::GetZoomFactor) - .SetMethod("setZoomLevelLimits", &WebFrame::SetVisualZoomLevelLimits) .SetMethod("setVisualZoomLevelLimits", &WebFrame::SetVisualZoomLevelLimits) .SetMethod("setLayoutZoomLevelLimits", @@ -252,7 +251,9 @@ void WebFrame::BuildPrototype( .SetMethod("insertText", &WebFrame::InsertText) .SetMethod("executeJavaScript", &WebFrame::ExecuteJavaScript) .SetMethod("getResourceUsage", &WebFrame::GetResourceUsage) - .SetMethod("clearCache", &WebFrame::ClearCache); + .SetMethod("clearCache", &WebFrame::ClearCache) + // TODO(kevinsawicki): Remove in 2.0, deprecate before then with warnings + .SetMethod("setZoomLevelLimits", &WebFrame::SetVisualZoomLevelLimits); } } // namespace api From c4b68d88e99e558a604698c8d808cfccfd1339e0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Nov 2016 08:11:14 -0800 Subject: [PATCH 8/9] Add setZoomLevelLimits to planned breaking changes --- docs/tutorial/planned-breaking-changes.md | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/tutorial/planned-breaking-changes.md b/docs/tutorial/planned-breaking-changes.md index ad1243414c10..ed3606f123c2 100644 --- a/docs/tutorial/planned-breaking-changes.md +++ b/docs/tutorial/planned-breaking-changes.md @@ -86,6 +86,31 @@ webContents.openDevTools({detach: true}) webContents.openDevTools({mode: 'detach'}) ``` +```js +// Deprecated +webContents.setZoomLevelLimits(1, 2) +// Replace with +webContents.setVisualZoomLevelLimits(1, 2) +``` + +## `webFrame` + +```js +// Deprecated +webFrame.setZoomLevelLimits(1, 2) +// Replace with +webFrame.setVisualZoomLevelLimits(1, 2) +``` + +## `` + +```js +// Deprecated +webview.setZoomLevelLimits(1, 2) +// Replace with +webview.setVisualZoomLevelLimits(1, 2) +``` + ## Node Headers URL This is the URL specified as `disturl` in a `.npmrc` file or as the `--dist-url` From a7aed98d59eeaf419f953cc1b8ec95a05c403908 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Nov 2016 08:43:14 -0800 Subject: [PATCH 9/9] Add initial spec for zoom level limits --- spec/api-web-frame-spec.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec/api-web-frame-spec.js b/spec/api-web-frame-spec.js index 09e6b63a6499..4ef6fdd387da 100644 --- a/spec/api-web-frame-spec.js +++ b/spec/api-web-frame-spec.js @@ -6,6 +6,7 @@ const {BrowserWindow, protocol, ipcMain} = remote describe('webFrame module', function () { var fixtures = path.resolve(__dirname, 'fixtures') + describe('webFrame.registerURLSchemeAsPrivileged', function () { it('supports fetch api by default', function (done) { webFrame.registerURLSchemeAsPrivileged('file') @@ -126,4 +127,12 @@ describe('webFrame module', function () { }) } }) + + it('supports setting the visual and layout zoom level limits', function () { + assert.doesNotThrow(function () { + webFrame.setZoomLevelLimits(1, 100) + webFrame.setVisualZoomLevelLimits(1, 50) + webFrame.setLayoutZoomLevelLimits(0, 25) + }) + }) })