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

Unified Diff: chrome/browser/ui/views/simple_message_box_views.cc

Issue 215353002: views: Simplify SimpleMessageBoxViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/simple_message_box_views.cc
diff --git a/chrome/browser/ui/views/simple_message_box_views.cc b/chrome/browser/ui/views/simple_message_box_views.cc
index 482153dc2285a0bf149df2e2cbad0ccaf73b4f5a..42035321cad6bcddc7ee4d71f3243e97cfe9d482 100644
--- a/chrome/browser/ui/views/simple_message_box_views.cc
+++ b/chrome/browser/ui/views/simple_message_box_views.cc
@@ -6,7 +6,6 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
-#include "base/memory/ref_counted.h"
#include "base/message_loop/message_loop.h"
#include "chrome/browser/ui/views/constrained_window_views.h"
#include "grit/generated_resources.h"
@@ -27,21 +26,15 @@ namespace chrome {
namespace {
-// Multiple SimpleMessageBoxViews can show up at the same time. Each of these
-// start a nested message-loop. However, these SimpleMessageBoxViews can be
-// deleted in any order. This creates problems if a box in an inner-loop gets
-// destroyed before a box in an outer-loop. So to avoid this, ref-counting is
-// used so that the SimpleMessageBoxViews gets deleted at the right time.
-class SimpleMessageBoxViews : public views::DialogDelegate,
- public base::RefCounted<SimpleMessageBoxViews> {
+class SimpleMessageBoxViews : public views::DialogDelegate {
public:
SimpleMessageBoxViews(const base::string16& title,
const base::string16& message,
MessageBoxType type,
const base::string16& yes_text,
- const base::string16& no_text);
-
- MessageBoxResult result() const { return result_; }
+ const base::string16& no_text,
+ MessageBoxResult* result);
+ virtual ~SimpleMessageBoxViews();
// Overridden from views::DialogDelegate:
virtual int GetDialogButtons() const OVERRIDE;
@@ -59,8 +52,6 @@ class SimpleMessageBoxViews : public views::DialogDelegate,
virtual const views::Widget* GetWidget() const OVERRIDE;
private:
- friend class base::RefCounted<SimpleMessageBoxViews>;
- virtual ~SimpleMessageBoxViews();
// This terminates the nested message-loop.
void Done();
@@ -69,7 +60,7 @@ class SimpleMessageBoxViews : public views::DialogDelegate,
const MessageBoxType type_;
base::string16 yes_text_;
base::string16 no_text_;
- MessageBoxResult result_;
+ MessageBoxResult* result_;
views::MessageBoxView* message_box_view_;
DISALLOW_COPY_AND_ASSIGN(SimpleMessageBoxViews);
@@ -82,16 +73,16 @@ SimpleMessageBoxViews::SimpleMessageBoxViews(const base::string16& title,
const base::string16& message,
MessageBoxType type,
const base::string16& yes_text,
- const base::string16& no_text)
+ const base::string16& no_text,
+ MessageBoxResult* result)
: window_title_(title),
type_(type),
yes_text_(yes_text),
no_text_(no_text),
- result_(MESSAGE_BOX_RESULT_NO),
+ result_(result),
message_box_view_(new views::MessageBoxView(
views::MessageBoxView::InitParams(message))) {
- AddRef();
-
+ CHECK(result_);
if (yes_text_.empty()) {
if (type_ == MESSAGE_BOX_TYPE_QUESTION)
yes_text_ =
@@ -111,6 +102,9 @@ SimpleMessageBoxViews::SimpleMessageBoxViews(const base::string16& title,
}
}
+SimpleMessageBoxViews::~SimpleMessageBoxViews() {
+}
+
int SimpleMessageBoxViews::GetDialogButtons() const {
if (type_ == MESSAGE_BOX_TYPE_QUESTION ||
type_ == MESSAGE_BOX_TYPE_OK_CANCEL) {
@@ -128,13 +122,13 @@ base::string16 SimpleMessageBoxViews::GetDialogButtonLabel(
}
bool SimpleMessageBoxViews::Cancel() {
- result_ = MESSAGE_BOX_RESULT_NO;
+ *result_ = MESSAGE_BOX_RESULT_NO;
Done();
return true;
}
bool SimpleMessageBoxViews::Accept() {
- result_ = MESSAGE_BOX_RESULT_YES;
+ *result_ = MESSAGE_BOX_RESULT_YES;
Done();
return true;
}
@@ -144,7 +138,7 @@ base::string16 SimpleMessageBoxViews::GetWindowTitle() const {
}
void SimpleMessageBoxViews::DeleteDelegate() {
- Release();
+ delete this;
}
ui::ModalType SimpleMessageBoxViews::GetModalType() const {
@@ -166,9 +160,6 @@ const views::Widget* SimpleMessageBoxViews::GetWidget() const {
////////////////////////////////////////////////////////////////////////////////
// SimpleMessageBoxViews, private:
-SimpleMessageBoxViews::~SimpleMessageBoxViews() {
-}
-
void SimpleMessageBoxViews::Done() {
aura::Window* window = GetWidget()->GetNativeView();
aura::client::DispatcherClient* client =
@@ -210,9 +201,10 @@ MessageBoxResult ShowMessageBoxImpl(gfx::NativeWindow parent,
}
#endif
- scoped_refptr<SimpleMessageBoxViews> dialog(
- new SimpleMessageBoxViews(title, message, type, yes_text, no_text));
- CreateBrowserModalDialogViews(dialog.get(), parent)->Show();
+ MessageBoxResult result = MESSAGE_BOX_RESULT_NO;
+ SimpleMessageBoxViews* dialog = new SimpleMessageBoxViews(
+ title, message, type, yes_text, no_text, &result);
+ CreateBrowserModalDialogViews(dialog, parent)->Show();
// Use the widget's window itself so that the message loop
// exists when the dialog is closed by some other means than
@@ -221,7 +213,9 @@ MessageBoxResult ShowMessageBoxImpl(gfx::NativeWindow parent,
aura::client::DispatcherClient* client =
aura::client::GetDispatcherClient(anchor->GetRootWindow());
client->RunWithDispatcher(NULL);
- return dialog->result();
+ // NOTE: |dialog| will have been deleted by the time control returns here.
+
+ return result;
}
} // namespace
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698