diff options
author | dgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-17 10:54:23 +0000 |
---|---|---|
committer | dgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-17 10:54:23 +0000 |
commit | 31e7fba2a2feddd74c14b9c717d6e30c5d7fa1de (patch) | |
tree | 0584bd19627fe1c5309171d510a876ac16224b00 /chrome/browser/extensions/image_loading_tracker.cc | |
parent | 771aa5c741777ce686d5d30f26d2c6658e8595fc (diff) | |
download | chromium_src-31e7fba2a2feddd74c14b9c717d6e30c5d7fa1de.zip chromium_src-31e7fba2a2feddd74c14b9c717d6e30c5d7fa1de.tar.gz chromium_src-31e7fba2a2feddd74c14b9c717d6e30c5d7fa1de.tar.bz2 |
Attempt to load component extension favicon from the resources first.
Special handling of CWS icon.
Also correctly handle URL rewrites in favicon requests.
BUG=chromium-os:28314,chromium:120471
TEST=Observe the right favicon for CWS and FileManager component extension. Bookmark them and see the right favicon.
Review URL: https://chromiumcodereview.appspot.com/9979001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@132563 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 | 67 |
1 files changed, 64 insertions, 3 deletions
diff --git a/chrome/browser/extensions/image_loading_tracker.cc b/chrome/browser/extensions/image_loading_tracker.cc index 1751974c..9a251fa 100644 --- a/chrome/browser/extensions/image_loading_tracker.cc +++ b/chrome/browser/extensions/image_loading_tracker.cc @@ -6,11 +6,15 @@ #include "base/bind.h" #include "base/file_util.h" +#include "chrome/browser/ui/webui/extensions/extension_icon_source.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/extensions/extension.h" +#include "chrome/common/extensions/extension_constants.h" #include "chrome/common/extensions/extension_resource.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" +#include "grit/component_extension_resources_map.h" +#include "grit/theme_resources.h" #include "skia/ext/image_operations.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/image/image.h" @@ -114,6 +118,28 @@ class ImageLoadingTracker::ImageLoader ReportBack(decoded.release(), resource, original_size, id); } + // Instructs the loader to load a resource on the File thread. + void LoadResource(const ExtensionResource& resource, + const gfx::Size& max_size, + int id, + int resource_id) { + DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::FILE)); + BrowserThread::PostTask( + BrowserThread::FILE, FROM_HERE, + base::Bind(&ImageLoader::LoadResourceOnFileThread, this, resource, + max_size, id, resource_id)); + } + + void LoadResourceOnFileThread(const ExtensionResource& resource, + const gfx::Size& max_size, + int id, + int resource_id) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); + SkBitmap* image = ExtensionIconSource::LoadImageByResourceId( + resource_id); + ReportBack(image, resource, max_size, id); + } + void ReportBack(SkBitmap* image, const ExtensionResource& resource, const gfx::Size& original_size, int id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); @@ -200,12 +226,47 @@ void ImageLoadingTracker::LoadImages(const Extension* extension, continue; } - // Instruct the ImageLoader to load this on the File thread. LoadImage does - // not block. + // Instruct the ImageLoader to load this on the File thread. LoadImage and + // LoadResource do not block. if (!loader_) loader_ = new ImageLoader(this); - loader_->LoadImage(it->resource, it->max_size, id); + + // Load resources for WebStore component extension. + if (load_info.extension_id == extension_misc::kWebStoreAppId) { + loader_->LoadResource(it->resource, it->max_size, id, IDR_WEBSTORE_ICON); + continue; + } + + int resource_id; + if (IsComponentExtensionResource(extension, it->resource, resource_id)) + loader_->LoadResource(it->resource, it->max_size, id, resource_id); + else + loader_->LoadImage(it->resource, it->max_size, id); + } +} + +bool ImageLoadingTracker::IsComponentExtensionResource( + const Extension* extension, + const ExtensionResource& resource, + int& resource_id) const { + if (extension->location() != Extension::COMPONENT) + return false; + + FilePath directory_path = extension->path(); + FilePath relative_path = directory_path.BaseName().Append( + resource.relative_path()); + + for (size_t i = 0; i < kComponentExtensionResourcesSize; ++i) { + FilePath resource_path = + FilePath().AppendASCII(kComponentExtensionResources[i].name); + resource_path = resource_path.NormalizePathSeparators(); + + if (relative_path == resource_path) { + resource_id = kComponentExtensionResources[i].value; + return true; + } } + return false; } void ImageLoadingTracker::OnImageLoaded( |