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 "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*>(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<content::PermissionType>& 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<content::PermissionType> permissions_;
std::vector<blink::mojom::PermissionStatus> 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();