Home | History | Annotate | Download | only in common
      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.
      4 
      5 #include "extensions/common/manifest_handler_helpers.h"
      6 
      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"
     15 
     16 
     17 namespace extensions {
     18 
     19 namespace errors = manifest_errors;
     20 
     21 namespace manifest_handler_helpers {
     22 
     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) {
     26     *path = "";
     27     return false;
     28   }
     29 
     30   *path = path->substr(first_non_slash);
     31   return true;
     32 }
     33 
     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) {
     39   DCHECK(icons);
     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);
     47         return false;
     48       }
     49 
     50       if (!NormalizeAndValidatePath(&icon_path)) {
     51         *error = ErrorUtils::FormatErrorMessageUTF16(
     52             errors::kInvalidIconPath, key);
     53         return false;
     54       }
     55 
     56       icons->Add(icon_sizes[i], icon_path);
     57     }
     58   }
     59   return true;
     60 }
     61 
     62 }  // namespace manifest_handler_helpers
     63 
     64 }  // namespace extensions
     65