Skip to content

Commit

Permalink
tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
Moritz Haller committed Aug 14, 2021
1 parent 90d6dce commit 6b43e15
Show file tree
Hide file tree
Showing 27 changed files with 1,253 additions and 14 deletions.
2 changes: 2 additions & 0 deletions components/brave_ads/test/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ source_set("brave_ads_unit_tests") {
"//brave/vendor/bat-native-ads/src/bat/ads/internal/database/tables/segments_database_table_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/eligible_ads/ad_notifications/eligible_ad_notifications_issue_17199_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/eligible_ads/ad_notifications/eligible_ad_notifications_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/eligible_ads/eligible_ads_features_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/eligible_ads/eligible_ads_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/eligible_ads/inline_content_ads/eligible_inline_content_ads_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/features/ad_rewards/ad_rewards_features_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/features/ad_serving/ad_serving_features_unittest.cc",
Expand Down
6 changes: 6 additions & 0 deletions vendor/bat-native-ads/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -430,8 +430,14 @@ source_set("ads") {
"src/bat/ads/internal/database/tables/geo_targets_database_table.h",
"src/bat/ads/internal/database/tables/segments_database_table.cc",
"src/bat/ads/internal/database/tables/segments_database_table.h",
"src/bat/ads/internal/eligible_ads/ad_features_info.cc",
"src/bat/ads/internal/eligible_ads/ad_features_info.h",
"src/bat/ads/internal/eligible_ads/ad_notifications/eligible_ad_notifications.cc",
"src/bat/ads/internal/eligible_ads/ad_notifications/eligible_ad_notifications.h",
"src/bat/ads/internal/eligible_ads/eligible_ads_features.cc",
"src/bat/ads/internal/eligible_ads/eligible_ads_features.h",
"src/bat/ads/internal/eligible_ads/eligible_ads_util.cc",
"src/bat/ads/internal/eligible_ads/eligible_ads_util.h",
"src/bat/ads/internal/eligible_ads/inline_content_ads/eligible_inline_content_ads.cc",
"src/bat/ads/internal/eligible_ads/inline_content_ads/eligible_inline_content_ads.h",
"src/bat/ads/internal/eligible_ads/round_robin_ads.h",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@
#include "bat/ads/internal/bundle/creative_ad_notification_info.h"
#include "bat/ads/internal/client/client.h"
#include "bat/ads/internal/eligible_ads/ad_notifications/eligible_ad_notifications.h"
#include "bat/ads/internal/features/ad_serving/ad_serving_features.h"
#include "bat/ads/internal/logging.h"
#include "bat/ads/internal/p2a/p2a_ad_opportunities/p2a_ad_opportunity.h"
#include "bat/ads/internal/platform/platform_helper.h"
#include "bat/ads/internal/resources/frequency_capping/anti_targeting_resource.h"
#include "bat/ads/internal/settings/settings.h"
#include "bat/ads/internal/time_formatting_util.h"
#include "third_party/abseil-cpp/absl/types/optional.h"

namespace ads {
namespace ad_notifications {
Expand Down Expand Up @@ -106,9 +108,21 @@ void AdServing::MaybeServeAd() {
return;
}

const SegmentList segments = ad_targeting_->GetSegments();
int ad_serving_version = features::GetAdServingVersion();
BLOG(1, "Ad serving version " << ad_serving_version);
if (ad_serving_version == 2) {
MaybeServeAdV2();
return;
}

MaybeServeAdV1();
}

void AdServing::MaybeServeAdV1() {
DCHECK(eligible_ads_);

const SegmentList segments = ad_targeting_->GetSegments();

eligible_ads_->GetForSegments(
segments,
[=](const bool was_allowed, const CreativeAdNotificationList& ads) {
Expand Down Expand Up @@ -139,6 +153,36 @@ void AdServing::MaybeServeAd() {
});
}

void AdServing::MaybeServeAdV2() {
const SegmentList interest_segments = ad_targeting_->GetInterestSegments();
const SegmentList intent_segments = ad_targeting_->GetIntentSegments();

eligible_ads_->GetForFeatures(
interest_segments, intent_segments,
[=](const bool was_allowed,
absl::optional<CreativeAdNotificationInfo> ad) {
if (was_allowed) {
p2a::RecordAdOpportunityForSegments(AdType::kAdNotification,
interest_segments);
}

if (!ad) {
BLOG(1, "Ad notification not served: No eligible ads found");
FailedToServeAd();
return;
}

if (!ServeAd(ad.value())) {
BLOG(1, "Failed to serve ad notification");
FailedToServeAd();
return;
}

BLOG(1, "Served ad notification");
ServedAd(ad.value());
});
}

void AdServing::OnAdsPerHourChanged() {
const int64_t ads_per_hour = settings::GetAdsPerHour();
BLOG(1, "Maximum ads per hour changed to " << ads_per_hour);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ class AdServing {
void StopServingAdsAtRegularIntervals();

void MaybeServeAd();
void MaybeServeAdV1();
void MaybeServeAdV2();

void OnAdsPerHourChanged();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@

#include "bat/ads/internal/ad_serving/ad_notifications/ad_notification_serving.h"

#include <map>
#include <string>

#include "base/guid.h"
#include "base/test/scoped_feature_list.h"
#include "bat/ads/internal/ad_serving/ad_targeting/geographic/subdivision/subdivision_targeting.h"
#include "bat/ads/internal/ad_targeting/ad_targeting.h"
#include "bat/ads/internal/database/tables/creative_ad_notifications_database_table.h"
#include "bat/ads/internal/features/ad_serving/ad_serving_features.h"
#include "bat/ads/internal/resources/frequency_capping/anti_targeting_resource.h"
#include "bat/ads/internal/unittest_base.h"
#include "bat/ads/internal/unittest_util.h"
Expand Down Expand Up @@ -172,4 +175,39 @@ TEST_F(BatAdsAdNotificationServingTest,
// Assert
}

TEST_F(BatAdsAdNotificationServingTest, ServeAdWithAdServingVersion2) {
// Arrange
RecordUserActivityEvents();

CreativeAdNotificationList creative_ad_notifications;
CreativeAdNotificationInfo creative_ad_notification =
GetCreativeAdNotification();
creative_ad_notifications.push_back(creative_ad_notification);
Save(creative_ad_notifications);

AdTargeting ad_targeting;
ad_targeting::geographic::SubdivisionTargeting subdivision_targeting;
resource::AntiTargeting anti_targeting_resource;
ad_notifications::AdServing ad_serving(&ad_targeting, &subdivision_targeting,
&anti_targeting_resource);

const char kAdServingVersion[] = "ad_serving_version";
std::map<std::string, std::string> kAdServingParameters;
kAdServingParameters[kAdServingVersion] = 2;

base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitWithFeaturesAndParameters(
{{features::kAdServing, kAdServingParameters}}, {});

// Act
EXPECT_CALL(*ads_client_mock_,
ShowNotification(DoesMatchCreativeInstanceId(
creative_ad_notification.creative_instance_id)))
.Times(1);

ServeAd();

// Assert
}

} // namespace ads
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
#include "bat/ads/internal/bundle/creative_inline_content_ad_info.h"
#include "bat/ads/internal/eligible_ads/inline_content_ads/eligible_inline_content_ads.h"
#include "bat/ads/internal/features/inline_content_ads/inline_content_ads_features.h"
#include "bat/ads/internal/features/ad_serving/ad_serving_features.h"
#include "bat/ads/internal/logging.h"
#include "bat/ads/internal/p2a/p2a_ad_opportunities/p2a_ad_opportunity.h"
#include "bat/ads/internal/resources/frequency_capping/anti_targeting_resource.h"
#include "third_party/abseil-cpp/absl/types/optional.h"

namespace ads {
namespace inline_content_ads {
Expand Down Expand Up @@ -50,16 +52,31 @@ void AdServing::RemoveObserver(InlineContentAdServingObserver* observer) {

void AdServing::MaybeServeAd(const std::string& dimensions,
GetInlineContentAdCallback callback) {
const SegmentList segments = ad_targeting_->GetSegments();

InlineContentAdInfo inline_content_ad;

if (!features::inline_content_ads::IsEnabled()) {
callback(/* success */ false, dimensions, inline_content_ad);
return;
}

int ad_serving_version = features::GetAdServingVersion();
BLOG(1, "Ad serving version " << ad_serving_version);
if (ad_serving_version == 2) {
MaybeServeAdV2(dimensions, callback);
return;
}

MaybeServeAdV1(dimensions, callback);
}

void AdServing::MaybeServeAdV1(const std::string& dimensions,
GetInlineContentAdCallback callback) {
DCHECK(eligible_ads_);

InlineContentAdInfo inline_content_ad;

const SegmentList segments = ad_targeting_->GetSegments();

eligible_ads_->GetForSegments(
segments, dimensions,
[=](const bool was_allowed, const CreativeInlineContentAdList& ads) {
Expand Down Expand Up @@ -103,6 +120,53 @@ void AdServing::MaybeServeAd(const std::string& dimensions,
});
}

void AdServing::MaybeServeAdV2(const std::string& dimensions,
GetInlineContentAdCallback callback) {
InlineContentAdInfo inline_content_ad;

const SegmentList interest_segments = ad_targeting_->GetInterestSegments();
const SegmentList intent_segments = ad_targeting_->GetIntentSegments();

eligible_ads_->GetForFeatures(
interest_segments, intent_segments, dimensions,
[=](const bool was_allowed,
absl::optional<CreativeInlineContentAdInfo> ad) {
if (!ad) {
BLOG(1, "Inline content ad not served: No eligible ads found");
NotifyFailedToServeInlineContentAd();
callback(/* success */ false, dimensions, inline_content_ad);
return;
}

eligible_ads_->SetLastServedAd(ad.value());

InlineContentAdInfo inline_content_ad =
BuildInlineContentAd(ad.value());

BLOG(1, "Serving inline content ad:\n"
<< " uuid: " << inline_content_ad.uuid << "\n"
<< " creativeInstanceId: "
<< inline_content_ad.creative_instance_id << "\n"
<< " creativeSetId: " << inline_content_ad.creative_set_id
<< "\n"
<< " campaignId: " << inline_content_ad.campaign_id << "\n"
<< " advertiserId: " << inline_content_ad.advertiser_id
<< "\n"
<< " segment: " << inline_content_ad.segment << "\n"
<< " title: " << inline_content_ad.title << "\n"
<< " description: " << inline_content_ad.description
<< "\n"
<< " imageUrl: " << inline_content_ad.image_url << "\n"
<< " dimensions: " << inline_content_ad.dimensions << "\n"
<< " ctaText: " << inline_content_ad.cta_text << "\n"
<< " targetUrl: " << inline_content_ad.target_url);

NotifyDidServeInlineContentAd(inline_content_ad);

callback(/* success */ true, dimensions, inline_content_ad);
});
}

///////////////////////////////////////////////////////////////////////////////

void AdServing::NotifyDidServeInlineContentAd(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ class AdServing {

void MaybeServeAd(const std::string& dimensions,
GetInlineContentAdCallback callback);
void MaybeServeAdV1(const std::string& dimensions,
GetInlineContentAdCallback callback);
void MaybeServeAdV2(const std::string& dimensions,
GetInlineContentAdCallback callback);

private:
AdTargeting* ad_targeting_; // NOT OWNED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,32 @@ SegmentList AdTargeting::GetSegments() const {
return segments;
}

SegmentList AdTargeting::GetInterestSegments() const {
SegmentList segments;

if (features::IsTextClassificationEnabled()) {
const ad_targeting::model::TextClassification text_classification_model;
const SegmentList text_classification_segments =
text_classification_model.GetSegments();
segments.insert(segments.end(), text_classification_segments.begin(),
text_classification_segments.end());
}

return segments;
}

SegmentList AdTargeting::GetIntentSegments() const {
SegmentList segments;

if (features::IsPurchaseIntentEnabled()) {
const ad_targeting::model::PurchaseIntent purchase_intent_model;
const SegmentList purchase_intent_segments =
purchase_intent_model.GetSegments();
segments.insert(segments.end(), purchase_intent_segments.begin(),
purchase_intent_segments.end());
}

return segments;
}

} // namespace ads
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ class AdTargeting {
~AdTargeting();

SegmentList GetSegments() const;

SegmentList GetInterestSegments() const;

SegmentList GetIntentSegments() const;
};

} // namespace ads
Expand Down
Loading

0 comments on commit 6b43e15

Please sign in to comment.