Home | History | Annotate | Download | only in infobars
      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.
      4 
      5 #ifndef CHROME_BROWSER_UI_VIEWS_INFOBARS_EXTENSION_INFOBAR_H_
      6 #define CHROME_BROWSER_UI_VIEWS_INFOBARS_EXTENSION_INFOBAR_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "chrome/browser/ui/views/infobars/infobar_view.h"
     10 #include "ui/views/controls/button/menu_button_listener.h"
     11 
     12 class Browser;
     13 class ExtensionInfoBarDelegate;
     14 
     15 namespace views {
     16 class ImageView;
     17 class MenuButton;
     18 }
     19 
     20 class ExtensionInfoBar : public InfoBarView,
     21                          public views::MenuButtonListener {
     22  public:
     23   ExtensionInfoBar(scoped_ptr<ExtensionInfoBarDelegate> delegate,
     24                    Browser* browser);
     25 
     26  private:
     27   virtual ~ExtensionInfoBar();
     28 
     29   // InfoBarView:
     30   virtual void Layout() OVERRIDE;
     31   virtual void ViewHierarchyChanged(
     32       const ViewHierarchyChangedDetails& details) OVERRIDE;
     33   virtual int ContentMinimumWidth() const OVERRIDE;
     34 
     35   // views::MenuButtonListener:
     36   virtual void OnMenuButtonClicked(views::View* source,
     37                                    const gfx::Point& point) OVERRIDE;
     38 
     39   void OnImageLoaded(const gfx::Image& image);
     40 
     41   ExtensionInfoBarDelegate* GetDelegate();
     42 
     43   Browser* browser_;
     44 
     45   // The infobar icon used for the extension infobar. The icon can be either a
     46   // plain image (in which case |icon_as_image_| is set) or a dropdown menu (in
     47   // which case |icon_as_menu_| is set).
     48   // The icon is a dropdown menu if the extension showing the infobar shows
     49   // configure context menus.
     50   views::View* infobar_icon_;
     51 
     52   // The dropdown menu for accessing the contextual extension actions.
     53   // It is non-NULL if the |infobar_icon_| is a menu button and in that case
     54   // |icon_as_menu_ == infobar_icon_|.
     55   views::MenuButton* icon_as_menu_;
     56 
     57   // The image view for the icon.
     58   // It is non-NULL if |infobar_icon_| is an image and in that case
     59   // |icon_as_image_ == infobar_icon_|.
     60   views::ImageView* icon_as_image_;
     61 
     62   base::WeakPtrFactory<ExtensionInfoBar> weak_ptr_factory_;
     63 
     64   DISALLOW_COPY_AND_ASSIGN(ExtensionInfoBar);
     65 };
     66 
     67 #endif  // CHROME_BROWSER_UI_VIEWS_INFOBARS_EXTENSION_INFOBAR_H_
     68