OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ | 5 #ifndef CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ |
6 #define CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ | 6 #define CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/string16.h" | 10 #include "base/string16.h" |
11 #include "chrome/browser/tab_contents/navigation_controller.h" | 11 #include "chrome/browser/tab_contents/navigation_controller.h" |
12 #include "webkit/glue/window_open_disposition.h" | 12 #include "webkit/glue/window_open_disposition.h" |
13 | 13 |
14 class AlertInfoBarDelegate; | 14 class AlertInfoBarDelegate; |
15 class ConfirmInfoBarDelegate; | 15 class ConfirmInfoBarDelegate; |
16 class CrashedExtensionInfoBarDelegate; | 16 class CrashedExtensionInfoBarDelegate; |
17 class ExtensionInfoBarDelegate; | 17 class ExtensionInfoBarDelegate; |
18 class TranslateInfoBarDelegate; | |
19 class InfoBar; | 18 class InfoBar; |
20 class LinkInfoBarDelegate; | 19 class LinkInfoBarDelegate; |
21 class SkBitmap; | 20 class SkBitmap; |
22 class ThemeInstalledInfoBarDelegate; | 21 class ThemeInstalledInfoBarDelegate; |
| 22 class TranslateInfoBarDelegate; |
23 | 23 |
24 // An interface implemented by objects wishing to control an InfoBar. | 24 // An interface implemented by objects wishing to control an InfoBar. |
25 // Implementing this interface is not sufficient to use an InfoBar, since it | 25 // Implementing this interface is not sufficient to use an InfoBar, since it |
26 // does not map to a specific InfoBar type. Instead, you must implement either | 26 // does not map to a specific InfoBar type. Instead, you must implement either |
27 // AlertInfoBarDelegate or ConfirmInfoBarDelegate, or override with your own | 27 // AlertInfoBarDelegate or ConfirmInfoBarDelegate, or override with your own |
28 // delegate for your own InfoBar variety. | 28 // delegate for your own InfoBar variety. |
29 // | 29 // |
30 // --- WARNING --- | 30 // --- WARNING --- |
31 // When creating your InfoBarDelegate subclass, it is recommended that you | 31 // When creating your InfoBarDelegate subclass, it is recommended that you |
32 // design it such that you instantiate a brand new delegate for every call to | 32 // design it such that you instantiate a brand new delegate for every call to |
(...skipping 12 matching lines...) Expand all Loading... |
45 // AddInfoBar! | 45 // AddInfoBar! |
46 class InfoBarDelegate { | 46 class InfoBarDelegate { |
47 public: | 47 public: |
48 // The type of the infobar. It controls its appearance, such as its background | 48 // The type of the infobar. It controls its appearance, such as its background |
49 // color. | 49 // color. |
50 enum Type { | 50 enum Type { |
51 WARNING_TYPE, | 51 WARNING_TYPE, |
52 PAGE_ACTION_TYPE, | 52 PAGE_ACTION_TYPE, |
53 }; | 53 }; |
54 | 54 |
| 55 virtual ~InfoBarDelegate(); |
| 56 |
| 57 // Called to create the InfoBar. Implementation of this method is |
| 58 // platform-specific. |
| 59 virtual InfoBar* CreateInfoBar() = 0; |
| 60 |
55 // Returns true if the supplied |delegate| is equal to this one. Equality is | 61 // Returns true if the supplied |delegate| is equal to this one. Equality is |
56 // left to the implementation to define. This function is called by the | 62 // left to the implementation to define. This function is called by the |
57 // TabContents when determining whether or not a delegate should be added | 63 // TabContents when determining whether or not a delegate should be added |
58 // because a matching one already exists. If this function returns true, the | 64 // because a matching one already exists. If this function returns true, the |
59 // TabContents will not add the new delegate because it considers one to | 65 // TabContents will not add the new delegate because it considers one to |
60 // already be present. | 66 // already be present. |
61 virtual bool EqualsDelegate(InfoBarDelegate* delegate) const; | 67 virtual bool EqualsDelegate(InfoBarDelegate* delegate) const; |
62 | 68 |
63 // Returns true if the InfoBar should be closed automatically after the page | 69 // Returns true if the InfoBar should be closed automatically after the page |
64 // is navigated. The default behavior is to return true if the page is | 70 // is navigated. The default behavior is to return true if the page is |
65 // navigated somewhere else or reloaded. | 71 // navigated somewhere else or reloaded. |
66 virtual bool ShouldExpire( | 72 virtual bool ShouldExpire( |
67 const NavigationController::LoadCommittedDetails& details) const; | 73 const NavigationController::LoadCommittedDetails& details) const; |
68 | 74 |
69 // Called when the user clicks on the close button to dismiss the infobar. | 75 // Called when the user clicks on the close button to dismiss the infobar. |
70 virtual void InfoBarDismissed() {} | 76 virtual void InfoBarDismissed(); |
71 | 77 |
72 // Called after the InfoBar is closed. The delegate is free to delete itself | 78 // Called after the InfoBar is closed. The delegate is free to delete itself |
73 // at this point. | 79 // at this point. |
74 virtual void InfoBarClosed() {} | 80 virtual void InfoBarClosed(); |
75 | |
76 // Called to create the InfoBar. Implementation of this method is | |
77 // platform-specific. | |
78 virtual InfoBar* CreateInfoBar() = 0; | |
79 | 81 |
80 // Return the icon to be shown for this InfoBar. If the returned bitmap is | 82 // Return the icon to be shown for this InfoBar. If the returned bitmap is |
81 // NULL, no icon is shown. | 83 // NULL, no icon is shown. |
82 virtual SkBitmap* GetIcon() const; | 84 virtual SkBitmap* GetIcon() const; |
83 | 85 |
84 // Returns a pointer to the AlertInfoBarDelegate interface, if implemented. | |
85 virtual AlertInfoBarDelegate* AsAlertInfoBarDelegate(); | |
86 | |
87 // Returns a pointer to the LinkInfoBarDelegate interface, if implemented. | |
88 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); | |
89 | |
90 // Returns a pointer to the ConfirmInfoBarDelegate interface, if implemented. | |
91 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); | |
92 | |
93 // Returns a pointer to the ThemeInstalledInfoBarDelegate interface, if | |
94 // implemented. | |
95 virtual ThemeInstalledInfoBarDelegate* AsThemePreviewInfobarDelegate(); | |
96 | |
97 // Returns a pointer to the TranslateInfoBarDelegate interface, if | |
98 // implemented. | |
99 virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate(); | |
100 | |
101 // Returns a pointer to the ExtensionInfoBarDelegate interface, if | |
102 // implemented. | |
103 virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate(); | |
104 | |
105 // Returns a pointer to the CrashedExtensionInfoBarDelegate interface, if | |
106 // implemented. | |
107 virtual CrashedExtensionInfoBarDelegate* AsCrashedExtensionInfoBarDelegate(); | |
108 | |
109 // Returns the type of the infobar. The type determines the appearance (such | 86 // Returns the type of the infobar. The type determines the appearance (such |
110 // as background color) of the infobar. | 87 // as background color) of the infobar. |
111 virtual Type GetInfoBarType(); | 88 virtual Type GetInfoBarType() const; |
| 89 |
| 90 // Type-checking downcast routines: |
| 91 virtual AlertInfoBarDelegate* AsAlertInfoBarDelegate(); |
| 92 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); |
| 93 virtual CrashedExtensionInfoBarDelegate* AsCrashedExtensionInfoBarDelegate(); |
| 94 virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate(); |
| 95 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); |
| 96 virtual ThemeInstalledInfoBarDelegate* AsThemePreviewInfobarDelegate(); |
| 97 virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate(); |
112 | 98 |
113 protected: | 99 protected: |
114 // Provided to subclasses as a convenience to initialize the state of this | 100 // Provided to subclasses as a convenience to initialize the state of this |
115 // object. If |contents| is non-NULL, its active entry's unique ID will be | 101 // object. If |contents| is non-NULL, its active entry's unique ID will be |
116 // stored using StoreActiveEntryUniqueID automatically. | 102 // stored using StoreActiveEntryUniqueID automatically. |
117 explicit InfoBarDelegate(TabContents* contents); | 103 explicit InfoBarDelegate(TabContents* contents); |
118 | 104 |
119 virtual ~InfoBarDelegate() { } | |
120 | |
121 // Store the unique id for the active entry in the specified TabContents, to | 105 // Store the unique id for the active entry in the specified TabContents, to |
122 // be used later upon navigation to determine if this InfoBarDelegate should | 106 // be used later upon navigation to determine if this InfoBarDelegate should |
123 // be expired from |contents_|. | 107 // be expired from |contents_|. |
124 void StoreActiveEntryUniqueID(TabContents* contents); | 108 void StoreActiveEntryUniqueID(TabContents* contents); |
125 | 109 |
126 private: | 110 private: |
127 // The unique id of the active NavigationEntry of the TabContents taht we were | 111 // The unique id of the active NavigationEntry of the TabContents that we were |
128 // opened for. Used to help expire on navigations. | 112 // opened for. Used to help expire on navigations. |
129 int contents_unique_id_; | 113 int contents_unique_id_; |
130 | 114 |
131 DISALLOW_COPY_AND_ASSIGN(InfoBarDelegate); | 115 DISALLOW_COPY_AND_ASSIGN(InfoBarDelegate); |
132 }; | 116 }; |
133 | 117 |
134 // An interface derived from InfoBarDelegate implemented by objects wishing to | 118 // An interface derived from InfoBarDelegate implemented by objects wishing to |
135 // control an AlertInfoBar. | 119 // control an AlertInfoBar. |
136 class AlertInfoBarDelegate : public InfoBarDelegate { | 120 class AlertInfoBarDelegate : public InfoBarDelegate { |
137 public: | 121 public: |
138 // Returns the message string to be displayed for the InfoBar. | 122 // Returns the message string to be displayed for the InfoBar. |
139 virtual string16 GetMessageText() const = 0; | 123 virtual string16 GetMessageText() const = 0; |
140 | 124 |
141 // Overridden from InfoBarDelegate. | 125 // InfoBarDelegate: |
142 virtual SkBitmap* GetIcon() const; | 126 virtual InfoBar* CreateInfoBar(); |
143 | |
144 // Overridden from InfoBarDelegate: | |
145 virtual bool EqualsDelegate(InfoBarDelegate* delegate) const; | 127 virtual bool EqualsDelegate(InfoBarDelegate* delegate) const; |
146 virtual InfoBar* CreateInfoBar(); | |
147 virtual AlertInfoBarDelegate* AsAlertInfoBarDelegate(); | |
148 | 128 |
149 protected: | 129 protected: |
150 explicit AlertInfoBarDelegate(TabContents* contents); | 130 explicit AlertInfoBarDelegate(TabContents* contents); |
| 131 virtual ~AlertInfoBarDelegate(); |
| 132 |
| 133 private: |
| 134 virtual AlertInfoBarDelegate* AsAlertInfoBarDelegate(); |
151 | 135 |
152 DISALLOW_COPY_AND_ASSIGN(AlertInfoBarDelegate); | 136 DISALLOW_COPY_AND_ASSIGN(AlertInfoBarDelegate); |
153 }; | 137 }; |
154 | 138 |
155 // An interface derived from InfoBarDelegate implemented by objects wishing to | 139 // An interface derived from InfoBarDelegate implemented by objects wishing to |
156 // control a LinkInfoBar. | 140 // control a LinkInfoBar. |
157 class LinkInfoBarDelegate : public InfoBarDelegate { | 141 class LinkInfoBarDelegate : public InfoBarDelegate { |
158 public: | 142 public: |
159 // Returns the message string to be displayed in the InfoBar. |link_offset| | 143 // Returns the message string to be displayed in the InfoBar. |link_offset| |
160 // is the position where the link should be inserted. If |link_offset| is set | 144 // is the position where the link should be inserted. If |link_offset| is set |
161 // to string16::npos (it is by default), the link is right aligned within | 145 // to string16::npos (it is by default), the link is right aligned within |
162 // the InfoBar rather than being embedded in the message text. | 146 // the InfoBar rather than being embedded in the message text. |
163 virtual string16 GetMessageTextWithOffset(size_t* link_offset) const; | 147 virtual string16 GetMessageTextWithOffset(size_t* link_offset) const; |
164 | 148 |
165 // Returns the text of the link to be displayed. | 149 // Returns the text of the link to be displayed. |
166 virtual string16 GetLinkText() const = 0; | 150 virtual string16 GetLinkText() const = 0; |
167 | 151 |
168 // Overridden from InfoBarDelegate. | |
169 virtual SkBitmap* GetIcon() const; | |
170 | |
171 // Called when the Link is clicked. The |disposition| specifies how the | 152 // Called when the Link is clicked. The |disposition| specifies how the |
172 // resulting document should be loaded (based on the event flags present when | 153 // resulting document should be loaded (based on the event flags present when |
173 // the link was clicked). This function returns true if the InfoBar should be | 154 // the link was clicked). This function returns true if the InfoBar should be |
174 // closed now or false if it should remain until the user explicitly closes | 155 // closed now or false if it should remain until the user explicitly closes |
175 // it. | 156 // it. |
176 virtual bool LinkClicked(WindowOpenDisposition disposition); | 157 virtual bool LinkClicked(WindowOpenDisposition disposition); |
177 | 158 |
178 // Overridden from InfoBarDelegate: | 159 protected: |
| 160 explicit LinkInfoBarDelegate(TabContents* contents); |
| 161 virtual ~LinkInfoBarDelegate(); |
| 162 |
| 163 private: |
| 164 // InfoBarDelegate: |
179 virtual InfoBar* CreateInfoBar(); | 165 virtual InfoBar* CreateInfoBar(); |
180 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); | 166 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); |
181 | 167 |
182 protected: | |
183 explicit LinkInfoBarDelegate(TabContents* contents); | |
184 | |
185 DISALLOW_COPY_AND_ASSIGN(LinkInfoBarDelegate); | 168 DISALLOW_COPY_AND_ASSIGN(LinkInfoBarDelegate); |
186 }; | 169 }; |
187 | 170 |
188 // An interface derived from InfoBarDelegate implemented by objects wishing to | 171 // An interface derived from InfoBarDelegate implemented by objects wishing to |
189 // control a ConfirmInfoBar. | 172 // control a ConfirmInfoBar. |
190 class ConfirmInfoBarDelegate : public AlertInfoBarDelegate { | 173 class ConfirmInfoBarDelegate : public AlertInfoBarDelegate { |
191 public: | 174 public: |
192 enum InfoBarButton { | 175 enum InfoBarButton { |
193 BUTTON_NONE = 0, | 176 BUTTON_NONE = 0, |
194 BUTTON_OK = 1 << 0, | 177 BUTTON_OK = 1 << 0, |
195 BUTTON_CANCEL = 1 << 1, | 178 BUTTON_CANCEL = 1 << 1, |
196 // Specifies that the OK button should be rendered like a default button. | |
197 BUTTON_OK_DEFAULT = 1 << 2 | |
198 }; | 179 }; |
199 | 180 |
200 // Return the buttons to be shown for this InfoBar. | 181 // Return the buttons to be shown for this InfoBar. |
201 virtual int GetButtons() const; | 182 virtual int GetButtons() const; |
202 | 183 |
203 // Return the label for the specified button. The default implementation | 184 // Return the label for the specified button. The default implementation |
204 // returns "OK" for the OK button and "Cancel" for the Cancel button. | 185 // returns "OK" for the OK button and "Cancel" for the Cancel button. |
205 virtual string16 GetButtonLabel(InfoBarButton button) const; | 186 virtual string16 GetButtonLabel(InfoBarButton button) const; |
206 | 187 |
207 // Return whether or not the specified button needs elevation. | 188 // Return whether or not the specified button needs elevation. |
(...skipping 12 matching lines...) Expand all Loading... |
220 virtual string16 GetLinkText(); | 201 virtual string16 GetLinkText(); |
221 | 202 |
222 // Called when the Link is clicked. The |disposition| specifies how the | 203 // Called when the Link is clicked. The |disposition| specifies how the |
223 // resulting document should be loaded (based on the event flags present when | 204 // resulting document should be loaded (based on the event flags present when |
224 // the link was clicked). This function returns true if the InfoBar should be | 205 // the link was clicked). This function returns true if the InfoBar should be |
225 // closed now or false if it should remain until the user explicitly closes | 206 // closed now or false if it should remain until the user explicitly closes |
226 // it. | 207 // it. |
227 // Will only be called if GetLinkText() returns non-empty string. | 208 // Will only be called if GetLinkText() returns non-empty string. |
228 virtual bool LinkClicked(WindowOpenDisposition disposition); | 209 virtual bool LinkClicked(WindowOpenDisposition disposition); |
229 | 210 |
230 // Overridden from InfoBarDelegate: | 211 protected: |
| 212 explicit ConfirmInfoBarDelegate(TabContents* contents); |
| 213 virtual ~ConfirmInfoBarDelegate(); |
| 214 |
| 215 private: |
| 216 // InfoBarDelegate: |
231 virtual InfoBar* CreateInfoBar(); | 217 virtual InfoBar* CreateInfoBar(); |
232 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); | 218 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); |
233 | 219 |
234 protected: | |
235 explicit ConfirmInfoBarDelegate(TabContents* contents); | |
236 | |
237 DISALLOW_COPY_AND_ASSIGN(ConfirmInfoBarDelegate); | 220 DISALLOW_COPY_AND_ASSIGN(ConfirmInfoBarDelegate); |
238 }; | 221 }; |
239 | 222 |
240 // Simple implementations for common use cases --------------------------------- | 223 // Simple implementations for common use cases --------------------------------- |
241 | 224 |
242 class SimpleAlertInfoBarDelegate : public AlertInfoBarDelegate { | 225 class SimpleAlertInfoBarDelegate : public AlertInfoBarDelegate { |
243 public: | 226 public: |
244 // |icon| may be |NULL|. | |
245 SimpleAlertInfoBarDelegate(TabContents* contents, | 227 SimpleAlertInfoBarDelegate(TabContents* contents, |
| 228 SkBitmap* icon, // May be NULL. |
246 const string16& message, | 229 const string16& message, |
247 SkBitmap* icon, | |
248 bool auto_expire); | 230 bool auto_expire); |
249 | 231 |
250 // Overridden from AlertInfoBarDelegate: | 232 private: |
| 233 virtual ~SimpleAlertInfoBarDelegate(); |
| 234 |
| 235 // AlertInfoBarDelegate: |
251 virtual bool ShouldExpire( | 236 virtual bool ShouldExpire( |
252 const NavigationController::LoadCommittedDetails& details) const; | 237 const NavigationController::LoadCommittedDetails& details) const; |
| 238 virtual void InfoBarClosed(); |
| 239 virtual SkBitmap* GetIcon() const; |
253 virtual string16 GetMessageText() const; | 240 virtual string16 GetMessageText() const; |
254 virtual SkBitmap* GetIcon() const; | |
255 virtual void InfoBarClosed(); | |
256 | 241 |
257 private: | 242 SkBitmap* icon_; |
258 string16 message_; | 243 string16 message_; |
259 SkBitmap* icon_; | |
260 bool auto_expire_; // Should it expire automatically on navigation? | 244 bool auto_expire_; // Should it expire automatically on navigation? |
261 | 245 |
262 DISALLOW_COPY_AND_ASSIGN(SimpleAlertInfoBarDelegate); | 246 DISALLOW_COPY_AND_ASSIGN(SimpleAlertInfoBarDelegate); |
263 }; | 247 }; |
264 | 248 |
265 #endif // CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ | 249 #endif // CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ |
OLD | NEW |