Home | History | Annotate | Download | only in extensions
      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_THEME_INSTALLED_INFOBAR_DELEGATE_H_
      6 #define CHROME_BROWSER_EXTENSIONS_THEME_INSTALLED_INFOBAR_DELEGATE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
     12 #include "content/public/browser/notification_observer.h"
     13 #include "content/public/browser/notification_registrar.h"
     14 
     15 class ExtensionService;
     16 class InfoBarService;
     17 class Profile;
     18 class ThemeService;
     19 
     20 namespace extensions {
     21 class Extension;
     22 }
     23 
     24 // When a user installs a theme, we display it immediately, but provide an
     25 // infobar allowing them to cancel.
     26 class ThemeInstalledInfoBarDelegate : public ConfirmInfoBarDelegate,
     27                                       public content::NotificationObserver {
     28  public:
     29   // Creates a theme installed infobar delegate and adds it to the last active
     30   // tab on |profile|.
     31   static void Create(const extensions::Extension* new_theme,
     32                      Profile* profile,
     33                      const std::string& previous_theme_id,
     34                      bool previous_using_native_theme);
     35 
     36  private:
     37   ThemeInstalledInfoBarDelegate(InfoBarService* infobar_service,
     38                                 ExtensionService* extension_service,
     39                                 ThemeService* theme_service,
     40                                 const extensions::Extension* new_theme,
     41                                 const std::string& previous_theme_id,
     42                                 bool previous_using_native_theme);
     43   virtual ~ThemeInstalledInfoBarDelegate();
     44 
     45   // ConfirmInfoBarDelegate:
     46   virtual int GetIconID() const OVERRIDE;
     47   virtual Type GetInfoBarType() const OVERRIDE;
     48   virtual ThemeInstalledInfoBarDelegate*
     49       AsThemePreviewInfobarDelegate() OVERRIDE;
     50   virtual string16 GetMessageText() const OVERRIDE;
     51   virtual int GetButtons() const OVERRIDE;
     52   virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
     53   virtual bool Cancel() OVERRIDE;
     54 
     55   // content::NotificationObserver:
     56   virtual void Observe(int type,
     57                        const content::NotificationSource& source,
     58                        const content::NotificationDetails& details) OVERRIDE;
     59 
     60   ExtensionService* extension_service_;
     61   ThemeService* theme_service_;
     62 
     63   // Name of theme that's just been installed.
     64   std::string name_;
     65 
     66   // ID of theme that's just been installed.
     67   std::string theme_id_;
     68 
     69   // Used to undo theme install.
     70   std::string previous_theme_id_;
     71   bool previous_using_native_theme_;
     72 
     73   // Registers and unregisters us for notifications.
     74   content::NotificationRegistrar registrar_;
     75 };
     76 
     77 #endif  // CHROME_BROWSER_EXTENSIONS_THEME_INSTALLED_INFOBAR_DELEGATE_H_
     78