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
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INFOBAR_DELEGATE_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_INFOBAR_DELEGATE_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "base/scoped_observer.h"
10 #include "components/infobars/core/confirm_infobar_delegate.h"
11 #include "content/public/browser/notification_observer.h"
12 #include "content/public/browser/notification_registrar.h"
13 #include "extensions/browser/extension_registry_observer.h"
22 namespace extensions
{
24 class ExtensionRegistry
;
25 class ExtensionViewHost
;
28 // The InfobarDelegate for creating and managing state for the ExtensionInfobar
29 // plus monitor when the extension goes away.
30 class ExtensionInfoBarDelegate
: public infobars::InfoBarDelegate
,
31 public content::NotificationObserver
,
32 public extensions::ExtensionRegistryObserver
{
34 virtual ~ExtensionInfoBarDelegate();
36 // Creates an extension infobar and delegate and adds the infobar to the
37 // infobar service for |web_contents|.
38 static void Create(content::WebContents
* web_contents
,
40 const extensions::Extension
* extension
,
44 const extensions::Extension
* extension() { return extension_
; }
45 extensions::ExtensionViewHost
* extension_view_host() {
46 return extension_view_host_
.get();
48 const extensions::ExtensionViewHost
* extension_view_host() const {
49 return extension_view_host_
.get();
52 int height() { return height_
; }
54 bool closing() const { return closing_
; }
56 // Returns the WebContents associated with the ExtensionInfoBarDelegate.
57 content::WebContents
* GetWebContents();
60 ExtensionInfoBarDelegate(Browser
* browser
,
61 const extensions::Extension
* extension
,
63 content::WebContents
* web_contents
,
66 // Returns an extension infobar that owns |delegate|.
67 static scoped_ptr
<infobars::InfoBar
> CreateInfoBar(
68 scoped_ptr
<ExtensionInfoBarDelegate
> delegate
);
71 virtual bool EqualsDelegate(
72 infobars::InfoBarDelegate
* delegate
) const override
;
73 virtual void InfoBarDismissed() override
;
74 virtual Type
GetInfoBarType() const override
;
75 virtual ExtensionInfoBarDelegate
* AsExtensionInfoBarDelegate() override
;
77 // content::NotificationObserver.
78 virtual void Observe(int type
,
79 const content::NotificationSource
& source
,
80 const content::NotificationDetails
& details
) override
;
82 // extensions::ExtensionRegistryObserver.
83 virtual void OnExtensionUnloaded(
84 content::BrowserContext
* browser_context
,
85 const extensions::Extension
* extension
,
86 extensions::UnloadedExtensionInfo::Reason reason
) override
;
88 #if defined(TOOLKIT_VIEWS)
89 Browser
* browser_
; // We pass this to the ExtensionInfoBar.
92 // The extension host we are showing the InfoBar for.
93 // TODO(pkasting): Should this live on the InfoBar instead?
94 scoped_ptr
<extensions::ExtensionViewHost
> extension_view_host_
;
96 const extensions::Extension
* extension_
;
97 content::NotificationRegistrar registrar_
;
99 ScopedObserver
<extensions::ExtensionRegistry
,
100 extensions::ExtensionRegistryObserver
>
101 extension_registry_observer_
;
103 // The requested height of the infobar (in pixels).
106 // Whether we are currently animating to close. This is used to ignore
107 // ExtensionView::PreferredSizeChanged notifications.
110 DISALLOW_COPY_AND_ASSIGN(ExtensionInfoBarDelegate
);
113 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INFOBAR_DELEGATE_H_