Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Unified Diff: components/doodle/doodle_types.cc

Issue 2748653002: [Doodle] Add conversion to dictionary for DoodleImage and DoodleConfig (Closed)
Patch Set: check invalid URL parsing result Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/doodle/doodle_types.h ('k') | components/doodle/doodle_types_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/doodle/doodle_types.cc
diff --git a/components/doodle/doodle_types.cc b/components/doodle/doodle_types.cc
index 288c95f98106b6ab1aadb4f06fc0624ce1418baf..36aa7ec8859218aa54b8687aac22df48c8fb602a 100644
--- a/components/doodle/doodle_types.cc
+++ b/components/doodle/doodle_types.cc
@@ -4,29 +4,78 @@
#include "components/doodle/doodle_types.h"
+#include "base/memory/ptr_util.h"
#include "base/values.h"
namespace doodle {
namespace {
+// String representations for the DoodleType enum.
+const char kDoodleTypeUnknown[] = "UNKNOWN";
+const char kDoodleTypeSimple[] = "SIMPLE";
+const char kDoodleTypeRandom[] = "RANDOM";
+const char kDoodleTypeVideo[] = "VIDEO";
+const char kDoodleTypeInteractive[] = "INTERACTIVE";
+const char kDoodleTypeInlineInteractive[] = "INLINE_INTERACTIVE";
+const char kDoodleTypeSlideshow[] = "SLIDESHOW";
+
+// JSON keys for DoodleImage fields.
+const char kKeyUrl[] = "url";
+const char kKeyHeight[] = "height";
+const char kKeyWidth[] = "width";
+const char kKeyIsAnimatedGif[] = "is_animated_gif";
+const char kKeyIsCta[] = "is_cta";
+
+// JSON keys for DoodleConfig fields.
+const char kKeyDoodleType[] = "doodle_type";
+const char kKeyAltText[] = "alt_text";
+const char kKeyInteractiveHtml[] = "interactive_html";
+const char kKeySearchUrl[] = "search_url";
+const char kKeyTargetUrl[] = "target_url";
+const char kKeyFullpageInteractiveUrl[] = "fullpage_interactive_url";
+const char kKeyLargeImage[] = "large_image";
+const char kKeyLargeCtaImage[] = "large_cta_image";
+const char kKeyTransparentLargeImage[] = "transparent_large_image";
+
+std::string DoodleTypeToString(DoodleType type) {
+ switch (type) {
+ case DoodleType::UNKNOWN:
+ return kDoodleTypeUnknown;
+ case DoodleType::SIMPLE:
+ return kDoodleTypeSimple;
+ case DoodleType::RANDOM:
+ return kDoodleTypeRandom;
+ case DoodleType::VIDEO:
+ return kDoodleTypeVideo;
+ case DoodleType::INTERACTIVE:
+ return kDoodleTypeInteractive;
+ case DoodleType::INLINE_INTERACTIVE:
+ return kDoodleTypeInlineInteractive;
+ case DoodleType::SLIDESHOW:
+ return kDoodleTypeSlideshow;
+ }
+ NOTREACHED();
+ return std::string();
+}
+
DoodleType DoodleTypeFromString(const std::string& type_str) {
- if (type_str == "SIMPLE") {
+ if (type_str == kDoodleTypeSimple) {
return DoodleType::SIMPLE;
}
- if (type_str == "RANDOM") {
+ if (type_str == kDoodleTypeRandom) {
return DoodleType::RANDOM;
}
- if (type_str == "VIDEO") {
+ if (type_str == kDoodleTypeVideo) {
return DoodleType::VIDEO;
}
- if (type_str == "INTERACTIVE") {
+ if (type_str == kDoodleTypeInteractive) {
return DoodleType::INTERACTIVE;
}
- if (type_str == "INLINE_INTERACTIVE") {
+ if (type_str == kDoodleTypeInlineInteractive) {
return DoodleType::INLINE_INTERACTIVE;
}
- if (type_str == "SLIDESHOW") {
+ if (type_str == kDoodleTypeSlideshow) {
return DoodleType::SLIDESHOW;
}
return DoodleType::UNKNOWN;
@@ -67,17 +116,17 @@ base::Optional<DoodleImage> DoodleImage::FromDictionary(
const base::DictionaryValue& dict,
const base::Optional<GURL>& base_url) {
// The URL is the only required field.
- GURL url = ParseUrl(dict, "url", base_url);
+ GURL url = ParseUrl(dict, kKeyUrl, base_url);
if (!url.is_valid()) {
return base::nullopt;
}
DoodleImage image(url);
- dict.GetInteger("height", &image.height);
- dict.GetInteger("width", &image.width);
- dict.GetBoolean("is_animated_gif", &image.is_animated_gif);
- dict.GetBoolean("is_cta", &image.is_cta);
+ dict.GetInteger(kKeyHeight, &image.height);
+ dict.GetInteger(kKeyWidth, &image.width);
+ dict.GetBoolean(kKeyIsAnimatedGif, &image.is_animated_gif);
+ dict.GetBoolean(kKeyIsCta, &image.is_cta);
return image;
}
@@ -89,6 +138,16 @@ DoodleImage::DoodleImage(const GURL& url)
DoodleImage::~DoodleImage() = default;
+std::unique_ptr<base::DictionaryValue> DoodleImage::ToDictionary() const {
+ auto dict = base::MakeUnique<base::DictionaryValue>();
+ dict->SetString(kKeyUrl, url.spec());
+ dict->SetInteger(kKeyHeight, height);
+ dict->SetInteger(kKeyWidth, width);
+ dict->SetBoolean(kKeyIsAnimatedGif, is_animated_gif);
+ dict->SetBoolean(kKeyIsCta, is_cta);
+ return dict;
+}
+
bool DoodleImage::operator==(const DoodleImage& other) const {
return url == other.url && height == other.height && width == other.width &&
is_animated_gif == other.is_animated_gif && is_cta == other.is_cta;
@@ -111,36 +170,49 @@ base::Optional<DoodleConfig> DoodleConfig::FromDictionary(
// The |large_image| field is required (it's the "default" representation for
// the doodle).
base::Optional<DoodleImage> large_image =
- ParseImage(dict, "large_image", base_url);
+ ParseImage(dict, kKeyLargeImage, base_url);
if (!large_image.has_value()) {
return base::nullopt;
}
std::string type_str;
- dict.GetString("doodle_type", &type_str);
+ dict.GetString(kKeyDoodleType, &type_str);
DoodleConfig doodle(DoodleTypeFromString(type_str), large_image.value());
- dict.GetString("alt_text", &doodle.alt_text);
+ dict.GetString(kKeyAltText, &doodle.alt_text);
- dict.GetString("interactive_html", &doodle.interactive_html);
+ dict.GetString(kKeyInteractiveHtml, &doodle.interactive_html);
- doodle.search_url = ParseUrl(dict, "search_url", base_url);
- doodle.target_url = ParseUrl(dict, "target_url", base_url);
+ doodle.search_url = ParseUrl(dict, kKeySearchUrl, base_url);
+ doodle.target_url = ParseUrl(dict, kKeyTargetUrl, base_url);
doodle.fullpage_interactive_url =
- ParseUrl(dict, "fullpage_interactive_url", base_url);
+ ParseUrl(dict, kKeyFullpageInteractiveUrl, base_url);
+
+ doodle.large_cta_image = ParseImage(dict, kKeyLargeCtaImage, base_url);
+ doodle.transparent_large_image =
+ ParseImage(dict, kKeyTransparentLargeImage, base_url);
- auto large_cta_image = ParseImage(dict, "large_cta_image", base_url);
+ return doodle;
+}
+
+std::unique_ptr<base::DictionaryValue> DoodleConfig::ToDictionary() const {
+ auto dict = base::MakeUnique<base::DictionaryValue>();
+ dict->SetString(kKeyDoodleType, DoodleTypeToString(doodle_type));
+ dict->SetString(kKeyAltText, alt_text);
+ dict->SetString(kKeyInteractiveHtml, interactive_html);
+ dict->SetString(kKeySearchUrl, search_url.spec());
+ dict->SetString(kKeyTargetUrl, target_url.spec());
+ dict->SetString(kKeyFullpageInteractiveUrl, fullpage_interactive_url.spec());
+ dict->Set(kKeyLargeImage, large_image.ToDictionary());
if (large_cta_image.has_value()) {
- doodle.large_cta_image = large_cta_image.value();
+ dict->Set(kKeyLargeCtaImage, large_cta_image->ToDictionary());
}
- auto transparent_large_image =
- ParseImage(dict, "transparent_large_image", base_url);
if (transparent_large_image.has_value()) {
- doodle.transparent_large_image = transparent_large_image.value();
+ dict->Set(kKeyTransparentLargeImage,
+ transparent_large_image->ToDictionary());
}
-
- return doodle;
+ return dict;
}
bool DoodleConfig::operator==(const DoodleConfig& other) const {
« no previous file with comments | « components/doodle/doodle_types.h ('k') | components/doodle/doodle_types_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698