summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/extension_icon_image.cc30
-rw-r--r--chrome/browser/extensions/extension_protocols.cc34
-rw-r--r--chrome/browser/extensions/image_loading_tracker.cc67
-rw-r--r--chrome/browser/extensions/image_loading_tracker.h7
-rw-r--r--chrome/browser/extensions/image_loading_tracker_unittest.cc2
-rw-r--r--chrome/browser/resources/chrome_app/manifest.json4
-rw-r--r--chrome/browser/resources/webstore_app/manifest.json2
-rw-r--r--chrome/browser/ui/webui/extensions/extension_icon_source.cc11
-rw-r--r--chrome/common/extensions/extension_file_util.cc47
-rw-r--r--chrome/common/extensions/extension_file_util.h4
-rw-r--r--chrome/renderer/extensions/resource_request_policy.cc5
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 "