summaryrefslogtreecommitdiffstats
path: root/extensions/common/manifest_handlers/icons_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/common/manifest_handlers/icons_handler.cc')
-rw-r--r--extensions/common/manifest_handlers/icons_handler.cc106
1 files changed, 106 insertions, 0 deletions
diff --git a/extensions/common/manifest_handlers/icons_handler.cc b/extensions/common/manifest_handlers/icons_handler.cc
new file mode 100644
index 0000000..1bddabb
--- /dev/null
+++ b/extensions/common/manifest_handlers/icons_handler.cc
@@ -0,0 +1,106 @@
+// Copyright 2014 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 "extensions/common/manifest_handlers/icons_handler.h"
+
+#include "base/file_util.h"
+#include "base/lazy_instance.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
+#include "extensions/common/constants.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/file_util.h"
+#include "extensions/common/manifest_constants.h"
+#include "extensions/common/manifest_handler_helpers.h"
+#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/size.h"
+
+namespace extensions {
+
+namespace keys = manifest_keys;
+
+static base::LazyInstance<ExtensionIconSet> g_empty_icon_set =
+ LAZY_INSTANCE_INITIALIZER;
+
+// 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
+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, base::string16* error) {
+ scoped_ptr<IconsInfo> icons_info(new IconsInfo);
+ const base::DictionaryValue* icons_dict = NULL;
+ if (!extension->manifest()->GetDictionary(keys::kIcons, &icons_dict)) {
+ *error = base::ASCIIToUTF16(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;
+}
+
+bool IconsHandler::Validate(const Extension* extension,
+ std::string* error,
+ std::vector<InstallWarning>* warnings) const {
+ return file_util::ValidateExtensionIconSet(IconsInfo::GetIcons(extension),
+ extension,
+ IDS_EXTENSION_LOAD_ICON_FAILED,
+ error);
+}
+
+const std::vector<std::string> IconsHandler::Keys() const {
+ return SingleKey(keys::kIcons);
+}
+
+} // namespace extensions