| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/task_manager.h" | 5 #include "chrome/browser/task_manager.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
| (...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 //////////////////////////////////////////////////////////////////////////////// | 691 //////////////////////////////////////////////////////////////////////////////// |
| 692 // TaskManager class | 692 // TaskManager class |
| 693 //////////////////////////////////////////////////////////////////////////////// | 693 //////////////////////////////////////////////////////////////////////////////// |
| 694 | 694 |
| 695 // static | 695 // static |
| 696 void TaskManager::RegisterPrefs(PrefService* prefs) { | 696 void TaskManager::RegisterPrefs(PrefService* prefs) { |
| 697 prefs->RegisterDictionaryPref(prefs::kTaskManagerWindowPlacement); | 697 prefs->RegisterDictionaryPref(prefs::kTaskManagerWindowPlacement); |
| 698 } | 698 } |
| 699 | 699 |
| 700 TaskManager::TaskManager() | 700 TaskManager::TaskManager() |
| 701 : ALLOW_THIS_IN_INITIALIZER_LIST(model_(new TaskManagerModel(this))), | 701 : ALLOW_THIS_IN_INITIALIZER_LIST(model_(new TaskManagerModel(this))) { |
| 702 view_(NULL) { | |
| 703 } | 702 } |
| 704 | 703 |
| 705 TaskManager::~TaskManager() { | 704 TaskManager::~TaskManager() { |
| 706 } | 705 } |
| 707 | 706 |
| 708 // static | 707 bool TaskManager::IsBrowserProcess(int index) const { |
| 709 void TaskManager::Open() { | 708 // If some of the selection is out of bounds, ignore. This may happen when |
| 710 TaskManager* task_manager = GetInstance(); | 709 // killing a process that manages several pages. |
| 711 if (task_manager->view_) { | 710 return index < model_->ResourceCount() && |
| 712 task_manager->view_->ActivateWindow(); | 711 model_->GetResourceProcessHandle(index) == |
| 713 } else { | 712 base::GetCurrentProcessHandle(); |
| 714 task_manager->CreateView(); | |
| 715 task_manager->view_->OpenWindow(); | |
| 716 } | |
| 717 } | 713 } |
| 718 | 714 |
| 719 // static | 715 void TaskManager::KillProcess(int index) { |
| 720 void TaskManager::Close() { | 716 base::ProcessHandle process = model_->GetResourceProcessHandle(index); |
| 721 TaskManager* task_manager = GetInstance(); | 717 DCHECK(process); |
| 722 task_manager->view_->CloseWindow(); | 718 if (process != base::GetCurrentProcessHandle()) |
| 719 base::KillProcess(process, base::PROCESS_END_KILLED_BY_USER, false); |
| 723 } | 720 } |
| 724 | 721 |
| 725 bool TaskManager::BrowserProcessIsSelected() { | 722 void TaskManager::ActivateProcess(int index) { |
| 726 if (!view_) | |
| 727 return false; | |
| 728 std::vector<int> selection; | |
| 729 view_->GetSelection(&selection); | |
| 730 for (std::vector<int>::const_iterator iter = selection.begin(); | |
| 731 iter != selection.end(); ++iter) { | |
| 732 // If some of the selection is out of bounds, ignore. This may happen when | |
| 733 // killing a process that manages several pages. | |
| 734 if (*iter >= model_->ResourceCount()) | |
| 735 continue; | |
| 736 if (model_->GetResourceProcessHandle(*iter) == | |
| 737 base::GetCurrentProcessHandle()) | |
| 738 return true; | |
| 739 } | |
| 740 return false; | |
| 741 } | |
| 742 | |
| 743 void TaskManager::KillSelectedProcesses() { | |
| 744 std::vector<int> selection; | |
| 745 view_->GetSelection(&selection); | |
| 746 for (std::vector<int>::const_iterator iter = selection.begin(); | |
| 747 iter != selection.end(); ++iter) { | |
| 748 base::ProcessHandle process = model_->GetResourceProcessHandle(*iter); | |
| 749 DCHECK(process); | |
| 750 if (process == base::GetCurrentProcessHandle()) | |
| 751 continue; | |
| 752 base::KillProcess(process, base::PROCESS_END_KILLED_BY_USER, false); | |
| 753 } | |
| 754 } | |
| 755 | |
| 756 void TaskManager::ActivateFocusedTab() { | |
| 757 std::vector<int> focused; | |
| 758 view_->GetFocused(&focused); | |
| 759 int focused_size = static_cast<int>(focused.size()); | |
| 760 | |
| 761 DCHECK(focused_size == 1); | |
| 762 | |
| 763 // Gracefully return if there is not exactly one item in focus. | |
| 764 if (focused_size != 1) | |
| 765 return; | |
| 766 | |
| 767 // Otherwise, the one focused thing should be one the user intends to bring | |
| 768 // forth, so get see if GetTabContents returns non-null. If it does, activate | |
| 769 // those contents. | |
| 770 int index = focused[0]; | |
| 771 | |
| 772 // GetResourceTabContents returns a pointer to the relevant tab contents for | 723 // GetResourceTabContents returns a pointer to the relevant tab contents for |
| 773 // the resource. If the index doesn't correspond to a Tab (i.e. refers to | 724 // the resource. If the index doesn't correspond to a Tab (i.e. refers to |
| 774 // the Browser process or a plugin), GetTabContents will return NULL. | 725 // the Browser process or a plugin), GetTabContents will return NULL. |
| 775 TabContents* chosen_tab_contents = model_->GetResourceTabContents(index); | 726 TabContents* chosen_tab_contents = model_->GetResourceTabContents(index); |
| 776 | 727 if (chosen_tab_contents) |
| 777 if (!chosen_tab_contents) | 728 chosen_tab_contents->Activate(); |
| 778 return; | |
| 779 | |
| 780 chosen_tab_contents->Activate(); | |
| 781 } | 729 } |
| 782 | 730 |
| 783 void TaskManager::AddResourceProvider(ResourceProvider* provider) { | 731 void TaskManager::AddResourceProvider(ResourceProvider* provider) { |
| 784 model_->AddResourceProvider(provider); | 732 model_->AddResourceProvider(provider); |
| 785 } | 733 } |
| 786 | 734 |
| 787 void TaskManager::RemoveResourceProvider(ResourceProvider* provider) { | 735 void TaskManager::RemoveResourceProvider(ResourceProvider* provider) { |
| 788 model_->RemoveResourceProvider(provider); | 736 model_->RemoveResourceProvider(provider); |
| 789 } | 737 } |
| 790 | 738 |
| 791 void TaskManager::AddResource(Resource* resource) { | 739 void TaskManager::AddResource(Resource* resource) { |
| 792 model_->AddResource(resource); | 740 model_->AddResource(resource); |
| 793 } | 741 } |
| 794 | 742 |
| 795 void TaskManager::RemoveResource(Resource* resource) { | 743 void TaskManager::RemoveResource(Resource* resource) { |
| 796 model_->RemoveResource(resource); | 744 model_->RemoveResource(resource); |
| 797 } | 745 } |
| 798 | 746 |
| 799 void TaskManager::OnWindowClosed() { | 747 void TaskManager::OnWindowClosed() { |
| 800 model_->StopUpdating(); | 748 model_->StopUpdating(); |
| 801 model_->Clear(); | 749 model_->Clear(); |
| 802 view_ = NULL; | |
| 803 } | 750 } |
| 804 | 751 |
| 805 // static | 752 // static |
| 806 TaskManager* TaskManager::GetInstance() { | 753 TaskManager* TaskManager::GetInstance() { |
| 807 return Singleton<TaskManager>::get(); | 754 return Singleton<TaskManager>::get(); |
| 808 } | 755 } |
| OLD | NEW |