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:
parent
dc7fa1d9f1
commit
7c32deb70f
1 changed files with 9 additions and 5 deletions
|
@ -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();
|
||||||
|
|
Loading…
Add table
Reference in a new issue