Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1653)

Unified Diff: chrome/browser/task_management/providers/web_contents/web_contents_task_provider.cc

Issue 1185183008: New Task Manager - Phase 1.3.2.B: Implement Tab Contents Task Providing (Prerender) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: gavinp's and thestig's comments Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/task_management/providers/web_contents/web_contents_task_provider.cc
diff --git a/chrome/browser/task_management/providers/web_contents/web_contents_task_provider.cc b/chrome/browser/task_management/providers/web_contents/web_contents_task_provider.cc
index 7cd7c0d624ced81be3d0ff6f67599c1e073b736c..4c2493141b6e598ca9a335917c2642549345bfa7 100644
--- a/chrome/browser/task_management/providers/web_contents/web_contents_task_provider.cc
+++ b/chrome/browser/task_management/providers/web_contents/web_contents_task_provider.cc
@@ -35,6 +35,10 @@ class WebContentsEntry : public content::WebContentsObserver {
// entry's WebContents.
void CreateAllTasks();
+ // Clears all the tasks in this entry. The provider's observer will be
+ // notified if |notify_observer| is true.
+ void ClearAllTasks(bool notify_observer);
+
// Returns the |RendererTask| that corresponds to the given
// |render_frame_host| or |nullptr| if the given frame is not tracked by this
// entry.
@@ -61,10 +65,6 @@ class WebContentsEntry : public content::WebContentsObserver {
// notifies the provider's observer of the tasks removal.
void ClearTaskForFrame(RenderFrameHost* render_frame_host);
- // Clears all the tasks in this entry. The provider's observer will be
- // notified if |notify_observer| is true.
- void ClearAllTasks(bool notify_observer);
-
// The provider that owns this entry.
WebContentsTaskProvider* provider_;
@@ -106,6 +106,21 @@ void WebContentsEntry::CreateAllTasks() {
base::Unretained(this)));
}
+void WebContentsEntry::ClearAllTasks(bool notify_observer) {
+ for (auto& pair : frames_by_site_instance_) {
+ FramesList& frames_list = pair.second;
+ DCHECK(!frames_list.empty());
+ RendererTask* task = tasks_by_frames_[frames_list[0]];
+ if (notify_observer)
+ provider_->NotifyObserverTaskRemoved(task);
+ delete task;
+ }
+
+ frames_by_site_instance_.clear();
+ tasks_by_frames_.clear();
+ main_frame_site_instance_ = nullptr;
+}
+
RendererTask* WebContentsEntry::GetTaskForFrame(
RenderFrameHost* render_frame_host) const {
auto itr = tasks_by_frames_.find(render_frame_host);
@@ -238,21 +253,6 @@ void WebContentsEntry::ClearTaskForFrame(RenderFrameHost* render_frame_host) {
}
}
-void WebContentsEntry::ClearAllTasks(bool notify_observer) {
- for (auto& pair : frames_by_site_instance_) {
- FramesList& frames_list = pair.second;
- DCHECK(!frames_list.empty());
- RendererTask* task = tasks_by_frames_[frames_list[0]];
- if (notify_observer)
- provider_->NotifyObserverTaskRemoved(task);
- delete task;
- }
-
- frames_by_site_instance_.clear();
- tasks_by_frames_.clear();
- main_frame_site_instance_ = nullptr;
-}
-
////////////////////////////////////////////////////////////////////////////////
WebContentsTaskProvider::WebContentsTaskProvider() : entries_map_() {
@@ -262,7 +262,8 @@ WebContentsTaskProvider::~WebContentsTaskProvider() {
STLDeleteValues(&entries_map_);
}
-void WebContentsTaskProvider::OnWebContentsTagCreated(WebContentsTag* tag) {
+void WebContentsTaskProvider::OnWebContentsTagCreated(
+ const WebContentsTag* tag) {
DCHECK(tag);
content::WebContents* web_contents = tag->web_contents();
DCHECK(web_contents);
@@ -282,6 +283,22 @@ void WebContentsTaskProvider::OnWebContentsTagCreated(WebContentsTag* tag) {
entry->CreateAllTasks();
}
+void WebContentsTaskProvider::OnWebContentsTagRemoved(
+ const WebContentsTag* tag) {
+ DCHECK(tag);
+ content::WebContents* web_contents = tag->web_contents();
+ DCHECK(web_contents);
+
+ auto itr = entries_map_.find(web_contents);
+ DCHECK(itr != entries_map_.end());
+ WebContentsEntry* entry = itr->second;
+
+ // Must manually clear the tasks and notify the observer.
+ entry->ClearAllTasks(true);
+ entries_map_.erase(itr);
+ delete entry;
+}
+
Task* WebContentsTaskProvider::GetTaskOfUrlRequest(int origin_pid,
int child_id,
int route_id) {

Powered by Google App Engine
This is Rietveld 408576698