1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "extensions/common/manifest_handler_helpers.h"
7 #include "base/logging.h"
8 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/values.h"
11 #include "extensions/common/error_utils.h"
12 #include "extensions/common/extension.h"
13 #include "extensions/common/extension_icon_set.h"
14 #include "extensions/common/manifest_constants.h"
17 namespace extensions
{
19 namespace errors
= manifest_errors
;
21 namespace manifest_handler_helpers
{
23 bool NormalizeAndValidatePath(std::string
* path
) {
24 size_t first_non_slash
= path
->find_first_not_of('/');
25 if (first_non_slash
== std::string::npos
) {
30 *path
= path
->substr(first_non_slash
);
34 bool LoadIconsFromDictionary(const base::DictionaryValue
* icons_value
,
35 const int* icon_sizes
,
36 size_t num_icon_sizes
,
37 ExtensionIconSet
* icons
,
38 base::string16
* error
) {
40 for (size_t i
= 0; i
< num_icon_sizes
; ++i
) {
41 std::string key
= base::IntToString(icon_sizes
[i
]);
42 if (icons_value
->HasKey(key
)) {
43 std::string icon_path
;
44 if (!icons_value
->GetString(key
, &icon_path
)) {
45 *error
= ErrorUtils::FormatErrorMessageUTF16(
46 errors::kInvalidIconPath
, key
);
50 if (!NormalizeAndValidatePath(&icon_path
)) {
51 *error
= ErrorUtils::FormatErrorMessageUTF16(
52 errors::kInvalidIconPath
, key
);
56 icons
->Add(icon_sizes
[i
], icon_path
);
62 } // namespace manifest_handler_helpers
64 } // namespace extensions