From a6539cdfd95230b96139971a4248a5ce79603c93 Mon Sep 17 00:00:00 2001 From: "msw@chromium.org" Date: Thu, 20 Feb 2014 12:50:36 +0000 Subject: Refactor Windows MessageBox fallback code. Inline the Windows-specific NativeShowMessageBox. Pass the parent HWND argument to the underlying call. Use MB_ICONQUESTION for MESSAGE_BOX_TYPE_QUESTION. BUG=NONE TEST=No Win MessageBox regressions; better icon for any fallback question MessageBox. R=sky@chromium.org Review URL: https://codereview.chromium.org/172633004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@252197 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/hang_monitor/hung_plugin_action.cc | 7 ++--- chrome/browser/ui/simple_message_box.h | 3 +- .../browser/ui/views/simple_message_box_views.cc | 33 ++++++++++++++++++---- chrome/browser/ui/views/simple_message_box_win.cc | 30 -------------------- chrome/browser/ui/views/simple_message_box_win.h | 19 ------------- chrome/chrome_browser_ui.gypi | 2 -- 6 files changed, 30 insertions(+), 64 deletions(-) delete mode 100644 chrome/browser/ui/views/simple_message_box_win.cc delete mode 100644 chrome/browser/ui/views/simple_message_box_win.h diff --git a/chrome/browser/hang_monitor/hung_plugin_action.cc b/chrome/browser/hang_monitor/hung_plugin_action.cc index 4ce6f14..2aa2b4c 100644 --- a/chrome/browser/hang_monitor/hung_plugin_action.cc +++ b/chrome/browser/hang_monitor/hung_plugin_action.cc @@ -8,7 +8,7 @@ #include "base/metrics/histogram.h" #include "base/version.h" -#include "chrome/browser/ui/views/simple_message_box_win.h" +#include "chrome/browser/ui/simple_message_box.h" #include "chrome/common/logging_chrome.h" #include "content/public/browser/plugin_service.h" #include "content/public/common/webplugininfo.h" @@ -113,10 +113,7 @@ bool HungPluginAction::OnHungWindowDetected(HWND hung_window, HungWindowResponseCallback, reinterpret_cast(this)); current_hung_plugin_window_ = hung_window; - // We use chrome::NativeShowMessageBox instead of chrome::ShowMessageBox - // because the latter depends on UI-thread classes on Win Aura. See - // http://crbug.com/330424. - if (chrome::NativeShowMessageBox( + if (chrome::ShowMessageBox( NULL, title, message, chrome::MESSAGE_BOX_TYPE_QUESTION) == chrome::MESSAGE_BOX_RESULT_YES) { *action = HungWindowNotification::HUNG_WINDOW_TERMINATE_PROCESS; diff --git a/chrome/browser/ui/simple_message_box.h b/chrome/browser/ui/simple_message_box.h index c289379..e4a155b 100644 --- a/chrome/browser/ui/simple_message_box.h +++ b/chrome/browser/ui/simple_message_box.h @@ -19,8 +19,7 @@ enum MessageBoxType { MESSAGE_BOX_TYPE_INFORMATION, // Shows an OK button. MESSAGE_BOX_TYPE_WARNING, // Shows an OK button. MESSAGE_BOX_TYPE_QUESTION, // Shows YES and NO buttons. - MESSAGE_BOX_TYPE_OK_CANCEL, // Shows OK and CANCEL buttons (Windows or aura - // only). + MESSAGE_BOX_TYPE_OK_CANCEL, // Shows OK and CANCEL buttons (Aura only). }; // Shows a dialog box with the given |title| and |message|. If |parent| is diff --git a/chrome/browser/ui/views/simple_message_box_views.cc b/chrome/browser/ui/views/simple_message_box_views.cc index 3e85e68..146924b 100644 --- a/chrome/browser/ui/views/simple_message_box_views.cc +++ b/chrome/browser/ui/views/simple_message_box_views.cc @@ -23,7 +23,8 @@ #include "ui/views/window/dialog_delegate.h" #if defined(OS_WIN) -#include "chrome/browser/ui/views/simple_message_box_win.h" +#include "ui/base/win/message_box_win.h" +#include "ui/views/win/hwnd_util.h" #endif namespace chrome { @@ -185,18 +186,38 @@ uint32_t SimpleMessageBoxViews::Dispatch(const base::NativeEvent& event) { SimpleMessageBoxViews::~SimpleMessageBoxViews() { } +#if defined(OS_WIN) +UINT GetMessageBoxFlagsFromType(MessageBoxType type) { + UINT flags = MB_SETFOREGROUND; + switch (type) { + case MESSAGE_BOX_TYPE_INFORMATION: + return flags | MB_OK | MB_ICONINFORMATION; + case MESSAGE_BOX_TYPE_WARNING: + return flags | MB_OK | MB_ICONWARNING; + case MESSAGE_BOX_TYPE_QUESTION: + return flags | MB_YESNO | MB_ICONQUESTION; + case MESSAGE_BOX_TYPE_OK_CANCEL: + return flags | MB_OKCANCEL | MB_ICONWARNING; + } + NOTREACHED(); + return flags | MB_OK | MB_ICONWARNING; +} +#endif + MessageBoxResult ShowMessageBoxImpl(gfx::NativeWindow parent, const base::string16& title, const base::string16& message, MessageBoxType type, const base::string16& yes_text, const base::string16& no_text) { - #if defined(OS_WIN) - // If we're very early, we can't show a GPU-based dialog, so fallback to - // plain Windows MessageBox. - if (!ui::ContextFactory::GetInstance()) - return NativeShowMessageBox(NULL, title, message, type); + // GPU-based dialogs can't be used early on; fallback to a Windows MessageBox. + if (!ui::ContextFactory::GetInstance()) { + int result = ui::MessageBox(views::HWNDForNativeWindow(parent), message, + title, GetMessageBoxFlagsFromType(type)); + return (result == IDYES || result == IDOK) ? + MESSAGE_BOX_RESULT_YES : MESSAGE_BOX_RESULT_NO; + } #endif scoped_refptr dialog( diff --git a/chrome/browser/ui/views/simple_message_box_win.cc b/chrome/browser/ui/views/simple_message_box_win.cc deleted file mode 100644 index c769195..0000000 --- a/chrome/browser/ui/views/simple_message_box_win.cc +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/simple_message_box.h" - -#include "ui/base/win/message_box_win.h" - -namespace chrome { - -MessageBoxResult NativeShowMessageBox(HWND parent, - const base::string16& title, - const base::string16& message, - MessageBoxType type) { - UINT flags = MB_SETFOREGROUND; - if (type == MESSAGE_BOX_TYPE_QUESTION) { - flags |= MB_YESNO; - } else if (type == MESSAGE_BOX_TYPE_OK_CANCEL) { - flags |= MB_OKCANCEL; - } else { - flags |= MB_OK; - } - flags |= ((type == MESSAGE_BOX_TYPE_INFORMATION) ? - MB_ICONINFORMATION : MB_ICONWARNING); - int result = ui::MessageBox(parent, message, title, flags); - return (result == IDYES || result == IDOK) ? - MESSAGE_BOX_RESULT_YES : MESSAGE_BOX_RESULT_NO; -} - -} // namespace chrome diff --git a/chrome/browser/ui/views/simple_message_box_win.h b/chrome/browser/ui/views/simple_message_box_win.h deleted file mode 100644 index 9d9b54b..0000000 --- a/chrome/browser/ui/views/simple_message_box_win.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_VIEWS_SIMPLE_MESSAGE_BOX_WIN_H_ -#define CHROME_BROWSER_UI_VIEWS_SIMPLE_MESSAGE_BOX_WIN_H_ - -#include "chrome/browser/ui/simple_message_box.h" - -namespace chrome { - -MessageBoxResult NativeShowMessageBox(HWND parent, - const base::string16& title, - const base::string16& message, - MessageBoxType type); - -} // namespace chrome - -#endif // CHROME_BROWSER_UI_VIEWS_SIMPLE_MESSAGE_BOX_WIN_H_ diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi index a0de1d3..5ecc97d 100644 --- a/chrome/chrome_browser_ui.gypi +++ b/chrome/chrome_browser_ui.gypi @@ -2092,8 +2092,6 @@ 'browser/ui/views/signed_certificate_timestamp_info_view.cc', 'browser/ui/views/signed_certificate_timestamp_info_view.h', 'browser/ui/views/simple_message_box_views.cc', - 'browser/ui/views/simple_message_box_win.cc', - 'browser/ui/views/simple_message_box_win.h', 'browser/ui/views/speech_recognition_bubble_views.cc', 'browser/ui/views/ssl_client_certificate_selector.cc', 'browser/ui/views/ssl_client_certificate_selector.h', -- cgit v1.1