| Index: trunk/src/chrome/browser/extensions/extension_infobar_delegate.cc
|
| ===================================================================
|
| --- trunk/src/chrome/browser/extensions/extension_infobar_delegate.cc (revision 238401)
|
| +++ trunk/src/chrome/browser/extensions/extension_infobar_delegate.cc (working copy)
|
| @@ -16,6 +16,8 @@
|
| #include "extensions/common/extension.h"
|
|
|
| ExtensionInfoBarDelegate::~ExtensionInfoBarDelegate() {
|
| + if (observer_)
|
| + observer_->OnDelegateDeleted();
|
| }
|
|
|
| // static
|
| @@ -24,21 +26,23 @@
|
| const extensions::Extension* extension,
|
| const GURL& url,
|
| int height) {
|
| - infobar_service->AddInfoBar(ExtensionInfoBarDelegate::CreateInfoBar(
|
| - scoped_ptr<ExtensionInfoBarDelegate>(new ExtensionInfoBarDelegate(
|
| - browser, extension, url, infobar_service->web_contents(), height))));
|
| + infobar_service->AddInfoBar(scoped_ptr<InfoBarDelegate>(
|
| + new ExtensionInfoBarDelegate(browser, infobar_service, extension, url,
|
| + infobar_service->web_contents(), height)));
|
| }
|
|
|
| ExtensionInfoBarDelegate::ExtensionInfoBarDelegate(
|
| Browser* browser,
|
| + InfoBarService* infobar_service,
|
| const extensions::Extension* extension,
|
| const GURL& url,
|
| content::WebContents* web_contents,
|
| int height)
|
| - : InfoBarDelegate(),
|
| + : InfoBarDelegate(infobar_service),
|
| #if defined(TOOLKIT_VIEWS)
|
| browser_(browser),
|
| #endif
|
| + observer_(NULL),
|
| extension_(extension),
|
| closing_(false) {
|
| extension_view_host_.reset(
|
| @@ -50,15 +54,21 @@
|
| registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
|
| content::Source<Profile>(browser->profile()));
|
|
|
| +#if defined(TOOLKIT_VIEWS) || defined(TOOLKIT_GTK) || defined(OS_ANDROID)
|
| + // TODO(dtrainor): On Android, this is not used. Might need to pull this from
|
| + // Android UI level in the future. Tracked via issue 115303.
|
| + int default_height = InfoBar::kDefaultBarTargetHeight;
|
| +#elif defined(OS_MACOSX)
|
| + // TODO(pkasting): Once Infobars have been ported to Mac, we can remove the
|
| + // ifdefs and just use the Infobar constant below.
|
| + int default_height = 36;
|
| +#endif
|
| height_ = std::max(0, height);
|
| - height_ = std::min(2 * InfoBar::kDefaultBarTargetHeight, height_);
|
| + height_ = std::min(2 * default_height, height_);
|
| if (height_ == 0)
|
| - height_ = InfoBar::kDefaultBarTargetHeight;
|
| + height_ = default_height;
|
| }
|
|
|
| -// ExtensionInfoBarDelegate::CreateInfoBar() is implemented in platform-specific
|
| -// files.
|
| -
|
| bool ExtensionInfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
|
| ExtensionInfoBarDelegate* extension_delegate =
|
| delegate->AsExtensionInfoBarDelegate();
|
| @@ -95,11 +105,11 @@
|
| if (type == chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE) {
|
| if (extension_view_host_.get() ==
|
| content::Details<extensions::ExtensionHost>(details).ptr())
|
| - infobar()->RemoveSelf();
|
| + RemoveSelf();
|
| } else {
|
| DCHECK(type == chrome::NOTIFICATION_EXTENSION_UNLOADED);
|
| if (extension_ == content::Details<extensions::UnloadedExtensionInfo>(
|
| details)->extension)
|
| - infobar()->RemoveSelf();
|
| + RemoveSelf();
|
| }
|
| }
|
|
|