| 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) {
|
|
|