diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-10 06:57:20 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-10 06:57:20 +0000 |
commit | ddf94c33b530c55d0fc25abfc2ffa2a633b95832 (patch) | |
tree | 54437033ae833f07eb4ec523b237349199ce221c /chrome/browser/task_manager.cc | |
parent | c8471bd746e5e80c46e0fa282bef3a7792a453d3 (diff) | |
download | chromium_src-ddf94c33b530c55d0fc25abfc2ffa2a633b95832.zip chromium_src-ddf94c33b530c55d0fc25abfc2ffa2a633b95832.tar.gz chromium_src-ddf94c33b530c55d0fc25abfc2ffa2a633b95832.tar.bz2 |
Destroy TaskManager's view when its window is closed.
TEST=Open the task manager. Close it. Open again and close. Browser should not crash.
http://crbug.com/13361
Review URL: http://codereview.chromium.org/119299
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18038 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/task_manager.cc')
-rw-r--r-- | chrome/browser/task_manager.cc | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/chrome/browser/task_manager.cc b/chrome/browser/task_manager.cc index f11a91a..8f174cc 100644 --- a/chrome/browser/task_manager.cc +++ b/chrome/browser/task_manager.cc @@ -78,7 +78,6 @@ int TaskManagerModel::ResourceCount() const { } void TaskManagerModel::SetObserver(TaskManagerModelObserver* observer) { - DCHECK(!observer_) << "can set observer only once"; observer_ = observer; } @@ -444,8 +443,8 @@ void TaskManagerModel::AddResource(TaskManager::Resource* resource) { } // Notify the table that the contents have changed for it to redraw. - DCHECK(observer_); - observer_->OnItemsAdded(new_entry_index, 1); + if (observer_) + observer_->OnItemsAdded(new_entry_index, 1); } void TaskManagerModel::RemoveResource(TaskManager::Resource* resource) { @@ -497,7 +496,8 @@ void TaskManagerModel::RemoveResource(TaskManager::Resource* resource) { displayed_network_usage_map_.erase(net_iter); // Notify the table that the contents have changed. - observer_->OnItemsRemoved(index, 1); + if (observer_) + observer_->OnItemsRemoved(index, 1); } void TaskManagerModel::Clear() { @@ -524,7 +524,8 @@ void TaskManagerModel::Clear() { current_byte_count_map_.clear(); displayed_network_usage_map_.clear(); - observer_->OnItemsRemoved(0, size); + if (observer_) + observer_->OnItemsRemoved(0, size); } } @@ -570,7 +571,7 @@ void TaskManagerModel::Refresh() { // Then we reset the current byte count. iter->second = 0; } - if (!resources_.empty()) + if (!resources_.empty() && observer_) observer_->OnItemsChanged(0, ResourceCount()); // Schedule the next update. @@ -697,8 +698,8 @@ void TaskManager::RegisterPrefs(PrefService* prefs) { } TaskManager::TaskManager() - : ALLOW_THIS_IN_INITIALIZER_LIST(model_(new TaskManagerModel(this))) { - Init(); + : ALLOW_THIS_IN_INITIALIZER_LIST(model_(new TaskManagerModel(this))), + view_(NULL) { } TaskManager::~TaskManager() { @@ -707,7 +708,12 @@ TaskManager::~TaskManager() { // static void TaskManager::Open() { TaskManager* task_manager = GetInstance(); - task_manager->view_->OpenWindow(); + if (task_manager->view_) { + task_manager->view_->ActivateWindow(); + } else { + task_manager->CreateView(); + task_manager->view_->OpenWindow(); + } } // static @@ -717,7 +723,7 @@ void TaskManager::Close() { } bool TaskManager::BrowserProcessIsSelected() { - if (!view_.get()) + if (!view_) return false; std::vector<int> selection; view_->GetSelection(&selection); @@ -793,6 +799,7 @@ void TaskManager::RemoveResource(Resource* resource) { void TaskManager::OnWindowClosed() { model_->StopUpdating(); model_->Clear(); + view_ = NULL; } // static |