- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / app_modal_dialogs / javascript_app_modal_dialog.h
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.
4
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_
7
8 #include <map>
9
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"
15
16 // Extra data for JavaScript dialogs to add Chrome-only features.
17 class ChromeJavaScriptDialogExtraData {
18  public:
19   ChromeJavaScriptDialogExtraData();
20
21   // The time that the last JavaScript dialog was dismissed.
22   base::TimeTicks last_javascript_message_dismissal_;
23
24   // True if the user has decided to block future JavaScript dialogs.
25   bool suppress_javascript_messages_;
26 };
27
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;
33
34   JavaScriptAppModalDialog(
35       content::WebContents* web_contents,
36       ExtraDataMap* extra_data_map,
37       const string16& title,
38       content::JavaScriptMessageType javascript_message_type,
39       const string16& message_text,
40       const 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();
46
47   // Overridden from AppModalDialog:
48   virtual NativeAppModalDialog* CreateNativeDialog() OVERRIDE;
49   virtual bool IsJavaScriptModalDialog() OVERRIDE;
50   virtual void Invalidate() OVERRIDE;
51
52   // Callbacks from NativeDialog when the user accepts or cancels the dialog.
53   void OnCancel(bool suppress_js_messages);
54   void OnAccept(const string16& prompt_text, bool suppress_js_messages);
55
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();
59
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 string16& prompt_text);
63
64   // Accessors
65   content::JavaScriptMessageType javascript_message_type() const {
66     return javascript_message_type_;
67   }
68   string16 message_text() const { return message_text_; }
69   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_; }
73
74  private:
75   // Notifies the delegate with the result of the dialog.
76   void NotifyDelegate(bool success, const string16& prompt_text,
77                       bool suppress_js_messages);
78
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_;
82
83   // Information about the message box is held in the following variables.
84   const content::JavaScriptMessageType javascript_message_type_;
85   string16 message_text_;
86   string16 default_prompt_text_;
87   bool display_suppress_checkbox_;
88   bool is_before_unload_dialog_;
89   bool is_reload_;
90
91   content::JavaScriptDialogManager::DialogClosedCallback callback_;
92
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   string16 override_prompt_text_;
96   bool use_override_prompt_text_;
97
98   DISALLOW_COPY_AND_ASSIGN(JavaScriptAppModalDialog);
99 };
100
101 #endif  // CHROME_BROWSER_UI_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_