| // Copyright 2018 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/extension_resource_path_normalizer.h" |
| |
| #include <utility> |
| #include <vector> |
| |
| bool NormalizeExtensionResourcePath(const base::FilePath& path, |
| base::FilePath* result) { |
| DCHECK(result); |
| |
| if (path.ReferencesParent()) |
| return false; |
| |
| std::vector<base::FilePath::StringType> components; |
| path.GetComponents(&components); |
| |
| base::FilePath rv; |
| for (const auto& path_component : components) { |
| if (path_component != base::FilePath::kCurrentDirectory) |
| rv = rv.Append(path_component); |
| } |
| |
| if (rv.empty()) |
| return false; |
| |
| *result = std::move(rv); |
| return true; |
| } |
| |
| std::set<base::FilePath> NormalizeExtensionResourcePaths( |
| const std::set<base::FilePath>& icons_paths) { |
| std::set<base::FilePath> rv; |
| for (const auto& icon_path : icons_paths) { |
| base::FilePath normalized_path; |
| if (NormalizeExtensionResourcePath(icon_path, &normalized_path)) |
| rv.emplace(std::move(normalized_path)); |
| } |
| return rv; |
| } |