| 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);
|
| }
|
|
|