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
This commit is contained in:
Jeremy Rose 2021-04-26 00:24:12 -07:00 committed by GitHub
parent dc7fa1d9f1
commit 7c32deb70f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -9,6 +9,7 @@
#include <vector> #include <vector>
#include "content/public/browser/child_process_security_policy.h" #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_controller.h"
#include "content/public/browser/permission_type.h" #include "content/public/browser/permission_type.h"
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
@ -23,10 +24,9 @@ namespace electron {
namespace { namespace {
bool WebContentsDestroyed(int process_id) { bool WebContentsDestroyed(content::RenderFrameHost* rfh) {
content::WebContents* web_contents = content::WebContents* web_contents =
static_cast<ElectronBrowserClient*>(ElectronBrowserClient::Get()) content::WebContents::FromRenderFrameHost(rfh);
->GetWebContentsFromProcessID(process_id);
if (!web_contents) if (!web_contents)
return true; return true;
return web_contents->IsBeingDestroyed(); return web_contents->IsBeingDestroyed();
@ -46,6 +46,7 @@ class ElectronPermissionManager::PendingRequest {
const std::vector<content::PermissionType>& permissions, const std::vector<content::PermissionType>& permissions,
StatusesCallback callback) StatusesCallback callback)
: render_process_id_(render_frame_host->GetProcess()->GetID()), : render_process_id_(render_frame_host->GetProcess()->GetID()),
render_frame_id_(render_frame_host->GetGlobalFrameRoutingId()),
callback_(std::move(callback)), callback_(std::move(callback)),
permissions_(permissions), permissions_(permissions),
results_(permissions.size(), blink::mojom::PermissionStatus::DENIED), results_(permissions.size(), blink::mojom::PermissionStatus::DENIED),
@ -71,7 +72,9 @@ class ElectronPermissionManager::PendingRequest {
--remaining_results_; --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; } bool IsComplete() const { return remaining_results_ == 0; }
@ -83,6 +86,7 @@ class ElectronPermissionManager::PendingRequest {
private: private:
int render_process_id_; int render_process_id_;
content::GlobalFrameRoutingId render_frame_id_;
StatusesCallback callback_; StatusesCallback callback_;
std::vector<content::PermissionType> permissions_; std::vector<content::PermissionType> permissions_;
std::vector<blink::mojom::PermissionStatus> results_; std::vector<blink::mojom::PermissionStatus> results_;
@ -99,7 +103,7 @@ void ElectronPermissionManager::SetPermissionRequestHandler(
for (PendingRequestsMap::iterator iter(&pending_requests_); !iter.IsAtEnd(); for (PendingRequestsMap::iterator iter(&pending_requests_); !iter.IsAtEnd();
iter.Advance()) { iter.Advance()) {
auto* request = iter.GetCurrentValue(); auto* request = iter.GetCurrentValue();
if (!WebContentsDestroyed(request->render_process_id())) if (!WebContentsDestroyed(request->GetRenderFrameHost()))
request->RunCallback(); request->RunCallback();
} }
pending_requests_.Clear(); pending_requests_.Clear();