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