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

Side by Side Diff: chrome/browser/ui/webui/task_manager_dialog.cc

Issue 9465014: Added yoshiki@chromium.org to task-manager related OWNERS files. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Fixed include path. Created 8 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/webui/task_manager_dialog.h"
6
7 #include "base/bind.h"
8 #include "base/command_line.h"
9 #include "base/memory/singleton.h"
10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/defaults.h"
13 #include "chrome/browser/platform_util.h"
14 #include "chrome/browser/prefs/pref_service.h"
15 #include "chrome/browser/prefs/scoped_user_pref_update.h"
16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/ui/browser.h"
18 #include "chrome/browser/ui/browser_dialogs.h"
19 #include "chrome/browser/ui/browser_list.h"
20 #include "chrome/browser/ui/dialog_style.h"
21 #include "chrome/browser/ui/webui/html_dialog_ui.h"
22 #include "chrome/common/chrome_switches.h"
23 #include "chrome/common/pref_names.h"
24 #include "chrome/common/url_constants.h"
25 #include "grit/google_chrome_strings.h"
26 #include "ui/base/l10n/l10n_util.h"
27
28 #if defined(OS_CHROMEOS)
29 #include "ui/views/widget/widget.h"
30 #endif
31
32 using content::BrowserThread;
33 using content::WebContents;
34 using content::WebUIMessageHandler;
35
36 class TaskManagerDialogImpl : public HtmlDialogUIDelegate {
37 public:
38 TaskManagerDialogImpl();
39
40 static void Show(bool is_background_page_mode);
41 static TaskManagerDialogImpl* GetInstance();
42
43 protected:
44 friend struct DefaultSingletonTraits<TaskManagerDialogImpl>;
45 virtual ~TaskManagerDialogImpl();
46
47 void OnCloseDialog();
48
49 // Overridden from HtmlDialogUIDelegate:
50 virtual ui::ModalType GetDialogModalType() const OVERRIDE {
51 return ui::MODAL_TYPE_NONE;
52 }
53 virtual string16 GetDialogTitle() const OVERRIDE {
54 return l10n_util::GetStringUTF16(IDS_TASK_MANAGER_TITLE);
55 }
56 virtual GURL GetDialogContentURL() const OVERRIDE {
57 std::string url_string(chrome::kChromeUITaskManagerURL);
58 url_string += "?";
59 if (browser_defaults::kShowCancelButtonInTaskManager)
60 url_string += "showclose=1&";
61 if (browser_defaults::kShowHtmlTitleBarInTaskManager)
62 url_string += "showtitle=1&";
63 if (is_background_page_mode_)
64 url_string += "background=1";
65 return GURL(url_string);
66 }
67 virtual void GetWebUIMessageHandlers(
68 std::vector<WebUIMessageHandler*>* handlers) const OVERRIDE {
69 }
70 virtual void GetDialogSize(gfx::Size* size) const OVERRIDE {
71 // If dialog's bounds are previously saved, use them.
72 if (g_browser_process->local_state()) {
73 const DictionaryValue* placement_pref =
74 g_browser_process->local_state()->GetDictionary(
75 prefs::kTaskManagerWindowPlacement);
76 int width, height;
77 if (placement_pref &&
78 placement_pref->GetInteger("width", &width) &&
79 placement_pref->GetInteger("height", &height)) {
80 size->SetSize(std::max(1, width), std::max(1, height));
81 return;
82 }
83 }
84
85 // Otherwise set default size.
86 size->SetSize(640, 480);
87 }
88 virtual std::string GetDialogArgs() const OVERRIDE {
89 return std::string();
90 }
91 virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE {
92 OnCloseDialog();
93 }
94 virtual void OnCloseContents(WebContents* source, bool* out_close_dialog)
95 OVERRIDE {
96 *out_close_dialog = true;
97 }
98 virtual bool ShouldShowDialogTitle() const OVERRIDE {
99 return false;
100 }
101 virtual bool HandleContextMenu(
102 const content::ContextMenuParams& params) OVERRIDE {
103 return true;
104 }
105 virtual void StoreDialogSize(const gfx::Size& dialog_size) OVERRIDE {
106 // Store the dialog's bounds so that it can be restored with the same bounds
107 // the next time it's opened.
108 if (g_browser_process->local_state()) {
109 DictionaryPrefUpdate update(g_browser_process->local_state(),
110 prefs::kTaskManagerWindowPlacement);
111 DictionaryValue* placement_pref = update.Get();
112 placement_pref->SetInteger("width", dialog_size.width());
113 placement_pref->SetInteger("height", dialog_size.height());
114 }
115 }
116
117 private:
118 void ShowDialog(bool is_background_page_mode);
119 void OpenHtmlDialog();
120
121 int show_count_;
122
123 gfx::NativeWindow window_;
124 bool is_background_page_mode_;
125
126 DISALLOW_COPY_AND_ASSIGN(TaskManagerDialogImpl);
127 };
128
129 // ****************************************************
130
131 // static
132 TaskManagerDialogImpl* TaskManagerDialogImpl::GetInstance() {
133 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO));
134 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::FILE));
135 return Singleton<TaskManagerDialogImpl>::get();
136 }
137
138 TaskManagerDialogImpl::TaskManagerDialogImpl()
139 : show_count_(0),
140 window_(NULL),
141 is_background_page_mode_(false) {
142 }
143
144 TaskManagerDialogImpl::~TaskManagerDialogImpl() {
145 }
146
147 // static
148 void TaskManagerDialogImpl::Show(bool is_background_page_mode) {
149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
150 TaskManagerDialogImpl* dialog = TaskManagerDialogImpl::GetInstance();
151 dialog->ShowDialog(is_background_page_mode);
152 }
153
154 void TaskManagerDialogImpl::ShowDialog(bool is_background_page_mode) {
155 if (show_count_ > 0) {
156 #if defined(OS_CHROMEOS)
157 // Closes current TaskManager and Opens new one.
158 views::Widget::GetWidgetForNativeWindow(window_)->Close();
159 #else
160 // TODO(yoshiki): Supports the other platforms.
161 platform_util::ActivateWindow(window_);
162 return;
163 #endif
164 }
165 is_background_page_mode_ = is_background_page_mode;
166 OpenHtmlDialog();
167 ++show_count_;
168 }
169
170 void TaskManagerDialogImpl::OnCloseDialog() {
171 if (show_count_ > 0)
172 --show_count_;
173 }
174
175 void TaskManagerDialogImpl::OpenHtmlDialog() {
176 Browser* browser = BrowserList::GetLastActive();
177 DCHECK(browser);
178 window_ = browser::ShowHtmlDialog(NULL,
179 browser->profile()->GetOriginalProfile(),
180 NULL,
181 this,
182 STYLE_GENERIC);
183 }
184
185 // ****************************************************
186 //
187 // static
188 void TaskManagerDialog::Show() {
189 BrowserThread::PostTask(
190 BrowserThread::UI, FROM_HERE,
191 base::Bind(&TaskManagerDialogImpl::Show, false));
192 }
193
194 // static
195 void TaskManagerDialog::ShowBackgroundPages() {
196 BrowserThread::PostTask(
197 BrowserThread::UI, FROM_HERE,
198 base::Bind(&TaskManagerDialogImpl::Show, true));
199 }
200
201 // static
202 bool TaskManagerDialog::UseWebUITaskManager() {
203 return CommandLine::ForCurrentProcess()->HasSwitch(
204 switches::kWebUITaskManager);
205 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/task_manager_dialog.h ('k') | chrome/browser/ui/webui/task_manager_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698