summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_menu_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/extension_menu_manager.cc')
-rw-r--r--chrome/browser/extensions/extension_menu_manager.cc84
1 files changed, 9 insertions, 75 deletions
diff --git a/chrome/browser/extensions/extension_menu_manager.cc b/chrome/browser/extensions/extension_menu_manager.cc
index 1bc55c7..8cce43c 100644
--- a/chrome/browser/extensions/extension_menu_manager.cc
+++ b/chrome/browser/extensions/extension_menu_manager.cc
@@ -6,23 +6,17 @@
#include <algorithm>
-#include "app/resource_bundle.h"
#include "base/logging.h"
#include "base/stl_util-inl.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "base/json/json_writer.h"
-#include "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/extensions/extension_message_service.h"
#include "chrome/browser/extensions/extension_tabs_module.h"
#include "chrome/browser/profile.h"
#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_resource.h"
#include "gfx/favicon_size.h"
-#include "gfx/size.h"
-#include "grit/theme_resources.h"
-#include "skia/ext/image_operations.h"
#include "webkit/glue/context_menu.h"
ExtensionMenuItem::ExtensionMenuItem(const Id& id,
@@ -35,7 +29,8 @@ ExtensionMenuItem::ExtensionMenuItem(const Id& id,
type_(type),
checked_(checked),
contexts_(contexts),
- parent_id_(0) {}
+ parent_id_(0) {
+}
ExtensionMenuItem::~ExtensionMenuItem() {
STLDeleteElements(&children_);
@@ -101,8 +96,7 @@ void ExtensionMenuItem::AddChild(ExtensionMenuItem* item) {
children_.push_back(item);
}
-ExtensionMenuManager::ExtensionMenuManager()
- : ALLOW_THIS_IN_INITIALIZER_LIST(image_tracker_(this)) {
+ExtensionMenuManager::ExtensionMenuManager() {
registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
NotificationService::AllSources());
}
@@ -150,17 +144,8 @@ bool ExtensionMenuManager::AddContextItem(Extension* extension,
RadioItemSelected(item);
// If this is the first item for this extension, start loading its icon.
- if (first_item) {
- ExtensionResource icon_resource;
- extension->GetIconPathAllowLargerSize(&icon_resource,
- Extension::EXTENSION_ICON_BITTY);
- if (!icon_resource.extension_root().empty()) {
- image_tracker_.LoadImage(extension,
- icon_resource,
- gfx::Size(kFavIconSize, kFavIconSize),
- ImageLoadingTracker::CACHE);
- }
- }
+ if (first_item)
+ icon_manager_.LoadIcon(extension);
return true;
}
@@ -275,8 +260,8 @@ bool ExtensionMenuManager::RemoveContextMenuItem(
}
DCHECK(result); // The check at the very top should have prevented this.
- if (list.empty() && ContainsKey(extension_icons_, extension_id))
- extension_icons_.erase(extension_id);
+ if (list.empty())
+ icon_manager_.RemoveIcon(extension_id);
return result;
}
@@ -297,9 +282,7 @@ void ExtensionMenuManager::RemoveAllContextItems(std::string extension_id) {
}
STLDeleteElements(&context_items_[extension_id]);
context_items_.erase(extension_id);
-
- if (ContainsKey(extension_icons_, extension_id))
- extension_icons_.erase(extension_id);
+ icon_manager_.RemoveIcon(extension_id);
}
ExtensionMenuItem* ExtensionMenuManager::GetItemById(
@@ -461,54 +444,5 @@ void ExtensionMenuManager::Observe(NotificationType type,
const SkBitmap& ExtensionMenuManager::GetIconForExtension(
const std::string& extension_id) {
- const SkBitmap* result = NULL;
- if (ContainsKey(extension_icons_, extension_id)) {
- result = &(extension_icons_[extension_id]);
- } else {
- EnsureDefaultIcon();
- result = &default_icon_;
- }
- DCHECK(result);
- DCHECK(result->width() == kFavIconSize);
- DCHECK(result->height() == kFavIconSize);
- return *result;
-}
-
-void ExtensionMenuManager::OnImageLoaded(SkBitmap* image,
- ExtensionResource resource,
- int index) {
- if (!image)
- return;
-
- const std::string extension_id = resource.extension_id();
-
- // Make sure we still have menu items for this extension (since image loading
- // is asynchronous, there's a slight chance they may have all been removed
- // while the icon was loading).
- if (!ContainsKey(context_items_, extension_id))
- return;
-
- if (image->width() == kFavIconSize && image->height() == kFavIconSize)
- extension_icons_[extension_id] = *image;
- else
- extension_icons_[extension_id] = ScaleToFavIconSize(*image);
-}
-
-void ExtensionMenuManager::EnsureDefaultIcon() {
- if (default_icon_.empty()) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- SkBitmap* src = rb.GetBitmapNamed(IDR_EXTENSIONS_SECTION);
- if (src->width() == kFavIconSize && src->height() == kFavIconSize) {
- default_icon_ = *src;
- } else {
- default_icon_ = SkBitmap(ScaleToFavIconSize(*src));
- }
- }
-}
-
-SkBitmap ExtensionMenuManager::ScaleToFavIconSize(const SkBitmap& source) {
- return skia::ImageOperations::Resize(source,
- skia::ImageOperations::RESIZE_LANCZOS3,
- kFavIconSize,
- kFavIconSize);
+ return icon_manager_.GetIcon(extension_id);
}