Index: chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc |
diff --git a/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc b/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc |
index 98284767b575d8e5a8d0a1d58f220a3fe55178e6..43dd6ece4ffa9838c37835fdbea1597e6e8b1404 100644 |
--- a/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc |
+++ b/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc |
@@ -8,6 +8,7 @@ |
#include "base/macros.h" |
#include "chrome/browser/task_manager/providers/web_contents/subframe_task.h" |
#include "chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.h" |
+#include "content/public/browser/navigation_handle.h" |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_widget_host.h" |
@@ -161,18 +162,27 @@ void WebContentsEntry::RenderProcessGone(base::TerminationStatus status) { |
void WebContentsEntry::OnRendererUnresponsive( |
RenderWidgetHost* render_widget_host) { |
- RendererTask* task = GetTaskForFrame(web_contents()->GetMainFrame()); |
+ // Find the first RenderFrameHost matching the RenderWidgetHost. |
+ RendererTask* task = nullptr; |
+ for (const auto& pair : tasks_by_frames_) { |
+ if (pair.first->GetView() == render_widget_host->GetView()) { |
+ DCHECK_EQ(pair.first->GetProcess(), render_widget_host->GetProcess()); |
+ task = pair.second; |
+ break; |
+ } |
+ } |
if (!task) |
return; |
- DCHECK_EQ(render_widget_host->GetProcess(), |
- web_contents()->GetMainFrame()->GetProcess()); |
- |
provider_->NotifyObserverTaskUnresponsive(task); |
} |
void WebContentsEntry::DidFinishNavigation( |
content::NavigationHandle* navigation_handle) { |
+ // We only need to update tasks for main frame navigations. |
+ if (!navigation_handle->IsInMainFrame()) |
+ return; |
+ |
RendererTask* main_frame_task = |
GetTaskForFrame(web_contents()->GetMainFrame()); |
if (!main_frame_task) |