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; | |
15 class ConfirmInfoBarDelegate; | 14 class ConfirmInfoBarDelegate; |
16 class CrashedExtensionInfoBarDelegate; | 15 class CrashedExtensionInfoBarDelegate; |
17 class ExtensionInfoBarDelegate; | 16 class ExtensionInfoBarDelegate; |
18 class InfoBar; | 17 class InfoBar; |
19 class LinkInfoBarDelegate; | 18 class LinkInfoBarDelegate; |
20 class SkBitmap; | 19 class SkBitmap; |
21 class ThemeInstalledInfoBarDelegate; | 20 class ThemeInstalledInfoBarDelegate; |
22 class TranslateInfoBarDelegate; | 21 class TranslateInfoBarDelegate; |
23 | 22 |
24 // An interface implemented by objects wishing to control an InfoBar. | 23 // An interface implemented by objects wishing to control an InfoBar. |
25 // Implementing this interface is not sufficient to use an InfoBar, since it | 24 // 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 | 25 // does not map to a specific InfoBar type. Instead, you must implement either |
27 // AlertInfoBarDelegate or ConfirmInfoBarDelegate, or override with your own | 26 // LinkInfoBarDelegate or ConfirmInfoBarDelegate, or override with your own |
28 // delegate for your own InfoBar variety. | 27 // delegate for your own InfoBar variety. |
29 // | 28 // |
30 // --- WARNING --- | 29 // --- WARNING --- |
31 // When creating your InfoBarDelegate subclass, it is recommended that you | 30 // 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 | 31 // design it such that you instantiate a brand new delegate for every call to |
33 // AddInfoBar, rather than re-using/sharing a delegate object. Otherwise, | 32 // AddInfoBar, rather than re-using/sharing a delegate object. Otherwise, |
34 // you need to consider the fact that more than one InfoBar instance can exist | 33 // you need to consider the fact that more than one InfoBar instance can exist |
35 // and reference the same delegate -- even though it is also true that we only | 34 // and reference the same delegate -- even though it is also true that we only |
36 // ever fully show one infobar (they don't stack). The dual-references occur | 35 // ever fully show one infobar (they don't stack). The dual-references occur |
37 // because a second InfoBar can be added while the first one is in the process | 36 // because a second InfoBar can be added while the first one is in the process |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 | 80 |
82 // Return the icon to be shown for this InfoBar. If the returned bitmap is | 81 // Return the icon to be shown for this InfoBar. If the returned bitmap is |
83 // NULL, no icon is shown. | 82 // NULL, no icon is shown. |
84 virtual SkBitmap* GetIcon() const; | 83 virtual SkBitmap* GetIcon() const; |
85 | 84 |
86 // Returns the type of the infobar. The type determines the appearance (such | 85 // Returns the type of the infobar. The type determines the appearance (such |
87 // as background color) of the infobar. | 86 // as background color) of the infobar. |
88 virtual Type GetInfoBarType() const; | 87 virtual Type GetInfoBarType() const; |
89 | 88 |
90 // Type-checking downcast routines: | 89 // Type-checking downcast routines: |
91 virtual AlertInfoBarDelegate* AsAlertInfoBarDelegate(); | |
92 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); | 90 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); |
93 virtual CrashedExtensionInfoBarDelegate* AsCrashedExtensionInfoBarDelegate(); | 91 virtual CrashedExtensionInfoBarDelegate* AsCrashedExtensionInfoBarDelegate(); |
94 virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate(); | 92 virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate(); |
95 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); | 93 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); |
96 virtual ThemeInstalledInfoBarDelegate* AsThemePreviewInfobarDelegate(); | 94 virtual ThemeInstalledInfoBarDelegate* AsThemePreviewInfobarDelegate(); |
97 virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate(); | 95 virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate(); |
98 | 96 |
99 protected: | 97 protected: |
100 // Provided to subclasses as a convenience to initialize the state of this | 98 // Provided to subclasses as a convenience to initialize the state of this |
101 // object. If |contents| is non-NULL, its active entry's unique ID will be | 99 // object. If |contents| is non-NULL, its active entry's unique ID will be |
102 // stored using StoreActiveEntryUniqueID automatically. | 100 // stored using StoreActiveEntryUniqueID automatically. |
103 explicit InfoBarDelegate(TabContents* contents); | 101 explicit InfoBarDelegate(TabContents* contents); |
104 | 102 |
105 // Store the unique id for the active entry in the specified TabContents, to | 103 // Store the unique id for the active entry in the specified TabContents, to |
106 // be used later upon navigation to determine if this InfoBarDelegate should | 104 // be used later upon navigation to determine if this InfoBarDelegate should |
107 // be expired from |contents_|. | 105 // be expired from |contents_|. |
108 void StoreActiveEntryUniqueID(TabContents* contents); | 106 void StoreActiveEntryUniqueID(TabContents* contents); |
109 | 107 |
110 private: | 108 private: |
111 // The unique id of the active NavigationEntry of the TabContents that we were | 109 // The unique id of the active NavigationEntry of the TabContents that we were |
112 // opened for. Used to help expire on navigations. | 110 // opened for. Used to help expire on navigations. |
113 int contents_unique_id_; | 111 int contents_unique_id_; |
114 | 112 |
115 DISALLOW_COPY_AND_ASSIGN(InfoBarDelegate); | 113 DISALLOW_COPY_AND_ASSIGN(InfoBarDelegate); |
116 }; | 114 }; |
117 | 115 |
118 // An interface derived from InfoBarDelegate implemented by objects wishing to | 116 // An interface derived from InfoBarDelegate implemented by objects wishing to |
119 // control an AlertInfoBar. | |
120 class AlertInfoBarDelegate : public InfoBarDelegate { | |
121 public: | |
122 // Returns the message string to be displayed for the InfoBar. | |
123 virtual string16 GetMessageText() const = 0; | |
124 | |
125 // InfoBarDelegate: | |
126 virtual InfoBar* CreateInfoBar(); | |
127 virtual bool EqualsDelegate(InfoBarDelegate* delegate) const; | |
128 | |
129 protected: | |
130 explicit AlertInfoBarDelegate(TabContents* contents); | |
131 virtual ~AlertInfoBarDelegate(); | |
132 | |
133 private: | |
134 virtual AlertInfoBarDelegate* AsAlertInfoBarDelegate(); | |
135 | |
136 DISALLOW_COPY_AND_ASSIGN(AlertInfoBarDelegate); | |
137 }; | |
138 | |
139 // An interface derived from InfoBarDelegate implemented by objects wishing to | |
140 // control a LinkInfoBar. | 117 // control a LinkInfoBar. |
141 class LinkInfoBarDelegate : public InfoBarDelegate { | 118 class LinkInfoBarDelegate : public InfoBarDelegate { |
142 public: | 119 public: |
143 // Returns the message string to be displayed in the InfoBar. |link_offset| | 120 // Returns the message string to be displayed in the InfoBar. |link_offset| |
144 // is the position where the link should be inserted. If |link_offset| is set | 121 // is the position where the link should be inserted. If |link_offset| is set |
145 // to string16::npos (it is by default), the link is right aligned within | 122 // to string16::npos (it is by default), the link is right aligned within |
146 // the InfoBar rather than being embedded in the message text. | 123 // the InfoBar rather than being embedded in the message text. |
147 virtual string16 GetMessageTextWithOffset(size_t* link_offset) const; | 124 virtual string16 GetMessageTextWithOffset(size_t* link_offset) const; |
148 | 125 |
149 // Returns the text of the link to be displayed. | 126 // Returns the text of the link to be displayed. |
(...skipping 13 matching lines...) Expand all Loading... |
163 private: | 140 private: |
164 // InfoBarDelegate: | 141 // InfoBarDelegate: |
165 virtual InfoBar* CreateInfoBar(); | 142 virtual InfoBar* CreateInfoBar(); |
166 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); | 143 virtual LinkInfoBarDelegate* AsLinkInfoBarDelegate(); |
167 | 144 |
168 DISALLOW_COPY_AND_ASSIGN(LinkInfoBarDelegate); | 145 DISALLOW_COPY_AND_ASSIGN(LinkInfoBarDelegate); |
169 }; | 146 }; |
170 | 147 |
171 // An interface derived from InfoBarDelegate implemented by objects wishing to | 148 // An interface derived from InfoBarDelegate implemented by objects wishing to |
172 // control a ConfirmInfoBar. | 149 // control a ConfirmInfoBar. |
173 class ConfirmInfoBarDelegate : public AlertInfoBarDelegate { | 150 class ConfirmInfoBarDelegate : public InfoBarDelegate { |
174 public: | 151 public: |
175 enum InfoBarButton { | 152 enum InfoBarButton { |
176 BUTTON_NONE = 0, | 153 BUTTON_NONE = 0, |
177 BUTTON_OK = 1 << 0, | 154 BUTTON_OK = 1 << 0, |
178 BUTTON_CANCEL = 1 << 1, | 155 BUTTON_CANCEL = 1 << 1, |
179 }; | 156 }; |
180 | 157 |
| 158 // Returns the message string to be displayed for the InfoBar. |
| 159 virtual string16 GetMessageText() const = 0; |
| 160 |
181 // Return the buttons to be shown for this InfoBar. | 161 // Return the buttons to be shown for this InfoBar. |
182 virtual int GetButtons() const; | 162 virtual int GetButtons() const; |
183 | 163 |
184 // Return the label for the specified button. The default implementation | 164 // Return the label for the specified button. The default implementation |
185 // returns "OK" for the OK button and "Cancel" for the Cancel button. | 165 // returns "OK" for the OK button and "Cancel" for the Cancel button. |
186 virtual string16 GetButtonLabel(InfoBarButton button) const; | 166 virtual string16 GetButtonLabel(InfoBarButton button) const; |
187 | 167 |
188 // Return whether or not the specified button needs elevation. | 168 // Return whether or not the specified button needs elevation. |
189 virtual bool NeedElevation(InfoBarButton button) const; | 169 virtual bool NeedElevation(InfoBarButton button) const; |
190 | 170 |
(...skipping 17 matching lines...) Expand all Loading... |
208 // Will only be called if GetLinkText() returns non-empty string. | 188 // Will only be called if GetLinkText() returns non-empty string. |
209 virtual bool LinkClicked(WindowOpenDisposition disposition); | 189 virtual bool LinkClicked(WindowOpenDisposition disposition); |
210 | 190 |
211 protected: | 191 protected: |
212 explicit ConfirmInfoBarDelegate(TabContents* contents); | 192 explicit ConfirmInfoBarDelegate(TabContents* contents); |
213 virtual ~ConfirmInfoBarDelegate(); | 193 virtual ~ConfirmInfoBarDelegate(); |
214 | 194 |
215 private: | 195 private: |
216 // InfoBarDelegate: | 196 // InfoBarDelegate: |
217 virtual InfoBar* CreateInfoBar(); | 197 virtual InfoBar* CreateInfoBar(); |
| 198 virtual bool EqualsDelegate(InfoBarDelegate* delegate) const; |
218 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); | 199 virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); |
219 | 200 |
220 DISALLOW_COPY_AND_ASSIGN(ConfirmInfoBarDelegate); | 201 DISALLOW_COPY_AND_ASSIGN(ConfirmInfoBarDelegate); |
221 }; | 202 }; |
222 | 203 |
223 // Simple implementations for common use cases --------------------------------- | 204 // Simple implementations for common use cases --------------------------------- |
224 | 205 |
225 class SimpleAlertInfoBarDelegate : public AlertInfoBarDelegate { | 206 class SimpleAlertInfoBarDelegate : public ConfirmInfoBarDelegate { |
226 public: | 207 public: |
227 SimpleAlertInfoBarDelegate(TabContents* contents, | 208 SimpleAlertInfoBarDelegate(TabContents* contents, |
228 SkBitmap* icon, // May be NULL. | 209 SkBitmap* icon, // May be NULL. |
229 const string16& message, | 210 const string16& message, |
230 bool auto_expire); | 211 bool auto_expire); |
231 | 212 |
232 private: | 213 private: |
233 virtual ~SimpleAlertInfoBarDelegate(); | 214 virtual ~SimpleAlertInfoBarDelegate(); |
234 | 215 |
235 // AlertInfoBarDelegate: | 216 // ConfirmInfoBarDelegate: |
236 virtual bool ShouldExpire( | 217 virtual bool ShouldExpire( |
237 const NavigationController::LoadCommittedDetails& details) const; | 218 const NavigationController::LoadCommittedDetails& details) const; |
238 virtual void InfoBarClosed(); | 219 virtual void InfoBarClosed(); |
239 virtual SkBitmap* GetIcon() const; | 220 virtual SkBitmap* GetIcon() const; |
240 virtual string16 GetMessageText() const; | 221 virtual string16 GetMessageText() const; |
| 222 virtual int GetButtons() const; |
241 | 223 |
242 SkBitmap* icon_; | 224 SkBitmap* icon_; |
243 string16 message_; | 225 string16 message_; |
244 bool auto_expire_; // Should it expire automatically on navigation? | 226 bool auto_expire_; // Should it expire automatically on navigation? |
245 | 227 |
246 DISALLOW_COPY_AND_ASSIGN(SimpleAlertInfoBarDelegate); | 228 DISALLOW_COPY_AND_ASSIGN(SimpleAlertInfoBarDelegate); |
247 }; | 229 }; |
248 | 230 |
249 #endif // CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ | 231 #endif // CHROME_BROWSER_TAB_CONTENTS_INFOBAR_DELEGATE_H_ |
OLD | NEW |