From 370a6746ccb9174770ee6e7138b8ee7d1305db8d Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Tue, 26 Nov 2019 11:22:01 -0800 Subject: [PATCH 1/2] wip --- patches/chromium/.patches | 1 - ...dd_zoom_limit_setters_to_webcontents.patch | 73 ------------------- shell/browser/api/atom_api_web_contents.cc | 9 --- shell/browser/api/atom_api_web_contents.h | 1 - shell/common/api/api.mojom | 2 - shell/renderer/api/atom_api_web_frame.cc | 12 --- 6 files changed, 98 deletions(-) delete mode 100644 patches/chromium/add_zoom_limit_setters_to_webcontents.patch diff --git a/patches/chromium/.patches b/patches/chromium/.patches index d0ac4d69ebc86..a2d5c3a5fc877 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -75,7 +75,6 @@ expose_setuseragent_on_networkcontext.patch feat_add_set_theme_source_to_allow_apps_to.patch revert_cleanup_remove_menu_subtitles_sublabels.patch export_fetchapi_mojo_traits_to_fix_component_build.patch -add_zoom_limit_setters_to_webcontents.patch revert_remove_contentrendererclient_shouldfork.patch build_win_disable_zc_twophase.patch ignore_rc_check.patch diff --git a/patches/chromium/add_zoom_limit_setters_to_webcontents.patch b/patches/chromium/add_zoom_limit_setters_to_webcontents.patch deleted file mode 100644 index 0b7d956de5510..0000000000000 --- a/patches/chromium/add_zoom_limit_setters_to_webcontents.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: John Kleinschmidt -Date: Mon, 23 Sep 2019 17:07:53 -0400 -Subject: add zoom limit setters to webcontents - -Allows minimum_zoom_percent_ and maximum_zoom_percent_ to be set on WebContents. -This is needed by Electron to allow apps to limit how much an app can zoom in -or out. - -diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index c13511e26189e68376e29f38c4ae2e1cc8fd3c57..a5c4162b3c69b534f843e1b6737392c867fc88ea 100644 ---- a/content/browser/web_contents/web_contents_impl.cc -+++ b/content/browser/web_contents/web_contents_impl.cc -@@ -4124,10 +4124,18 @@ bool WebContentsImpl::GetClosedByUserGesture() { - return closed_by_user_gesture_; - } - -+void WebContentsImpl::SetMinimumZoomPercent(int zoom_percent) { -+ minimum_zoom_percent_ = zoom_percent; -+} -+ - int WebContentsImpl::GetMinimumZoomPercent() { - return minimum_zoom_percent_; - } - -+void WebContentsImpl::SetMaximumZoomPercent(int zoom_percent) { -+ maximum_zoom_percent_ = zoom_percent; -+} -+ - int WebContentsImpl::GetMaximumZoomPercent() { - return maximum_zoom_percent_; - } -diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h -index ea1b3581ead984ac084fc9a2b9daf85f6756ea5c..b967e02b4052426855a2af88abbced2076b3e04a 100644 ---- a/content/browser/web_contents/web_contents_impl.h -+++ b/content/browser/web_contents/web_contents_impl.h -@@ -447,7 +447,9 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, - void SystemDragEnded(RenderWidgetHost* source_rwh) override; - void SetClosedByUserGesture(bool value) override; - bool GetClosedByUserGesture() override; -+ void SetMinimumZoomPercent(int zoom_percent) override; - int GetMinimumZoomPercent() override; -+ void SetMaximumZoomPercent(int zoom_percent) override; - int GetMaximumZoomPercent() override; - void SetPageScale(float page_scale_factor) override; - gfx::Size GetPreferredSize() override; -@@ -1690,8 +1692,8 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, - bool closed_by_user_gesture_; - - // Minimum/maximum zoom percent. -- const int minimum_zoom_percent_; -- const int maximum_zoom_percent_; -+ int minimum_zoom_percent_; -+ int maximum_zoom_percent_; - - // Used to correctly handle integer zooming through a smooth scroll device. - float zoom_scroll_remainder_; -diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h -index 750de66b8002ba66d0f2247d0075da1e51ac764c..1a57feeb1dfe08f8ce1113cb5d8c8ab57d761094 100644 ---- a/content/public/browser/web_contents.h -+++ b/content/public/browser/web_contents.h -@@ -812,8 +812,10 @@ class WebContents : public PageNavigator, - virtual void SetClosedByUserGesture(bool value) = 0; - virtual bool GetClosedByUserGesture() = 0; - -- // Gets the minimum/maximum zoom percent. -+ // Gets/sets the minimum/maximum zoom percent. -+ virtual void SetMinimumZoomPercent(int zoom_percent) = 0; - virtual int GetMinimumZoomPercent() = 0; -+ virtual void SetMaximumZoomPercent(int zoom_percent) = 0; - virtual int GetMaximumZoomPercent() = 0; - - // Set the renderer's page scale to the given factor. diff --git a/shell/browser/api/atom_api_web_contents.cc b/shell/browser/api/atom_api_web_contents.cc index f6e9313a03a80..424c1718999bb 100644 --- a/shell/browser/api/atom_api_web_contents.cc +++ b/shell/browser/api/atom_api_web_contents.cc @@ -2326,15 +2326,6 @@ double WebContents::GetZoomFactor() const { return blink::PageZoomLevelToZoomFactor(level); } -void WebContents::SetZoomLimits(double min_zoom, double max_zoom) { - // Round the double to avoid returning incorrect minimum/maximum zoom - // percentages. - int minimum_percent = round(blink::PageZoomLevelToZoomFactor(min_zoom) * 100); - int maximum_percent = round(blink::PageZoomLevelToZoomFactor(max_zoom) * 100); - web_contents()->SetMinimumZoomPercent(minimum_percent); - web_contents()->SetMaximumZoomPercent(maximum_percent); -} - void WebContents::SetTemporaryZoomLevel(double level) { zoom_controller_->SetTemporaryZoomLevel(level); } diff --git a/shell/browser/api/atom_api_web_contents.h b/shell/browser/api/atom_api_web_contents.h index 96a18e28a9486..241e11f6d1049 100644 --- a/shell/browser/api/atom_api_web_contents.h +++ b/shell/browser/api/atom_api_web_contents.h @@ -272,7 +272,6 @@ class WebContents : public mate::TrackableObject, double GetZoomLevel() const; void SetZoomFactor(double factor); double GetZoomFactor() const; - void SetZoomLimits(double min_zoom, double max_zoom) override; // Callback triggered on permission response. void OnEnterFullscreenModeForTab( diff --git a/shell/common/api/api.mojom b/shell/common/api/api.mojom index 06d4e50c844c0..9548c0d30a385 100644 --- a/shell/common/api/api.mojom +++ b/shell/common/api/api.mojom @@ -90,8 +90,6 @@ interface ElectronBrowser { SetTemporaryZoomLevel(double zoom_level); - SetZoomLimits(double min_zoom, double max_zoom); - [Sync] DoGetZoomLevel() => (double result); }; diff --git a/shell/renderer/api/atom_api_web_frame.cc b/shell/renderer/api/atom_api_web_frame.cc index 6aa3c3258f58c..e97fbb2e2343e 100644 --- a/shell/renderer/api/atom_api_web_frame.cc +++ b/shell/renderer/api/atom_api_web_frame.cc @@ -265,17 +265,6 @@ void SetVisualZoomLevelLimits(v8::Local window, web_frame->View()->SetIgnoreViewportTagScaleLimits(true); } -void SetLayoutZoomLevelLimits(v8::Local window, - double min_level, - double max_level) { - content::RenderFrame* render_frame = GetRenderFrame(window); - mojom::ElectronBrowserPtr browser_ptr; - render_frame->GetRemoteInterfaces()->GetInterface( - mojo::MakeRequest(&browser_ptr)); - - browser_ptr->SetZoomLimits(min_level, max_level); -} - void AllowGuestViewElementDefinition(v8::Isolate* isolate, v8::Local window, v8::Local context, @@ -581,7 +570,6 @@ void Initialize(v8::Local exports, dict.SetMethod("setZoomFactor", &SetZoomFactor); dict.SetMethod("getZoomFactor", &GetZoomFactor); dict.SetMethod("setVisualZoomLevelLimits", &SetVisualZoomLevelLimits); - dict.SetMethod("setLayoutZoomLevelLimits", &SetLayoutZoomLevelLimits); dict.SetMethod("allowGuestViewElementDefinition", &AllowGuestViewElementDefinition); dict.SetMethod("getWebFrameId", &GetWebFrameId); From 95b787bf3f696b88d5f1502bfd921cd1c5ddad13 Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Tue, 26 Nov 2019 13:11:00 -0800 Subject: [PATCH 2/2] fix: deprecate setLayoutZoomLevelLimits --- docs/api/breaking-changes.md | 8 ++++++++ docs/api/web-contents.md | 4 +++- docs/api/web-frame.md | 4 +++- docs/api/webview-tag.md | 4 +++- lib/renderer/api/web-frame.ts | 7 +++++++ spec/api-web-frame-spec.js | 7 ------- spec/ts-smoke/electron/main.ts | 1 - spec/ts-smoke/electron/renderer.ts | 1 - 8 files changed, 24 insertions(+), 12 deletions(-) diff --git a/docs/api/breaking-changes.md b/docs/api/breaking-changes.md index d7e5f1c853bcf..0f8ad6bc0456e 100644 --- a/docs/api/breaking-changes.md +++ b/docs/api/breaking-changes.md @@ -100,6 +100,14 @@ const { ipcRenderer } = require('electron') ipcRenderer.invoke('openDevTools', webview.getWebContentsId()) ``` +### `webFrame.setLayoutZoomLevelLimits()` + +Chromium has removed support for changing the layout zoom level limits, and it +is beyond Electron's capacity to maintain it. The function will emit a warning +in Electron 8.x, and cease to exist in Electron 9.x. The layout zoom level +limits are now fixed at a minimum of 0.25 and a maximum of 5.0, as defined +[here](https://chromium.googlesource.com/chromium/src/+/938b37a6d2886bf8335fc7db792f1eb46c65b2ae/third_party/blink/common/page/page_zoom.cc#11). + ## Planned Breaking API Changes (7.0) ### Node Headers URL diff --git a/docs/api/web-contents.md b/docs/api/web-contents.md index 5ca77cee5de0e..4ce1e0c78d316 100644 --- a/docs/api/web-contents.md +++ b/docs/api/web-contents.md @@ -1124,7 +1124,7 @@ Sets the maximum and minimum pinch-to-zoom level. > contents.setVisualZoomLevelLimits(1, 3) > ``` -#### `contents.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` +#### `contents.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` _Deprecated_ * `minimumLevel` Number * `maximumLevel` Number @@ -1133,6 +1133,8 @@ Returns `Promise` Sets the maximum and minimum layout-based (i.e. non-visual) zoom level. +**Deprecated:** This API is no longer supported by Chromium. + #### `contents.undo()` Executes the editing command `undo` in web page. diff --git a/docs/api/web-frame.md b/docs/api/web-frame.md index f39dc70a066fb..da51509d47e30 100644 --- a/docs/api/web-frame.md +++ b/docs/api/web-frame.md @@ -56,13 +56,15 @@ Sets the maximum and minimum pinch-to-zoom level. > webFrame.setVisualZoomLevelLimits(1, 3) > ``` -### `webFrame.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` +### `webFrame.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` _Deprecated_ * `minimumLevel` Number * `maximumLevel` Number Sets the maximum and minimum layout-based (i.e. non-visual) zoom level. +**Deprecated:** This API is no longer supported by Chromium. + ### `webFrame.setSpellCheckProvider(language, provider)` * `language` String diff --git a/docs/api/webview-tag.md b/docs/api/webview-tag.md index ee0366a0931a9..c0fe3bc33183b 100644 --- a/docs/api/webview-tag.md +++ b/docs/api/webview-tag.md @@ -635,7 +635,7 @@ Returns `Promise` Sets the maximum and minimum pinch-to-zoom level. -### `.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` +### `.setLayoutZoomLevelLimits(minimumLevel, maximumLevel)` _Deprecated_ * `minimumLevel` Number * `maximumLevel` Number @@ -644,6 +644,8 @@ Returns `Promise` Sets the maximum and minimum layout-based (i.e. non-visual) zoom level. +**Deprecated:** This API is no longer supported by Chromium. + ### `.showDefinitionForSelection()` _macOS_ Shows pop-up dictionary that searches the selected word on the page. diff --git a/lib/renderer/api/web-frame.ts b/lib/renderer/api/web-frame.ts index 7b34e87229d1e..623cb7706636b 100644 --- a/lib/renderer/api/web-frame.ts +++ b/lib/renderer/api/web-frame.ts @@ -1,7 +1,10 @@ import { EventEmitter } from 'events' +import { deprecate } from 'electron' const binding = process.electronBinding('web_frame') +const setLayoutZoomLevelLimitsWarning = deprecate.warnOnce('setLayoutZoomLevelLimits') + class WebFrame extends EventEmitter { constructor (public context: Window) { super() @@ -45,6 +48,10 @@ class WebFrame extends EventEmitter { get routingId () { return binding._getRoutingId(this.context) } + + setLayoutZoomLevelLimits () { + setLayoutZoomLevelLimitsWarning() + } } // Populate the methods. diff --git a/spec/api-web-frame-spec.js b/spec/api-web-frame-spec.js index 25f3187073744..027ad5ab4d47f 100644 --- a/spec/api-web-frame-spec.js +++ b/spec/api-web-frame-spec.js @@ -6,13 +6,6 @@ const { expect } = chai chai.use(dirtyChai) describe('webFrame module', function () { - it('supports setting the visual and layout zoom level limits', function () { - expect(() => { - webFrame.setVisualZoomLevelLimits(1, 50) - webFrame.setLayoutZoomLevelLimits(0, 25) - }).to.not.throw() - }) - it('top is self for top frame', () => { expect(webFrame.top.context).to.equal(webFrame.context) }) diff --git a/spec/ts-smoke/electron/main.ts b/spec/ts-smoke/electron/main.ts index edbf40804d3ed..177fdba20b205 100644 --- a/spec/ts-smoke/electron/main.ts +++ b/spec/ts-smoke/electron/main.ts @@ -81,7 +81,6 @@ app.on('ready', () => { }) mainWindow.webContents.setVisualZoomLevelLimits(50, 200) - mainWindow.webContents.setLayoutZoomLevelLimits(50, 200) mainWindow.webContents.print({ silent: true, printBackground: false }) mainWindow.webContents.print() diff --git a/spec/ts-smoke/electron/renderer.ts b/spec/ts-smoke/electron/renderer.ts index b8d68d2d5109d..51cb8328874c0 100644 --- a/spec/ts-smoke/electron/renderer.ts +++ b/spec/ts-smoke/electron/renderer.ts @@ -57,7 +57,6 @@ webFrame.setZoomLevel(200) console.log(webFrame.getZoomLevel()) webFrame.setVisualZoomLevelLimits(50, 200) -webFrame.setLayoutZoomLevelLimits(50, 200) webFrame.setSpellCheckProvider('en-US', { spellCheck (words, callback) {