Skip to content

Commit 269833e

Browse files
committed
Serialize/deserialize ntp ad info wallpapers.
fix brave/brave-browser#14015
1 parent 2b3eaf9 commit 269833e

9 files changed

+206
-9
lines changed

components/brave_ads/test/BUILD.gn

+1
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ source_set("brave_ads_unit_tests") {
275275
"//brave/vendor/bat-native-ads/src/bat/ads/internal/user_activity/user_activity_tabs_util_unittest.cc",
276276
"//brave/vendor/bat-native-ads/src/bat/ads/internal/user_activity/user_activity_unittest.cc",
277277
"//brave/vendor/bat-native-ads/src/bat/ads/internal/user_activity/user_activity_util_unittest.cc",
278+
"//brave/vendor/bat-native-ads/src/bat/ads/new_tab_page_ad_info_unittest.cc",
278279
]
279280

280281
deps = [

vendor/bat-native-ads/include/bat/ads/new_tab_page_ad_info.h

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ struct ADS_EXPORT NewTabPageAdInfo final : AdInfo {
1919
NewTabPageAdInfo(const NewTabPageAdInfo& info);
2020
~NewTabPageAdInfo();
2121

22+
bool operator==(const NewTabPageAdInfo& rhs) const;
23+
2224
bool IsValid() const;
2325

2426
std::string ToJson() const;

vendor/bat-native-ads/include/bat/ads/new_tab_page_ad_wallpaper_focal_point_info.h

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ struct ADS_EXPORT NewTabPageAdWallpaperFocalPointInfo final {
1616
const NewTabPageAdWallpaperFocalPointInfo& info);
1717
~NewTabPageAdWallpaperFocalPointInfo();
1818

19+
bool operator==(const NewTabPageAdWallpaperFocalPointInfo& rhs) const;
20+
1921
int x;
2022
int y;
2123
};

vendor/bat-native-ads/include/bat/ads/new_tab_page_ad_wallpaper_info.h

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ struct ADS_EXPORT NewTabPageAdWallpaperInfo final {
1818
NewTabPageAdWallpaperInfo(const NewTabPageAdWallpaperInfo& info);
1919
~NewTabPageAdWallpaperInfo();
2020

21+
bool operator==(const NewTabPageAdWallpaperInfo& rhs) const;
22+
2123
std::string image_url;
2224
NewTabPageAdWallpaperFocalPointInfo focal_point;
2325
};

vendor/bat-native-ads/src/bat/ads/ad_info.cc

+7-5
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ AdInfo::AdInfo(const AdInfo& info) = default;
1414
AdInfo::~AdInfo() = default;
1515

1616
bool AdInfo::operator==(const AdInfo& rhs) const {
17-
return type == rhs.type && uuid == rhs.uuid &&
18-
creative_instance_id == rhs.creative_instance_id &&
19-
creative_set_id == rhs.creative_set_id &&
20-
campaign_id == rhs.campaign_id && advertiser_id == rhs.advertiser_id &&
21-
segment == rhs.segment && target_url == rhs.target_url;
17+
auto tie = [](const AdInfo& ad) {
18+
return std::tie(ad.type, ad.uuid, ad.creative_instance_id,
19+
ad.creative_set_id, ad.campaign_id, ad.advertiser_id,
20+
ad.segment, ad.target_url);
21+
};
22+
23+
return tie(*this) == tie(rhs);
2224
}
2325

2426
bool AdInfo::operator!=(const AdInfo& rhs) const {

vendor/bat-native-ads/src/bat/ads/new_tab_page_ad_info.cc

+63-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include "bat/ads/new_tab_page_ad_info.h"
77

8+
#include <tuple>
9+
810
#include "bat/ads/internal/json_helper.h"
911
#include "bat/ads/internal/logging.h"
1012

@@ -16,6 +18,18 @@ NewTabPageAdInfo::NewTabPageAdInfo(const NewTabPageAdInfo& info) = default;
1618

1719
NewTabPageAdInfo::~NewTabPageAdInfo() = default;
1820

21+
bool NewTabPageAdInfo::operator==(const NewTabPageAdInfo& rhs) const {
22+
if (!AdInfo::operator==(rhs)) {
23+
return false;
24+
}
25+
26+
auto tie = [](const NewTabPageAdInfo& ad) {
27+
return std::tie(ad.company_name, ad.image_url, ad.alt, ad.wallpapers);
28+
};
29+
30+
return tie(*this) == tie(rhs);
31+
}
32+
1933
bool NewTabPageAdInfo::IsValid() const {
2034
if (!AdInfo::IsValid()) {
2135
return false;
@@ -84,8 +98,37 @@ bool NewTabPageAdInfo::FromJson(const std::string& json) {
8498
alt = document["alt"].GetString();
8599
}
86100

87-
// TODO(https://github.com/brave/brave-browser/issues/14015): Read wallpapers
88-
// JSON
101+
wallpapers.clear();
102+
if (document.HasMember("wallpapers")) {
103+
for (const auto& wallpaper : document["wallpapers"].GetArray()) {
104+
NewTabPageAdWallpaperInfo wallpaper_info;
105+
auto iterator = wallpaper.FindMember("image_url");
106+
if (iterator == wallpaper.MemberEnd() || !iterator->value.IsString()) {
107+
continue;
108+
}
109+
wallpaper_info.image_url = iterator->value.GetString();
110+
111+
iterator = wallpaper.FindMember("focal_point");
112+
if (iterator == wallpaper.MemberEnd() || !iterator->value.IsObject()) {
113+
continue;
114+
}
115+
116+
auto focal_point = iterator->value.GetObject();
117+
iterator = focal_point.FindMember("x");
118+
if (iterator == focal_point.MemberEnd() || !iterator->value.IsInt()) {
119+
continue;
120+
}
121+
wallpaper_info.focal_point.x = iterator->value.GetInt();
122+
123+
iterator = focal_point.FindMember("y");
124+
if (iterator == focal_point.MemberEnd() || !iterator->value.IsInt()) {
125+
continue;
126+
}
127+
wallpaper_info.focal_point.y = iterator->value.GetInt();
128+
129+
wallpapers.push_back(wallpaper_info);
130+
}
131+
}
89132

90133
if (document.HasMember("target_url")) {
91134
target_url = document["target_url"].GetString();
@@ -128,8 +171,24 @@ void SaveToJson(JsonWriter* writer, const NewTabPageAdInfo& info) {
128171
writer->String("alt");
129172
writer->String(info.alt.c_str());
130173

131-
// TODO(https://github.com/brave/brave-browser/issues/14015): Write wallpapers
132-
// JSON
174+
writer->String("wallpapers");
175+
writer->StartArray();
176+
for (const NewTabPageAdWallpaperInfo& wallpaper_info : info.wallpapers) {
177+
writer->StartObject();
178+
writer->String("image_url");
179+
writer->String(wallpaper_info.image_url.c_str());
180+
{
181+
writer->String("focal_point");
182+
writer->StartObject();
183+
writer->String("x");
184+
writer->Int(wallpaper_info.focal_point.x);
185+
writer->String("y");
186+
writer->Int(wallpaper_info.focal_point.y);
187+
writer->EndObject();
188+
}
189+
writer->EndObject();
190+
}
191+
writer->EndArray();
133192

134193
writer->String("target_url");
135194
writer->String(info.target_url.c_str());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
2+
* This Source Code Form is subject to the terms of the Mozilla Public
3+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
4+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
5+
6+
#include "bat/ads/new_tab_page_ad_info.h"
7+
#include "bat/ads/internal/json_helper.h"
8+
#include "bat/ads/internal/unittest_base.h"
9+
#include "bat/ads/internal/unittest_time_util.h"
10+
11+
// npm run test -- brave_unit_tests --filter=BatAdsNewTabPageAdInfoTest*
12+
13+
namespace ads {
14+
15+
namespace {
16+
17+
constexpr char kSampleNewTabPageAdInfoJson[] = R"(
18+
{
19+
"type": "new_tab_page_ad",
20+
"uuid": "a337efac-34b8-4b85-8fb4-6bd97d33d16c",
21+
"creative_instance_id": "9ae0a1df-e249-4cb1-93b9-7a2e727d9dfd",
22+
"creative_set_id": "aea63f45-5295-498a-9b1b-dae1609b0cf7",
23+
"campaign_id": "2809e72c-0162-4a63-9751-f63ca1aa4571",
24+
"advertiser_id": "f8eb8aa5-e05b-462f-a249-57757765f00b",
25+
"segment": "test-test",
26+
"company_name": "test company",
27+
"image_url": "testing_image_logo",
28+
"alt": "testing alt",
29+
"wallpapers": [
30+
{
31+
"image_url": "testing_wallpaper1",
32+
"focal_point": {
33+
"x": 1,
34+
"y": 2
35+
}
36+
},
37+
{
38+
"image_url": "testing_wallpaper2",
39+
"focal_point": {
40+
"x": 3,
41+
"y": 4
42+
}
43+
}
44+
],
45+
"target_url": "https://brave.com"
46+
}
47+
)";
48+
49+
NewTabPageAdInfo GetSampleNewTabPageAdInfo() {
50+
NewTabPageAdInfo ad_info;
51+
ad_info.type = AdType::kNewTabPageAd;
52+
ad_info.uuid = "a337efac-34b8-4b85-8fb4-6bd97d33d16c";
53+
ad_info.creative_instance_id = "9ae0a1df-e249-4cb1-93b9-7a2e727d9dfd";
54+
ad_info.creative_set_id = "aea63f45-5295-498a-9b1b-dae1609b0cf7";
55+
ad_info.campaign_id = "2809e72c-0162-4a63-9751-f63ca1aa4571";
56+
ad_info.advertiser_id = "f8eb8aa5-e05b-462f-a249-57757765f00b";
57+
ad_info.segment = "test-test";
58+
ad_info.company_name = "test company";
59+
ad_info.image_url = "testing_image_logo";
60+
ad_info.alt = "testing alt";
61+
ad_info.target_url = "https://brave.com";
62+
63+
NewTabPageAdWallpaperInfo wallpaper_info;
64+
wallpaper_info.image_url = "testing_wallpaper1";
65+
wallpaper_info.focal_point.x = 1;
66+
wallpaper_info.focal_point.y = 2;
67+
ad_info.wallpapers.push_back(wallpaper_info);
68+
69+
wallpaper_info.image_url = "testing_wallpaper2";
70+
wallpaper_info.focal_point.x = 3;
71+
wallpaper_info.focal_point.y = 4;
72+
ad_info.wallpapers.push_back(wallpaper_info);
73+
74+
return ad_info;
75+
}
76+
77+
} // namespace
78+
79+
class BatAdsNewTabPageAdInfoTest : public UnitTestBase {
80+
protected:
81+
BatAdsNewTabPageAdInfoTest() {}
82+
83+
~BatAdsNewTabPageAdInfoTest() override {}
84+
};
85+
86+
TEST_F(BatAdsNewTabPageAdInfoTest, DeserializeNewTabPageAdInfo) {
87+
NewTabPageAdInfo ad_info;
88+
ASSERT_TRUE(ad_info.FromJson(kSampleNewTabPageAdInfoJson));
89+
90+
NewTabPageAdInfo expected_ad_info = GetSampleNewTabPageAdInfo();
91+
EXPECT_EQ(expected_ad_info, ad_info);
92+
}
93+
94+
TEST_F(BatAdsNewTabPageAdInfoTest, SerializeNewTabPageAdInfo) {
95+
NewTabPageAdInfo ad_info = GetSampleNewTabPageAdInfo();
96+
std::string json = ad_info.ToJson();
97+
98+
rapidjson::Document document;
99+
document.Parse(kSampleNewTabPageAdInfoJson);
100+
rapidjson::StringBuffer expected_buffer;
101+
JsonWriter writer(expected_buffer);
102+
document.Accept(writer);
103+
104+
EXPECT_EQ(expected_buffer.GetString(), json);
105+
}
106+
107+
} // namespace ads

vendor/bat-native-ads/src/bat/ads/new_tab_page_ad_wallpaper_focal_point_info.cc

+11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include "bat/ads/new_tab_page_ad_wallpaper_focal_point_info.h"
77

8+
#include <tuple>
9+
810
namespace ads {
911

1012
NewTabPageAdWallpaperFocalPointInfo::NewTabPageAdWallpaperFocalPointInfo() =
@@ -16,4 +18,13 @@ NewTabPageAdWallpaperFocalPointInfo::NewTabPageAdWallpaperFocalPointInfo(
1618
NewTabPageAdWallpaperFocalPointInfo::~NewTabPageAdWallpaperFocalPointInfo() =
1719
default;
1820

21+
bool NewTabPageAdWallpaperFocalPointInfo::operator==(
22+
const NewTabPageAdWallpaperFocalPointInfo& rhs) const {
23+
auto tie = [](const NewTabPageAdWallpaperFocalPointInfo& info) {
24+
return std::tie(info.x, info.y);
25+
};
26+
27+
return tie(*this) == tie(rhs);
28+
}
29+
1930
} // namespace ads

vendor/bat-native-ads/src/bat/ads/new_tab_page_ad_wallpaper_info.cc

+11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include "bat/ads/new_tab_page_ad_wallpaper_info.h"
77

8+
#include <tuple>
9+
810
namespace ads {
911

1012
NewTabPageAdWallpaperInfo::NewTabPageAdWallpaperInfo() = default;
@@ -14,4 +16,13 @@ NewTabPageAdWallpaperInfo::NewTabPageAdWallpaperInfo(
1416

1517
NewTabPageAdWallpaperInfo::~NewTabPageAdWallpaperInfo() = default;
1618

19+
bool NewTabPageAdWallpaperInfo::operator==(
20+
const NewTabPageAdWallpaperInfo& rhs) const {
21+
auto tie = [](const NewTabPageAdWallpaperInfo& info) {
22+
return std::tie(info.image_url, info.focal_point);
23+
};
24+
25+
return tie(*this) == tie(rhs);
26+
}
27+
1728
} // namespace ads

0 commit comments

Comments
 (0)