| Index: chrome/browser/ui/webui/task_manager_dialog.cc
|
| diff --git a/chrome/browser/ui/webui/task_manager_dialog.cc b/chrome/browser/ui/webui/task_manager_dialog.cc
|
| index 4c787ddbcb3de156c3a2c0a0c57d7c5d17cedacb..5bf6ad002ec811f652818ea1123be2a46172a500 100644
|
| --- a/chrome/browser/ui/webui/task_manager_dialog.cc
|
| +++ b/chrome/browser/ui/webui/task_manager_dialog.cc
|
| @@ -6,13 +6,19 @@
|
|
|
| #include "base/memory/singleton.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/platform_util.h"
|
| #include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/browser_dialogs.h"
|
| #include "chrome/browser/ui/browser_list.h"
|
| #include "chrome/browser/ui/webui/html_dialog_ui.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "grit/google_chrome_strings.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| +#if defined(OS_CHROMEOS)
|
| +#include "views/widget/widget.h"
|
| +#endif
|
| +
|
| class TaskManagerDialogImpl : public HtmlDialogUIDelegate {
|
| public:
|
| TaskManagerDialogImpl();
|
| @@ -54,7 +60,6 @@ class TaskManagerDialogImpl : public HtmlDialogUIDelegate {
|
| virtual void OnCloseContents(TabContents* source, bool* out_close_dialog)
|
| OVERRIDE {
|
| *out_close_dialog = true;
|
| - OnCloseDialog();
|
| }
|
| virtual bool ShouldShowDialogTitle() const OVERRIDE {
|
| return false;
|
| @@ -67,7 +72,9 @@ class TaskManagerDialogImpl : public HtmlDialogUIDelegate {
|
| void ShowDialog(bool is_background_page_mode);
|
| void OpenHtmlDialog();
|
|
|
| - bool is_shown_;
|
| + int show_count_;
|
| +
|
| + gfx::NativeWindow window_;
|
| bool is_background_page_mode_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(TaskManagerDialogImpl);
|
| @@ -83,7 +90,9 @@ TaskManagerDialogImpl* TaskManagerDialogImpl::GetInstance() {
|
| }
|
|
|
| TaskManagerDialogImpl::TaskManagerDialogImpl()
|
| - : is_shown_(false), is_background_page_mode_(false) {
|
| + : show_count_(0),
|
| + window_(NULL),
|
| + is_background_page_mode_(false) {
|
| }
|
|
|
| TaskManagerDialogImpl::~TaskManagerDialogImpl() {
|
| @@ -97,22 +106,29 @@ void TaskManagerDialogImpl::Show(bool is_background_page_mode) {
|
| }
|
|
|
| void TaskManagerDialogImpl::ShowDialog(bool is_background_page_mode) {
|
| - // TODO(yoshiki): Brings up existing UI when called with is_shown_ == TRUE
|
| - if (!is_shown_) {
|
| - is_shown_ = true;
|
| - is_background_page_mode_ = is_background_page_mode;
|
| - OpenHtmlDialog();
|
| + if (show_count_ > 0) {
|
| +#if defined(OS_CHROMEOS)
|
| + // Closes current TaskManager and Opens new one.
|
| + views::Widget::GetWidgetForNativeWindow(window_)->Close();
|
| +#else
|
| + // TODO(yoshiki): Supports the other platforms.
|
| + platform_util::ActivateWindow(window_);
|
| + return;
|
| +#endif
|
| }
|
| + is_background_page_mode_ = is_background_page_mode;
|
| + OpenHtmlDialog();
|
| + ++show_count_;
|
| }
|
|
|
| void TaskManagerDialogImpl::OnCloseDialog() {
|
| - if (is_shown_)
|
| - is_shown_ = false;
|
| + if (show_count_ > 0)
|
| + --show_count_;
|
| }
|
|
|
| void TaskManagerDialogImpl::OpenHtmlDialog() {
|
| Browser* browser = BrowserList::GetLastActive();
|
| - browser->BrowserShowHtmlDialog(this, NULL);
|
| + window_ = browser->BrowserShowHtmlDialog(this, NULL);
|
| }
|
|
|
| // ****************************************************
|
|
|