summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/image_loading_tracker.cc
diff options
context:
space:
mode:
authorasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-24 23:20:15 +0000
committerasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-24 23:20:15 +0000
commit06a0c94e817354c8c12afe4748ce68a418b0ed1b (patch)
tree44a301796ccb8a0808eb77b10292de60cf04fcf4 /chrome/browser/extensions/image_loading_tracker.cc
parent8ab402196ee4dc510e0162010789d43b96b54243 (diff)
downloadchromium_src-06a0c94e817354c8c12afe4748ce68a418b0ed1b.zip
chromium_src-06a0c94e817354c8c12afe4748ce68a418b0ed1b.tar.gz
chromium_src-06a0c94e817354c8c12afe4748ce68a418b0ed1b.tar.bz2
Show extension icons next to their top-level context menu items.
Also fix a bug in extension icon caching where we weren't keeping track of potential resizing done by ImageLoadingTracker before setting the cached SkBitmap. BUG=39494 TEST=Install an extension that includes an icon and uses the experimental context menu API. You should see the extension's icon in the context menu next to its top-level item. Review URL: http://codereview.chromium.org/2867008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50779 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/image_loading_tracker.cc')
-rw-r--r--chrome/browser/extensions/image_loading_tracker.cc30
1 files changed, 18 insertions, 12 deletions
diff --git a/chrome/browser/extensions/image_loading_tracker.cc b/chrome/browser/extensions/image_loading_tracker.cc
index ea174ff..5be22d8 100644
--- a/chrome/browser/extensions/image_loading_tracker.cc
+++ b/chrome/browser/extensions/image_loading_tracker.cc
@@ -14,6 +14,8 @@
#include "third_party/skia/include/core/SkBitmap.h"
#include "webkit/glue/image_decoder.h"
+ImageLoadingTracker::Observer::~Observer() {}
+
////////////////////////////////////////////////////////////////////////////////
// ImageLoadingTracker::ImageLoader
@@ -54,7 +56,7 @@ class ImageLoadingTracker::ImageLoader
std::string file_contents;
FilePath path = resource.GetFilePath();
if (path.empty() || !file_util::ReadFileToString(path, &file_contents)) {
- ReportBack(NULL, resource, id);
+ ReportBack(NULL, resource, gfx::Size(), id);
return;
}
@@ -65,10 +67,12 @@ class ImageLoadingTracker::ImageLoader
scoped_ptr<SkBitmap> decoded(new SkBitmap());
*decoded = decoder.Decode(data, file_contents.length());
if (decoded->empty()) {
- ReportBack(NULL, resource, id);
+ ReportBack(NULL, resource, gfx::Size(), id);
return; // Unable to decode.
}
+ gfx::Size original_size(decoded->width(), decoded->height());
+
if (decoded->width() > max_size.width() ||
decoded->height() > max_size.height()) {
// The bitmap is too big, re-sample.
@@ -77,25 +81,25 @@ class ImageLoadingTracker::ImageLoader
max_size.width(), max_size.height());
}
- ReportBack(decoded.release(), resource, id);
+ ReportBack(decoded.release(), resource, original_size, id);
}
void ReportBack(SkBitmap* image, const ExtensionResource& resource,
- int id) {
+ const gfx::Size& original_size, int id) {
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
ChromeThread::PostTask(
callback_thread_id_, FROM_HERE,
NewRunnableMethod(this, &ImageLoader::ReportOnUIThread,
- image, resource, id));
+ image, resource, original_size, id));
}
void ReportOnUIThread(SkBitmap* image, ExtensionResource resource,
- int id) {
+ const gfx::Size& original_size, int id) {
DCHECK(!ChromeThread::CurrentlyOn(ChromeThread::FILE));
if (tracker_)
- tracker_->OnImageLoaded(image, resource, id);
+ tracker_->OnImageLoaded(image, resource, original_size, id);
delete image;
}
@@ -138,16 +142,16 @@ void ImageLoadingTracker::LoadImage(Extension* extension,
// back.
int id = next_id_++;
if (resource.relative_path().empty()) {
- OnImageLoaded(NULL, resource, id);
+ OnImageLoaded(NULL, resource, max_size, id);
return;
}
DCHECK(extension->path() == resource.extension_root());
// See if the extension has the image already.
- if (extension->HasCachedImage(resource)) {
- SkBitmap image = extension->GetCachedImage(resource);
- OnImageLoaded(&image, resource, id);
+ if (extension->HasCachedImage(resource, max_size)) {
+ SkBitmap image = extension->GetCachedImage(resource, max_size);
+ OnImageLoaded(&image, resource, max_size, id);
return;
}
@@ -165,10 +169,12 @@ void ImageLoadingTracker::LoadImage(Extension* extension,
void ImageLoadingTracker::OnImageLoaded(
SkBitmap* image,
const ExtensionResource& resource,
+ const gfx::Size& original_size,
int id) {
LoadMap::iterator i = load_map_.find(id);
if (i != load_map_.end()) {
- i->second->SetCachedImage(resource, image ? *image : SkBitmap());
+ i->second->SetCachedImage(resource, image ? *image : SkBitmap(),
+ original_size);
load_map_.erase(i);
}