From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Rakina Zata Amni Date: Wed, 19 Jun 2024 02:49:58 +0000 Subject: Destruct controller before referenced WebUI in CreateWebUIIfNeeded Reset `controller` first before resetting `web_ui_`, since the controller still has a pointer to `web_ui_`, to avoid referencing to the already deleted `web_ui_` object from `controller`'s destructor. Bug: 345640549 Change-Id: Ie9c193436b593845d8269605f68bf94bc75beed7 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5624749 Commit-Queue: Rakina Zata Amni Reviewed-by: Nasko Oskov Cr-Commit-Position: refs/heads/main@{#1316830} diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index 8a9beaf3bfb9fe5eca8ca6675c7c45b4b880db03..85041c38c8d2e84d780948a4dab94013ce39dfbe 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc @@ -10268,6 +10268,11 @@ void NavigationRequest::CreateWebUIIfNeeded(RenderFrameHostImpl* frame_host) { bindings() != web_ui_->GetBindings()) { RecordAction(base::UserMetricsAction("ProcessSwapBindingsMismatch_RVHM")); base::WeakPtr self = GetWeakPtr(); + // Reset `controller` first before resetting `web_ui_`, since the controller + // still has a pointer to `web_ui_`, to avoid referencing to the already + // deleted `web_ui_` object from `controller`'s destructor. See also + // https://crbug.com/345640549. + controller.reset(); web_ui_.reset(); // Resetting the WebUI may indirectly call content's embedders and delete // `this`. There are no known occurrences of it, so we assume this never