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/message_box_handler.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/memory/singleton.h" | 11 #include "base/memory/singleton.h" |
11 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
12 #include "base/i18n/rtl.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/js_modal_dialog.h" | 16 #include "chrome/browser/ui/app_modal_dialogs/js_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 "grit/generated_resources.h" | 23 #include "grit/generated_resources.h" |
24 #include "net/base/net_util.h" | 24 #include "net/base/net_util.h" |
25 #include "ui/base/javascript_message_type.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 class ChromeJavaScriptDialogCreator | 31 namespace { |
32 : public JavaScriptDialogCreator, | 32 |
33 public content::NotificationObserver { | 33 class ChromeJavaScriptDialogCreator : public JavaScriptDialogCreator, |
| 34 public content::NotificationObserver { |
34 public: | 35 public: |
35 static ChromeJavaScriptDialogCreator* GetInstance(); | 36 static ChromeJavaScriptDialogCreator* GetInstance(); |
36 | 37 |
37 explicit ChromeJavaScriptDialogCreator(ExtensionHost* extension_host); | 38 explicit ChromeJavaScriptDialogCreator(ExtensionHost* extension_host); |
38 virtual ~ChromeJavaScriptDialogCreator(); | 39 virtual ~ChromeJavaScriptDialogCreator(); |
39 | 40 |
40 virtual void RunJavaScriptDialog( | 41 virtual void RunJavaScriptDialog( |
41 WebContents* web_contents, | 42 WebContents* web_contents, |
42 const GURL& origin_url, | 43 const GURL& origin_url, |
43 const std::string& accept_lang, | 44 const std::string& accept_lang, |
44 ui::JavascriptMessageType javascript_message_type, | 45 ui::JavascriptMessageType javascript_message_type, |
45 const string16& message_text, | 46 const string16& message_text, |
46 const string16& default_prompt_text, | 47 const string16& default_prompt_text, |
47 const DialogClosedCallback& callback, | 48 const DialogClosedCallback& callback, |
48 bool* did_suppress_message) OVERRIDE; | 49 bool* did_suppress_message) OVERRIDE; |
49 | 50 |
50 virtual void RunBeforeUnloadDialog( | 51 virtual void RunBeforeUnloadDialog( |
51 WebContents* web_contents, | 52 WebContents* web_contents, |
52 const string16& message_text, | 53 const string16& message_text, |
53 bool is_reload, | 54 bool is_reload, |
54 const DialogClosedCallback& callback) OVERRIDE; | 55 const DialogClosedCallback& callback) OVERRIDE; |
55 | 56 |
56 virtual void ResetJavaScriptState(WebContents* web_contents) OVERRIDE; | 57 virtual void ResetJavaScriptState(WebContents* web_contents) OVERRIDE; |
57 | 58 |
58 private: | 59 private: |
59 explicit ChromeJavaScriptDialogCreator(); | 60 ChromeJavaScriptDialogCreator(); |
60 | 61 |
61 friend struct DefaultSingletonTraits<ChromeJavaScriptDialogCreator>; | 62 friend struct DefaultSingletonTraits<ChromeJavaScriptDialogCreator>; |
62 | 63 |
63 // content::NotificationObserver | 64 // Overridden from content::NotificationObserver: |
64 virtual void Observe(int type, | 65 virtual void Observe(int type, |
65 const content::NotificationSource& source, | 66 const content::NotificationSource& source, |
66 const content::NotificationDetails& details) OVERRIDE; | 67 const content::NotificationDetails& details) OVERRIDE; |
67 | 68 |
68 string16 GetTitle(const GURL& origin_url, | 69 string16 GetTitle(const GURL& origin_url, |
69 const std::string& accept_lang, | 70 const std::string& accept_lang, |
70 bool is_alert); | 71 bool is_alert); |
71 | 72 |
72 void CancelPendingDialogs(WebContents* web_contents); | 73 void CancelPendingDialogs(WebContents* web_contents); |
73 | 74 |
(...skipping 12 matching lines...) Expand all Loading... |
86 // Extension Host which owns the ChromeJavaScriptDialogCreator instance. | 87 // Extension Host which owns the ChromeJavaScriptDialogCreator instance. |
87 // It's used to get a extension name from a URL. | 88 // It's used to get a extension name from a URL. |
88 // If it's not owned by any Extension, it should be NULL. | 89 // If it's not owned by any Extension, it should be NULL. |
89 ExtensionHost* extension_host_; | 90 ExtensionHost* extension_host_; |
90 | 91 |
91 content::NotificationRegistrar registrar_; | 92 content::NotificationRegistrar registrar_; |
92 | 93 |
93 DISALLOW_COPY_AND_ASSIGN(ChromeJavaScriptDialogCreator); | 94 DISALLOW_COPY_AND_ASSIGN(ChromeJavaScriptDialogCreator); |
94 }; | 95 }; |
95 | 96 |
96 //------------------------------------------------------------------------------ | 97 //////////////////////////////////////////////////////////////////////////////// |
| 98 // ChromeJavaScriptDialogCreator, public: |
97 | 99 |
98 ChromeJavaScriptDialogCreator::ChromeJavaScriptDialogCreator() | 100 ChromeJavaScriptDialogCreator::ChromeJavaScriptDialogCreator() |
99 : extension_host_(NULL) { | 101 : extension_host_(NULL) { |
100 } | 102 } |
101 | 103 |
102 ChromeJavaScriptDialogCreator::~ChromeJavaScriptDialogCreator() { | 104 ChromeJavaScriptDialogCreator::~ChromeJavaScriptDialogCreator() { |
103 extension_host_ = NULL; | 105 extension_host_ = NULL; |
104 } | 106 } |
105 | 107 |
106 ChromeJavaScriptDialogCreator::ChromeJavaScriptDialogCreator( | 108 ChromeJavaScriptDialogCreator::ChromeJavaScriptDialogCreator( |
107 ExtensionHost* extension_host) | 109 ExtensionHost* extension_host) |
108 : extension_host_(extension_host) { | 110 : extension_host_(extension_host) { |
109 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 111 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, |
110 content::Source<Profile>(extension_host_->profile())); | 112 content::Source<Profile>(extension_host_->profile())); |
111 } | 113 } |
112 | 114 |
113 /* static */ | 115 // static |
114 ChromeJavaScriptDialogCreator* ChromeJavaScriptDialogCreator::GetInstance() { | 116 ChromeJavaScriptDialogCreator* ChromeJavaScriptDialogCreator::GetInstance() { |
115 return Singleton<ChromeJavaScriptDialogCreator>::get(); | 117 return Singleton<ChromeJavaScriptDialogCreator>::get(); |
116 } | 118 } |
117 | 119 |
118 void ChromeJavaScriptDialogCreator::RunJavaScriptDialog( | 120 void ChromeJavaScriptDialogCreator::RunJavaScriptDialog( |
119 WebContents* web_contents, | 121 WebContents* web_contents, |
120 const GURL& origin_url, | 122 const GURL& origin_url, |
121 const std::string& accept_lang, | 123 const std::string& accept_lang, |
122 ui::JavascriptMessageType javascript_message_type, | 124 ui::JavascriptMessageType javascript_message_type, |
123 const string16& message_text, | 125 const string16& message_text, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 } | 168 } |
167 | 169 |
168 void ChromeJavaScriptDialogCreator::RunBeforeUnloadDialog( | 170 void ChromeJavaScriptDialogCreator::RunBeforeUnloadDialog( |
169 WebContents* web_contents, | 171 WebContents* web_contents, |
170 const string16& message_text, | 172 const string16& message_text, |
171 bool is_reload, | 173 bool is_reload, |
172 const DialogClosedCallback& callback) { | 174 const DialogClosedCallback& callback) { |
173 ChromeJavaScriptDialogExtraData* extra_data = | 175 ChromeJavaScriptDialogExtraData* extra_data = |
174 &javascript_dialog_extra_data_[web_contents]; | 176 &javascript_dialog_extra_data_[web_contents]; |
175 | 177 |
176 string16 title = l10n_util::GetStringUTF16( | 178 const string16 title = l10n_util::GetStringUTF16(is_reload ? |
177 is_reload ? | 179 IDS_BEFORERELOAD_MESSAGEBOX_TITLE : IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE); |
178 IDS_BEFORERELOAD_MESSAGEBOX_TITLE : | 180 const string16 footer = l10n_util::GetStringUTF16(is_reload ? |
179 IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE); | 181 IDS_BEFORERELOAD_MESSAGEBOX_FOOTER : IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER); |
180 string16 footer = l10n_util::GetStringUTF16( | |
181 is_reload ? | |
182 IDS_BEFORERELOAD_MESSAGEBOX_FOOTER : | |
183 IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER); | |
184 | 182 |
185 string16 full_message = message_text + ASCIIToUTF16("\n\n") + footer; | 183 string16 full_message = message_text + ASCIIToUTF16("\n\n") + footer; |
186 | 184 |
187 if (extension_host_) | 185 if (extension_host_) |
188 extension_host_->WillRunJavaScriptDialog(); | 186 extension_host_->WillRunJavaScriptDialog(); |
189 | 187 |
190 AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( | 188 AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( |
191 web_contents, | 189 web_contents, |
192 extra_data, | 190 extra_data, |
193 title, | 191 title, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 if (active_dialog && active_dialog->web_contents() == web_contents) | 249 if (active_dialog && active_dialog->web_contents() == web_contents) |
252 active_dialog->Invalidate(); | 250 active_dialog->Invalidate(); |
253 for (AppModalDialogQueue::iterator i = queue->begin(); | 251 for (AppModalDialogQueue::iterator i = queue->begin(); |
254 i != queue->end(); ++i) { | 252 i != queue->end(); ++i) { |
255 if ((*i)->web_contents() == web_contents) | 253 if ((*i)->web_contents() == web_contents) |
256 (*i)->Invalidate(); | 254 (*i)->Invalidate(); |
257 } | 255 } |
258 } | 256 } |
259 | 257 |
260 void ChromeJavaScriptDialogCreator::OnDialogClosed( | 258 void ChromeJavaScriptDialogCreator::OnDialogClosed( |
261 DialogClosedCallback callback, bool success, const string16& user_input) { | 259 DialogClosedCallback callback, |
| 260 bool success, |
| 261 const string16& user_input) { |
262 if (extension_host_) | 262 if (extension_host_) |
263 extension_host_->DidCloseJavaScriptDialog(); | 263 extension_host_->DidCloseJavaScriptDialog(); |
264 callback.Run(success, user_input); | 264 callback.Run(success, user_input); |
265 } | 265 } |
266 | 266 |
267 //------------------------------------------------------------------------------ | 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 |