diff options
author | rdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-27 20:55:50 +0000 |
---|---|---|
committer | rdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-27 20:55:50 +0000 |
commit | 702d8b462fceaf9613a42e66c5464abfcf3e2550 (patch) | |
tree | f12c4f8d8eb715a80b273d252085aa93308c70e6 | |
parent | f19144dba4ac3b6ecf36dc1debefbcefe10ac5bb (diff) | |
download | chromium_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
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( |