diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index 45d0055d03..cde3cce492 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -972,11 +972,12 @@ WebContents::WebContents(v8::Isolate* isolate, void WebContents::InitZoomController(content::WebContents* web_contents, const gin_helper::Dictionary& options) { - WebContentsZoomController::CreateForWebContents(web_contents); - zoom_controller_ = WebContentsZoomController::FromWebContents(web_contents); + WebContentsZoomController* const zoom_controller = + WebContentsZoomController::GetOrCreateForWebContents(web_contents); + double zoom_factor; if (options.Get(options::kZoomFactor, &zoom_factor)) - zoom_controller_->SetDefaultZoomFactor(zoom_factor); + zoom_controller->SetDefaultZoomFactor(zoom_factor); // Nothing to do with ZoomController, but this function gets called in all // init cases! @@ -3867,12 +3868,16 @@ gfx::Size WebContents::GetSizeForNewRenderView(content::WebContents* wc) { return {}; } +WebContentsZoomController* WebContents::GetZoomController() const { + return WebContentsZoomController::FromWebContents(web_contents()); +} + void WebContents::SetZoomLevel(double level) { - zoom_controller_->SetZoomLevel(level); + GetZoomController()->SetZoomLevel(level); } double WebContents::GetZoomLevel() const { - return zoom_controller_->GetZoomLevel(); + return GetZoomController()->GetZoomLevel(); } void WebContents::SetZoomFactor(gin_helper::ErrorThrower thrower, @@ -3892,7 +3897,7 @@ double WebContents::GetZoomFactor() const { } void WebContents::SetTemporaryZoomLevel(double level) { - zoom_controller_->SetTemporaryZoomLevel(level); + GetZoomController()->SetTemporaryZoomLevel(level); } std::optional WebContents::GetPreloadScript() const { diff --git a/shell/browser/api/electron_api_web_contents.h b/shell/browser/api/electron_api_web_contents.h index c5e9164f70..9171f3325d 100644 --- a/shell/browser/api/electron_api_web_contents.h +++ b/shell/browser/api/electron_api_web_contents.h @@ -380,7 +380,7 @@ class WebContents final : public ExclusiveAccessContext, content::RenderFrameHost* Opener(); content::RenderFrameHost* FocusedFrame(); - WebContentsZoomController* GetZoomController() { return zoom_controller_; } + [[nodiscard]] WebContentsZoomController* GetZoomController() const; void AddObserver(ExtendedWebContentsObserver* obs) { observers_.AddObserver(obs); @@ -858,11 +858,6 @@ class WebContents final : public ExclusiveAccessContext, // destroyed before dialog_manager_, otherwise a crash would happen. std::unique_ptr inspectable_web_contents_; - // The zoom controller for this webContents. - // Note: owned by inspectable_web_contents_, so declare this *after* - // that field to ensure the dtor destroys them in the right order. - raw_ptr zoom_controller_ = nullptr; - std::optional pending_unload_url_ = std::nullopt; // Maps url to file path, used by the file requests sent from devtools. diff --git a/shell/browser/extensions/api/tabs/tabs_api.cc b/shell/browser/extensions/api/tabs/tabs_api.cc index 6c01e31cfb..2177fe80a6 100644 --- a/shell/browser/extensions/api/tabs/tabs_api.cc +++ b/shell/browser/extensions/api/tabs/tabs_api.cc @@ -398,9 +398,7 @@ ExtensionFunction::ResponseAction TabsGetZoomFunction::Run() { if (!contents) return RespondNow(Error("No such tab")); - double zoom_level = contents->GetZoomController()->GetZoomLevel(); - double zoom_factor = blink::ZoomLevelToZoomFactor(zoom_level); - + const double zoom_factor = contents->GetZoomFactor(); return RespondNow(ArgumentList(tabs::GetZoom::Results::Create(zoom_factor))); } @@ -414,9 +412,9 @@ ExtensionFunction::ResponseAction TabsGetZoomSettingsFunction::Run() { if (!contents) return RespondNow(Error("No such tab")); - auto* zoom_controller = contents->GetZoomController(); - WebContentsZoomController::ZoomMode zoom_mode = - contents->GetZoomController()->zoom_mode(); + const auto* zoom_controller = contents->GetZoomController(); + const WebContentsZoomController::ZoomMode zoom_mode = + zoom_controller->zoom_mode(); tabs::ZoomSettings zoom_settings; ZoomModeToZoomSettings(zoom_mode, &zoom_settings); zoom_settings.default_zoom_factor =