From 7c32deb70f279b0456ae3e9deed734b2fb2cd32f Mon Sep 17 00:00:00 2001 From: Jeremy Rose Date: Mon, 26 Apr 2021 00:24:12 -0700 Subject: [PATCH] refactor: use rfh instead of process id in permission manager (#28791) * refactor: use rfh instead of process id in permission manager * fix build * Update electron_permission_manager.cc * swap for smaller diff --- shell/browser/electron_permission_manager.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/shell/browser/electron_permission_manager.cc b/shell/browser/electron_permission_manager.cc index be66f3c09b5e..1d8c41e96882 100644 --- a/shell/browser/electron_permission_manager.cc +++ b/shell/browser/electron_permission_manager.cc @@ -9,6 +9,7 @@ #include #include "content/public/browser/child_process_security_policy.h" +#include "content/public/browser/global_routing_id.h" #include "content/public/browser/permission_controller.h" #include "content/public/browser/permission_type.h" #include "content/public/browser/render_frame_host.h" @@ -23,10 +24,9 @@ namespace electron { namespace { -bool WebContentsDestroyed(int process_id) { +bool WebContentsDestroyed(content::RenderFrameHost* rfh) { content::WebContents* web_contents = - static_cast(ElectronBrowserClient::Get()) - ->GetWebContentsFromProcessID(process_id); + content::WebContents::FromRenderFrameHost(rfh); if (!web_contents) return true; return web_contents->IsBeingDestroyed(); @@ -46,6 +46,7 @@ class ElectronPermissionManager::PendingRequest { const std::vector& permissions, StatusesCallback callback) : render_process_id_(render_frame_host->GetProcess()->GetID()), + render_frame_id_(render_frame_host->GetGlobalFrameRoutingId()), callback_(std::move(callback)), permissions_(permissions), results_(permissions.size(), blink::mojom::PermissionStatus::DENIED), @@ -71,7 +72,9 @@ class ElectronPermissionManager::PendingRequest { --remaining_results_; } - int render_process_id() const { return render_process_id_; } + content::RenderFrameHost* GetRenderFrameHost() { + return content::RenderFrameHost::FromID(render_frame_id_); + } bool IsComplete() const { return remaining_results_ == 0; } @@ -83,6 +86,7 @@ class ElectronPermissionManager::PendingRequest { private: int render_process_id_; + content::GlobalFrameRoutingId render_frame_id_; StatusesCallback callback_; std::vector permissions_; std::vector results_; @@ -99,7 +103,7 @@ void ElectronPermissionManager::SetPermissionRequestHandler( for (PendingRequestsMap::iterator iter(&pending_requests_); !iter.IsAtEnd(); iter.Advance()) { auto* request = iter.GetCurrentValue(); - if (!WebContentsDestroyed(request->render_process_id())) + if (!WebContentsDestroyed(request->GetRenderFrameHost())) request->RunCallback(); } pending_requests_.Clear();