| // Copyright 2015 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 COMPONENTS_FAVICON_BASE_FALLBACK_ICON_URL_PARSER_H_ |
| #define COMPONENTS_FAVICON_BASE_FALLBACK_ICON_URL_PARSER_H_ |
| |
| #include <string> |
| |
| #include "base/gtest_prod_util.h" |
| #include "base/macros.h" |
| #include "components/favicon_base/fallback_icon_style.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| |
| namespace chrome { |
| |
| class ParsedFallbackIconPath { |
| public: |
| ParsedFallbackIconPath(); |
| ~ParsedFallbackIconPath(); |
| |
| const std::string& url_string() const { return url_string_; } |
| |
| int size_in_pixels() const { return size_in_pixels_; } |
| |
| const favicon_base::FallbackIconStyle& style() const { return style_; } |
| |
| size_t path_index() const { return path_index_; } |
| |
| // Parses |path|, which should be in the format described at the top of the |
| // file "chrome/browser/ui/webui/fallback_icon_source.h". |
| bool Parse(const std::string& path); |
| |
| private: |
| // Parses |specs_str|, which should be the comma-separated value portion |
| // in the format described at the top of the file |
| // "chrome/browser/ui/webui/fallback_icon_source.h". |
| static bool ParseSpecs(const std::string& specs_str, |
| int *size, |
| favicon_base::FallbackIconStyle* style); |
| |
| // Helper to parse color string (e.g., "red", "#f00", "#aB0137"). On success, |
| // returns true and writes te result to |*color|. |
| static bool ParseColor(const std::string& color_str, SkColor* color); |
| |
| friend class FallbackIconUrlParserTest; |
| FRIEND_TEST_ALL_PREFIXES(FallbackIconUrlParserTest, ParseColorSuccess); |
| FRIEND_TEST_ALL_PREFIXES(FallbackIconUrlParserTest, ParseColorFailure); |
| FRIEND_TEST_ALL_PREFIXES(FallbackIconUrlParserTest, ParseSpecsEmpty); |
| FRIEND_TEST_ALL_PREFIXES(FallbackIconUrlParserTest, ParseSpecsPartial); |
| FRIEND_TEST_ALL_PREFIXES(FallbackIconUrlParserTest, ParseSpecsFull); |
| FRIEND_TEST_ALL_PREFIXES(FallbackIconUrlParserTest, ParseSpecsFailure); |
| |
| // The page URL string the fallback icon is requested for. |
| std::string url_string_; |
| |
| // The size of the requested fallback icon in pixels. |
| int size_in_pixels_; |
| |
| // Styling specifications of fallback icon. |
| favicon_base::FallbackIconStyle style_; |
| |
| // The index of the first character (relative to the path) where the the URL |
| // from which the fallback icon is being requested is located. |
| size_t path_index_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ParsedFallbackIconPath); |
| }; |
| |
| } // namespace chrome |
| |
| #endif // COMPONENTS_FAVICON_BASE_FALLBACK_ICON_URL_PARSER_H_ |