summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-27 20:55:50 +0000
committerrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-27 20:55:50 +0000
commit702d8b462fceaf9613a42e66c5464abfcf3e2550 (patch)
treef12c4f8d8eb715a80b273d252085aa93308c70e6
parentf19144dba4ac3b6ecf36dc1debefbcefe10ac5bb (diff)
downloadchromium_src-702d8b462fceaf9613a42e66c5464abfcf3e2550.zip
chromium_src-702d8b462fceaf9613a42e66c5464abfcf3e2550.tar.gz
chromium_src-702d8b462fceaf9613a42e66c5464abfcf3e2550.tar.bz2
Move Icons out of Extension class
BUG=159265 TBR=davemoore@chromium.org, atwilson@chromium.org, dalecurtis@chromium.org (davemoore - c/b/chromeos, atwilson - c/b/background, dalecurtis - c/b/media) Review URL: https://chromiumcodereview.appspot.com/11786003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@185030 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/background/background_application_list_model.cc5
-rw-r--r--chrome/browser/background/background_contents_service.cc7
-rw-r--r--chrome/browser/chromeos/extensions/file_browser_private_api.cc5
-rw-r--r--chrome/browser/chromeos/offline/offline_load_page.cc7
-rw-r--r--chrome/browser/extensions/api/developer_private/developer_private_api.cc11
-rw-r--r--chrome/browser/extensions/api/icons/icons_api.cc31
-rw-r--r--chrome/browser/extensions/api/icons/icons_api.h37
-rw-r--r--chrome/browser/extensions/api/management/management_api.cc4
-rw-r--r--chrome/browser/extensions/app_icon_loader_impl.cc5
-rw-r--r--chrome/browser/extensions/convert_web_app_browsertest.cc14
-rw-r--r--chrome/browser/extensions/convert_web_app_unittest.cc13
-rw-r--r--chrome/browser/extensions/crx_installer.cc5
-rw-r--r--chrome/browser/extensions/extension_browsertest.cc10
-rw-r--r--chrome/browser/extensions/extension_browsertest.h1
-rw-r--r--chrome/browser/extensions/extension_icon_image_unittest.cc21
-rw-r--r--chrome/browser/extensions/extension_icon_manager.cc7
-rw-r--r--chrome/browser/extensions/extension_install_prompt.cc14
-rw-r--r--chrome/browser/extensions/extension_protocols.cc6
-rw-r--r--chrome/browser/extensions/extension_protocols_unittest.cc14
-rw-r--r--chrome/browser/extensions/extension_uninstall_dialog.cc15
-rw-r--r--chrome/browser/extensions/extension_web_ui.cc6
-rw-r--r--chrome/browser/extensions/image_loader_unittest.cc35
-rw-r--r--chrome/browser/extensions/tab_helper.cc4
-rw-r--r--chrome/browser/media/media_stream_capture_indicator.cc4
-rw-r--r--chrome/browser/profiles/profile_dependency_manager.cc2
-rw-r--r--chrome/browser/ui/app_list/extension_app_item.cc5
-rw-r--r--chrome/browser/ui/app_list/search_builder.cc3
-rw-r--r--chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc3
-rw-r--r--chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc3
-rw-r--r--chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc3
-rw-r--r--chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm7
-rw-r--r--chrome/browser/ui/cocoa/location_bar/action_box_menu_bubble_controller.mm3
-rw-r--r--chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm10
-rw-r--r--chrome/browser/ui/extensions/shell_window.cc6
-rw-r--r--chrome/browser/ui/gtk/action_box_button_gtk.cc3
-rw-r--r--chrome/browser/ui/gtk/create_application_shortcuts_dialog_gtk.cc1
-rw-r--r--chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc7
-rw-r--r--chrome/browser/ui/gtk/location_bar_view_gtk.cc5
-rw-r--r--chrome/browser/ui/gtk/script_bubble_gtk.cc7
-rw-r--r--chrome/browser/ui/panels/panel.cc7
-rw-r--r--chrome/browser/ui/views/action_box_menu.cc3
-rw-r--r--chrome/browser/ui/views/create_application_shortcut_view.cc7
-rw-r--r--chrome/browser/ui/views/infobars/extension_infobar.cc5
-rw-r--r--chrome/browser/ui/views/location_bar/page_action_with_badge_view.cc5
-rw-r--r--chrome/browser/ui/views/script_bubble_view.cc9
-rw-r--r--chrome/browser/ui/web_applications/web_app_ui.cc13
-rw-r--r--chrome/browser/ui/webui/extensions/extension_icon_source.cc13
-rw-r--r--chrome/browser/ui/webui/options/search_engine_manager_handler.cc4
-rw-r--r--chrome/chrome_browser_extensions.gypi2
-rw-r--r--chrome/chrome_common.gypi4
-rw-r--r--chrome/chrome_tests_unit.gypi2
-rw-r--r--chrome/common/extensions/api/extension_action/script_badge_handler.cc8
-rw-r--r--chrome/common/extensions/api/extension_action/script_badge_handler.h5
-rw-r--r--chrome/common/extensions/api/extension_action/script_badge_manifest_unittest.cc4
-rw-r--r--chrome/common/extensions/api/icons/icons_handler.cc147
-rw-r--r--chrome/common/extensions/api/icons/icons_handler.h79
-rw-r--r--chrome/common/extensions/api/icons/icons_manifest_unittest.cc64
-rw-r--r--chrome/common/extensions/extension.cc101
-rw-r--r--chrome/common/extensions/extension.h45
-rw-r--r--chrome/common/extensions/extension_file_util.cc5
-rw-r--r--chrome/common/extensions/extension_file_util_unittest.cc4
-rw-r--r--chrome/common/extensions/manifest_tests/extension_manifests_icon_unittest.cc49
-rw-r--r--chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc19
-rw-r--r--chrome/common/localized_error.cc13
-rw-r--r--chrome/renderer/extensions/resource_request_policy.cc4
-rw-r--r--chrome/utility/chrome_content_utility_client.cc4
66 files changed, 654 insertions, 320 deletions
diff --git a/chrome/browser/background/background_application_list_model.cc b/chrome/browser/background/background_application_list_model.cc
index 77c5f60..9c5aad5 100644
--- a/chrome/browser/background/background_application_list_model.cc
+++ b/chrome/browser/background/background_application_list_model.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/extensions/image_loader.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -152,8 +153,8 @@ void BackgroundApplicationListModel::Application::OnImageLoaded(
void BackgroundApplicationListModel::Application::RequestIcon(
extension_misc::ExtensionIcons size) {
- ExtensionResource resource = extension_->GetIconResource(
- size, ExtensionIconSet::MATCH_BIGGER);
+ ExtensionResource resource = extensions::IconsInfo::GetIconResource(
+ extension_, size, ExtensionIconSet::MATCH_BIGGER);
extensions::ImageLoader::Get(model_->profile_)->LoadImageAsync(
extension_, resource, gfx::Size(size, size),
base::Bind(&Application::OnImageLoaded, AsWeakPtr()));
diff --git a/chrome/browser/background/background_contents_service.cc b/chrome/browser/background/background_contents_service.cc
index c7e9a72..883160b 100644
--- a/chrome/browser/background/background_contents_service.cc
+++ b/chrome/browser/background/background_contents_service.cc
@@ -28,6 +28,7 @@
#include "chrome/browser/ui/host_desktop.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -123,8 +124,10 @@ void ShowBalloon(const Extension* extension, Profile* profile) {
extension->is_app() ? IDS_BACKGROUND_CRASHED_APP_BALLOON_MESSAGE :
IDS_BACKGROUND_CRASHED_EXTENSION_BALLOON_MESSAGE,
UTF8ToUTF16(extension->name()));
- GURL icon_url(extension->GetIconURL(extension_misc::EXTENSION_ICON_SMALLISH,
- ExtensionIconSet::MATCH_BIGGER));
+ GURL icon_url(extensions::IconsInfo::GetIconURL(
+ extension,
+ extension_misc::EXTENSION_ICON_SMALLISH,
+ ExtensionIconSet::MATCH_BIGGER));
DesktopNotificationService::AddNotification(
extension->url(), title, message, icon_url, string16(),
new CrashNotificationDelegate(profile, extension), profile);
diff --git a/chrome/browser/chromeos/extensions/file_browser_private_api.cc b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
index 1b68d4c..79581f0 100644
--- a/chrome/browser/chromeos/extensions/file_browser_private_api.cc
+++ b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
@@ -55,6 +55,7 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/views/select_file_dialog_extension.h"
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -948,8 +949,8 @@ bool GetFileTasksFileBrowserFunction::FindAppTasks(
task->SetString("title", (*i)->title);
task->SetBoolean("isDefault", false);
- GURL best_icon = extension->GetIconURL(kPreferredIconSize,
- ExtensionIconSet::MATCH_BIGGER);
+ GURL best_icon = extensions::IconsInfo::GetIconURL(
+ extension, kPreferredIconSize, ExtensionIconSet::MATCH_BIGGER);
if (!best_icon.is_empty())
task->SetString("iconUrl", best_icon.spec());
else
diff --git a/chrome/browser/chromeos/offline/offline_load_page.cc b/chrome/browser/chromeos/offline/offline_load_page.cc
index 0e382ee..11f11d7 100644
--- a/chrome/browser/chromeos/offline/offline_load_page.cc
+++ b/chrome/browser/chromeos/offline/offline_load_page.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/renderer_preferences_util.h"
#include "chrome/browser/tab_contents/tab_util.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -145,8 +146,10 @@ void OfflineLoadPage::GetAppOfflineStrings(
DictionaryValue* strings) const {
strings->SetString("title", app->name());
- GURL icon_url = app->GetIconURL(extension_misc::EXTENSION_ICON_LARGE,
- ExtensionIconSet::MATCH_BIGGER);
+ GURL icon_url = extensions::IconsInfo::GetIconURL(
+ app,
+ extension_misc::EXTENSION_ICON_LARGE,
+ ExtensionIconSet::MATCH_BIGGER);
if (icon_url.is_empty()) {
strings->SetString("display_icon", "none");
strings->SetString("icon", string16());
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
index bca5d32..8f48d42 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
@@ -27,6 +27,7 @@
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/browser/view_type_utils.h"
#include "chrome/common/extensions/api/developer_private.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension_icon_set.h"
#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/extensions/manifest_url_handler.h"
@@ -350,7 +351,7 @@ bool DeveloperPrivateGetItemsInfoFunction::RunImpl() {
items.InsertAll(*service->terminated_extensions());
}
- std::map<std::string, ExtensionResource> idToIcon;
+ std::map<std::string, ExtensionResource> id_to_icon;
ItemInfoList item_list;
for (ExtensionSet::const_iterator iter = items.begin();
@@ -358,8 +359,10 @@ bool DeveloperPrivateGetItemsInfoFunction::RunImpl() {
const Extension& item = **iter;
ExtensionResource item_resource =
- item.GetIconResource(48, ExtensionIconSet::MATCH_BIGGER);
- idToIcon[item.id()] = item_resource;
+ extensions::IconsInfo::GetIconResource(&item,
+ 48,
+ ExtensionIconSet::MATCH_BIGGER);
+ id_to_icon[item.id()] = item_resource;
if (item.location() == Manifest::COMPONENT)
continue; // Skip built-in extensions / apps;
@@ -371,7 +374,7 @@ bool DeveloperPrivateGetItemsInfoFunction::RunImpl() {
base::Bind(&DeveloperPrivateGetItemsInfoFunction::GetIconsOnFileThread,
this,
item_list,
- idToIcon));
+ id_to_icon));
return true;
}
diff --git a/chrome/browser/extensions/api/icons/icons_api.cc b/chrome/browser/extensions/api/icons/icons_api.cc
new file mode 100644
index 0000000..e3b6c89
--- /dev/null
+++ b/chrome/browser/extensions/api/icons/icons_api.cc
@@ -0,0 +1,31 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/icons/icons_api.h"
+
+#include "base/lazy_instance.h"
+#include "base/memory/linked_ptr.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
+#include "chrome/common/extensions/manifest_handler.h"
+
+namespace extensions {
+
+static base::LazyInstance<ProfileKeyedAPIFactory<IconsAPI> >
+ g_factory = LAZY_INSTANCE_INITIALIZER;
+
+// static
+ProfileKeyedAPIFactory<IconsAPI>* IconsAPI::GetFactoryInstance() {
+ return &g_factory.Get();
+}
+
+IconsAPI::IconsAPI(Profile* profile) {
+ ManifestHandler::Register(extension_manifest_keys::kIcons,
+ make_linked_ptr(new IconsHandler));
+}
+
+IconsAPI::~IconsAPI() {
+}
+
+} // namespace extensions
diff --git a/chrome/browser/extensions/api/icons/icons_api.h b/chrome/browser/extensions/api/icons/icons_api.h
new file mode 100644
index 0000000..a194e81
--- /dev/null
+++ b/chrome/browser/extensions/api/icons/icons_api.h
@@ -0,0 +1,37 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_API_ICONS_ICONS_API_H_
+#define CHROME_BROWSER_EXTENSIONS_API_ICONS_ICONS_API_H_
+
+#include "chrome/browser/extensions/api/profile_keyed_api_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service.h"
+
+class Profile;
+
+namespace extensions {
+
+// The profile-keyed service that manages the extension icons API.
+class IconsAPI : public ProfileKeyedAPI {
+ public:
+ explicit IconsAPI(Profile* profile);
+ virtual ~IconsAPI();
+
+ // ProfileKeyedAPI implementation.
+ static ProfileKeyedAPIFactory<IconsAPI>* GetFactoryInstance();
+
+ private:
+ friend class ProfileKeyedAPIFactory<IconsAPI>;
+
+ // ProfileKeyedAPI implementation.
+ static const char* service_name() {
+ return "IconsAPI";
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(IconsAPI);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_API_ICONS_ICONS_API_H_
diff --git a/chrome/browser/extensions/api/management/management_api.cc b/chrome/browser/extensions/api/management/management_api.cc
index 45ab1cd..b788c99 100644
--- a/chrome/browser/extensions/api/management/management_api.cc
+++ b/chrome/browser/extensions/api/management/management_api.cc
@@ -30,6 +30,7 @@
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_utility_messages.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/api/management.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
@@ -138,7 +139,8 @@ scoped_ptr<management::ExtensionInfo> CreateExtensionInfo(
extension.GetFullLaunchURL().spec()));
}
- const ExtensionIconSet::IconMap& icons = extension.icons().map();
+ const ExtensionIconSet::IconMap& icons =
+ extensions::IconsInfo::GetIcons(&extension).map();
if (!icons.empty()) {
info->icons.reset(new IconInfoList());
ExtensionIconSet::IconMap::const_iterator icon_iter;
diff --git a/chrome/browser/extensions/app_icon_loader_impl.cc b/chrome/browser/extensions/app_icon_loader_impl.cc
index e4098af..e3f9a82 100644
--- a/chrome/browser/extensions/app_icon_loader_impl.cc
+++ b/chrome/browser/extensions/app_icon_loader_impl.cc
@@ -8,6 +8,7 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "ui/gfx/color_utils.h"
@@ -56,9 +57,9 @@ void AppIconLoaderImpl::FetchImage(const std::string& id) {
extensions::IconImage* image = new extensions::IconImage(
profile_,
extension,
- extension->icons(),
+ extensions::IconsInfo::GetIcons(extension),
icon_size_,
- extensions::Extension::GetDefaultIcon(true),
+ extensions::IconsInfo::GetDefaultAppIcon(),
this);
// |map_| takes ownership of |image|.
map_[image] = id;
diff --git a/chrome/browser/extensions/convert_web_app_browsertest.cc b/chrome/browser/extensions/convert_web_app_browsertest.cc
index 7857972..0a4fd97 100644
--- a/chrome/browser/extensions/convert_web_app_browsertest.cc
+++ b/chrome/browser/extensions/convert_web_app_browsertest.cc
@@ -10,7 +10,9 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_icon_set.h"
#include "chrome/common/extensions/permissions/permission_set.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
@@ -82,13 +84,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionFromWebAppTest, Basic) {
EXPECT_TRUE(installed_extension_->HasAPIPermission(
APIPermission::kNotification));
- ASSERT_EQ(3u, installed_extension_->icons().map().size());
- EXPECT_EQ("icons/16.png", installed_extension_->icons().Get(
- 16, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("icons/48.png", installed_extension_->icons().Get(
- 48, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("icons/128.png", installed_extension_->icons().Get(
- 128, ExtensionIconSet::MATCH_EXACTLY));
+ const ExtensionIconSet& icons = IconsInfo::GetIcons(installed_extension_);
+ ASSERT_EQ(3u, icons.map().size());
+ EXPECT_EQ("icons/16.png", icons.Get(16, ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("icons/48.png", icons.Get(48, ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("icons/128.png", icons.Get(128, ExtensionIconSet::MATCH_EXACTLY));
}
} // namespace extensions
diff --git a/chrome/browser/extensions/convert_web_app_unittest.cc b/chrome/browser/extensions/convert_web_app_unittest.cc
index 8b9e0c5..b915c25 100644
--- a/chrome/browser/extensions/convert_web_app_unittest.cc
+++ b/chrome/browser/extensions/convert_web_app_unittest.cc
@@ -16,6 +16,7 @@
#include "base/utf_string_conversions.h"
#include "base/version.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_icon_set.h"
#include "chrome/common/extensions/extension_resource.h"
@@ -137,13 +138,13 @@ TEST(ExtensionFromWebApp, Basic) {
EXPECT_EQ("http://aaronboodman.com/gearpad/*",
extension->web_extent().patterns().begin()->GetAsString());
- EXPECT_EQ(web_app.icons.size(), extension->icons().map().size());
+ EXPECT_EQ(web_app.icons.size(), IconsInfo::GetIcons(extension).map().size());
for (size_t i = 0; i < web_app.icons.size(); ++i) {
EXPECT_EQ(StringPrintf("icons/%i.png", web_app.icons[i].width),
- extension->icons().Get(web_app.icons[i].width,
- ExtensionIconSet::MATCH_EXACTLY));
- ExtensionResource resource = extension->GetIconResource(
- web_app.icons[i].width, ExtensionIconSet::MATCH_EXACTLY);
+ IconsInfo::GetIcons(extension).Get(
+ web_app.icons[i].width, ExtensionIconSet::MATCH_EXACTLY));
+ ExtensionResource resource = IconsInfo::GetIconResource(
+ extension, web_app.icons[i].width, ExtensionIconSet::MATCH_EXACTLY);
ASSERT_TRUE(!resource.empty());
EXPECT_TRUE(file_util::PathExists(resource.GetFilePath()));
}
@@ -177,7 +178,7 @@ TEST(ExtensionFromWebApp, Minimal) {
EXPECT_EQ(UTF16ToUTF8(web_app.title), extension->name());
EXPECT_EQ("", extension->description());
EXPECT_EQ(web_app.app_url, extension->GetFullLaunchURL());
- EXPECT_EQ(0u, extension->icons().map().size());
+ EXPECT_EQ(0u, IconsInfo::GetIcons(extension).map().size());
EXPECT_EQ(0u, extension->GetActivePermissions()->apis().size());
ASSERT_EQ(1u, extension->web_extent().patterns().size());
EXPECT_EQ("*://aaronboodman.com/*",
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc
index f997fc6..489b344 100644
--- a/chrome/browser/extensions/crx_installer.cc
+++ b/chrome/browser/extensions/crx_installer.cc
@@ -37,6 +37,7 @@
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_file_util.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -106,7 +107,7 @@ CrxInstaller::CrxInstaller(
did_handle_successfully_(true),
record_oauth2_grant_(false),
error_on_unsupported_requirements_(false),
- requirements_checker_(new extensions::RequirementsChecker()),
+ requirements_checker_(new RequirementsChecker()),
has_requirement_errors_(false),
install_wait_for_idle_(true) {
installer_task_runner_ = frontend_weak->GetFileTaskRunner();
@@ -385,7 +386,7 @@ void CrxInstaller::OnUnpackSuccess(const base::FilePath& temp_dir,
}
if (client_) {
- Extension::DecodeIcon(extension_.get(),
+ IconsInfo::DecodeIcon(extension_.get(),
extension_misc::EXTENSION_ICON_LARGE,
ExtensionIconSet::MATCH_BIGGER,
&install_icon_);
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index 2a87f37..b02437b 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -36,7 +36,10 @@
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_version_info.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
#include "chrome/common/extensions/extension_set.h"
+#include "chrome/common/extensions/manifest_handler.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
@@ -107,6 +110,13 @@ void ExtensionBrowserTest::SetUpCommandLine(CommandLine* command_line) {
#endif
}
+void ExtensionBrowserTest::SetUpOnMainThread() {
+ InProcessBrowserTest::SetUpOnMainThread();
+ extensions::ManifestHandler::Register(
+ extension_manifest_keys::kIcons,
+ make_linked_ptr(new extensions::IconsHandler));
+}
+
const Extension* ExtensionBrowserTest::LoadExtensionWithFlags(
const base::FilePath& path, int flags) {
ExtensionService* service = extensions::ExtensionSystem::Get(
diff --git a/chrome/browser/extensions/extension_browsertest.h b/chrome/browser/extensions/extension_browsertest.h
index 1923857..412adcb 100644
--- a/chrome/browser/extensions/extension_browsertest.h
+++ b/chrome/browser/extensions/extension_browsertest.h
@@ -69,6 +69,7 @@ class ExtensionBrowserTest : virtual public InProcessBrowserTest,
// InProcessBrowserTest
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
+ virtual void SetUpOnMainThread() OVERRIDE;
const extensions::Extension* LoadExtension(const base::FilePath& path);
diff --git a/chrome/browser/extensions/extension_icon_image_unittest.cc b/chrome/browser/extensions/extension_icon_image_unittest.cc
index 112a7bc..f5cc1e6 100644
--- a/chrome/browser/extensions/extension_icon_image_unittest.cc
+++ b/chrome/browser/extensions/extension_icon_image_unittest.cc
@@ -9,6 +9,7 @@
#include "base/path_service.h"
#include "chrome/browser/extensions/image_loader.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/manifest.h"
@@ -228,7 +229,10 @@ TEST_F(ExtensionIconImageTest, Basic) {
GetTestBitmap(extension, "48.png", 32);
ASSERT_FALSE(bitmap_48_resized_to_32.empty());
- IconImage image(profile.get(), extension, extension->icons(), 16,
+ IconImage image(profile.get(),
+ extension,
+ extensions::IconsInfo::GetIcons(extension),
+ 16,
default_icon, this);
// No representations in |image_| yet.
@@ -290,7 +294,10 @@ TEST_F(ExtensionIconImageTest, FallbackToSmallerWhenNoBigger) {
GetTestBitmap(extension, "48.png", 48);
ASSERT_FALSE(bitmap_48.empty());
- IconImage image(profile.get(), extension, extension->icons(), 32,
+ IconImage image(profile.get(),
+ extension,
+ extensions::IconsInfo::GetIcons(extension),
+ 32,
default_icon, this);
gfx::ImageSkiaRep representation =
@@ -327,7 +334,10 @@ TEST_F(ExtensionIconImageTest, FallbackToSmaller) {
GetTestBitmap(extension, "16.png", 16);
ASSERT_FALSE(bitmap_16.empty());
- IconImage image(profile.get(), extension, extension->icons(), 17,
+ IconImage image(profile.get(),
+ extension,
+ extensions::IconsInfo::GetIcons(extension),
+ 17,
default_icon, this);
gfx::ImageSkiaRep representation =
@@ -511,7 +521,10 @@ TEST_F(ExtensionIconImageTest, IconImageDestruction) {
ASSERT_FALSE(bitmap_16.empty());
scoped_ptr<IconImage> image(
- new IconImage(profile.get(), extension, extension->icons(), 16,
+ new IconImage(profile.get(),
+ extension,
+ extensions::IconsInfo::GetIcons(extension),
+ 16,
default_icon, this));
// Load an image representation.
diff --git a/chrome/browser/extensions/extension_icon_manager.cc b/chrome/browser/extensions/extension_icon_manager.cc
index b8f5534..292d00b5 100644
--- a/chrome/browser/extensions/extension_icon_manager.cc
+++ b/chrome/browser/extensions/extension_icon_manager.cc
@@ -8,6 +8,7 @@
#include "base/logging.h"
#include "base/stl_util.h"
#include "chrome/browser/extensions/image_loader.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -53,8 +54,10 @@ ExtensionIconManager::~ExtensionIconManager() {
void ExtensionIconManager::LoadIcon(Profile* profile,
const extensions::Extension* extension) {
- ExtensionResource icon_resource = extension->GetIconResource(
- extension_misc::EXTENSION_ICON_BITTY, ExtensionIconSet::MATCH_BIGGER);
+ ExtensionResource icon_resource = extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_BITTY,
+ ExtensionIconSet::MATCH_BIGGER);
if (!icon_resource.extension_root().empty()) {
// Insert into pending_icons_ first because LoadImage can call us back
// synchronously if the image is already cached.
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc
index cacb466..d88fe9a 100644
--- a/chrome/browser/extensions/extension_install_prompt.cc
+++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -23,6 +23,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
@@ -131,8 +132,10 @@ int GetSizeForMaxScaleFactor(int size_in_dip) {
// Returns bitmap for the default icon with size equal to the default icon's
// pixel size under maximal supported scale factor.
SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) {
- return Extension::GetDefaultIcon(is_app).
- GetRepresentation(ui::GetMaxScaleFactor()).sk_bitmap();
+ const gfx::ImageSkia& image = is_app ?
+ extensions::IconsInfo::GetDefaultAppIcon() :
+ extensions::IconsInfo::GetDefaultExtensionIcon();
+ return image.GetRepresentation(ui::GetMaxScaleFactor()).sk_bitmap();
}
// If auto confirm is enabled then posts a task to proceed with or cancel the
@@ -606,9 +609,10 @@ void ExtensionInstallPrompt::LoadImageIfNeeded() {
}
// Load the image asynchronously. For the response, check OnImageLoaded.
- ExtensionResource image =
- extension_->GetIconResource(extension_misc::EXTENSION_ICON_LARGE,
- ExtensionIconSet::MATCH_BIGGER);
+ ExtensionResource image = extensions::IconsInfo::GetIconResource(
+ extension_,
+ extension_misc::EXTENSION_ICON_LARGE,
+ ExtensionIconSet::MATCH_BIGGER);
// Load the icon whose pixel size is large enough to be displayed under
// maximal supported scale factor. UI code will scale the icon down if needed.
// TODO(tbarzic): We should use IconImage here and load the required bitmap
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc
index 006d1d9..0129074 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/extensions/image_loader.h"
#include "chrome/browser/net/chrome_url_request_context.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_file_util.h"
#include "chrome/common/extensions/extension_resource.h"
@@ -316,7 +317,8 @@ bool AllowExtensionResourceLoad(net::URLRequest* request,
std::string resource_root_relative_path =
request->url().path().empty() ? "" : request->url().path().substr(1);
if (extension->is_hosted_app() &&
- !extension->icons().ContainsPath(resource_root_relative_path)) {
+ !extensions::IconsInfo::GetIcons(extension).ContainsPath(
+ resource_root_relative_path)) {
LOG(ERROR) << "Denying load of " << request->url().spec() << " from "
<< "hosted app.";
return false;
@@ -347,7 +349,7 @@ bool URLIsForExtensionIcon(const GURL& url, const Extension* extension) {
DCHECK_EQ(url.host(), extension->id());
DCHECK(path.length() > 0 && path[0] == '/');
path = path.substr(1);
- return extension->icons().ContainsPath(path);
+ return extensions::IconsInfo::GetIcons(extension).ContainsPath(path);
}
class ExtensionProtocolHandler
diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc
index 01f861c..a8274f9 100644
--- a/chrome/browser/extensions/extension_protocols_unittest.cc
+++ b/chrome/browser/extensions/extension_protocols_unittest.cc
@@ -8,6 +8,9 @@
#include "base/message_loop.h"
#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/browser/extensions/extension_protocols.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
+#include "chrome/common/extensions/manifest_handler.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/resource_request_info.h"
@@ -21,10 +24,8 @@
#include "testing/gtest/include/gtest/gtest.h"
using content::BrowserThread;
-using extensions::Extension;
-using extensions::Manifest;
-namespace {
+namespace extensions {
scoped_refptr<Extension> CreateTestExtension(const std::string& name,
bool incognito_split_mode) {
@@ -74,6 +75,9 @@ class ExtensionProtocolTest : public testing::Test {
net::URLRequestContext* request_context =
resource_context_.GetRequestContext();
old_factory_ = request_context->job_factory();
+
+ ManifestHandler::Register(extension_manifest_keys::kIcons,
+ make_linked_ptr(new IconsHandler));
}
virtual void TearDown() {
@@ -86,7 +90,7 @@ class ExtensionProtocolTest : public testing::Test {
net::URLRequestContext* request_context =
resource_context_.GetRequestContext();
job_factory_.SetProtocolHandler(
- extensions::kExtensionScheme,
+ kExtensionScheme,
CreateExtensionProtocolHandler(incognito, extension_info_map_));
request_context->set_job_factory(&job_factory_);
}
@@ -214,4 +218,4 @@ TEST_F(ExtensionProtocolTest, ComponentResourceRequest) {
}
}
-} // namespace
+} // namespace extensions
diff --git a/chrome/browser/extensions/extension_uninstall_dialog.cc b/chrome/browser/extensions/extension_uninstall_dialog.cc
index 4a0b25c..f756b45 100644
--- a/chrome/browser/extensions/extension_uninstall_dialog.cc
+++ b/chrome/browser/extensions/extension_uninstall_dialog.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/extensions/image_loader.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -34,8 +35,10 @@ int GetSizeForMaxScaleFactor(int size_in_dip) {
// Returns bitmap for the default icon with size equal to the default icon's
// pixel size under maximal supported scale factor.
SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) {
- return extensions::Extension::GetDefaultIcon(is_app).
- GetRepresentation(ui::GetMaxScaleFactor()).sk_bitmap();
+ const gfx::ImageSkia& image = is_app ?
+ extensions::IconsInfo::GetDefaultAppIcon() :
+ extensions::IconsInfo::GetDefaultExtensionIcon();
+ return image.GetRepresentation(ui::GetMaxScaleFactor()).sk_bitmap();
}
} // namespace
@@ -68,10 +71,10 @@ void ExtensionUninstallDialog::ConfirmUninstall(
DCHECK(ui_loop_ == MessageLoop::current());
extension_ = extension;
- ExtensionResource image =
- extension_->GetIconResource(extension_misc::EXTENSION_ICON_LARGE,
- ExtensionIconSet::MATCH_BIGGER);
-
+ ExtensionResource image = extensions::IconsInfo::GetIconResource(
+ extension_,
+ extension_misc::EXTENSION_ICON_LARGE,
+ ExtensionIconSet::MATCH_BIGGER);
// Load the icon whose pixel size is large enough to be displayed under
// maximal supported scale factor. UI code will scale the icon down if needed.
int pixel_size = GetSizeForMaxScaleFactor(kIconSize);
diff --git a/chrome/browser/extensions/extension_web_ui.cc b/chrome/browser/extensions/extension_web_ui.cc
index 0ddde7c..2455de0 100644
--- a/chrome/browser/extensions/extension_web_ui.cc
+++ b/chrome/browser/extensions/extension_web_ui.cc
@@ -22,6 +22,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -422,8 +423,9 @@ void ExtensionWebUI::GetFaviconForURL(
float scale = ui::GetScaleFactorScale(scale_factors[i]);
int pixel_size = static_cast<int>(gfx::kFaviconSize * scale);
ExtensionResource icon_resource =
- extension->GetIconResource(pixel_size,
- ExtensionIconSet::MATCH_BIGGER);
+ extensions::IconsInfo::GetIconResource(extension,
+ pixel_size,
+ ExtensionIconSet::MATCH_BIGGER);
info_list.push_back(
extensions::ImageLoader::ImageRepresentation(
diff --git a/chrome/browser/extensions/image_loader_unittest.cc b/chrome/browser/extensions/image_loader_unittest.cc
index 353ec6d..002c5bb 100644
--- a/chrome/browser/extensions/image_loader_unittest.cc
+++ b/chrome/browser/extensions/image_loader_unittest.cc
@@ -9,11 +9,14 @@
#include "base/path_service.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/extensions/manifest.h"
+#include "chrome/common/extensions/manifest_handler.h"
#include "content/public/browser/notification_service.h"
#include "content/public/test/test_browser_thread.h"
#include "grit/component_extension_resources.h"
@@ -95,7 +98,12 @@ class ImageLoaderTest : public testing::Test {
gfx::Image image_;
private:
- virtual void SetUp() {
+ virtual void SetUp() OVERRIDE {
+ testing::Test::SetUp();
+ extensions::ManifestHandler::Register(
+ extension_manifest_keys::kIcons,
+ make_linked_ptr(new extensions::IconsHandler));
+
file_thread_.Start();
io_thread_.Start();
}
@@ -114,9 +122,10 @@ TEST_F(ImageLoaderTest, LoadImage) {
"image_loading_tracker", Manifest::INVALID_LOCATION));
ASSERT_TRUE(extension.get() != NULL);
- ExtensionResource image_resource =
- extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALLISH,
- ExtensionIconSet::MATCH_EXACTLY);
+ ExtensionResource image_resource = extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_SMALLISH,
+ ExtensionIconSet::MATCH_EXACTLY);
gfx::Size max_size(extension_misc::EXTENSION_ICON_SMALLISH,
extension_misc::EXTENSION_ICON_SMALLISH);
ImageLoader loader;
@@ -146,9 +155,10 @@ TEST_F(ImageLoaderTest, DeleteExtensionWhileWaitingForCache) {
"image_loading_tracker", Manifest::INVALID_LOCATION));
ASSERT_TRUE(extension.get() != NULL);
- ExtensionResource image_resource =
- extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALLISH,
- ExtensionIconSet::MATCH_EXACTLY);
+ ExtensionResource image_resource = extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_SMALLISH,
+ ExtensionIconSet::MATCH_EXACTLY);
gfx::Size max_size(extension_misc::EXTENSION_ICON_SMALLISH,
extension_misc::EXTENSION_ICON_SMALLISH);
ImageLoader loader;
@@ -196,8 +206,8 @@ TEST_F(ImageLoaderTest, MultipleImages) {
int sizes[] = {extension_misc::EXTENSION_ICON_SMALLISH,
extension_misc::EXTENSION_ICON_BITTY};
for (size_t i = 0; i < arraysize(sizes); ++i) {
- ExtensionResource resource =
- extension->GetIconResource(sizes[i], ExtensionIconSet::MATCH_EXACTLY);
+ ExtensionResource resource = extensions::IconsInfo::GetIconResource(
+ extension, sizes[i], ExtensionIconSet::MATCH_EXACTLY);
info_list.push_back(ImageLoader::ImageRepresentation(
resource,
ImageLoader::ImageRepresentation::RESIZE_WHEN_LARGER,
@@ -239,9 +249,10 @@ TEST_F(ImageLoaderTest, IsComponentExtensionResource) {
"file_manager", Manifest::COMPONENT));
ASSERT_TRUE(extension.get() != NULL);
- ExtensionResource resource =
- extension->GetIconResource(extension_misc::EXTENSION_ICON_BITTY,
- ExtensionIconSet::MATCH_EXACTLY);
+ ExtensionResource resource = extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_BITTY,
+ ExtensionIconSet::MATCH_EXACTLY);
#if defined(FILE_MANAGER_EXTENSION)
int resource_id;
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc
index 3fbc146..d992b93 100644
--- a/chrome/browser/extensions/tab_helper.cc
+++ b/chrome/browser/extensions/tab_helper.cc
@@ -27,6 +27,7 @@
#include "chrome/browser/ui/web_applications/web_app_ui.h"
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -471,7 +472,8 @@ void TabHelper::UpdateExtensionAppIcon(const Extension* extension) {
extensions::ImageLoader* loader = extensions::ImageLoader::Get(profile);
loader->LoadImageAsync(
extension,
- extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALLISH,
+ IconsInfo::GetIconResource(extension,
+ extension_misc::EXTENSION_ICON_SMALLISH,
ExtensionIconSet::MATCH_EXACTLY),
gfx::Size(extension_misc::EXTENSION_ICON_SMALLISH,
extension_misc::EXTENSION_ICON_SMALLISH),
diff --git a/chrome/browser/media/media_stream_capture_indicator.cc b/chrome/browser/media/media_stream_capture_indicator.cc
index a8ad06e..ac7a5ff 100644
--- a/chrome/browser/media/media_stream_capture_indicator.cc
+++ b/chrome/browser/media/media_stream_capture_indicator.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/status_icons/status_icon.h"
#include "chrome/browser/status_icons/status_tray.h"
#include "chrome/browser/tab_contents/tab_util.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/invalidate_type.h"
@@ -330,7 +331,8 @@ void MediaStreamCaptureIndicator::ShowBalloon(
should_show_balloon_ = true;
extensions::ImageLoader::Get(profile)->LoadImageAsync(
extension,
- extension->GetIconResource(32, ExtensionIconSet::MATCH_BIGGER),
+ extensions::IconsInfo::GetIconResource(
+ extension, 32, ExtensionIconSet::MATCH_BIGGER),
gfx::Size(32, 32),
base::Bind(&MediaStreamCaptureIndicator::OnImageLoaded,
this, message));
diff --git a/chrome/browser/profiles/profile_dependency_manager.cc b/chrome/browser/profiles/profile_dependency_manager.cc
index c49f592..63a3c30 100644
--- a/chrome/browser/profiles/profile_dependency_manager.cc
+++ b/chrome/browser/profiles/profile_dependency_manager.cc
@@ -27,6 +27,7 @@
#include "chrome/browser/extensions/api/font_settings/font_settings_api.h"
#include "chrome/browser/extensions/api/history/history_api.h"
#include "chrome/browser/extensions/api/i18n/i18n_api.h"
+#include "chrome/browser/extensions/api/icons/icons_api.h"
#include "chrome/browser/extensions/api/identity/identity_api.h"
#include "chrome/browser/extensions/api/idle/idle_manager_factory.h"
#include "chrome/browser/extensions/api/input/input.h"
@@ -274,6 +275,7 @@ void ProfileDependencyManager::AssertFactoriesBuilt() {
extensions::FontSettingsAPI::GetFactoryInstance();
extensions::HistoryAPI::GetFactoryInstance();
extensions::I18nAPI::GetFactoryInstance();
+ extensions::IconsAPI::GetFactoryInstance();
extensions::IdentityAPI::GetFactoryInstance();
extensions::IdleManagerFactory::GetInstance();
extensions::InstallTrackerFactory::GetInstance();
diff --git a/chrome/browser/ui/app_list/extension_app_item.cc b/chrome/browser/ui/app_list/extension_app_item.cc
index 63cc769..fbeadef 100644
--- a/chrome/browser/ui/app_list/extension_app_item.cc
+++ b/chrome/browser/ui/app_list/extension_app_item.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/extensions/extension_enable_flow.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -311,9 +312,9 @@ void ExtensionAppItem::LoadImage(const Extension* extension) {
icon_.reset(new extensions::IconImage(
profile_,
extension,
- extension->icons(),
+ extensions::IconsInfo::GetIcons(extension),
icon_size,
- Extension::GetDefaultIcon(true),
+ extensions::IconsInfo::GetDefaultAppIcon(),
this));
UpdateIcon();
}
diff --git a/chrome/browser/ui/app_list/search_builder.cc b/chrome/browser/ui/app_list/search_builder.cc
index abf88d4..6e87b48 100644
--- a/chrome/browser/ui/app_list/search_builder.cc
+++ b/chrome/browser/ui/app_list/search_builder.cc
@@ -23,6 +23,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/browser_tabstrip.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -179,7 +180,7 @@ class ExtensionAppResult : public SearchBuilderResult,
icon_.reset(new extensions::IconImage(
profile(),
extension,
- extension->icons(),
+ extensions::IconsInfo::GetIcons(extension),
extension_misc::EXTENSION_ICON_SMALL,
default_icon,
this));
diff --git a/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc
index 754000a..2e859b4 100644
--- a/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc
+++ b/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc
@@ -19,6 +19,7 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/web_applications/web_app.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "content/public/browser/web_contents.h"
#include "grit/ui_resources.h"
#include "ui/aura/client/aura_constants.h"
@@ -314,7 +315,7 @@ void BrowserLauncherItemController::UpdateLauncher(content::WebContents* tab) {
if (!new_image.isNull())
item.image = new_image;
else if (item.image.isNull())
- item.image = extensions::Extension::GetDefaultIcon(true);
+ item.image = extensions::IconsInfo::GetDefaultAppIcon();
} else {
DCHECK_EQ(TYPE_TABBED, type());
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
index 59b8ed4..7950b79 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
@@ -48,6 +48,7 @@
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/pref_names.h"
@@ -1390,7 +1391,7 @@ ash::LauncherID ChromeLauncherControllerPerApp::InsertAppLauncherItem(
ash::LauncherItem item;
item.type = launcher_item_type;
item.is_incognito = false;
- item.image = Extension::GetDefaultIcon(true);
+ item.image = extensions::IconsInfo::GetDefaultAppIcon();
WebContents* active_tab = GetLastActiveWebContents(app_id);
if (active_tab) {
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc
index 17db231..49eee2a 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc
@@ -41,6 +41,7 @@
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/pref_names.h"
@@ -1265,7 +1266,7 @@ ash::LauncherID ChromeLauncherControllerPerBrowser::InsertAppLauncherItem(
ash::LauncherItem item;
item.type = controller->GetLauncherItemType();
item.is_incognito = false;
- item.image = Extension::GetDefaultIcon(true);
+ item.image = extensions::IconsInfo::GetDefaultAppIcon();
WebContents* active_tab = GetLastActiveWebContents(app_id);
if (active_tab) {
diff --git a/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm
index caed8d1..bc6cc69 100644
--- a/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm
+++ b/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm
@@ -15,6 +15,7 @@
#import "chrome/browser/ui/cocoa/extensions/extension_action_context_menu.h"
#include "chrome/browser/ui/cocoa/infobars/infobar.h"
#import "chrome/browser/ui/cocoa/menu_button.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -73,8 +74,10 @@ class InfobarBridge : public ExtensionInfoBarDelegate::DelegateObserver {
const extensions::Extension* extension = delegate_->extension_host()->
extension();
ExtensionResource icon_resource =
- extension->GetIconResource(extension_misc::EXTENSION_ICON_BITTY,
- ExtensionIconSet::MATCH_EXACTLY);
+ extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_BITTY,
+ ExtensionIconSet::MATCH_EXACTLY);
extensions::ImageLoader* loader =
extensions::ImageLoader::Get(delegate_->extension_host()->profile());
loader->LoadImageAsync(extension, icon_resource,
diff --git a/chrome/browser/ui/cocoa/location_bar/action_box_menu_bubble_controller.mm b/chrome/browser/ui/cocoa/location_bar/action_box_menu_bubble_controller.mm
index bfb87d1..69439ed 100644
--- a/chrome/browser/ui/cocoa/location_bar/action_box_menu_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/location_bar/action_box_menu_bubble_controller.mm
@@ -15,6 +15,7 @@
#import "chrome/browser/ui/cocoa/info_bubble_window.h"
#include "chrome/browser/ui/toolbar/action_box_menu_model.h"
#include "chrome/common/extensions/api/extension_action/action_info.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "grit/generated_resources.h"
@@ -66,7 +67,7 @@ class ExtensionIconLoaderBridge : public extensions::IconImage::Observer {
extension,
page_launcher_info->default_icon,
extension_misc::EXTENSION_ICON_ACTION,
- extensions::Extension::GetDefaultIcon(true),
+ extensions::IconsInfo::GetDefaultAppIcon(),
this));
OnExtensionIconImageChanged(icon_loader_.get());
}
diff --git a/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm b/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm
index 48c51f8..b3f60d7 100644
--- a/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm
+++ b/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm
@@ -23,6 +23,7 @@
#include "chrome/browser/ui/omnibox/location_bar_util.h"
#include "chrome/browser/ui/webui/extensions/extension_info_ui.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension_resource.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/web_contents.h"
@@ -81,7 +82,7 @@ PageActionDecoration::~PageActionDecoration() {}
// image centered.
CGFloat PageActionDecoration::GetWidthForSpace(CGFloat width,
CGFloat text_width) {
- return Extension::kPageActionIconMaxSize;
+ return extensions::IconsInfo::kPageActionIconMaxSize;
}
void PageActionDecoration::DrawWithBackgroundInFrame(NSRect background_frame,
@@ -177,8 +178,9 @@ void PageActionDecoration::UpdateVisibility(WebContents* contents,
if (!icon.IsEmpty()) {
SetImage(icon.ToNSImage());
} else if (!GetImage()) {
- const NSSize default_size = NSMakeSize(Extension::kPageActionIconMaxSize,
- Extension::kPageActionIconMaxSize);
+ const NSSize default_size = NSMakeSize(
+ extensions::IconsInfo::kPageActionIconMaxSize,
+ extensions::IconsInfo::kPageActionIconMaxSize);
SetImage([[[NSImage alloc] initWithSize:default_size] autorelease]);
}
}
@@ -212,7 +214,7 @@ NSPoint PageActionDecoration::GetBubblePointInFrame(NSRect frame) {
// easier (the middle of the centered image is the middle of the
// frame).
const CGFloat delta_height =
- NSHeight(frame) - Extension::kPageActionIconMaxSize;
+ NSHeight(frame) - extensions::IconsInfo::kPageActionIconMaxSize;
const CGFloat bottom_inset = std::ceil(delta_height / 2.0);
// Return a point just below the bottom of the maximal drawing area.
diff --git a/chrome/browser/ui/extensions/shell_window.cc b/chrome/browser/ui/extensions/shell_window.cc
index 6381927..a1be768 100644
--- a/chrome/browser/ui/extensions/shell_window.cc
+++ b/chrome/browser/ui/extensions/shell_window.cc
@@ -27,6 +27,7 @@
#include "chrome/browser/ui/web_contents_modal_dialog_manager.h"
#include "chrome/browser/view_type_utils.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_messages.h"
@@ -409,8 +410,9 @@ void ShellWindow::UpdateExtensionAppIcon() {
extensions::ImageLoader* loader = extensions::ImageLoader::Get(profile());
loader->LoadImageAsync(
extension(),
- extension()->GetIconResource(kPreferredIconSize,
- ExtensionIconSet::MATCH_BIGGER),
+ extensions::IconsInfo::GetIconResource(extension(),
+ kPreferredIconSize,
+ ExtensionIconSet::MATCH_BIGGER),
gfx::Size(kPreferredIconSize, kPreferredIconSize),
base::Bind(&ShellWindow::OnImageLoaded,
image_loader_ptr_factory_.GetWeakPtr()));
diff --git a/chrome/browser/ui/gtk/action_box_button_gtk.cc b/chrome/browser/ui/gtk/action_box_button_gtk.cc
index 1a8d336..3bd0564 100644
--- a/chrome/browser/ui/gtk/action_box_button_gtk.cc
+++ b/chrome/browser/ui/gtk/action_box_button_gtk.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/ui/toolbar/action_box_menu_model.h"
#include "chrome/browser/ui/view_ids.h"
#include "chrome/common/extensions/api/extension_action/action_info.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "grit/generated_resources.h"
@@ -64,7 +65,7 @@ ExtensionIcon::ExtensionIcon(Profile* profile, const Extension* extension)
extension,
page_launcher_info->default_icon,
extension_misc::EXTENSION_ICON_ACTION,
- Extension::GetDefaultIcon(true),
+ extensions::IconsInfo::GetDefaultAppIcon(),
this));
UpdateIcon();
}
diff --git a/chrome/browser/ui/gtk/create_application_shortcuts_dialog_gtk.cc b/chrome/browser/ui/gtk/create_application_shortcuts_dialog_gtk.cc
index f239b41..f4ead6a 100644
--- a/chrome/browser/ui/gtk/create_application_shortcuts_dialog_gtk.cc
+++ b/chrome/browser/ui/gtk/create_application_shortcuts_dialog_gtk.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/ui/web_applications/web_app_ui.h"
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/browser/web_applications/web_app.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_resource.h"
#include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc b/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc
index 496eed2..b99c7ce 100644
--- a/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc
+++ b/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/ui/gtk/gtk_chrome_button.h"
#include "chrome/browser/ui/gtk/gtk_util.h"
#include "chrome/browser/ui/gtk/infobars/infobar_container_gtk.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -129,8 +130,10 @@ void ExtensionInfoBarGtk::BuildWidgets() {
}
// Start loading the image for the menu button.
- ExtensionResource icon_resource = extension->GetIconResource(
- extension_misc::EXTENSION_ICON_BITTY, ExtensionIconSet::MATCH_EXACTLY);
+ ExtensionResource icon_resource = extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_BITTY,
+ ExtensionIconSet::MATCH_EXACTLY);
// Load image asynchronously, calling back OnImageLoaded.
extensions::ImageLoader* loader =
extensions::ImageLoader::Get(delegate_->extension_host()->profile());
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
index 08661fe..b198046 100644
--- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
@@ -72,6 +72,7 @@
#include "chrome/common/badge_util.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
#include "chrome/common/extensions/extension_resource.h"
@@ -1812,8 +1813,8 @@ LocationBarViewGtk::PageActionViewGtk::PageActionViewGtk(
this)) {
event_box_.Own(gtk_event_box_new());
gtk_widget_set_size_request(event_box_.get(),
- Extension::kPageActionIconMaxSize,
- Extension::kPageActionIconMaxSize);
+ extensions::IconsInfo::kPageActionIconMaxSize,
+ extensions::IconsInfo::kPageActionIconMaxSize);
// Make the event box not visible so it does not paint a background.
gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_.get()), FALSE);
diff --git a/chrome/browser/ui/gtk/script_bubble_gtk.cc b/chrome/browser/ui/gtk/script_bubble_gtk.cc
index d4059c9..9eb5ede 100644
--- a/chrome/browser/ui/gtk/script_bubble_gtk.cc
+++ b/chrome/browser/ui/gtk/script_bubble_gtk.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/gtk/gtk_theme_service.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_set.h"
#include "chrome/common/url_constants.h"
@@ -114,8 +115,10 @@ void ScriptBubbleGtk::BuildBubble() {
icon_controls_[extension->id()] = GTK_IMAGE(image);
ImageLoader::Get(profile_)->LoadImageAsync(
extension,
- extension->GetIconResource(extension_misc::EXTENSION_ICON_BITTY,
- ExtensionIconSet::MATCH_EXACTLY),
+ extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_BITTY,
+ ExtensionIconSet::MATCH_EXACTLY),
gfx::Size(extension_misc::EXTENSION_ICON_BITTY,
extension_misc::EXTENSION_ICON_BITTY),
base::Bind(&ScriptBubbleGtk::OnIconLoaded,
diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc
index 89e587e..00a26b6 100644
--- a/chrome/browser/ui/panels/panel.cc
+++ b/chrome/browser/ui/panels/panel.cc
@@ -29,6 +29,7 @@
#include "chrome/browser/ui/panels/stacked_panel_collection.h"
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
@@ -856,8 +857,10 @@ void Panel::UpdateAppIcon() {
extensions::ImageLoader* loader = extensions::ImageLoader::Get(profile());
loader->LoadImageAsync(
extension,
- extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALL,
- ExtensionIconSet::MATCH_BIGGER),
+ extensions::IconsInfo::GetIconResource(
+ extension,
+ extension_misc::EXTENSION_ICON_SMALL,
+ ExtensionIconSet::MATCH_BIGGER),
gfx::Size(extension_misc::EXTENSION_ICON_SMALL,
extension_misc::EXTENSION_ICON_SMALL),
base::Bind(&Panel::OnImageLoaded,
diff --git a/chrome/browser/ui/views/action_box_menu.cc b/chrome/browser/ui/views/action_box_menu.cc
index 61f02bb..67e7176 100644
--- a/chrome/browser/ui/views/action_box_menu.cc
+++ b/chrome/browser/ui/views/action_box_menu.cc
@@ -7,6 +7,7 @@
#include "chrome/browser/extensions/extension_icon_image.h"
#include "chrome/browser/ui/toolbar/action_box_menu_model.h"
#include "chrome/common/extensions/api/extension_action/action_info.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "ui/views/controls/button/menu_button.h"
@@ -28,7 +29,7 @@ class ExtensionImageView : public views::ImageView, public IconImage::Observer {
extension,
page_launcher_info->default_icon,
extension_misc::EXTENSION_ICON_ACTION,
- Extension::GetDefaultIcon(true),
+ extensions::IconsInfo::GetDefaultAppIcon(),
this));
SetImage(icon_->image_skia());
}
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc
index c77e983..550f5b3 100644
--- a/chrome/browser/ui/views/create_application_shortcut_view.cc
+++ b/chrome/browser/ui/views/create_application_shortcut_view.cc
@@ -22,6 +22,7 @@
#include "chrome/browser/ui/web_applications/web_app_ui.h"
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/common/chrome_constants.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/pref_names.h"
@@ -495,14 +496,16 @@ CreateChromeApplicationShortcutView::CreateChromeApplicationShortcutView(
// we will resize whatever we can get. Making a large icon smaller
// is prefered to making a small icon larger, so look for a larger
// icon first:
- ExtensionResource icon_resource = app_->GetIconResource(
+ ExtensionResource icon_resource = extensions::IconsInfo::GetIconResource(
+ app_,
kAppIconSize,
ExtensionIconSet::MATCH_BIGGER);
// If no icon exists that is the desired size or larger, get the
// largest icon available:
if (icon_resource.empty()) {
- icon_resource = app_->GetIconResource(
+ icon_resource = extensions::IconsInfo::GetIconResource(
+ app_,
kAppIconSize,
ExtensionIconSet::MATCH_SMALLER);
}
diff --git a/chrome/browser/ui/views/infobars/extension_infobar.cc b/chrome/browser/ui/views/infobars/extension_infobar.cc
index 2215306..bf19198 100644
--- a/chrome/browser/ui/views/infobars/extension_infobar.cc
+++ b/chrome/browser/ui/views/infobars/extension_infobar.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/extensions/image_loader.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -145,8 +146,8 @@ void ExtensionInfoBar::ViewHierarchyChanged(bool is_add,
const extensions::Extension* extension = extension_host->extension();
extension_misc::ExtensionIcons image_size =
extension_misc::EXTENSION_ICON_BITTY;
- ExtensionResource icon_resource = extension->GetIconResource(
- image_size, ExtensionIconSet::MATCH_EXACTLY);
+ ExtensionResource icon_resource = extensions::IconsInfo::GetIconResource(
+ extension, image_size, ExtensionIconSet::MATCH_EXACTLY);
extensions::ImageLoader* loader =
extensions::ImageLoader::Get(extension_host->profile());
loader->LoadImageAsync(
diff --git a/chrome/browser/ui/views/location_bar/page_action_with_badge_view.cc b/chrome/browser/ui/views/location_bar/page_action_with_badge_view.cc
index 33e37c7..c5d4671 100644
--- a/chrome/browser/ui/views/location_bar/page_action_with_badge_view.cc
+++ b/chrome/browser/ui/views/location_bar/page_action_with_badge_view.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/ui/views/location_bar/page_action_with_badge_view.h"
#include "chrome/browser/ui/views/location_bar/page_action_image_view.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "ui/base/accessibility/accessible_view_state.h"
@@ -23,8 +24,8 @@ void PageActionWithBadgeView::GetAccessibleState(
}
gfx::Size PageActionWithBadgeView::GetPreferredSize() {
- return gfx::Size(extensions::Extension::kPageActionIconMaxSize,
- extensions::Extension::kPageActionIconMaxSize);
+ return gfx::Size(extensions::IconsInfo::kPageActionIconMaxSize,
+ extensions::IconsInfo::kPageActionIconMaxSize);
}
int PageActionWithBadgeView::GetBuiltInHorizontalPadding() const {
diff --git a/chrome/browser/ui/views/script_bubble_view.cc b/chrome/browser/ui/views/script_bubble_view.cc
index 721c3a4..9e98ab0 100644
--- a/chrome/browser/ui/views/script_bubble_view.cc
+++ b/chrome/browser/ui/views/script_bubble_view.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/extensions/script_bubble_controller.h"
#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/page_navigator.h"
@@ -81,8 +82,9 @@ ScriptBubbleView::ScriptBubbleView(views::View* anchor_view,
int size = extension_misc::EXTENSION_ICON_BITTY;
ExtensionResource image =
- extension->GetIconResource(size,
- ExtensionIconSet::MATCH_BIGGER);
+ extensions::IconsInfo::GetIconResource(extension,
+ size,
+ ExtensionIconSet::MATCH_BIGGER);
extensions::ImageLoader::Get(profile)->LoadImageAsync(
extension, image, gfx::Size(size, size),
base::Bind(&ScriptBubbleView::OnImageLoaded, AsWeakPtr(), i));
@@ -162,7 +164,8 @@ void ScriptBubbleView::Init() {
views::ImageView* image_view = new views::ImageView();
entries_[i].extension_imageview = image_view;
image_view->SetImageSize(gfx::Size(16, 16));
- image_view->SetImage(Extension::GetDefaultIcon(false));
+ image_view->SetImage(
+ extensions::IconsInfo::GetDefaultExtensionIcon());
layout->AddView(image_view);
views::Link* link = new views::Link(entries_[i].extension_name);
diff --git a/chrome/browser/ui/web_applications/web_app_ui.cc b/chrome/browser/ui/web_applications/web_app_ui.cc
index 5684b50..99c6652 100644
--- a/chrome/browser/ui/web_applications/web_app_ui.cc
+++ b/chrome/browser/ui/web_applications/web_app_ui.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/notification_details.h"
@@ -413,8 +414,8 @@ void UpdateShortcutInfoAndIconForApp(
std::vector<extensions::ImageLoader::ImageRepresentation> info_list;
for (size_t i = 0; i < arraysize(kDesiredSizes); ++i) {
int size = kDesiredSizes[i];
- ExtensionResource resource = extension.GetIconResource(
- size, ExtensionIconSet::MATCH_EXACTLY);
+ ExtensionResource resource = extensions::IconsInfo::GetIconResource(
+ &extension, size, ExtensionIconSet::MATCH_EXACTLY);
if (!resource.empty()) {
info_list.push_back(extensions::ImageLoader::ImageRepresentation(
resource,
@@ -431,11 +432,11 @@ void UpdateShortcutInfoAndIconForApp(
// If there is no icon at the desired sizes, we will resize what we can get.
// Making a large icon smaller is preferred to making a small icon larger,
// so look for a larger icon first:
- ExtensionResource resource = extension.GetIconResource(
- size, ExtensionIconSet::MATCH_BIGGER);
+ ExtensionResource resource = extensions::IconsInfo::GetIconResource(
+ &extension, size, ExtensionIconSet::MATCH_BIGGER);
if (resource.empty()) {
- resource = extension.GetIconResource(
- size, ExtensionIconSet::MATCH_SMALLER);
+ resource = extensions::IconsInfo::GetIconResource(
+ &extension, size, ExtensionIconSet::MATCH_SMALLER);
}
info_list.push_back(extensions::ImageLoader::ImageRepresentation(
resource,
diff --git a/chrome/browser/ui/webui/extensions/extension_icon_source.cc b/chrome/browser/ui/webui/extensions/extension_icon_source.cc
index d84023d..3ed911c 100644
--- a/chrome/browser/ui/webui/extensions/extension_icon_source.cc
+++ b/chrome/browser/ui/webui/extensions/extension_icon_source.cc
@@ -19,6 +19,7 @@
#include "chrome/browser/extensions/image_loader.h"
#include "chrome/browser/favicon/favicon_service_factory.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_resource.h"
@@ -77,8 +78,10 @@ GURL ExtensionIconSource::GetIconURL(const extensions::Extension* extension,
bool* exists) {
if (exists)
*exists = true;
- if (exists && extension->GetIconURL(icon_size, match) == GURL())
+ if (exists && extensions::IconsInfo::GetIconURL(
+ extension, icon_size, match) == GURL()) {
*exists = false;
+ }
GURL icon_url(base::StringPrintf("%s%s/%d/%d%s",
chrome::kChromeUIExtensionIconURL,
@@ -129,8 +132,8 @@ void ExtensionIconSource::StartDataRequest(
}
ExtensionIconRequest* request = GetData(next_id);
- ExtensionResource icon =
- request->extension->GetIconResource(request->size, request->match);
+ ExtensionResource icon = extensions::IconsInfo::GetIconResource(
+ request->extension, request->size, request->match);
if (icon.relative_path().empty()) {
LoadIconFailed(next_id);
@@ -255,8 +258,8 @@ void ExtensionIconSource::OnImageLoaded(int request_id,
void ExtensionIconSource::LoadIconFailed(int request_id) {
ExtensionIconRequest* request = GetData(request_id);
- ExtensionResource icon =
- request->extension->GetIconResource(request->size, request->match);
+ ExtensionResource icon = extensions::IconsInfo::GetIconResource(
+ request->extension, request->size, request->match);
if (request->size == extension_misc::EXTENSION_ICON_BITTY)
LoadFaviconImage(request_id);
diff --git a/chrome/browser/ui/webui/options/search_engine_manager_handler.cc b/chrome/browser/ui/webui/options/search_engine_manager_handler.cc
index 5c0c1fb..cbb1741 100644
--- a/chrome/browser/ui/webui/options/search_engine_manager_handler.cc
+++ b/chrome/browser/ui/webui/options/search_engine_manager_handler.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/search_engines/template_url_service.h"
#include "chrome/browser/ui/search_engines/keyword_editor_controller.h"
#include "chrome/browser/ui/search_engines/template_url_table_model.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/api/omnibox/omnibox_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/url_constants.h"
@@ -173,7 +174,8 @@ base::DictionaryValue* SearchEngineManagerHandler::CreateDictionaryForExtension(
dict->SetString("displayName", extension.name());
dict->SetString("keyword",
extensions::OmniboxInfo::GetKeyword(&extension));
- GURL icon = extension.GetIconURL(16, ExtensionIconSet::MATCH_BIGGER);
+ GURL icon = extensions::IconsInfo::GetIconURL(
+ &extension, 16, ExtensionIconSet::MATCH_BIGGER);
dict->SetString("iconURL", icon.spec());
dict->SetString("url", string16());
return dict;
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index 54fa408..d0fc0a9 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -217,6 +217,8 @@
'browser/extensions/api/history/history_api.cc',
'browser/extensions/api/i18n/i18n_api.cc',
'browser/extensions/api/i18n/i18n_api.h',
+ 'browser/extensions/api/icons/icons_api.cc',
+ 'browser/extensions/api/icons/icons_api.h',
'browser/extensions/api/identity/identity_api.cc',
'browser/extensions/api/identity/identity_api.h',
'browser/extensions/api/identity/web_auth_flow.cc',
diff --git a/chrome/chrome_common.gypi b/chrome/chrome_common.gypi
index 93b7da8..7efde3f 100644
--- a/chrome/chrome_common.gypi
+++ b/chrome/chrome_common.gypi
@@ -168,6 +168,8 @@
'common/extensions/api/extension_api_stub.cc',
'common/extensions/api/i18n/default_locale_handler.cc',
'common/extensions/api/i18n/default_locale_handler.h',
+ 'common/extensions/api/icons/icons_handler.cc',
+ 'common/extensions/api/icons/icons_handler.h',
'common/extensions/api/identity/oauth2_manifest_handler.cc',
'common/extensions/api/identity/oauth2_manifest_handler.h',
'common/extensions/api/input_ime/input_components_handler.cc',
@@ -501,6 +503,8 @@
['include', 'common/extensions/api/extension_action/browser_action_handler.h'],
['include', 'common/extensions/api/extension_action/page_action_handler.cc'],
['include', 'common/extensions/api/extension_action/page_action_handler.h'],
+ ['include', 'common/extensions/api/icons/icons_handler.cc'],
+ ['include', 'common/extensions/api/icons/icons_handler.h'],
['include', 'common/extensions/api/i18n/default_locale_handler.cc'],
['include', 'common/extensions/api/i18n/default_locale_handler.h'],
['include', 'common/extensions/api/identity/oauth2_manifest_handler.cc'],
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 037f67d..d83a10e 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -1512,6 +1512,7 @@
'common/extensions/api/extension_action/page_action_manifest_unittest.cc',
'common/extensions/api/extension_action/script_badge_manifest_unittest.cc',
'common/extensions/api/i18n/default_locale_manifest_unittest.cc',
+ 'common/extensions/api/icons/icons_manifest_unittest.cc',
'common/extensions/api/identity/extension_manifests_auth_unittest.cc',
'common/extensions/command_unittest.cc',
'common/extensions/csp_validator_unittest.cc',
@@ -1537,7 +1538,6 @@
'common/extensions/manifest_tests/extension_manifests_excludematches_unittest.cc',
'common/extensions/manifest_tests/extension_manifests_experimental_unittest.cc',
'common/extensions/manifest_tests/extension_manifests_homepage_unittest.cc',
- 'common/extensions/manifest_tests/extension_manifests_icon_unittest.cc',
'common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc',
'common/extensions/manifest_tests/extension_manifests_isolatedapp_unittest.cc',
'common/extensions/manifest_tests/extension_manifests_launch_unittest.cc',
diff --git a/chrome/common/extensions/api/extension_action/script_badge_handler.cc b/chrome/common/extensions/api/extension_action/script_badge_handler.cc
index c01e072..444b80d 100644
--- a/chrome/common/extensions/api/extension_action/script_badge_handler.cc
+++ b/chrome/common/extensions/api/extension_action/script_badge_handler.cc
@@ -7,6 +7,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
@@ -20,11 +21,16 @@ namespace errors = extension_manifest_errors;
namespace extensions {
ScriptBadgeHandler::ScriptBadgeHandler() {
+ prerequisite_keys_.push_back(extension_manifest_keys::kIcons);
}
ScriptBadgeHandler::~ScriptBadgeHandler() {
}
+const std::vector<std::string>& ScriptBadgeHandler::PrerequisiteKeys() {
+ return prerequisite_keys_;
+}
+
bool ScriptBadgeHandler::Parse(Extension* extension, string16* error) {
scoped_ptr<ActionInfo> action_info(new ActionInfo);
@@ -89,7 +95,7 @@ void ScriptBadgeHandler::SetActionInfoDefaults(const Extension* extension,
info->default_title = extension->name();
info->default_icon.Clear();
for (size_t i = 0; i < extension_misc::kNumScriptBadgeIconSizes; ++i) {
- std::string path = extension->icons().Get(
+ std::string path = IconsInfo::GetIcons(extension).Get(
extension_misc::kScriptBadgeIconSizes[i],
ExtensionIconSet::MATCH_BIGGER);
if (!path.empty()) {
diff --git a/chrome/common/extensions/api/extension_action/script_badge_handler.h b/chrome/common/extensions/api/extension_action/script_badge_handler.h
index cff4698..d539aaf 100644
--- a/chrome/common/extensions/api/extension_action/script_badge_handler.h
+++ b/chrome/common/extensions/api/extension_action/script_badge_handler.h
@@ -20,6 +20,7 @@ class ScriptBadgeHandler : public ManifestHandler {
virtual ~ScriptBadgeHandler();
virtual bool Parse(Extension* extension, string16* error) OVERRIDE;
+ virtual const std::vector<std::string>& PrerequisiteKeys() OVERRIDE;
virtual bool AlwaysParseForType(Manifest::Type type) OVERRIDE;
private:
@@ -27,6 +28,10 @@ class ScriptBadgeHandler : public ManifestHandler {
// extension's title and icons. Performed whether or not the script_badge key
// is present in the manifest.
void SetActionInfoDefaults(const Extension* extension, ActionInfo* info);
+
+ std::vector<std::string> prerequisite_keys_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScriptBadgeHandler);
};
} // namespace extensions
diff --git a/chrome/common/extensions/api/extension_action/script_badge_manifest_unittest.cc b/chrome/common/extensions/api/extension_action/script_badge_manifest_unittest.cc
index 605499c..8dbdd7a 100644
--- a/chrome/common/extensions/api/extension_action/script_badge_manifest_unittest.cc
+++ b/chrome/common/extensions/api/extension_action/script_badge_manifest_unittest.cc
@@ -4,6 +4,7 @@
#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "chrome/common/extensions/api/extension_action/script_badge_handler.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension_builder.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
@@ -34,8 +35,11 @@ std::vector<InstallWarning> StripMissingFlagWarning(
class ScriptBadgeManifestTest : public ExtensionManifestTest {
protected:
virtual void SetUp() OVERRIDE {
+ ExtensionManifestTest::SetUp();
ManifestHandler::Register(extension_manifest_keys::kScriptBadge,
make_linked_ptr(new ScriptBadgeHandler));
+ ManifestHandler::Register(extension_manifest_keys::kIcons,
+ make_linked_ptr(new IconsHandler));
}
};
diff --git a/chrome/common/extensions/api/icons/icons_handler.cc b/chrome/common/extensions/api/icons/icons_handler.cc
new file mode 100644
index 0000000..fd8eae0
--- /dev/null
+++ b/chrome/common/extensions/api/icons/icons_handler.cc
@@ -0,0 +1,147 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/extensions/api/icons/icons_handler.h"
+
+#include "base/file_util.h"
+#include "base/lazy_instance.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/string_number_conversions.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
+#include "chrome/common/extensions/manifest_handler_helpers.h"
+#include "grit/theme_resources.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "webkit/glue/image_decoder.h"
+
+namespace keys = extension_manifest_keys;
+
+namespace extensions {
+
+static base::LazyInstance<ExtensionIconSet> g_empty_icon_set =
+ LAZY_INSTANCE_INITIALIZER;
+
+const int IconsInfo::kPageActionIconMaxSize = 19;
+const int IconsInfo::kBrowserActionIconMaxSize = 19;
+
+// static
+const ExtensionIconSet& IconsInfo::GetIcons(const Extension* extension) {
+ IconsInfo* info = static_cast<IconsInfo*>(
+ extension->GetManifestData(keys::kIcons));
+ return info ? info->icons : g_empty_icon_set.Get();
+}
+
+// static
+void IconsInfo::DecodeIcon(const Extension* extension,
+ int preferred_icon_size,
+ ExtensionIconSet::MatchType match_type,
+ scoped_ptr<SkBitmap>* result) {
+ std::string path = GetIcons(extension).Get(preferred_icon_size, match_type);
+ int size = GetIcons(extension).GetIconSizeFromPath(path);
+ ExtensionResource icon_resource = extension->GetResource(path);
+ DecodeIconFromPath(icon_resource.GetFilePath(), size, result);
+}
+
+// static
+void IconsInfo::DecodeIcon(const Extension* extension,
+ int icon_size,
+ scoped_ptr<SkBitmap>* result) {
+ DecodeIcon(extension, icon_size, ExtensionIconSet::MATCH_EXACTLY, result);
+}
+
+// static
+void IconsInfo::DecodeIconFromPath(const base::FilePath& icon_path,
+ int icon_size,
+ scoped_ptr<SkBitmap>* result) {
+ if (icon_path.empty())
+ return;
+
+ std::string file_contents;
+ if (!file_util::ReadFileToString(icon_path, &file_contents)) {
+ DLOG(ERROR) << "Could not read icon file: " << icon_path.LossyDisplayName();
+ return;
+ }
+
+ // Decode the image using WebKit's image decoder.
+ const unsigned char* data =
+ reinterpret_cast<const unsigned char*>(file_contents.data());
+ webkit_glue::ImageDecoder decoder;
+ scoped_ptr<SkBitmap> decoded(new SkBitmap());
+ *decoded = decoder.Decode(data, file_contents.length());
+ if (decoded->empty()) {
+ DLOG(ERROR) << "Could not decode icon file: "
+ << icon_path.LossyDisplayName();
+ return;
+ }
+
+ if (decoded->width() != icon_size || decoded->height() != icon_size) {
+ DLOG(ERROR) << "Icon file has unexpected size: "
+ << base::IntToString(decoded->width()) << "x"
+ << base::IntToString(decoded->height());
+ return;
+ }
+
+ result->swap(decoded);
+}
+
+// static
+const gfx::ImageSkia& IconsInfo::GetDefaultAppIcon() {
+ return *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
+ IDR_APP_DEFAULT_ICON);
+}
+
+// static
+const gfx::ImageSkia& IconsInfo::GetDefaultExtensionIcon() {
+ return *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
+ IDR_EXTENSION_DEFAULT_ICON);
+}
+
+// static
+ExtensionResource IconsInfo::GetIconResource(
+ const Extension* extension,
+ int size,
+ ExtensionIconSet::MatchType match_type) {
+ std::string path = GetIcons(extension).Get(size, match_type);
+ return path.empty() ? ExtensionResource() : extension->GetResource(path);
+}
+
+// static
+GURL IconsInfo::GetIconURL(const Extension* extension,
+ int size,
+ ExtensionIconSet::MatchType match_type) {
+ std::string path = GetIcons(extension).Get(size, match_type);
+ return path.empty() ? GURL() : extension->GetResourceURL(path);
+}
+
+IconsHandler::IconsHandler() {
+}
+
+IconsHandler::~IconsHandler() {
+}
+
+bool IconsHandler::Parse(Extension* extension, string16* error) {
+ scoped_ptr<IconsInfo> icons_info(new IconsInfo);
+ const DictionaryValue* icons_dict = NULL;
+ if (!extension->manifest()->GetDictionary(keys::kIcons, &icons_dict)) {
+ *error = ASCIIToUTF16(extension_manifest_errors::kInvalidIcons);
+ return false;
+ }
+
+ if (!manifest_handler_helpers::LoadIconsFromDictionary(
+ icons_dict,
+ extension_misc::kExtensionIconSizes,
+ extension_misc::kNumExtensionIconSizes,
+ &icons_info->icons,
+ error)) {
+ return false;
+ }
+
+ extension->SetManifestData(keys::kIcons, icons_info.release());
+ return true;
+}
+
+} // namespace extensions
diff --git a/chrome/common/extensions/api/icons/icons_handler.h b/chrome/common/extensions/api/icons/icons_handler.h
new file mode 100644
index 0000000..8243eb1
--- /dev/null
+++ b/chrome/common/extensions/api/icons/icons_handler.h
@@ -0,0 +1,79 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_COMMON_EXTENSIONS_API_ICONS_ICONS_HANDLER_H_
+#define CHROME_COMMON_EXTENSIONS_API_ICONS_ICONS_HANDLER_H_
+
+#include <string>
+
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_icon_set.h"
+#include "chrome/common/extensions/extension_resource.h"
+#include "chrome/common/extensions/manifest_handler.h"
+
+namespace extensions {
+
+struct IconsInfo : public Extension::ManifestData {
+ // Max size (both dimensions) for browser and page actions.
+ static const int kPageActionIconMaxSize;
+ static const int kBrowserActionIconMaxSize;
+
+ // The icons for the extension.
+ ExtensionIconSet icons;
+
+ // Return the icon set for the given |extension|.
+ static const ExtensionIconSet& GetIcons(const Extension* extension);
+
+ // Given an extension, icon size, and match type, read a valid icon if present
+ // and decode it into |result|. In the browser process, this will DCHECK if
+ // not called on the file thread. To easily load extension images on the UI
+ // thread, see ImageLoader.
+ static void DecodeIcon(const Extension* extension,
+ int icon_size,
+ ExtensionIconSet::MatchType match_type,
+ scoped_ptr<SkBitmap>* result);
+
+ // Given an extension and icon size, read it if present and decode it into
+ // |result|. In the browser process, this will DCHECK if not called on the
+ // file thread. To easily load extension images on the UI thread, see
+ // ImageLoader.
+ static void DecodeIcon(const Extension* extension,
+ int icon_size,
+ scoped_ptr<SkBitmap>* result);
+
+ // Given an icon_path and icon size, read it if present and decode it into
+ // |result|. In the browser process, this will DCHECK if not called on the
+ // file thread. To easily load extension images on the UI thread, see
+ // ImageLoader.
+ static void DecodeIconFromPath(const base::FilePath& icon_path,
+ int icon_size,
+ scoped_ptr<SkBitmap>* result);
+
+ // Returns the default extension/app icon (for extensions or apps that don't
+ // have one).
+ static const gfx::ImageSkia& GetDefaultExtensionIcon();
+ static const gfx::ImageSkia& GetDefaultAppIcon();
+
+ // Get an extension icon as a resource or URL.
+ static ExtensionResource GetIconResource(
+ const Extension* extension,
+ int size,
+ ExtensionIconSet::MatchType match_type);
+ static GURL GetIconURL(const Extension* extension,
+ int size,
+ ExtensionIconSet::MatchType match_type);
+};
+
+// Parses the "icons" manifest key.
+class IconsHandler : public ManifestHandler {
+ public:
+ IconsHandler();
+ virtual ~IconsHandler();
+
+ virtual bool Parse(Extension* extension, string16* error) OVERRIDE;
+};
+
+} // namespace extensions
+
+#endif // CHROME_COMMON_EXTENSIONS_API_ICONS_ICONS_HANDLER_H_
diff --git a/chrome/common/extensions/api/icons/icons_manifest_unittest.cc b/chrome/common/extensions/api/icons/icons_manifest_unittest.cc
new file mode 100644
index 0000000..1d09290
--- /dev/null
+++ b/chrome/common/extensions/api/icons/icons_manifest_unittest.cc
@@ -0,0 +1,64 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
+
+#include "base/memory/linked_ptr.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/extensions/extension_icon_set.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+class IconsManifestTest : public ExtensionManifestTest {
+ protected:
+ virtual void SetUp() OVERRIDE {
+ ExtensionManifestTest::SetUp();
+ ManifestHandler::Register(extension_manifest_keys::kIcons,
+ make_linked_ptr(new IconsHandler));
+ }
+};
+
+TEST_F(IconsManifestTest, NormalizeIconPaths) {
+ scoped_refptr<extensions::Extension> extension(
+ LoadAndExpectSuccess("normalize_icon_paths.json"));
+ const ExtensionIconSet& icons = IconsInfo::GetIcons(extension);
+
+ EXPECT_EQ("16.png", icons.Get(extension_misc::EXTENSION_ICON_BITTY,
+ ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("48.png", icons.Get(extension_misc::EXTENSION_ICON_MEDIUM,
+ ExtensionIconSet::MATCH_EXACTLY));
+}
+
+TEST_F(IconsManifestTest, InvalidIconSizes) {
+ scoped_refptr<extensions::Extension> extension(
+ LoadAndExpectSuccess("init_ignored_icon_size.json"));
+ EXPECT_EQ("", IconsInfo::GetIcons(extension).Get(
+ 300, ExtensionIconSet::MATCH_EXACTLY));
+}
+
+TEST_F(IconsManifestTest, ValidIconSizes) {
+ scoped_refptr<extensions::Extension> extension(
+ LoadAndExpectSuccess("init_valid_icon_size.json"));
+ const ExtensionIconSet& icons = IconsInfo::GetIcons(extension);
+
+ EXPECT_EQ("16.png", icons.Get(extension_misc::EXTENSION_ICON_BITTY,
+ ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("24.png", icons.Get(extension_misc::EXTENSION_ICON_SMALLISH,
+ ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("32.png", icons.Get(extension_misc::EXTENSION_ICON_SMALL,
+ ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("48.png", icons.Get(extension_misc::EXTENSION_ICON_MEDIUM,
+ ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("128.png", icons.Get(extension_misc::EXTENSION_ICON_LARGE,
+ ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("256.png", icons.Get(extension_misc::EXTENSION_ICON_EXTRA_LARGE,
+ ExtensionIconSet::MATCH_EXACTLY));
+ EXPECT_EQ("512.png", icons.Get(extension_misc::EXTENSION_ICON_GIGANTOR,
+ ExtensionIconSet::MATCH_EXACTLY));
+}
+
+} // namespace extensions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 7b11c8a..3fb08fc 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -28,11 +28,11 @@
// SystemIndicator have been moved out of Extension.
#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "chrome/common/extensions/api/extension_action/page_action_handler.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/api/themes/theme_handler.h"
#include "chrome/common/extensions/csp_handler.h"
#include "chrome/common/extensions/csp_validator.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
-#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/extensions/feature_switch.h"
#include "chrome/common/extensions/features/base_feature_provider.h"
#include "chrome/common/extensions/features/feature.h"
@@ -54,8 +54,6 @@
#include "grit/theme_resources.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "webkit/glue/image_decoder.h"
#if defined(OS_WIN)
#include "base/win/metro.h"
@@ -215,9 +213,6 @@ const size_t Extension::kIdSize = 16;
const char Extension::kMimeType[] = "application/x-chrome-extension";
-const int Extension::kPageActionIconMaxSize = 19;
-const int Extension::kBrowserActionIconMaxSize = 19;
-
const int Extension::kValidWebExtentSchemes =
URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS;
@@ -487,65 +482,6 @@ bool Extension::FormatPEMForFileOutput(const std::string& input,
}
// static
-void Extension::DecodeIcon(const Extension* extension,
- int preferred_icon_size,
- ExtensionIconSet::MatchType match_type,
- scoped_ptr<SkBitmap>* result) {
- std::string path = extension->icons().Get(preferred_icon_size, match_type);
- int size = extension->icons().GetIconSizeFromPath(path);
- ExtensionResource icon_resource = extension->GetResource(path);
- DecodeIconFromPath(icon_resource.GetFilePath(), size, result);
-}
-
-// static
-void Extension::DecodeIcon(const Extension* extension,
- int icon_size,
- scoped_ptr<SkBitmap>* result) {
- DecodeIcon(extension, icon_size, ExtensionIconSet::MATCH_EXACTLY, result);
-}
-
-// static
-void Extension::DecodeIconFromPath(const base::FilePath& icon_path,
- int icon_size,
- scoped_ptr<SkBitmap>* result) {
- if (icon_path.empty())
- return;
-
- std::string file_contents;
- if (!file_util::ReadFileToString(icon_path, &file_contents)) {
- DLOG(ERROR) << "Could not read icon file: " << icon_path.LossyDisplayName();
- return;
- }
-
- // Decode the image using WebKit's image decoder.
- const unsigned char* data =
- reinterpret_cast<const unsigned char*>(file_contents.data());
- webkit_glue::ImageDecoder decoder;
- scoped_ptr<SkBitmap> decoded(new SkBitmap());
- *decoded = decoder.Decode(data, file_contents.length());
- if (decoded->empty()) {
- DLOG(ERROR) << "Could not decode icon file: "
- << icon_path.LossyDisplayName();
- return;
- }
-
- if (decoded->width() != icon_size || decoded->height() != icon_size) {
- DLOG(ERROR) << "Icon file has unexpected size: "
- << base::IntToString(decoded->width()) << "x"
- << base::IntToString(decoded->height());
- return;
- }
-
- result->swap(decoded);
-}
-
-// static
-const gfx::ImageSkia& Extension::GetDefaultIcon(bool is_app) {
- int id = is_app ? IDR_APP_DEFAULT_ICON : IDR_EXTENSION_DEFAULT_ICON;
- return *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(id);
-}
-
-// static
GURL Extension::GetBaseURLFromExtensionId(const std::string& extension_id) {
return GURL(std::string(extensions::kExtensionScheme) +
content::kStandardSchemeSeparator + extension_id + "/");
@@ -794,8 +730,9 @@ std::set<base::FilePath> Extension::GetBrowserImages() const {
// indicate that we're doing something wrong.
// Extension icons.
- for (ExtensionIconSet::IconMap::const_iterator iter = icons().map().begin();
- iter != icons().map().end(); ++iter) {
+ for (ExtensionIconSet::IconMap::const_iterator iter =
+ IconsInfo::GetIcons(this).map().begin();
+ iter != IconsInfo::GetIcons(this).map().end(); ++iter) {
image_paths.insert(
base::FilePath::FromWStringHack(UTF8ToWide(iter->second)));
}
@@ -836,18 +773,6 @@ std::set<base::FilePath> Extension::GetBrowserImages() const {
return image_paths;
}
-ExtensionResource Extension::GetIconResource(
- int size, ExtensionIconSet::MatchType match_type) const {
- std::string path = icons().Get(size, match_type);
- return path.empty() ? ExtensionResource() : GetResource(path);
-}
-
-GURL Extension::GetIconURL(int size,
- ExtensionIconSet::MatchType match_type) const {
- std::string path = icons().Get(size, match_type);
- return path.empty() ? GURL() : GetResourceURL(path);
-}
-
GURL Extension::GetFullLaunchURL() const {
return launch_local_path().empty() ? GURL(launch_web_url()) :
url().Resolve(launch_local_path());
@@ -1796,7 +1721,6 @@ bool Extension::LoadLaunchURL(string16* error) {
bool Extension::LoadSharedFeatures(string16* error) {
if (!LoadDescription(error) ||
- !LoadIcons(error) ||
!ManifestHandler::ParseExtension(this, error) ||
!LoadPlugins(error) ||
!LoadNaClModules(error) ||
@@ -1848,23 +1772,6 @@ bool Extension::LoadManifestVersion(string16* error) {
return true;
}
-bool Extension::LoadIcons(string16* error) {
- if (!manifest_->HasKey(keys::kIcons))
- return true;
- DictionaryValue* icons_value = NULL;
- if (!manifest_->GetDictionary(keys::kIcons, &icons_value)) {
- *error = ASCIIToUTF16(errors::kInvalidIcons);
- return false;
- }
-
- return manifest_handler_helpers::LoadIconsFromDictionary(
- icons_value,
- extension_misc::kExtensionIconSizes,
- extension_misc::kNumExtensionIconSizes,
- &icons_,
- error);
-}
-
bool Extension::LoadPlugins(string16* error) {
if (!manifest_->HasKey(keys::kPlugins))
return true;
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
index bad417c..dfb6846 100644
--- a/chrome/common/extensions/extension.h
+++ b/chrome/common/extensions/extension.h
@@ -22,6 +22,7 @@
#include "base/threading/thread_checker.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
+#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/extensions/manifest.h"
#include "chrome/common/extensions/permissions/api_permission.h"
#include "chrome/common/extensions/permissions/permission_message.h"
@@ -34,7 +35,6 @@
#include "ui/gfx/size.h"
class ExtensionAction;
-class ExtensionResource;
class SkBitmap;
class Version;
@@ -194,10 +194,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
const std::string& explicit_id,
std::string* error);
- // Max size (both dimensions) for browser and page actions.
- static const int kPageActionIconMaxSize;
- static const int kBrowserActionIconMaxSize;
-
// Valid schemes for web extent URLPatterns.
static const int kValidWebExtentSchemes;
@@ -291,35 +287,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
std::string* output,
bool is_public);
- // Given an extension, icon size, and match type, read a valid icon if present
- // and decode it into result. In the browser process, this will DCHECK if not
- // called on the file thread. To easily load extension images on the UI
- // thread, see ImageLoader.
- static void DecodeIcon(const Extension* extension,
- int icon_size,
- ExtensionIconSet::MatchType match_type,
- scoped_ptr<SkBitmap>* result);
-
- // Given an extension and icon size, read it if present and decode it into
- // result. In the browser process, this will DCHECK if not called on the
- // file thread. To easily load extension images on the UI thread, see
- // ImageLoader.
- static void DecodeIcon(const Extension* extension,
- int icon_size,
- scoped_ptr<SkBitmap>* result);
-
- // Given an icon_path and icon size, read it if present and decode it into
- // result. In the browser process, this will DCHECK if not called on the
- // file thread. To easily load extension images on the UI thread, see
- // ImageLoader.
- static void DecodeIconFromPath(const base::FilePath& icon_path,
- int icon_size,
- scoped_ptr<SkBitmap>* result);
-
- // Returns the default extension/app icon (for extensions or apps that don't
- // have one).
- static const gfx::ImageSkia& GetDefaultIcon(bool is_app);
-
// Returns the base extension url for a given |extension_id|.
static GURL GetBaseURLFromExtensionId(const std::string& extension_id);
@@ -394,11 +361,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// the browser might load (like themes and page action icons).
std::set<base::FilePath> GetBrowserImages() const;
- // Get an extension icon as a resource or URL.
- ExtensionResource GetIconResource(
- int size, ExtensionIconSet::MatchType match_type) const;
- GURL GetIconURL(int size, ExtensionIconSet::MatchType match_type) const;
-
// Gets the fully resolved absolute launch URL.
GURL GetFullLaunchURL() const;
@@ -540,7 +502,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
const std::vector<InstallWarning>& install_warnings() const {
return install_warnings_;
}
- const ExtensionIconSet& icons() const { return icons_; }
const extensions::Manifest* manifest() const {
return manifest_.get();
}
@@ -660,7 +621,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
bool LoadSharedFeatures(string16* error);
bool LoadDescription(string16* error);
bool LoadManifestVersion(string16* error);
- bool LoadIcons(string16* error);
bool LoadPlugins(string16* error);
bool LoadNaClModules(string16* error);
bool LoadSandboxedPages(string16* error);
@@ -780,9 +740,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// Any warnings that occurred when trying to create/parse the extension.
std::vector<InstallWarning> install_warnings_;
- // The icons for the extension.
- ExtensionIconSet icons_;
-
// The base extension url for the extension.
GURL extension_url_;
diff --git a/chrome/common/extensions/extension_file_util.cc b/chrome/common/extensions/extension_file_util.cc
index 0a3a36b..dc8791a 100644
--- a/chrome/common/extensions/extension_file_util.cc
+++ b/chrome/common/extensions/extension_file_util.cc
@@ -22,6 +22,7 @@
#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "chrome/common/extensions/api/extension_action/browser_action_handler.h"
#include "chrome/common/extensions/api/i18n/default_locale_handler.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/api/themes/theme_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_l10n_util.h"
@@ -256,8 +257,8 @@ bool ValidateExtension(const Extension* extension,
std::vector<extensions::InstallWarning>* warnings) {
// Validate icons exist.
for (ExtensionIconSet::IconMap::const_iterator iter =
- extension->icons().map().begin();
- iter != extension->icons().map().end();
+ extensions::IconsInfo::GetIcons(extension).map().begin();
+ iter != extensions::IconsInfo::GetIcons(extension).map().end();
++iter) {
const base::FilePath path =
extension->GetResource(iter->second).GetFilePath();
diff --git a/chrome/common/extensions/extension_file_util_unittest.cc b/chrome/common/extensions/extension_file_util_unittest.cc
index 36a9117..0d5da85 100644
--- a/chrome/common/extensions/extension_file_util_unittest.cc
+++ b/chrome/common/extensions/extension_file_util_unittest.cc
@@ -14,6 +14,7 @@
#include "chrome/common/extensions/api/extension_action/browser_action_handler.h"
#include "chrome/common/extensions/api/extension_action/page_action_handler.h"
#include "chrome/common/extensions/api/i18n/default_locale_handler.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
#include "chrome/common/extensions/manifest.h"
@@ -33,6 +34,9 @@ class ExtensionFileUtilTest : public testing::Test {
virtual void SetUp() OVERRIDE {
testing::Test::SetUp();
extensions::ManifestHandler::Register(
+ extension_manifest_keys::kIcons,
+ make_linked_ptr(new extensions::IconsHandler));
+ extensions::ManifestHandler::Register(
keys::kBrowserAction,
make_linked_ptr(new extensions::BrowserActionHandler));
linked_ptr<extensions::PageActionHandler> page_action_handler(
diff --git a/chrome/common/extensions/manifest_tests/extension_manifests_icon_unittest.cc b/chrome/common/extensions/manifest_tests/extension_manifests_icon_unittest.cc
deleted file mode 100644
index 352be04..0000000
--- a/chrome/common/extensions/manifest_tests/extension_manifests_icon_unittest.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
-
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-TEST_F(ExtensionManifestTest, NormalizeIconPaths) {
- scoped_refptr<extensions::Extension> extension(
- LoadAndExpectSuccess("normalize_icon_paths.json"));
- EXPECT_EQ("16.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_BITTY, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("48.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_MEDIUM,
- ExtensionIconSet::MATCH_EXACTLY));
-}
-
-TEST_F(ExtensionManifestTest, InvalidIconSizes) {
- scoped_refptr<extensions::Extension> extension(
- LoadAndExpectSuccess("init_ignored_icon_size.json"));
- EXPECT_EQ("",
- extension->icons().Get(300, ExtensionIconSet::MATCH_EXACTLY));
-}
-
-TEST_F(ExtensionManifestTest, ValidIconSizes) {
- scoped_refptr<extensions::Extension> extension(
- LoadAndExpectSuccess("init_valid_icon_size.json"));
- EXPECT_EQ("16.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_BITTY, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("24.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_SMALLISH,
- ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("32.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_SMALL, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("48.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_MEDIUM,
- ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("128.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_LARGE, ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("256.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_EXTRA_LARGE,
- ExtensionIconSet::MATCH_EXACTLY));
- EXPECT_EQ("512.png", extension->icons().Get(
- extension_misc::EXTENSION_ICON_GIGANTOR,
- ExtensionIconSet::MATCH_EXACTLY));
-}
diff --git a/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc b/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc
index 656dd0f..1efc029 100644
--- a/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc
+++ b/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc
@@ -8,8 +8,10 @@
#include "chrome/common/chrome_paths.h"
#include "chrome/common/extensions/api/extension_action/page_action_handler.h"
#include "chrome/common/extensions/api/i18n/default_locale_handler.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
+#include "chrome/common/extensions/manifest_handler.h"
#include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
#include "chrome/common/extensions/manifest_url_handler.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -22,9 +24,14 @@
namespace errors = extension_manifest_errors;
namespace keys = extension_manifest_keys;
+namespace extensions {
+
class InitValueManifestTest : public ExtensionManifestTest {
+ protected:
virtual void SetUp() OVERRIDE {
ExtensionManifestTest::SetUp();
+ ManifestHandler::Register(extension_manifest_keys::kIcons,
+ make_linked_ptr(new IconsHandler));
extensions::ManifestHandler::Register(
keys::kOptionsPage,
make_linked_ptr(new extensions::OptionsPageHandler));
@@ -92,14 +99,14 @@ TEST_F(InitValueManifestTest, InitFromValueInvalid) {
}
TEST_F(InitValueManifestTest, InitFromValueValid) {
- scoped_refptr<extensions::Extension> extension(LoadAndExpectSuccess(
+ scoped_refptr<Extension> extension(LoadAndExpectSuccess(
"init_valid_minimal.json"));
base::FilePath path;
PathService::Get(chrome::DIR_TEST_DATA, &path);
path = path.AppendASCII("extensions");
- EXPECT_TRUE(extensions::Extension::IdIsValid(extension->id()));
+ EXPECT_TRUE(Extension::IdIsValid(extension->id()));
EXPECT_EQ("1.0.0.0", extension->VersionString());
EXPECT_EQ("my extension", extension->name());
EXPECT_EQ(extension->id(), extension->url().host());
@@ -114,9 +121,9 @@ TEST_F(InitValueManifestTest, InitFromValueValid) {
// Test with an options page.
extension = LoadAndExpectSuccess("init_valid_options.json");
EXPECT_EQ("chrome-extension",
- extensions::ManifestURL::GetOptionsPage(extension).scheme());
+ ManifestURL::GetOptionsPage(extension).scheme());
EXPECT_EQ("/options.html",
- extensions::ManifestURL::GetOptionsPage(extension).path());
+ ManifestURL::GetOptionsPage(extension).path());
Testcase testcases[] = {
// Test that an empty list of page actions does not stop a browser action
@@ -154,7 +161,7 @@ TEST_F(InitValueManifestTest, InitFromValueValidNameInRTL) {
#endif
// No strong RTL characters in name.
- scoped_refptr<extensions::Extension> extension(LoadAndExpectSuccess(
+ scoped_refptr<Extension> extension(LoadAndExpectSuccess(
"init_valid_name_no_rtl.json"));
string16 localized_name(ASCIIToUTF16("Dictionary (by Google)"));
@@ -175,3 +182,5 @@ TEST_F(InitValueManifestTest, InitFromValueValidNameInRTL) {
base::i18n::SetICUDefaultLocale(locale);
#endif
}
+
+} // namespace extensions
diff --git a/chrome/common/localized_error.cc b/chrome/common/localized_error.cc
index 73ac296..bfc59a6 100644
--- a/chrome/common/localized_error.cc
+++ b/chrome/common/localized_error.cc
@@ -10,6 +10,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
#include "chrome/common/extensions/extension_set.h"
@@ -716,11 +717,15 @@ void LocalizedError::GetAppErrorStrings(
failed_url.c_str()));
error_strings->SetString("title", app->name());
- error_strings->SetString("icon",
- app->GetIconURL(extension_misc::EXTENSION_ICON_GIGANTOR,
- ExtensionIconSet::MATCH_SMALLER).spec());
+ error_strings->SetString(
+ "icon",
+ extensions::IconsInfo::GetIconURL(
+ app,
+ extension_misc::EXTENSION_ICON_GIGANTOR,
+ ExtensionIconSet::MATCH_SMALLER).spec());
error_strings->SetString("name", app->name());
- error_strings->SetString("msg",
+ error_strings->SetString(
+ "msg",
l10n_util::GetStringUTF16(IDS_ERRORPAGES_APP_WARNING));
#if defined(OS_CHROMEOS)
diff --git a/chrome/renderer/extensions/resource_request_policy.cc b/chrome/renderer/extensions/resource_request_policy.cc
index 9f8e336..5843d8d 100644
--- a/chrome/renderer/extensions/resource_request_policy.cc
+++ b/chrome/renderer/extensions/resource_request_policy.cc
@@ -8,6 +8,7 @@
#include "base/logging.h"
#include "base/stringprintf.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_set.h"
#include "chrome/common/extensions/manifest_url_handler.h"
@@ -52,7 +53,8 @@ bool ResourceRequestPolicy::CanRequestResource(
std::string resource_root_relative_path =
resource_url.path().empty() ? "" : resource_url.path().substr(1);
if (extension->is_hosted_app() &&
- !extension->icons().ContainsPath(resource_root_relative_path)) {
+ !IconsInfo::GetIcons(extension)
+ .ContainsPath(resource_root_relative_path)) {
LOG(ERROR) << "Denying load of " << resource_url.spec() << " from "
<< "hosted app.";
return false;
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc
index 2eac856..d2287b7 100644
--- a/chrome/utility/chrome_content_utility_client.cc
+++ b/chrome/utility/chrome_content_utility_client.cc
@@ -20,6 +20,7 @@
#include "chrome/common/extensions/api/extension_action/browser_action_handler.h"
#include "chrome/common/extensions/api/extension_action/page_action_handler.h"
#include "chrome/common/extensions/api/i18n/default_locale_handler.h"
+#include "chrome/common/extensions/api/icons/icons_handler.h"
#include "chrome/common/extensions/api/themes/theme_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_l10n_util.h"
@@ -60,6 +61,9 @@ void RegisterExtensionManifestHandlers() {
extensions::ManifestHandler::Register(
extension_manifest_keys::kDefaultLocale,
make_linked_ptr(new extensions::DefaultLocaleHandler));
+ extensions::ManifestHandler::Register(
+ extension_manifest_keys::kIcons,
+ make_linked_ptr(new extensions::IconsHandler));
linked_ptr<extensions::PageActionHandler> page_action_handler(
new extensions::PageActionHandler);
extensions::ManifestHandler::Register(