OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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_EXTENSIONS_EXTENSION_INSTALL_UI_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_PROMPT_H_ |
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_PROMPT_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
| 13 #include "base/memory/scoped_ptr.h" |
13 #include "base/string16.h" | 14 #include "base/string16.h" |
14 #include "chrome/browser/extensions/image_loading_tracker.h" | 15 #include "chrome/browser/extensions/image_loading_tracker.h" |
15 #include "chrome/common/extensions/url_pattern.h" | 16 #include "chrome/common/extensions/url_pattern.h" |
16 #include "third_party/skia/include/core/SkBitmap.h" | 17 #include "third_party/skia/include/core/SkBitmap.h" |
17 #include "ui/gfx/image/image.h" | 18 #include "ui/gfx/image/image.h" |
18 #include "ui/gfx/image/image_skia.h" | 19 #include "ui/gfx/image/image_skia.h" |
19 #include "ui/gfx/native_widget_types.h" | 20 #include "ui/gfx/native_widget_types.h" |
20 | 21 |
21 class Browser; | 22 class ExtensionInstallUI; |
22 class ExtensionPermissionSet; | 23 class ExtensionPermissionSet; |
23 class MessageLoop; | 24 class MessageLoop; |
24 class Profile; | 25 class Profile; |
25 class InfoBarDelegate; | 26 class InfoBarDelegate; |
26 class TabContents; | |
27 typedef TabContents TabContentsWrapper; | |
28 | 27 |
29 namespace base { | 28 namespace base { |
30 class DictionaryValue; | 29 class DictionaryValue; |
31 } | 30 } // namespace base |
32 | 31 |
33 namespace extensions { | 32 namespace extensions { |
34 class BundleInstaller; | 33 class BundleInstaller; |
35 class Extension; | 34 class Extension; |
36 class ExtensionWebstorePrivateApiTest; | 35 class ExtensionWebstorePrivateApiTest; |
37 } // namespace extensions | 36 } // namespace extensions |
38 | 37 |
39 // Displays all the UI around extension installation. | 38 // Displays all the UI around extension installation. |
40 class ExtensionInstallUI : public ImageLoadingTracker::Observer { | 39 class ExtensionInstallPrompt : public ImageLoadingTracker::Observer { |
41 public: | 40 public: |
42 enum PromptType { | 41 enum PromptType { |
43 UNSET_PROMPT_TYPE = -1, | 42 UNSET_PROMPT_TYPE = -1, |
44 INSTALL_PROMPT = 0, | 43 INSTALL_PROMPT = 0, |
45 INLINE_INSTALL_PROMPT, | 44 INLINE_INSTALL_PROMPT, |
46 BUNDLE_INSTALL_PROMPT, | 45 BUNDLE_INSTALL_PROMPT, |
47 RE_ENABLE_PROMPT, | 46 RE_ENABLE_PROMPT, |
48 PERMISSIONS_PROMPT, | 47 PERMISSIONS_PROMPT, |
49 NUM_PROMPT_TYPES | 48 NUM_PROMPT_TYPES |
50 }; | 49 }; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 | 142 |
144 // Creates a dummy extension from the |manifest|, replacing the name and | 143 // Creates a dummy extension from the |manifest|, replacing the name and |
145 // description with the localizations if provided. | 144 // description with the localizations if provided. |
146 static scoped_refptr<extensions::Extension> GetLocalizedExtensionForDisplay( | 145 static scoped_refptr<extensions::Extension> GetLocalizedExtensionForDisplay( |
147 const base::DictionaryValue* manifest, | 146 const base::DictionaryValue* manifest, |
148 const std::string& id, | 147 const std::string& id, |
149 const std::string& localized_name, | 148 const std::string& localized_name, |
150 const std::string& localized_description, | 149 const std::string& localized_description, |
151 std::string* error); | 150 std::string* error); |
152 | 151 |
153 explicit ExtensionInstallUI(Profile* profile); | 152 explicit ExtensionInstallPrompt(Profile* profile); |
154 virtual ~ExtensionInstallUI(); | 153 virtual ~ExtensionInstallPrompt(); |
155 | 154 |
156 // TODO(asargent) Normally we navigate to the new tab page when an app is | 155 ExtensionInstallUI* install_ui() const { return install_ui_.get(); } |
157 // installed, but we're experimenting with instead showing a bubble when | |
158 // an app is installed which points to the new tab button. This may become | |
159 // the default behavior in the future. | |
160 void set_use_app_installed_bubble(bool use_bubble) { | |
161 use_app_installed_bubble_ = use_bubble; | |
162 } | |
163 | |
164 // Whether or not to show the default UI after completing the installation. | |
165 void set_skip_post_install_ui(bool skip_ui) { | |
166 skip_post_install_ui_ = skip_ui; | |
167 } | |
168 | 156 |
169 // This is called by the bundle installer to verify whether the bundle | 157 // This is called by the bundle installer to verify whether the bundle |
170 // should be installed. | 158 // should be installed. |
171 // | 159 // |
172 // We *MUST* eventually call either Proceed() or Abort() on |delegate|. | 160 // We *MUST* eventually call either Proceed() or Abort() on |delegate|. |
173 virtual void ConfirmBundleInstall(extensions::BundleInstaller* bundle, | 161 virtual void ConfirmBundleInstall(extensions::BundleInstaller* bundle, |
174 const ExtensionPermissionSet* permissions); | 162 const ExtensionPermissionSet* permissions); |
175 | 163 |
176 // This is called by the inline installer to verify whether the inline | 164 // This is called by the inline installer to verify whether the inline |
177 // install from the webstore should proceed. | 165 // install from the webstore should proceed. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 SkBitmap* icon); | 205 SkBitmap* icon); |
218 | 206 |
219 // Installation failed. This is declared virtual for testing. | 207 // Installation failed. This is declared virtual for testing. |
220 virtual void OnInstallFailure(const string16& error); | 208 virtual void OnInstallFailure(const string16& error); |
221 | 209 |
222 // ImageLoadingTracker::Observer: | 210 // ImageLoadingTracker::Observer: |
223 virtual void OnImageLoaded(const gfx::Image& image, | 211 virtual void OnImageLoaded(const gfx::Image& image, |
224 const std::string& extension_id, | 212 const std::string& extension_id, |
225 int index) OVERRIDE; | 213 int index) OVERRIDE; |
226 | 214 |
227 // Opens apps UI and animates the app icon for the app with id |app_id|. | |
228 static void OpenAppInstalledUI(Browser* browser, const std::string& app_id); | |
229 | |
230 protected: | 215 protected: |
231 friend class extensions::ExtensionWebstorePrivateApiTest; | 216 friend class extensions::ExtensionWebstorePrivateApiTest; |
232 friend class WebstoreInlineInstallUnpackFailureTest; | 217 friend class WebstoreInlineInstallUnpackFailureTest; |
233 | 218 |
234 // Disables showing UI (ErrorBox, etc.) for install failures. To be used only | |
235 // in tests. | |
236 static void DisableFailureUIForTests(); | |
237 | |
238 private: | 219 private: |
239 friend class GalleryInstallApiTestObserver; | 220 friend class GalleryInstallApiTestObserver; |
240 | 221 |
241 // Show an infobar for a newly-installed theme. previous_theme_id | |
242 // should be empty if the previous theme was the system/default | |
243 // theme. | |
244 static void ShowThemeInfoBar( | |
245 const std::string& previous_theme_id, bool previous_using_native_theme, | |
246 const extensions::Extension* new_theme, Profile* profile); | |
247 | |
248 // Sets the icon that will be used in any UI. If |icon| is NULL, or contains | 222 // Sets the icon that will be used in any UI. If |icon| is NULL, or contains |
249 // an empty bitmap, then a default icon will be used instead. | 223 // an empty bitmap, then a default icon will be used instead. |
250 void SetIcon(const SkBitmap* icon); | 224 void SetIcon(const SkBitmap* icon); |
251 | 225 |
252 // Starts the process of showing a confirmation UI, which is split into two. | 226 // Starts the process of showing a confirmation UI, which is split into two. |
253 // 1) Set off a 'load icon' task. | 227 // 1) Set off a 'load icon' task. |
254 // 2) Handle the load icon response and show the UI (OnImageLoaded). | 228 // 2) Handle the load icon response and show the UI (OnImageLoaded). |
255 void LoadImageIfNeeded(); | 229 void LoadImageIfNeeded(); |
256 | 230 |
257 // Shows the actual UI (the icon should already be loaded). | 231 // Shows the actual UI (the icon should already be loaded). |
258 void ShowConfirmation(); | 232 void ShowConfirmation(); |
259 | 233 |
260 // Returns the delegate to control the browser's info bar. This is | |
261 // within its own function due to its platform-specific nature. | |
262 static InfoBarDelegate* GetNewThemeInstalledInfoBarDelegate( | |
263 TabContentsWrapper* tab_contents, | |
264 const extensions::Extension* new_theme, | |
265 const std::string& previous_theme_id, | |
266 bool previous_using_native_theme); | |
267 | |
268 Profile* profile_; | 234 Profile* profile_; |
269 MessageLoop* ui_loop_; | 235 MessageLoop* ui_loop_; |
270 | 236 |
271 // Used to undo theme installation. | |
272 std::string previous_theme_id_; | |
273 bool previous_using_native_theme_; | |
274 | |
275 // The extensions installation icon. | 237 // The extensions installation icon. |
276 SkBitmap icon_; | 238 SkBitmap icon_; |
277 | 239 |
278 // The extension we are showing the UI for. | 240 // The extension we are showing the UI for. |
279 const extensions::Extension* extension_; | 241 const extensions::Extension* extension_; |
280 | 242 |
281 // The bundle we are showing the UI for, if type BUNDLE_INSTALL_PROMPT. | 243 // The bundle we are showing the UI for, if type BUNDLE_INSTALL_PROMPT. |
282 const extensions::BundleInstaller* bundle_; | 244 const extensions::BundleInstaller* bundle_; |
283 | 245 |
284 // The permissions being prompted for. | 246 // The permissions being prompted for. |
285 scoped_refptr<const ExtensionPermissionSet> permissions_; | 247 scoped_refptr<const ExtensionPermissionSet> permissions_; |
286 | 248 |
| 249 // The object responsible for doing the UI specific actions. |
| 250 scoped_ptr<ExtensionInstallUI> install_ui_; |
| 251 |
287 // The delegate we will call Proceed/Abort on after confirmation UI. | 252 // The delegate we will call Proceed/Abort on after confirmation UI. |
288 Delegate* delegate_; | 253 Delegate* delegate_; |
289 | 254 |
290 // A pre-filled prompt. | 255 // A pre-filled prompt. |
291 Prompt prompt_; | 256 Prompt prompt_; |
292 | 257 |
293 // The type of prompt we are going to show. | 258 // The type of prompt we are going to show. |
294 PromptType prompt_type_; | 259 PromptType prompt_type_; |
295 | 260 |
296 // Keeps track of extension images being loaded on the File thread for the | 261 // Keeps track of extension images being loaded on the File thread for the |
297 // purpose of showing the install UI. | 262 // purpose of showing the install UI. |
298 ImageLoadingTracker tracker_; | 263 ImageLoadingTracker tracker_; |
299 | |
300 // Whether to show an installed bubble on app install, or use the default | |
301 // action of opening a new tab page. | |
302 bool use_app_installed_bubble_; | |
303 | |
304 // Whether or not to show the default UI after completing the installation. | |
305 bool skip_post_install_ui_; | |
306 }; | 264 }; |
307 | 265 |
308 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_ | 266 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_PROMPT_H_ |
OLD | NEW |