| Index: chrome/browser/ui/views/infobars/extension_infobar.cc
|
| diff --git a/chrome/browser/ui/views/infobars/extension_infobar.cc b/chrome/browser/ui/views/infobars/extension_infobar.cc
|
| deleted file mode 100644
|
| index 34938061c1f799dcea705399cafed91159892af2..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/views/infobars/extension_infobar.cc
|
| +++ /dev/null
|
| @@ -1,238 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/ui/views/infobars/extension_infobar.h"
|
| -
|
| -#include "chrome/browser/extensions/extension_context_menu_model.h"
|
| -#include "chrome/browser/extensions/extension_infobar_delegate.h"
|
| -#include "chrome/browser/extensions/extension_view_host.h"
|
| -#include "chrome/browser/platform_util.h"
|
| -#include "chrome/browser/ui/infobar_container_delegate.h"
|
| -#include "chrome/browser/ui/views/extensions/extension_view_views.h"
|
| -#include "chrome/browser/ui/views/frame/browser_view.h"
|
| -#include "extensions/browser/image_loader.h"
|
| -#include "extensions/common/constants.h"
|
| -#include "extensions/common/extension.h"
|
| -#include "extensions/common/extension_icon_set.h"
|
| -#include "extensions/common/extension_resource.h"
|
| -#include "extensions/common/manifest_handlers/icons_handler.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/gfx/animation/slide_animation.h"
|
| -#include "ui/gfx/canvas.h"
|
| -#include "ui/gfx/image/canvas_image_source.h"
|
| -#include "ui/gfx/image/image.h"
|
| -#include "ui/views/controls/button/menu_button.h"
|
| -#include "ui/views/controls/image_view.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -
|
| -// ExtensionInfoBarDelegate ----------------------------------------------------
|
| -
|
| -// static
|
| -scoped_ptr<infobars::InfoBar> ExtensionInfoBarDelegate::CreateInfoBar(
|
| - scoped_ptr<ExtensionInfoBarDelegate> delegate) {
|
| - Browser* browser = delegate->browser_;
|
| - return scoped_ptr<infobars::InfoBar>(
|
| - new ExtensionInfoBar(delegate.Pass(), browser));
|
| -}
|
| -
|
| -
|
| -// ExtensionInfoBar ------------------------------------------------------------
|
| -
|
| -namespace {
|
| -// The horizontal margin between the infobar icon and the Extension (HTML) view.
|
| -const int kIconHorizontalMargin = 1;
|
| -
|
| -class MenuImageSource: public gfx::CanvasImageSource {
|
| - public:
|
| - MenuImageSource(const gfx::ImageSkia& icon, const gfx::ImageSkia& drop_image)
|
| - : gfx::CanvasImageSource(ComputeSize(drop_image), false),
|
| - icon_(icon),
|
| - drop_image_(drop_image) {
|
| - }
|
| -
|
| - ~MenuImageSource() override {}
|
| -
|
| - // Overridden from gfx::CanvasImageSource
|
| - void Draw(gfx::Canvas* canvas) override {
|
| - int image_size = extension_misc::EXTENSION_ICON_BITTY;
|
| - canvas->DrawImageInt(icon_, 0, 0, icon_.width(), icon_.height(), 0, 0,
|
| - image_size, image_size, false);
|
| - canvas->DrawImageInt(drop_image_, image_size + kDropArrowLeftMargin,
|
| - image_size / 2);
|
| - }
|
| -
|
| - private:
|
| - gfx::Size ComputeSize(const gfx::ImageSkia& drop_image) const {
|
| - int image_size = extension_misc::EXTENSION_ICON_BITTY;
|
| - return gfx::Size(image_size + kDropArrowLeftMargin + drop_image.width(),
|
| - image_size);
|
| - }
|
| -
|
| - // The margin between the extension icon and the drop-down arrow image.
|
| - static const int kDropArrowLeftMargin = 3;
|
| -
|
| - const gfx::ImageSkia icon_;
|
| - const gfx::ImageSkia drop_image_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MenuImageSource);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -ExtensionInfoBar::ExtensionInfoBar(
|
| - scoped_ptr<ExtensionInfoBarDelegate> delegate,
|
| - Browser* browser)
|
| - : InfoBarView(delegate.Pass()),
|
| - browser_(browser),
|
| - infobar_icon_(NULL),
|
| - icon_as_menu_(NULL),
|
| - icon_as_image_(NULL),
|
| - weak_ptr_factory_(this) {
|
| -}
|
| -
|
| -ExtensionInfoBar::~ExtensionInfoBar() {
|
| -}
|
| -
|
| -void ExtensionInfoBar::Layout() {
|
| - InfoBarView::Layout();
|
| -
|
| - infobar_icon_->SetPosition(gfx::Point(StartX(), OffsetY(infobar_icon_)));
|
| - ExtensionViewViews* extension_view = GetExtensionView();
|
| - // TODO(pkasting): We'd like to simply set the extension view's desired height
|
| - // at creation time and position using OffsetY() like for other infobar items,
|
| - // but the NativeViewHost inside does not seem to be clipped by the ClipRect()
|
| - // call in InfoBarView::PaintChildren(), so we have to manually clamp the size
|
| - // here.
|
| - extension_view->SetSize(gfx::Size(
|
| - std::max(0, EndX() - StartX() - NonExtensionViewWidth()),
|
| - std::min(
|
| - height() - InfoBarContainerDelegate::kSeparatorLineHeight -
|
| - arrow_height(),
|
| - GetDelegate()->height())));
|
| - // We do SetPosition() separately after SetSize() so OffsetY() will work.
|
| - extension_view->SetPosition(
|
| - gfx::Point(infobar_icon_->bounds().right() + kIconHorizontalMargin,
|
| - std::max(arrow_height(), OffsetY(extension_view))));
|
| -}
|
| -
|
| -void ExtensionInfoBar::ViewHierarchyChanged(
|
| - const ViewHierarchyChangedDetails& details) {
|
| - if (!details.is_add || (details.child != this) || (infobar_icon_ != NULL)) {
|
| - InfoBarView::ViewHierarchyChanged(details);
|
| - return;
|
| - }
|
| -
|
| - extensions::ExtensionViewHost* extension_view_host =
|
| - GetDelegate()->extension_view_host();
|
| -
|
| - if (extension_view_host->extension()->ShowConfigureContextMenus()) {
|
| - icon_as_menu_ = new views::MenuButton(NULL, base::string16(), this, false);
|
| - icon_as_menu_->SetFocusable(true);
|
| - infobar_icon_ = icon_as_menu_;
|
| - } else {
|
| - icon_as_image_ = new views::ImageView();
|
| - infobar_icon_ = icon_as_image_;
|
| - }
|
| -
|
| - // Wait until the icon image is loaded before showing it.
|
| - infobar_icon_->SetVisible(false);
|
| - AddChildView(infobar_icon_);
|
| -
|
| - // Set the desired height of the ExtensionViewViews, so that when the
|
| - // AddChildView() call triggers InfoBarView::ViewHierarchyChanged(), it can
|
| - // read the correct height off this object in order to calculate the overall
|
| - // desired infobar height.
|
| - GetExtensionView()->SetSize(gfx::Size(0, GetDelegate()->height()));
|
| - AddChildView(GetExtensionView());
|
| -
|
| - // This must happen after adding all other children so InfoBarView can ensure
|
| - // the close button is the last child.
|
| - InfoBarView::ViewHierarchyChanged(details);
|
| -
|
| - // This must happen after adding all children because it can trigger layout,
|
| - // which assumes that particular children (e.g. the close button) have already
|
| - // been added.
|
| - const extensions::Extension* extension = extension_view_host->extension();
|
| - extension_misc::ExtensionIcons image_size =
|
| - extension_misc::EXTENSION_ICON_BITTY;
|
| - extensions::ExtensionResource icon_resource =
|
| - extensions::IconsInfo::GetIconResource(
|
| - extension, image_size, ExtensionIconSet::MATCH_EXACTLY);
|
| - extensions::ImageLoader* loader =
|
| - extensions::ImageLoader::Get(extension_view_host->browser_context());
|
| - loader->LoadImageAsync(
|
| - extension,
|
| - icon_resource,
|
| - gfx::Size(image_size, image_size),
|
| - base::Bind(&ExtensionInfoBar::OnImageLoaded,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -int ExtensionInfoBar::ContentMinimumWidth() const {
|
| - return NonExtensionViewWidth() + static_cast<const ExtensionViewViews*>(
|
| - GetDelegate()->extension_view_host()->view())->GetMinimumSize().width();
|
| -}
|
| -
|
| -void ExtensionInfoBar::OnMenuButtonClicked(views::View* source,
|
| - const gfx::Point& point) {
|
| - if (!owner())
|
| - return; // We're closing; don't call anything, it might access the owner.
|
| - const extensions::Extension* extension =
|
| - GetDelegate()->extension_view_host()->extension();
|
| - DCHECK(icon_as_menu_);
|
| -
|
| - scoped_refptr<ExtensionContextMenuModel> options_menu_contents =
|
| - new ExtensionContextMenuModel(extension, browser_);
|
| - DCHECK_EQ(icon_as_menu_, source);
|
| - RunMenuAt(
|
| - options_menu_contents.get(), icon_as_menu_, views::MENU_ANCHOR_TOPLEFT);
|
| -}
|
| -
|
| -void ExtensionInfoBar::OnImageLoaded(const gfx::Image& image) {
|
| - if (!GetDelegate())
|
| - return; // The delegate can go away while we asynchronously load images.
|
| -
|
| - const gfx::ImageSkia* icon = NULL;
|
| - // Fall back on the default extension icon on failure.
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - if (image.IsEmpty())
|
| - icon = rb.GetImageNamed(IDR_EXTENSIONS_SECTION).ToImageSkia();
|
| - else
|
| - icon = image.ToImageSkia();
|
| -
|
| - if (icon_as_menu_) {
|
| - const gfx::ImageSkia* drop_image =
|
| - rb.GetImageNamed(IDR_APP_DROPARROW).ToImageSkia();
|
| -
|
| - gfx::CanvasImageSource* source = new MenuImageSource(*icon, *drop_image);
|
| - gfx::ImageSkia menu_image = gfx::ImageSkia(source, source->size());
|
| - icon_as_menu_->SetImage(views::Button::STATE_NORMAL, menu_image);
|
| - } else {
|
| - icon_as_image_->SetImage(*icon);
|
| - }
|
| -
|
| - infobar_icon_->SizeToPreferredSize();
|
| - infobar_icon_->SetVisible(true);
|
| -
|
| - Layout();
|
| -}
|
| -
|
| -ExtensionInfoBarDelegate* ExtensionInfoBar::GetDelegate() {
|
| - return delegate()->AsExtensionInfoBarDelegate();
|
| -}
|
| -
|
| -const ExtensionInfoBarDelegate* ExtensionInfoBar::GetDelegate() const {
|
| - return delegate()->AsExtensionInfoBarDelegate();
|
| -}
|
| -
|
| -ExtensionViewViews* ExtensionInfoBar::GetExtensionView() {
|
| - return static_cast<ExtensionViewViews*>(
|
| - GetDelegate()->extension_view_host()->view());
|
| -}
|
| -
|
| -int ExtensionInfoBar::NonExtensionViewWidth() const {
|
| - return infobar_icon_->width() + kIconHorizontalMargin;
|
| -}
|
|
|