| Index: chrome/browser/views/infobars/extension_infobar.cc
|
| ===================================================================
|
| --- chrome/browser/views/infobars/extension_infobar.cc (revision 42429)
|
| +++ chrome/browser/views/infobars/extension_infobar.cc (working copy)
|
| @@ -13,7 +13,6 @@
|
| #include "chrome/common/extensions/extension.h"
|
| #include "chrome/common/platform_util.h"
|
| #include "gfx/canvas.h"
|
| -#include "grit/browser_resources.h"
|
| #include "grit/theme_resources.h"
|
| #include "views/controls/button/menu_button.h"
|
| #include "views/controls/menu/menu_2.h"
|
| @@ -31,7 +30,8 @@
|
|
|
| ExtensionInfoBar::ExtensionInfoBar(ExtensionInfoBarDelegate* delegate)
|
| : InfoBar(delegate),
|
| - delegate_(delegate) {
|
| + delegate_(delegate),
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)) {
|
| ExtensionHost* extension_host = delegate_->extension_host();
|
|
|
| // We set the target height for the InfoBar to be the height of the
|
| @@ -91,6 +91,36 @@
|
| view->SetBounds(x, 0, width() - x - kFarRightMargin - 1, height() - 1);
|
| }
|
|
|
| +void ExtensionInfoBar::OnImageLoaded(
|
| + SkBitmap* image, ExtensionResource resource, int index) {
|
| + ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| +
|
| + // We fall back on the default extension icon on failure.
|
| + SkBitmap* icon;
|
| + if (!image || image->empty())
|
| + icon = rb.GetBitmapNamed(IDR_EXTENSIONS_SECTION);
|
| + else
|
| + icon = image;
|
| +
|
| + SkBitmap* drop_image = rb.GetBitmapNamed(IDR_APP_DROPARROW);
|
| +
|
| + int image_size = Extension::EXTENSION_ICON_BITTY;
|
| + scoped_ptr<gfx::Canvas> canvas(
|
| + new gfx::Canvas(image_size + kDropArrowLeftMargin + drop_image->width(),
|
| + image_size, false));
|
| + canvas->DrawBitmapInt(*icon,
|
| + 0, 0, icon->width(), icon->height(),
|
| + 0, 0, image_size, image_size,
|
| + false);
|
| + canvas->DrawBitmapInt(*drop_image,
|
| + image_size + kDropArrowLeftMargin,
|
| + image_size / 2);
|
| + menu_->SetIcon(canvas->ExtractBitmap());
|
| + menu_->SetVisible(true);
|
| +
|
| + Layout();
|
| +}
|
| +
|
| void ExtensionInfoBar::RunMenu(View* source, const gfx::Point& pt) {
|
| if (!options_menu_contents_.get()) {
|
| Browser* browser = BrowserView::GetBrowserViewForNativeWindow(
|
| @@ -105,46 +135,20 @@
|
| }
|
|
|
| void ExtensionInfoBar::SetupIconAndMenu() {
|
| - SkBitmap icon;
|
| + menu_ = new views::MenuButton(NULL, std::wstring(), this, false);
|
| + menu_->SetVisible(false);
|
| + AddChildView(menu_);
|
|
|
| - // TODO(finnur): http://crbug.com/38521. Use cached version of the Extension
|
| - // icon instead of loading it here.
|
| ExtensionResource icon_resource;
|
| Extension::Icons size = delegate_->extension_host()->extension()->
|
| GetIconPathAllowLargerSize(&icon_resource,
|
| Extension::EXTENSION_ICON_BITTY);
|
| - if (!icon_resource.GetFilePath().empty()) {
|
| - scoped_ptr<SkBitmap> bitmap;
|
| - Extension::DecodeIconFromPath(icon_resource.GetFilePath(), size, &bitmap);
|
| - if (bitmap.get())
|
| - icon = *bitmap.release();
|
| + if (!icon_resource.relative_path().empty()) {
|
| + // Create a tracker to load the image. It will report back on OnImageLoaded.
|
| + tracker_.LoadImage(icon_resource, gfx::Size(size, size));
|
| + } else {
|
| + OnImageLoaded(NULL, icon_resource, 0); // |image|, |index|.
|
| }
|
| -
|
| - // Failure to get the path or failure to decode it causes fall-back to the
|
| - // default extension icon.
|
| - if (icon.empty()) {
|
| - icon = *ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| - IDR_EXTENSION_DEFAULT_ICON);
|
| - }
|
| -
|
| - ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| - SkBitmap* drop_image = rb.GetBitmapNamed(IDR_APP_DROPARROW);
|
| - menu_ = new views::MenuButton(NULL, std::wstring(), this, false);
|
| -
|
| - int image_size = Extension::EXTENSION_ICON_BITTY;
|
| - scoped_ptr<gfx::Canvas> canvas(
|
| - new gfx::Canvas(image_size + kDropArrowLeftMargin + drop_image->width(),
|
| - image_size, false));
|
| - canvas->DrawBitmapInt(icon,
|
| - 0, 0, icon.width(), icon.height(),
|
| - 0, 0, image_size, image_size,
|
| - false);
|
| - canvas->DrawBitmapInt(*drop_image,
|
| - image_size + kDropArrowLeftMargin,
|
| - image_size / 2);
|
| - menu_->SetIcon(canvas->ExtractBitmap());
|
| -
|
| - AddChildView(menu_);
|
| }
|
|
|
| InfoBar* ExtensionInfoBarDelegate::CreateInfoBar() {
|
|
|