Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / ui / app_modal_dialogs / javascript_app_modal_dialog.h
blobbd0dbb8bc8c9679595d18a1af3b5ba262b5894e7
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_
8 #include <map>
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 {
18 public:
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 {
31 public:
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,
43 bool is_reload,
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.
58 void OnClose();
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);
64 // Accessors
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_; }
74 private:
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_;
89 bool is_reload_;
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_