Index: chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc |
diff --git a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc |
index 62d5c11edb6d276be915cdf0ed390c7b5add2efa..15b752a901880bbf6eb99644bb20d6b7694036a4 100644 |
--- a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc |
+++ b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc |
@@ -9,6 +9,7 @@ |
#include "content/public/browser/render_process_host.h" |
#include "content/public/common/service_manager_connection.h" |
#include "services/resource_coordinator/public/cpp/resource_coordinator_features.h" |
+#include "services/resource_coordinator/public/interfaces/coordination_unit.mojom.h" |
DEFINE_WEB_CONTENTS_USER_DATA_KEY(ResourceCoordinatorWebContentsObserver); |
@@ -51,9 +52,60 @@ void ResourceCoordinatorWebContentsObserver::DidFinishNavigation( |
auto* frame_resource_coordinator = |
render_frame_host->GetFrameResourceCoordinator(); |
+ |
tab_resource_coordinator_->AddChild(*frame_resource_coordinator); |
+ content::RenderFrameHost* parent_frame_host = render_frame_host->GetParent(); |
+ if (parent_frame_host) { |
+ auto* parent_frame_resource_coordinator = |
+ parent_frame_host->GetFrameResourceCoordinator(); |
+ parent_frame_resource_coordinator->AddChild(*frame_resource_coordinator); |
+ } |
+ |
auto* process_resource_coordinator = |
render_frame_host->GetProcess()->GetProcessResourceCoordinator(); |
process_resource_coordinator->AddChild(*frame_resource_coordinator); |
+ |
+ if (navigation_handle->IsInMainFrame()) { |
+ base::Value url_value = base::Value(navigation_handle->GetURL().spec()); |
+ tab_resource_coordinator_->SetProperty( |
+ resource_coordinator::mojom::PropertyType::kTabURL, url_value); |
+ } |
+} |
+ |
+void ResourceCoordinatorWebContentsObserver::RemoveFrameFromParents( |
+ content::RenderFrameHost* render_frame_host) { |
+ auto* frame_resource_coordinator = |
+ render_frame_host->GetFrameResourceCoordinator(); |
+ |
+ tab_resource_coordinator_->RemoveChild(*frame_resource_coordinator); |
+ |
+ content::RenderFrameHost* parent_frame_host = render_frame_host->GetParent(); |
+ if (parent_frame_host) { |
+ auto* parent_frame_resource_coordinator = |
+ parent_frame_host->GetFrameResourceCoordinator(); |
+ parent_frame_resource_coordinator->RemoveChild(*frame_resource_coordinator); |
+ } |
+ |
+ auto* process_resource_coordinator = |
+ render_frame_host->GetProcess()->GetProcessResourceCoordinator(); |
+ process_resource_coordinator->RemoveChild(*frame_resource_coordinator); |
+} |
+ |
+void ResourceCoordinatorWebContentsObserver::RenderFrameDeleted( |
+ content::RenderFrameHost* render_frame_host) { |
+ RemoveFrameFromParents(render_frame_host); |
+} |
+ |
+void ResourceCoordinatorWebContentsObserver::RenderFrameHostChanged( |
+ content::RenderFrameHost* old_host, |
+ content::RenderFrameHost* new_host) { |
+ if (old_host) { |
+ RemoveFrameFromParents(old_host); |
+ } |
+} |
+ |
+void ResourceCoordinatorWebContentsObserver::FrameDeleted( |
+ content::RenderFrameHost* render_frame_host) { |
+ RemoveFrameFromParents(render_frame_host); |
} |