Browse Source

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
Jeremy Rose 4 years ago
parent
commit
7c32deb70f
1 changed files with 9 additions and 5 deletions
  1. 9 5
      shell/browser/electron_permission_manager.cc

+ 9 - 5
shell/browser/electron_permission_manager.cc

@@ -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();