diff options
author | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 23:20:15 +0000 |
---|---|---|
committer | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 23:20:15 +0000 |
commit | 06a0c94e817354c8c12afe4748ce68a418b0ed1b (patch) | |
tree | 44a301796ccb8a0808eb77b10292de60cf04fcf4 /chrome/browser/extensions/image_loading_tracker.cc | |
parent | 8ab402196ee4dc510e0162010789d43b96b54243 (diff) | |
download | chromium_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.cc | 30 |
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); } |