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

Side by Side Diff: chrome/browser/ui/javascript_dialogs/javascript_dialog_views.cc

Issue 2421943002: Make JavaScript dialogs auto-dismiss on tab switch. (Closed)
Patch Set: fix Created 4 years, 2 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
OLDNEW
(Empty)
1 // Copyright 2016 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/javascript_dialogs/javascript_dialog_views.h"
6
7 #include "base/memory/ptr_util.h"
8 #include "components/constrained_window/constrained_window_views.h"
9 #include "ui/base/l10n/l10n_util.h"
10 #include "ui/views/controls/message_box_view.h"
11 #include "ui/views/controls/textfield/textfield.h"
12 #include "ui/views/layout/layout_constants.h"
13
14 // static
15 base::WeakPtr<JavaScriptDialogViews> JavaScriptDialogViews::Create(
16 content::WebContents* parent_web_contents,
17 content::WebContents* alerting_web_contents,
18 const base::string16& title,
19 content::JavaScriptMessageType message_type,
20 const base::string16& message_text,
21 const base::string16& default_prompt_text,
22 const content::JavaScriptDialogManager::DialogClosedCallback&
23 dialog_callback) {
24 return (new JavaScriptDialogViews(parent_web_contents, alerting_web_contents,
25 title, message_type, message_text,
26 default_prompt_text, dialog_callback))
27 ->weak_factory_.GetWeakPtr();
28 }
29
30 //////////////////////////////////////////////////////////////////////////////
31 // JavaScriptDialogViews, constructor & destructor:
Peter Kasting 2016/10/17 20:16:05 Nit: Personally I'm not a fan of these ///// comme
Avi (use Gerrit) 2016/10/18 02:46:42 Stolen from other Views code. Removed.
32
33 JavaScriptDialogViews::JavaScriptDialogViews(
Peter Kasting 2016/10/17 20:16:05 Nit: Function definition order should match .cc de
Avi (use Gerrit) 2016/10/18 02:46:41 Done.
34 content::WebContents* parent_web_contents,
35 content::WebContents* alerting_web_contents,
36 const base::string16& title,
37 content::JavaScriptMessageType message_type,
38 const base::string16& message_text,
39 const base::string16& default_prompt_text,
40 const content::JavaScriptDialogManager::DialogClosedCallback&
41 dialog_callback)
42 : title_(title),
43 message_type_(message_type),
44 message_text_(message_text),
45 default_prompt_text_(default_prompt_text),
46 dialog_callback_(dialog_callback),
47 weak_factory_(this) {
48 int options = views::MessageBoxView::DETECT_DIRECTIONALITY;
49 if (message_type == content::JAVASCRIPT_MESSAGE_TYPE_PROMPT)
50 options |= views::MessageBoxView::HAS_PROMPT_FIELD;
51
52 views::MessageBoxView::InitParams params(message_text);
53 params.options = options;
54 params.default_prompt = default_prompt_text;
55 message_box_view_ = new views::MessageBoxView(params);
56 DCHECK(message_box_view_);
57
58 constrained_window::ShowWebModalDialogViews(this, parent_web_contents);
59 }
60
61 JavaScriptDialogViews::~JavaScriptDialogViews() {}
62
63 void JavaScriptDialogViews::CloseJavaScriptDialog() {
64 dialog_callback_.Reset();
Peter Kasting 2016/10/17 20:16:05 Why would we not call Close() instead? It's not o
Avi (use Gerrit) 2016/10/18 02:46:41 Close() is a Views method, and is an implementatio
Peter Kasting 2016/10/18 04:31:03 What I was more asking was, Close() runs the callb
Avi (use Gerrit) 2016/10/18 16:31:49 Yes; JavaScriptDialogManager's call CancelDialogs
Peter Kasting 2016/10/18 16:59:55 Seems fine.
65 GetWidget()->Close();
66 }
67
68 //////////////////////////////////////////////////////////////////////////////
69 // JavaScriptDialogViews, views::DialogDelegate implementation:
70
71 int JavaScriptDialogViews::GetDefaultDialogButton() const {
72 return ui::DIALOG_BUTTON_OK;
73 }
74
75 int JavaScriptDialogViews::GetDialogButtons() const {
76 if (message_type_ == content::JAVASCRIPT_MESSAGE_TYPE_ALERT)
77 return ui::DIALOG_BUTTON_OK;
78
79 return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
Peter Kasting 2016/10/17 20:16:05 Nit: Shorter: const bool is_alert = message_typ
Avi (use Gerrit) 2016/10/18 02:46:42 OK. (I don't know what Views idiom is, so I stole
Peter Kasting 2016/10/18 04:31:03 Dunno that we have a consistent idiom for this. P
80 }
81
82 base::string16 JavaScriptDialogViews::GetWindowTitle() const {
83 return title_;
84 }
85
86 bool JavaScriptDialogViews::Cancel() {
87 if (dialog_callback_)
88 dialog_callback_.Run(false, base::string16());
89 return true;
90 }
91
92 bool JavaScriptDialogViews::Accept() {
93 if (dialog_callback_)
94 dialog_callback_.Run(true, message_box_view_->GetInputText());
95 return true;
96 }
97
98 bool JavaScriptDialogViews::Close() {
99 if (dialog_callback_)
100 dialog_callback_.Run(false, base::string16());
101 return true;
102 }
103
104 void JavaScriptDialogViews::DeleteDelegate() {
105 delete this;
106 }
107
108 ///////////////////////////////////////////////////////////////////////////////
109 // JavaScriptDialogViews, views::WidgetDelegate implementation:
110
111 views::View* JavaScriptDialogViews::GetContentsView() {
112 return message_box_view_;
113 }
114
115 views::View* JavaScriptDialogViews::GetInitiallyFocusedView() {
116 if (message_box_view_->text_box())
117 return message_box_view_->text_box();
118 return views::DialogDelegate::GetInitiallyFocusedView();
Peter Kasting 2016/10/17 20:16:05 Nit: Shorter: auto* text_box = message_box_view
Avi (use Gerrit) 2016/10/18 02:46:41 ditto re stolen
119 }
120
121 views::Widget* JavaScriptDialogViews::GetWidget() {
122 return message_box_view_->GetWidget();
123 }
124
125 const views::Widget* JavaScriptDialogViews::GetWidget() const {
126 return message_box_view_->GetWidget();
127 }
128
129 ui::ModalType JavaScriptDialogViews::GetModalType() const {
130 return ui::MODAL_TYPE_CHILD;
131 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698