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
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_
6 #define CHROME_BROWSER_UI_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/time/time.h"
13 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h"
14 #include "content/public/browser/javascript_dialog_manager.h"
16 // Extra data for JavaScript dialogs to add Chrome-only features.
17 class ChromeJavaScriptDialogExtraData
{
19 ChromeJavaScriptDialogExtraData();
21 // The time that the last JavaScript dialog was dismissed.
22 base::TimeTicks last_javascript_message_dismissal_
;
24 // True if the user has decided to block future JavaScript dialogs.
25 bool suppress_javascript_messages_
;
28 // A controller + model class for JavaScript alert, confirm, prompt, and
29 // onbeforeunload dialog boxes.
30 class JavaScriptAppModalDialog
: public AppModalDialog
{
32 typedef std::map
<void*, ChromeJavaScriptDialogExtraData
> ExtraDataMap
;
34 JavaScriptAppModalDialog(
35 content::WebContents
* web_contents
,
36 ExtraDataMap
* extra_data_map
,
37 const base::string16
& title
,
38 content::JavaScriptMessageType javascript_message_type
,
39 const base::string16
& message_text
,
40 const base::string16
& default_prompt_text
,
41 bool display_suppress_checkbox
,
42 bool is_before_unload_dialog
,
44 const content::JavaScriptDialogManager::DialogClosedCallback
& callback
);
45 virtual ~JavaScriptAppModalDialog();
47 // Overridden from AppModalDialog:
48 virtual NativeAppModalDialog
* CreateNativeDialog() OVERRIDE
;
49 virtual bool IsJavaScriptModalDialog() OVERRIDE
;
50 virtual void Invalidate() OVERRIDE
;
52 // Callbacks from NativeDialog when the user accepts or cancels the dialog.
53 void OnCancel(bool suppress_js_messages
);
54 void OnAccept(const base::string16
& prompt_text
, bool suppress_js_messages
);
56 // NOTE: This is only called under Views, and should be removed. Any critical
57 // work should be done in OnCancel or OnAccept. See crbug.com/63732 for more.
60 // Used only for testing. The dialog will use the given text when notifying
61 // its delegate instead of whatever the UI reports.
62 void SetOverridePromptText(const base::string16
& prompt_text
);
65 content::JavaScriptMessageType
javascript_message_type() const {
66 return javascript_message_type_
;
68 base::string16
message_text() const { return message_text_
; }
69 base::string16
default_prompt_text() const { return default_prompt_text_
; }
70 bool display_suppress_checkbox() const { return display_suppress_checkbox_
; }
71 bool is_before_unload_dialog() const { return is_before_unload_dialog_
; }
72 bool is_reload() const { return is_reload_
; }
75 // Notifies the delegate with the result of the dialog.
76 void NotifyDelegate(bool success
, const base::string16
& prompt_text
,
77 bool suppress_js_messages
);
79 // A map of extra Chrome-only data associated with the delegate_.
80 // Can be inspected via extra_data_map_[web_contents_].
81 ExtraDataMap
* extra_data_map_
;
83 // Information about the message box is held in the following variables.
84 const content::JavaScriptMessageType javascript_message_type_
;
85 base::string16 message_text_
;
86 base::string16 default_prompt_text_
;
87 bool display_suppress_checkbox_
;
88 bool is_before_unload_dialog_
;
91 content::JavaScriptDialogManager::DialogClosedCallback callback_
;
93 // Used only for testing. Specifies alternative prompt text that should be
94 // used when notifying the delegate, if |use_override_prompt_text_| is true.
95 base::string16 override_prompt_text_
;
96 bool use_override_prompt_text_
;
98 DISALLOW_COPY_AND_ASSIGN(JavaScriptAppModalDialog
);
101 #endif // CHROME_BROWSER_UI_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_