diff options
Diffstat (limited to 'chrome')
11 files changed, 98 insertions, 115 deletions
diff --git a/chrome/browser/extensions/extension_icon_image.cc b/chrome/browser/extensions/extension_icon_image.cc index 8259861..f07452a 100644 --- a/chrome/browser/extensions/extension_icon_image.cc +++ b/chrome/browser/extensions/extension_icon_image.cc @@ -168,24 +168,22 @@ gfx::ImageSkiaRep IconImage::LoadImageForScaleFactor( ExtensionResource resource; // Find extension resource for non bundled component extensions. - if (!ImageLoadingTracker::IsSpecialBundledExtensionId(extension_->id())) { - // We try loading bigger image only if resource size is >= 32. - if (resource_size_in_pixel >= kMatchBiggerTreshold) { - resource = GetExtensionIconResource(extension_, icon_set_, - resource_size_in_pixel, ExtensionIconSet::MATCH_BIGGER); - } - - // If resource is not found by now, try matching smaller one. - if (resource.empty()) { - resource = GetExtensionIconResource(extension_, icon_set_, - resource_size_in_pixel, ExtensionIconSet::MATCH_SMALLER); - } - - // If there is no resource found, return default icon. - if (resource.empty()) - return default_icon_.GetRepresentation(scale_factor); + // We try loading bigger image only if resource size is >= 32. + if (resource_size_in_pixel >= kMatchBiggerTreshold) { + resource = GetExtensionIconResource(extension_, icon_set_, + resource_size_in_pixel, ExtensionIconSet::MATCH_BIGGER); } + // If resource is not found by now, try matching smaller one. + if (resource.empty()) { + resource = GetExtensionIconResource(extension_, icon_set_, + resource_size_in_pixel, ExtensionIconSet::MATCH_SMALLER); + } + + // If there is no resource found, return default icon. + if (resource.empty()) + return default_icon_.GetRepresentation(scale_factor); + int id = tracker_.next_id(); load_map_[id].scale_factor = scale_factor; load_map_[id].is_async = false; diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc index 70af6bf..d7d56cd 100644 --- a/chrome/browser/extensions/extension_protocols.cc +++ b/chrome/browser/extensions/extension_protocols.cc @@ -375,26 +375,20 @@ ExtensionProtocolHandler::MaybeCreateJob( // component_extension_resources.pak file in resources_path, calculate // extension relative path against resources_path. resources_path.AppendRelativePath(directory_path, &relative_path)) { - relative_path = relative_path.Append( - extension_file_util::ExtensionURLToRelativeFilePath(request->url())); - relative_path = relative_path.NormalizePathSeparators(); - - // TODO(tc): Make a map of FilePath -> resource ids so we don't have to - // covert to FilePaths all the time. This will be more useful as we add - // more resources. - for (size_t i = 0; i < kComponentExtensionResourcesSize; ++i) { - FilePath bm_resource_path = - FilePath().AppendASCII(kComponentExtensionResources[i].name); - bm_resource_path = bm_resource_path.NormalizePathSeparators(); - if (relative_path == bm_resource_path) { - return new URLRequestResourceBundleJob( - request, - network_delegate, - relative_path, - kComponentExtensionResources[i].value, - content_security_policy, - send_cors_header); - } + FilePath request_path = + extension_file_util::ExtensionURLToRelativeFilePath(request->url()); + int resource_id; + if (extension_file_util::IsComponentExtensionResource(extension, + request_path, &resource_id)) { + relative_path = relative_path.Append(request_path); + relative_path = relative_path.NormalizePathSeparators(); + return new URLRequestResourceBundleJob( + request, + network_delegate, + relative_path, + resource_id, + content_security_policy, + send_cors_header); } } diff --git a/chrome/browser/extensions/image_loading_tracker.cc b/chrome/browser/extensions/image_loading_tracker.cc index f7cd334..1fe6e6c 100644 --- a/chrome/browser/extensions/image_loading_tracker.cc +++ b/chrome/browser/extensions/image_loading_tracker.cc @@ -14,6 +14,7 @@ #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_file_util.h" #include "chrome/common/extensions/extension_resource.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" @@ -31,30 +32,6 @@ using extensions::Extension; namespace { -struct ComponentExtensionResource { - const char* extension_id; - const int resource_id; -}; - -const ComponentExtensionResource kSpecialComponentExtensionResources[] = { - { extension_misc::kWebStoreAppId, IDR_WEBSTORE_ICON }, - { extension_misc::kChromeAppId, IDR_PRODUCT_LOGO_128 }, -}; - -// Finds special component extension resource id for given extension id. -bool FindSpecialExtensionResourceId(const std::string& extension_id, - int* out_resource_id) { - for (size_t i = 0; i < arraysize(kSpecialComponentExtensionResources); ++i) { - if (extension_id == kSpecialComponentExtensionResources[i].extension_id) { - if (out_resource_id) - *out_resource_id = kSpecialComponentExtensionResources[i].resource_id; - return true; - } - } - - return false; -} - bool ShouldResizeImageRepresentation( ImageLoadingTracker::ImageRepresentation::ResizeCondition resize_method, const gfx::Size& decoded_size, @@ -247,13 +224,6 @@ class ImageLoadingTracker::ImageLoader //////////////////////////////////////////////////////////////////////////////// // ImageLoadingTracker -// static -bool ImageLoadingTracker::IsSpecialBundledExtensionId( - const std::string& extension_id) { - int resource_id = -1; - return FindSpecialExtensionResourceId(extension_id, &resource_id); -} - ImageLoadingTracker::ImageLoadingTracker(Observer* observer) : observer_(observer), next_id_(0) { @@ -295,16 +265,6 @@ void ImageLoadingTracker::LoadImages( for (std::vector<ImageRepresentation>::const_iterator it = info_list.begin(); it != info_list.end(); ++it) { - int resource_id = -1; - - // Load resources for special component extensions. - if (FindSpecialExtensionResourceId(load_info.extension_id, &resource_id)) { - if (!loader_) - loader_ = new ImageLoader(this); - loader_->LoadResource(*it, id, resource_id); - continue; - } - // If we don't have a path we don't need to do any further work, just // respond back. if (it->resource.relative_path().empty()) { @@ -327,7 +287,8 @@ void ImageLoadingTracker::LoadImages( if (!loader_) loader_ = new ImageLoader(this); - if (IsComponentExtensionResource(extension, it->resource, resource_id)) + int resource_id = -1; + if (IsComponentExtensionResource(extension, it->resource, &resource_id)) loader_->LoadResource(*it, id, resource_id); else loader_->LoadImage(*it, id); @@ -337,25 +298,9 @@ void ImageLoadingTracker::LoadImages( 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; + int* resource_id) const { + return extension_file_util::IsComponentExtensionResource(extension, + resource.relative_path(), resource_id); } void ImageLoadingTracker::OnBitmapLoaded( diff --git a/chrome/browser/extensions/image_loading_tracker.h b/chrome/browser/extensions/image_loading_tracker.h index be631e7..e5ddb992 100644 --- a/chrome/browser/extensions/image_loading_tracker.h +++ b/chrome/browser/extensions/image_loading_tracker.h @@ -96,11 +96,6 @@ class ImageLoadingTracker : public content::NotificationObserver { ui::ScaleFactor scale_factor; }; - // Returns true if given extension id is a special component extension that - // has its resource bundled. - // TODO(xiyuan): Move this out of this class. - static bool IsSpecialBundledExtensionId(const std::string& extension_id); - explicit ImageLoadingTracker(Observer* observer); virtual ~ImageLoadingTracker(); @@ -161,7 +156,7 @@ class ImageLoadingTracker : public content::NotificationObserver { // resources. Otherwise fills |resource_id|. bool IsComponentExtensionResource(const extensions::Extension* extension, const ExtensionResource& resource, - int& resource_id) const; + int* resource_id) const; // content::NotificationObserver method. If an extension is uninstalled while // we're waiting for the image we remove the entry from load_map_. diff --git a/chrome/browser/extensions/image_loading_tracker_unittest.cc b/chrome/browser/extensions/image_loading_tracker_unittest.cc index 34cb00d..a5d14be 100644 --- a/chrome/browser/extensions/image_loading_tracker_unittest.cc +++ b/chrome/browser/extensions/image_loading_tracker_unittest.cc @@ -254,7 +254,7 @@ TEST_F(ImageLoadingTrackerTest, IsComponentExtensionResource) { ASSERT_EQ(true, loader.IsComponentExtensionResource(extension.get(), resource, - resource_id)); + &resource_id)); ASSERT_EQ(IDR_FILE_MANAGER_ICON_16, resource_id); #endif } diff --git a/chrome/browser/resources/chrome_app/manifest.json b/chrome/browser/resources/chrome_app/manifest.json index f4806e2..628dde1 100644 --- a/chrome/browser/resources/chrome_app/manifest.json +++ b/chrome/browser/resources/chrome_app/manifest.json @@ -3,6 +3,10 @@ "name": "Chrome", "version": "0.1", "description": "Chrome as an app", + "icons": { + "16": "product_logo_16.png", + "128": "product_logo_128.png" + }, "app": { "launch": { // Note this will be changed by special case to become chrome://newtab. diff --git a/chrome/browser/resources/webstore_app/manifest.json b/chrome/browser/resources/webstore_app/manifest.json index a08a6ea..5ae6a31 100644 --- a/chrome/browser/resources/webstore_app/manifest.json +++ b/chrome/browser/resources/webstore_app/manifest.json @@ -4,6 +4,8 @@ "version": "0.1", "description": "Web Store", "icons": { + "16": "webstore_icon_16.png", + "128": "webstore_icon_128.png" }, "app": { "launch": { diff --git a/chrome/browser/ui/webui/extensions/extension_icon_source.cc b/chrome/browser/ui/webui/extensions/extension_icon_source.cc index 6e3e1b6..061eae7 100644 --- a/chrome/browser/ui/webui/extensions/extension_icon_source.cc +++ b/chrome/browser/ui/webui/extensions/extension_icon_source.cc @@ -135,13 +135,6 @@ ExtensionIconSource::~ExtensionIconSource() { STLDeleteValues(&request_map_); } -const SkBitmap* ExtensionIconSource::GetWebStoreImage() { - if (!web_store_icon_data_.get()) - web_store_icon_data_.reset(LoadImageByResourceId(IDR_WEBSTORE_ICON)); - - return web_store_icon_data_.get(); -} - const SkBitmap* ExtensionIconSource::GetDefaultAppImage() { if (!default_app_data_.get()) default_app_data_.reset(LoadImageByResourceId(IDR_APP_DEFAULT_ICON)); @@ -174,9 +167,7 @@ void ExtensionIconSource::LoadDefaultImage(int request_id) { ExtensionIconRequest* request = GetData(request_id); const SkBitmap* default_image = NULL; - if (request->extension->id() == extension_misc::kWebStoreAppId) - default_image = GetWebStoreImage(); - else if (request->extension->is_app()) + if (request->extension->is_app()) default_image = GetDefaultAppImage(); else default_image = GetDefaultExtensionImage(); diff --git a/chrome/common/extensions/extension_file_util.cc b/chrome/common/extensions/extension_file_util.cc index fce46dd..6ca5758 100644 --- a/chrome/common/extensions/extension_file_util.cc +++ b/chrome/common/extensions/extension_file_util.cc @@ -26,7 +26,9 @@ #include "chrome/common/extensions/extension_messages.h" #include "chrome/common/extensions/extension_resource.h" #include "chrome/common/extensions/message_bundle.h" +#include "grit/component_extension_resources_map.h" #include "grit/generated_resources.h" +#include "grit/theme_resources.h" #include "net/base/escape.h" #include "net/base/file_stream.h" #include "ui/base/l10n/l10n_util.h" @@ -791,4 +793,49 @@ void DeleteFile(const FilePath& path, bool recursive) { file_util::Delete(path, recursive); } +bool IsComponentExtensionResource(const Extension* extension, + const FilePath& resource_path, + int* resource_id) { + static const GritResourceMap kExtraComponentExtensionResources[] = { + {"web_store/webstore_icon_128.png", IDR_WEBSTORE_ICON}, + {"web_store/webstore_icon_16.png", IDR_WEBSTORE_ICON_16}, + {"chrome_app/product_logo_128.png", IDR_PRODUCT_LOGO_128}, + {"chrome_app/product_logo_16.png", IDR_PRODUCT_LOGO_16}, + }; + static const size_t kExtraComponentExtensionResourcesSize = + arraysize(kExtraComponentExtensionResources); + + if (extension->location() != Extension::COMPONENT) + return false; + + FilePath directory_path = extension->path(); + FilePath relative_path = directory_path.BaseName().Append(resource_path); + relative_path = relative_path.NormalizePathSeparators(); + + // TODO(tc): Make a map of FilePath -> resource ids so we don't have to + // covert to FilePaths all the time. This will be more useful as we add + // more resources. + 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; + } + } + for (size_t i = 0; i < kExtraComponentExtensionResourcesSize; ++i) { + FilePath resource_path = + FilePath().AppendASCII(kExtraComponentExtensionResources[i].name); + resource_path = resource_path.NormalizePathSeparators(); + + if (relative_path == resource_path) { + *resource_id = kExtraComponentExtensionResources[i].value; + return true; + } + } + return false; +} + } // namespace extension_file_util diff --git a/chrome/common/extensions/extension_file_util.h b/chrome/common/extensions/extension_file_util.h index 49a13cc..fcbdc65 100644 --- a/chrome/common/extensions/extension_file_util.h +++ b/chrome/common/extensions/extension_file_util.h @@ -130,6 +130,10 @@ FilePath GetUserDataTempDir(); // TODO(skerner): Make a version of Delete that is not overloaded in file_util. void DeleteFile(const FilePath& path, bool recursive); +bool IsComponentExtensionResource(const extensions::Extension* extension, + const FilePath& resource_path, + int* resource_id); + } // namespace extension_file_util #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_FILE_UTIL_H_ diff --git a/chrome/renderer/extensions/resource_request_policy.cc b/chrome/renderer/extensions/resource_request_policy.cc index c9973c8..da83a32 100644 --- a/chrome/renderer/extensions/resource_request_policy.cc +++ b/chrome/renderer/extensions/resource_request_policy.cc @@ -70,9 +70,12 @@ bool ResourceRequestPolicy::CanRequestResource( !extension->devtools_url().is_empty(); bool transition_allowed = !content::PageTransitionIsWebTriggerable(transition_type); + // - unreachable web page error page (to allow showing the icon of the + // unreachable app on this page) + bool is_error_page = frame_url == GURL(content::kUnreachableWebDataURL); if (!is_empty_origin && !is_own_resource && - !is_dev_tools && !transition_allowed) { + !is_dev_tools && !transition_allowed && !is_error_page) { std::string message = base::StringPrintf( "Denying load of %s. Resources must be listed in the " "web_accessible_resources manifest key in order to be loaded by " |