OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_creator.h" | 5 #include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_creator.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
11 #include "base/memory/singleton.h" | 11 #include "base/memory/singleton.h" |
12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
13 #include "chrome/browser/extensions/extension_host.h" | 13 #include "chrome/browser/extensions/extension_host.h" |
14 #include "chrome/browser/extensions/extension_service.h" | 14 #include "chrome/browser/extensions/extension_service.h" |
15 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" | 15 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" |
16 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" | 16 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" |
17 #include "chrome/common/chrome_constants.h" | 17 #include "chrome/common/chrome_constants.h" |
18 #include "chrome/common/chrome_notification_types.h" | 18 #include "chrome/common/chrome_notification_types.h" |
19 #include "content/public/browser/notification_observer.h" | 19 #include "content/public/browser/notification_observer.h" |
20 #include "content/public/browser/notification_registrar.h" | 20 #include "content/public/browser/notification_registrar.h" |
21 #include "content/public/browser/notification_service.h" | 21 #include "content/public/browser/notification_service.h" |
22 #include "content/public/common/content_client.h" | 22 #include "content/public/common/content_client.h" |
| 23 #include "content/public/common/javascript_message_type.h" |
23 #include "grit/generated_resources.h" | 24 #include "grit/generated_resources.h" |
24 #include "net/base/net_util.h" | 25 #include "net/base/net_util.h" |
25 #include "ui/base/javascript_message_type.h" | |
26 #include "ui/base/l10n/l10n_util.h" | 26 #include "ui/base/l10n/l10n_util.h" |
27 | 27 |
28 using content::JavaScriptDialogCreator; | 28 using content::JavaScriptDialogCreator; |
29 using content::WebContents; | 29 using content::WebContents; |
30 | 30 |
31 namespace { | 31 namespace { |
32 | 32 |
33 class ChromeJavaScriptDialogCreator : public JavaScriptDialogCreator, | 33 class ChromeJavaScriptDialogCreator : public JavaScriptDialogCreator, |
34 public content::NotificationObserver { | 34 public content::NotificationObserver { |
35 public: | 35 public: |
36 static ChromeJavaScriptDialogCreator* GetInstance(); | 36 static ChromeJavaScriptDialogCreator* GetInstance(); |
37 | 37 |
38 explicit ChromeJavaScriptDialogCreator(ExtensionHost* extension_host); | 38 explicit ChromeJavaScriptDialogCreator(ExtensionHost* extension_host); |
39 virtual ~ChromeJavaScriptDialogCreator(); | 39 virtual ~ChromeJavaScriptDialogCreator(); |
40 | 40 |
41 virtual void RunJavaScriptDialog( | 41 virtual void RunJavaScriptDialog( |
42 WebContents* web_contents, | 42 WebContents* web_contents, |
43 const GURL& origin_url, | 43 const GURL& origin_url, |
44 const std::string& accept_lang, | 44 const std::string& accept_lang, |
45 ui::JavascriptMessageType javascript_message_type, | 45 content::JavaScriptMessageType message_type, |
46 const string16& message_text, | 46 const string16& message_text, |
47 const string16& default_prompt_text, | 47 const string16& default_prompt_text, |
48 const DialogClosedCallback& callback, | 48 const DialogClosedCallback& callback, |
49 bool* did_suppress_message) OVERRIDE; | 49 bool* did_suppress_message) OVERRIDE; |
50 | 50 |
51 virtual void RunBeforeUnloadDialog( | 51 virtual void RunBeforeUnloadDialog( |
52 WebContents* web_contents, | 52 WebContents* web_contents, |
53 const string16& message_text, | 53 const string16& message_text, |
54 bool is_reload, | 54 bool is_reload, |
55 const DialogClosedCallback& callback) OVERRIDE; | 55 const DialogClosedCallback& callback) OVERRIDE; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 | 114 |
115 // static | 115 // static |
116 ChromeJavaScriptDialogCreator* ChromeJavaScriptDialogCreator::GetInstance() { | 116 ChromeJavaScriptDialogCreator* ChromeJavaScriptDialogCreator::GetInstance() { |
117 return Singleton<ChromeJavaScriptDialogCreator>::get(); | 117 return Singleton<ChromeJavaScriptDialogCreator>::get(); |
118 } | 118 } |
119 | 119 |
120 void ChromeJavaScriptDialogCreator::RunJavaScriptDialog( | 120 void ChromeJavaScriptDialogCreator::RunJavaScriptDialog( |
121 WebContents* web_contents, | 121 WebContents* web_contents, |
122 const GURL& origin_url, | 122 const GURL& origin_url, |
123 const std::string& accept_lang, | 123 const std::string& accept_lang, |
124 ui::JavascriptMessageType javascript_message_type, | 124 content::JavaScriptMessageType message_type, |
125 const string16& message_text, | 125 const string16& message_text, |
126 const string16& default_prompt_text, | 126 const string16& default_prompt_text, |
127 const DialogClosedCallback& callback, | 127 const DialogClosedCallback& callback, |
128 bool* did_suppress_message) { | 128 bool* did_suppress_message) { |
129 *did_suppress_message = false; | 129 *did_suppress_message = false; |
130 | 130 |
131 ChromeJavaScriptDialogExtraData* extra_data = | 131 ChromeJavaScriptDialogExtraData* extra_data = |
132 &javascript_dialog_extra_data_[web_contents]; | 132 &javascript_dialog_extra_data_[web_contents]; |
133 | 133 |
134 if (extra_data->suppress_javascript_messages_) { | 134 if (extra_data->suppress_javascript_messages_) { |
135 *did_suppress_message = true; | 135 *did_suppress_message = true; |
136 return; | 136 return; |
137 } | 137 } |
138 | 138 |
139 base::TimeDelta time_since_last_message = base::TimeTicks::Now() - | 139 base::TimeDelta time_since_last_message = base::TimeTicks::Now() - |
140 extra_data->last_javascript_message_dismissal_; | 140 extra_data->last_javascript_message_dismissal_; |
141 bool display_suppress_checkbox = false; | 141 bool display_suppress_checkbox = false; |
142 // Show a checkbox offering to suppress further messages if this message is | 142 // Show a checkbox offering to suppress further messages if this message is |
143 // being displayed within kJavascriptMessageExpectedDelay of the last one. | 143 // being displayed within kJavascriptMessageExpectedDelay of the last one. |
144 if (time_since_last_message < | 144 if (time_since_last_message < |
145 base::TimeDelta::FromMilliseconds( | 145 base::TimeDelta::FromMilliseconds( |
146 chrome::kJavascriptMessageExpectedDelay)) { | 146 chrome::kJavascriptMessageExpectedDelay)) { |
147 display_suppress_checkbox = true; | 147 display_suppress_checkbox = true; |
148 } | 148 } |
149 | 149 |
150 bool is_alert = javascript_message_type == ui::JAVASCRIPT_MESSAGE_TYPE_ALERT; | 150 bool is_alert = message_type == content::JAVASCRIPT_MESSAGE_TYPE_ALERT; |
151 string16 dialog_title = GetTitle(origin_url, accept_lang, is_alert); | 151 string16 dialog_title = GetTitle(origin_url, accept_lang, is_alert); |
152 | 152 |
153 if (extension_host_) | 153 if (extension_host_) |
154 extension_host_->WillRunJavaScriptDialog(); | 154 extension_host_->WillRunJavaScriptDialog(); |
155 | 155 |
156 AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( | 156 AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( |
157 web_contents, | 157 web_contents, |
158 extra_data, | 158 extra_data, |
159 dialog_title, | 159 dialog_title, |
160 javascript_message_type, | 160 message_type, |
161 message_text, | 161 message_text, |
162 default_prompt_text, | 162 default_prompt_text, |
163 display_suppress_checkbox, | 163 display_suppress_checkbox, |
164 false, // is_before_unload_dialog | 164 false, // is_before_unload_dialog |
165 false, // is_reload | 165 false, // is_reload |
166 base::Bind(&ChromeJavaScriptDialogCreator::OnDialogClosed, | 166 base::Bind(&ChromeJavaScriptDialogCreator::OnDialogClosed, |
167 base::Unretained(this), callback))); | 167 base::Unretained(this), callback))); |
168 } | 168 } |
169 | 169 |
170 void ChromeJavaScriptDialogCreator::RunBeforeUnloadDialog( | 170 void ChromeJavaScriptDialogCreator::RunBeforeUnloadDialog( |
(...skipping 11 matching lines...) Expand all Loading... |
182 | 182 |
183 string16 full_message = message_text + ASCIIToUTF16("\n\n") + footer; | 183 string16 full_message = message_text + ASCIIToUTF16("\n\n") + footer; |
184 | 184 |
185 if (extension_host_) | 185 if (extension_host_) |
186 extension_host_->WillRunJavaScriptDialog(); | 186 extension_host_->WillRunJavaScriptDialog(); |
187 | 187 |
188 AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( | 188 AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( |
189 web_contents, | 189 web_contents, |
190 extra_data, | 190 extra_data, |
191 title, | 191 title, |
192 ui::JAVASCRIPT_MESSAGE_TYPE_CONFIRM, | 192 content::JAVASCRIPT_MESSAGE_TYPE_CONFIRM, |
193 full_message, | 193 full_message, |
194 string16(), // default_prompt_text | 194 string16(), // default_prompt_text |
195 false, // display_suppress_checkbox | 195 false, // display_suppress_checkbox |
196 true, // is_before_unload_dialog | 196 true, // is_before_unload_dialog |
197 is_reload, | 197 is_reload, |
198 base::Bind(&ChromeJavaScriptDialogCreator::OnDialogClosed, | 198 base::Bind(&ChromeJavaScriptDialogCreator::OnDialogClosed, |
199 base::Unretained(this), callback))); | 199 base::Unretained(this), callback))); |
200 } | 200 } |
201 | 201 |
202 void ChromeJavaScriptDialogCreator::ResetJavaScriptState( | 202 void ChromeJavaScriptDialogCreator::ResetJavaScriptState( |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 } // namespace | 267 } // namespace |
268 | 268 |
269 content::JavaScriptDialogCreator* GetJavaScriptDialogCreatorInstance() { | 269 content::JavaScriptDialogCreator* GetJavaScriptDialogCreatorInstance() { |
270 return ChromeJavaScriptDialogCreator::GetInstance(); | 270 return ChromeJavaScriptDialogCreator::GetInstance(); |
271 } | 271 } |
272 | 272 |
273 content::JavaScriptDialogCreator* CreateJavaScriptDialogCreatorInstance( | 273 content::JavaScriptDialogCreator* CreateJavaScriptDialogCreatorInstance( |
274 ExtensionHost* extension_host) { | 274 ExtensionHost* extension_host) { |
275 return new ChromeJavaScriptDialogCreator(extension_host); | 275 return new ChromeJavaScriptDialogCreator(extension_host); |
276 } | 276 } |
OLD | NEW |