• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_
7 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/string16.h"
13 #include "chrome/browser/extensions/image_loading_tracker.h"
14 #include "chrome/common/extensions/url_pattern.h"
15 #include "third_party/skia/include/core/SkBitmap.h"
16 #include "ui/gfx/native_widget_types.h"
17 
18 class Extension;
19 class MessageLoop;
20 class Profile;
21 class InfoBarDelegate;
22 class TabContents;
23 
24 // Displays all the UI around extension installation and uninstallation.
25 class ExtensionInstallUI : public ImageLoadingTracker::Observer {
26  public:
27   enum PromptType {
28     UNSET_PROMPT_TYPE = -1,
29     INSTALL_PROMPT = 0,
30     RE_ENABLE_PROMPT,
31     NUM_PROMPT_TYPES
32   };
33 
34   // A mapping from PromptType to message ID for various dialog content.
35   static const int kTitleIds[NUM_PROMPT_TYPES];
36   static const int kHeadingIds[NUM_PROMPT_TYPES];
37   static const int kButtonIds[NUM_PROMPT_TYPES];
38   static const int kWarningIds[NUM_PROMPT_TYPES];
39 
40   class Delegate {
41    public:
42     // We call this method to signal that the installation should continue.
43     virtual void InstallUIProceed() = 0;
44 
45     // We call this method to signal that the installation should stop.
46     virtual void InstallUIAbort() = 0;
47 
48    protected:
~Delegate()49     virtual ~Delegate() {}
50   };
51 
52   explicit ExtensionInstallUI(Profile* profile);
53   virtual ~ExtensionInstallUI();
54 
55   // This is called by the installer to verify whether the installation should
56   // proceed. This is declared virtual for testing.
57   //
58   // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
59   virtual void ConfirmInstall(Delegate* delegate, const Extension* extension);
60 
61   // This is called by the app handler launcher to verify whether the app
62   // should be re-enabled. This is declared virtual for testing.
63   //
64   // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
65   virtual void ConfirmReEnable(Delegate* delegate, const Extension* extension);
66 
67   // Installation was successful. This is declared virtual for testing.
68   virtual void OnInstallSuccess(const Extension* extension, SkBitmap* icon);
69 
70   // Installation failed. This is declared virtual for testing.
71   virtual void OnInstallFailure(const std::string& error);
72 
73   // ImageLoadingTracker::Observer:
74   virtual void OnImageLoaded(
75       SkBitmap* image, const ExtensionResource& resource, int index);
76 
77   // Show an infobar for a newly-installed theme.  previous_theme_id
78   // should be empty if the previous theme was the system/default
79   // theme.
80   //
81   // TODO(akalin): Find a better home for this (and
82   // GetNewThemeInstalledInfoBarDelegate()).
83   static void ShowThemeInfoBar(
84       const std::string& previous_theme_id, bool previous_use_system_theme,
85       const Extension* new_theme, Profile* profile);
86 
87  private:
88   // Sets the icon that will be used in any UI. If |icon| is NULL, or contains
89   // an empty bitmap, then a default icon will be used instead.
90   void SetIcon(SkBitmap* icon);
91 
92   // Starts the process of showing a confirmation UI, which is split into two.
93   // 1) Set off a 'load icon' task.
94   // 2) Handle the load icon response and show the UI (OnImageLoaded).
95   void ShowConfirmation(PromptType prompt_type);
96 
97   // Returns the delegate to control the browser's info bar. This is
98   // within its own function due to its platform-specific nature.
99   static InfoBarDelegate* GetNewThemeInstalledInfoBarDelegate(
100       TabContents* tab_contents,
101       const Extension* new_theme,
102       const std::string& previous_theme_id,
103       bool previous_use_system_theme);
104 
105   Profile* profile_;
106   MessageLoop* ui_loop_;
107 
108   // Used to undo theme installation.
109   std::string previous_theme_id_;
110   bool previous_use_system_theme_;
111 
112   // The extensions installation icon.
113   SkBitmap icon_;
114 
115   // The extension we are showing the UI for.
116   const Extension* extension_;
117 
118   // The delegate we will call Proceed/Abort on after confirmation UI.
119   Delegate* delegate_;
120 
121   // The type of prompt we are going to show.
122   PromptType prompt_type_;
123 
124   // Keeps track of extension images being loaded on the File thread for the
125   // purpose of showing the install UI.
126   ImageLoadingTracker tracker_;
127 };
128 
129 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_
130