Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / tab_modal_confirm_dialog_delegate.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_TAB_MODAL_CONFIRM_DIALOG_DELEGATE_H_
6 #define CHROME_BROWSER_UI_TAB_MODAL_CONFIRM_DIALOG_DELEGATE_H_
7
8 #include "base/callback.h"
9 #include "base/compiler_specific.h"
10 #include "base/strings/string16.h"
11 #include "content/public/browser/notification_observer.h"
12 #include "content/public/browser/notification_registrar.h"
13 #include "ui/base/window_open_disposition.h"
14
15 namespace content {
16 class WebContents;
17 }
18
19 namespace gfx {
20 class Image;
21 }
22
23 class TabModalConfirmDialogCloseDelegate {
24  public:
25   TabModalConfirmDialogCloseDelegate() {}
26   virtual ~TabModalConfirmDialogCloseDelegate() {}
27
28   virtual void CloseDialog() = 0;
29
30  private:
31   DISALLOW_COPY_AND_ASSIGN(TabModalConfirmDialogCloseDelegate);
32 };
33
34 // This class acts as the delegate for a simple tab-modal dialog confirming
35 // whether the user wants to execute a certain action.
36 class TabModalConfirmDialogDelegate : public content::NotificationObserver {
37  public:
38   explicit TabModalConfirmDialogDelegate(content::WebContents* web_contents);
39   virtual ~TabModalConfirmDialogDelegate();
40
41   void set_close_delegate(TabModalConfirmDialogCloseDelegate* close_delegate) {
42     close_delegate_ = close_delegate;
43   }
44
45   // Accepts the confirmation prompt and calls OnAccepted() if no other call
46   // to Accept(), Cancel() or Close() has been made before.
47   // This method is safe to call even from an OnAccepted(), OnCanceled(),
48   // OnClosed() or OnLinkClicked() callback.
49   void Accept();
50
51   // Cancels the confirmation prompt and calls OnCanceled() if no other call
52   // to Accept(), Cancel() or Close() has been made before.
53   // This method is safe to call even from an OnAccepted(), OnCanceled(),
54   // OnClosed() or OnLinkClicked() callback.
55   void Cancel();
56
57   // Called when the dialog is closed without selecting an option, e.g. by
58   // pressing the close button on the dialog, using a window manager gesture,
59   // closing the parent tab or navigating in the parent tab.
60   // Calls OnClosed() and closes the dialog if no other call to Accept(),
61   // Cancel() or Close() has been made before.
62   // This method is safe to call even from an OnAccepted(), OnCanceled(),
63   // OnClosed() or OnLinkClicked() callback.
64   void Close();
65
66   // Called when the link is clicked. Calls OnLinkClicked() if the dialog is
67   // not in the process of closing. The |disposition| specifies how the
68   // resulting document should be loaded (based on the event flags present when
69   // the link was clicked).
70   void LinkClicked(WindowOpenDisposition disposition);
71
72   // The title of the dialog. Note that the title is not shown on all platforms.
73   virtual base::string16 GetTitle() = 0;
74   virtual base::string16 GetDialogMessage() = 0;
75
76   // Icon to show for the dialog. If this method is not overridden, a default
77   // icon (like the application icon) is shown.
78   virtual gfx::Image* GetIcon();
79
80   // Title for the accept and the cancel buttons.
81   // The default implementation uses IDS_OK and IDS_CANCEL.
82   virtual base::string16 GetAcceptButtonTitle();
83   virtual base::string16 GetCancelButtonTitle();
84
85   // Returns the text of the link to be displayed, if any. Otherwise returns
86   // an empty string.
87   virtual base::string16 GetLinkText() const;
88
89   // GTK stock icon names for the accept and cancel buttons, respectively.
90   // The icons are only used on GTK. If these methods are not overriden,
91   // the buttons have no stock icons.
92   virtual const char* GetAcceptButtonIcon();
93   virtual const char* GetCancelButtonIcon();
94
95  protected:
96   TabModalConfirmDialogCloseDelegate* close_delegate() {
97     return close_delegate_;
98   }
99
100   // content::NotificationObserver implementation.
101   // Watch for a new load or a closed tab and dismiss the dialog if they occur.
102   virtual void Observe(int type,
103                        const content::NotificationSource& source,
104                        const content::NotificationDetails& details) OVERRIDE;
105
106   content::NotificationRegistrar registrar_;
107
108  private:
109   // It is guaranteed that exactly one of OnAccepted(), OnCanceled() or
110   // OnClosed() is eventually called. These method are private to enforce this
111   // guarantee. Access to them is controlled by Accept(), Cancel() and Close().
112
113   // Called when the user accepts or cancels the dialog, respectively.
114   virtual void OnAccepted();
115   virtual void OnCanceled();
116
117   // Called when the dialog is closed.
118   virtual void OnClosed();
119
120   // Called when the link is clicked. Acces to the method is controlled by
121   // LinkClicked(), which checks that the dialog is not in the process of
122   // closing. It's correct to close the dialog by calling Accept(), Cancel()
123   // or Close() from this callback.
124   virtual void OnLinkClicked(WindowOpenDisposition disposition);
125
126   // Close the dialog.
127   void CloseDialog();
128
129   TabModalConfirmDialogCloseDelegate* close_delegate_;
130
131   // True iff we are in the process of closing, to avoid running callbacks
132   // multiple times.
133   bool closing_;
134
135   DISALLOW_COPY_AND_ASSIGN(TabModalConfirmDialogDelegate);
136 };
137
138 #endif  // CHROME_BROWSER_UI_TAB_MODAL_CONFIRM_DIALOG_DELEGATE_H_