Skip to content

Commit

Permalink
Implement Verifiable Advertiser Conversions for Brave Ads
Browse files Browse the repository at this point in the history
  • Loading branch information
Moritz Haller committed Mar 5, 2021
1 parent cc1b2f5 commit 0e2b4b1
Show file tree
Hide file tree
Showing 82 changed files with 2,175 additions and 269 deletions.
8 changes: 6 additions & 2 deletions components/brave_ads/browser/ads_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,15 @@ class AdsService : public KeyedService {

virtual void ChangeLocale(const std::string& locale) = 0;

virtual void OnPageLoaded(const SessionID& tab_id,
virtual void OnTextLoaded(const SessionID& tab_id,
const int32_t page_transition_type,
const bool has_user_gesture,
const std::vector<GURL>& redirect_chain,
const std::string& content) = 0;
const std::string& text) = 0;

virtual void OnHtmlLoaded(const SessionID& tab_id,
const std::vector<GURL>& redirect_chain,
const std::string& html) = 0;

virtual void OnMediaStart(const SessionID& tab_id) = 0;
virtual void OnMediaStop(const SessionID& tab_id) = 0;
Expand Down
23 changes: 19 additions & 4 deletions components/brave_ads/browser/ads_service_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -302,11 +302,11 @@ void AdsServiceImpl::ChangeLocale(const std::string& locale) {
bat_ads_->ChangeLocale(locale);
}

void AdsServiceImpl::OnPageLoaded(const SessionID& tab_id,
void AdsServiceImpl::OnTextLoaded(const SessionID& tab_id,
const int32_t page_transition_type,
const bool has_user_gesture,
const std::vector<GURL>& redirect_chain,
const std::string& content) {
const std::string& text) {
if (!connected()) {
return;
}
Expand All @@ -316,8 +316,23 @@ void AdsServiceImpl::OnPageLoaded(const SessionID& tab_id,
redirect_chain_as_strings.push_back(url.spec());
}

bat_ads_->OnPageLoaded(tab_id.id(), page_transition_type, has_user_gesture,
redirect_chain_as_strings, content);
bat_ads_->OnTextLoaded(tab_id.id(), page_transition_type, has_user_gesture,
redirect_chain_as_strings, text);
}

void AdsServiceImpl::OnHtmlLoaded(const SessionID& tab_id,
const std::vector<GURL>& redirect_chain,
const std::string& html) {
if (!connected()) {
return;
}

std::vector<std::string> redirect_chain_as_strings;
for (const auto& url : redirect_chain) {
redirect_chain_as_strings.push_back(url.spec());
}

bat_ads_->OnHtmlLoaded(tab_id.id(), redirect_chain_as_strings, html);
}

void AdsServiceImpl::OnMediaStart(const SessionID& tab_id) {
Expand Down
8 changes: 6 additions & 2 deletions components/brave_ads/browser/ads_service_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,15 @@ class AdsServiceImpl : public AdsService,

void ChangeLocale(const std::string& locale) override;

void OnPageLoaded(const SessionID& tab_id,
void OnTextLoaded(const SessionID& tab_id,
const int32_t page_transition_type,
const bool has_user_gesture,
const std::vector<GURL>& redirect_chain,
const std::string& content) override;
const std::string& text) override;

void OnHtmlLoaded(const SessionID& tab_id,
const std::vector<GURL>& redirect_chain,
const std::string& html) override;

void OnMediaStart(const SessionID& tab_id) override;
void OnMediaStop(const SessionID& tab_id) override;
Expand Down
31 changes: 22 additions & 9 deletions components/brave_ads/browser/ads_tab_helper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -80,21 +80,34 @@ void AdsTabHelper::RunIsolatedJavaScript(

dom_distiller::RunIsolatedJavaScript(
render_frame_host, "document.body.innerText",
base::BindOnce(&AdsTabHelper::OnJavaScriptResult,
base::BindOnce(&AdsTabHelper::OnJavaScriptContentResult,
weak_factory_.GetWeakPtr()));

dom_distiller::RunIsolatedJavaScript(
render_frame_host, "new XMLSerializer().serializeToString(document)",
base::BindOnce(&AdsTabHelper::OnJavaScriptHtmlResult,
weak_factory_.GetWeakPtr()));
}

void AdsTabHelper::OnJavaScriptResult(base::Value value) {
if (!IsAdsEnabled()) {
return;
}
void AdsTabHelper::OnJavaScriptContentResult(base::Value value) {
DCHECK(ads_service_ && ads_service_->IsEnabled());

DCHECK(value.is_string());
std::string text;
value.GetAsString(&text);

ads_service_->OnTextLoaded(tab_id_, page_transition_, has_user_gesture_,
redirect_chain_, text);
}

void AdsTabHelper::OnJavaScriptHtmlResult(base::Value value) {
DCHECK(ads_service_ && ads_service_->IsEnabled());

DCHECK(value.is_string());
std::string content;
value.GetAsString(&content);
std::string html;
value.GetAsString(&html);

ads_service_->OnPageLoaded(tab_id_, page_transition_, has_user_gesture_,
redirect_chain_, content);
ads_service_->OnHtmlLoaded(tab_id_, redirect_chain_, html);
}

void AdsTabHelper::DidFinishNavigation(
Expand Down
4 changes: 3 additions & 1 deletion components/brave_ads/browser/ads_tab_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ class AdsTabHelper : public content::WebContentsObserver,

void RunIsolatedJavaScript(content::RenderFrameHost* render_frame_host);

void OnJavaScriptResult(base::Value value);
void OnJavaScriptContentResult(base::Value value);

void OnJavaScriptHtmlResult(base::Value value);

// content::WebContentsObserver overrides
void DidFinishNavigation(
Expand Down
11 changes: 10 additions & 1 deletion components/brave_ads/test/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ source_set("brave_ads_unit_tests") {
"//brave/vendor/bat-native-ads/src/bat/ads/internal/ads_history/filters/ads_history_confirmation_filter_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/ads_history/filters/ads_history_date_range_filter_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/ads_history/sorts/ads_history_sort_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/base64_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/catalog/catalog_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/catalog/catalog_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/container_util_unittest.cc",
Expand Down Expand Up @@ -109,7 +110,8 @@ source_set("brave_ads_unit_tests") {
"//brave/vendor/bat-native-ads/src/bat/ads/internal/privacy/unblinded_tokens/unblinded_tokens_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/privacy/unblinded_tokens/unblinded_tokens_unittest_util.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/privacy/unblinded_tokens/unblinded_tokens_unittest_util.h",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/security/security_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/security/conversions/conversions_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/security/crypto_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/server/ads_serve_server_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/server/ads_server_util_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/server/confirmations_server_util_unittest.cc",
Expand All @@ -127,6 +129,12 @@ source_set("brave_ads_unit_tests") {
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/redeem_unblinded_token_delegate_mock.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/redeem_unblinded_token_delegate_mock.h",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/redeem_unblinded_token_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_build_channel_dto_user_data_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_conversion_dto_user_data_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_dto_user_data_builder_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_experiment_dto_user_data_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_locale_dto_user_data_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_platform_dto_user_data_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/refill_unblinded_tokens/get_signed_tokens_url_request_builder_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/refill_unblinded_tokens/refill_unblinded_tokens_delegate_mock.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/tokens/refill_unblinded_tokens/refill_unblinded_tokens_delegate_mock.h",
Expand Down Expand Up @@ -166,6 +174,7 @@ source_set("brave_ads_unit_tests") {
"//brave/vendor/bat-native-ads",
"//brave/vendor/bat-native-ledger",
"//brave/vendor/bat-native-rapidjson",
"//brave/vendor/bat-native-tweetnacl:tweetnacl",
"//brave/vendor/bat-native-usermodel",
"//chrome/browser:browser",
"//components/prefs:prefs",
Expand Down
14 changes: 10 additions & 4 deletions components/services/bat_ads/bat_ads_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,19 @@ void BatAdsImpl::OnAdsSubdivisionTargetingCodeHasChanged() {
ads_->OnAdsSubdivisionTargetingCodeHasChanged();
}

void BatAdsImpl::OnPageLoaded(const int32_t tab_id,
void BatAdsImpl::OnTextLoaded(const int32_t tab_id,
const int32_t page_transition_type,
const bool has_user_gesture,
const std::vector<std::string>& redirect_chain,
const std::string& content) {
ads_->OnPageLoaded(tab_id, page_transition_type, has_user_gesture,
redirect_chain, content);
const std::string& text) {
ads_->OnTextLoaded(tab_id, page_transition_type, has_user_gesture,
redirect_chain, text);
}

void BatAdsImpl::OnHtmlLoaded(const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& html) {
ads_->OnHtmlLoaded(tab_id, redirect_chain, html);
}

void BatAdsImpl::OnUnIdle(const int idle_time, const bool was_locked) {
Expand Down
8 changes: 6 additions & 2 deletions components/services/bat_ads/bat_ads_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,15 @@ class BatAdsImpl :

void OnAdsSubdivisionTargetingCodeHasChanged() override;

void OnPageLoaded(const int32_t tab_id,
void OnTextLoaded(const int32_t tab_id,
const int32_t page_transition_type,
const bool has_user_gesture,
const std::vector<std::string>& redirect_chain,
const std::string& content) override;
const std::string& text) override;

void OnHtmlLoaded(const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& html) override;

void OnUnIdle(const int idle_time, const bool was_locked) override;
void OnIdle() override;
Expand Down
3 changes: 2 additions & 1 deletion components/services/bat_ads/public/interfaces/bat_ads.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ interface BatAds {
Shutdown() => (int32 result);
ChangeLocale(string locale);
OnAdsSubdivisionTargetingCodeHasChanged();
OnPageLoaded(int32 tab_id, int32 page_transition_type, bool has_user_gesture, array<string> redirect_chain, string content);
OnHtmlLoaded(int32 tab_id, array<string> redirect_chain, string html);
OnTextLoaded(int32 tab_id, int32 page_transition_type, bool has_user_gesture, array<string> redirect_chain, string content);
OnUnIdle(int32 idle_time, bool was_locked);
OnIdle();
OnForeground();
Expand Down
28 changes: 26 additions & 2 deletions vendor/bat-native-ads/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,8 @@ source_set("ads") {
"src/bat/ads/internal/ads_impl.h",
"src/bat/ads/internal/backoff_timer.cc",
"src/bat/ads/internal/backoff_timer.h",
"src/bat/ads/internal/base64_util.cc",
"src/bat/ads/internal/base64_util.h",
"src/bat/ads/internal/bundle/bundle.cc",
"src/bat/ads/internal/bundle/bundle.h",
"src/bat/ads/internal/bundle/bundle_state.cc",
Expand Down Expand Up @@ -340,6 +342,8 @@ source_set("ads") {
"src/bat/ads/internal/conversions/sorts/conversions_sort.h",
"src/bat/ads/internal/conversions/sorts/conversions_sort_factory.cc",
"src/bat/ads/internal/conversions/sorts/conversions_sort_factory.h",
"src/bat/ads/internal/conversions/verifiable_conversion_info.cc",
"src/bat/ads/internal/conversions/verifiable_conversion_info.h",
"src/bat/ads/internal/database/database_initialize.cc",
"src/bat/ads/internal/database/database_initialize.h",
"src/bat/ads/internal/database/database_migration.cc",
Expand Down Expand Up @@ -511,8 +515,16 @@ source_set("ads") {
"src/bat/ads/internal/search_engine/search_provider_info.h",
"src/bat/ads/internal/search_engine/search_providers.cc",
"src/bat/ads/internal/search_engine/search_providers.h",
"src/bat/ads/internal/security/security_util.cc",
"src/bat/ads/internal/security/security_util.h",
"src/bat/ads/internal/security/confirmations/confirmations_util.cc",
"src/bat/ads/internal/security/confirmations/confirmations_util.h",
"src/bat/ads/internal/security/conversions/conversions_util.cc",
"src/bat/ads/internal/security/conversions/conversions_util.h",
"src/bat/ads/internal/security/conversions/verifiable_conversion_envelope_info.cc",
"src/bat/ads/internal/security/conversions/verifiable_conversion_envelope_info.h",
"src/bat/ads/internal/security/crypto_util.cc",
"src/bat/ads/internal/security/crypto_util.h",
"src/bat/ads/internal/security/key_pair_info.cc",
"src/bat/ads/internal/security/key_pair_info.h",
"src/bat/ads/internal/server/ads_serve_server_util.cc",
"src/bat/ads/internal/server/ads_serve_server_util.h",
"src/bat/ads/internal/server/ads_server_util.cc",
Expand Down Expand Up @@ -552,6 +564,18 @@ source_set("ads") {
"src/bat/ads/internal/tokens/redeem_unblinded_token/redeem_unblinded_token.cc",
"src/bat/ads/internal/tokens/redeem_unblinded_token/redeem_unblinded_token.h",
"src/bat/ads/internal/tokens/redeem_unblinded_token/redeem_unblinded_token_delegate.h",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_build_channel_dto_user_data.cc",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_build_channel_dto_user_data.h",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_conversion_dto_user_data.cc",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_conversion_dto_user_data.h",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_dto_user_data_builder.cc",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_dto_user_data_builder.h",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_experiment_dto_user_data.cc",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_experiment_dto_user_data.h",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_locale_dto_user_data.cc",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_locale_dto_user_data.h",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_platform_dto_user_data.cc",
"src/bat/ads/internal/tokens/redeem_unblinded_token/user_data/confirmation_platform_dto_user_data.h",
"src/bat/ads/internal/tokens/refill_unblinded_tokens/get_signed_tokens_url_request_builder.cc",
"src/bat/ads/internal/tokens/refill_unblinded_tokens/get_signed_tokens_url_request_builder.h",
"src/bat/ads/internal/tokens/refill_unblinded_tokens/refill_unblinded_tokens.cc",
Expand Down
3 changes: 3 additions & 0 deletions vendor/bat-native-ads/data/resources/catalog-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,9 @@
},
"observationWindow": {
"type": "number"
},
"conversionPublicKey": {
"type": "string"
}
}
}
Expand Down
11 changes: 8 additions & 3 deletions vendor/bat-native-ads/include/bat/ads/ads.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,18 @@ class ADS_EXPORT Ads {
// pages, otherwise should be set to |-1|. |has_user_gesture| returns true if
// the navigation was initiated by a user gesture, otherwise should be set to
// false. |redirect_chain| contains the chain of redirects, including
// client-side redirect and the current URL. |content| will contain the HTML
// client-side redirect and the current URL. |text| will contain the HTML
// page content
virtual void OnPageLoaded(const int32_t tab_id,
virtual void OnTextLoaded(const int32_t tab_id,
const int32_t page_transition_type,
const bool has_user_gesture,
const std::vector<std::string>& redirect_chain,
const std::string& content) = 0;
const std::string& text) = 0;

// Similar to |OnTextLoaded| but instead of inner text it keeps the html
virtual void OnHtmlLoaded(const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& html) = 0;

// Should be called when a user is no longer idle. |idle_time| returns the
// idle time in seconds. |was_locked| returns true if the screen is locked,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include "base/strings/stringprintf.h"
#include "base/values.h"
#include "bat/ads/internal/logging.h"
#include "bat/ads/internal/security/security_util.h"
#include "bat/ads/internal/security/crypto_util.h"
#include "bat/ads/internal/server/confirmations_server_util.h"

namespace ads {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ bool ConfirmationInfo::operator==(const ConfirmationInfo& rhs) const {
payment_token.encode_base64() == rhs.payment_token.encode_base64() &&
blinded_payment_token.encode_base64() ==
rhs.blinded_payment_token.encode_base64() &&
credential == rhs.credential && timestamp == rhs.timestamp &&
created == rhs.created;
credential == rhs.credential && user_data == rhs.user_data &&
timestamp == rhs.timestamp && created == rhs.created;
}

bool ConfirmationInfo::operator!=(const ConfirmationInfo& rhs) const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ struct ConfirmationInfo {
Token payment_token;
BlindedToken blinded_payment_token;
std::string credential;
std::string user_data;
int64_t timestamp = 0;
bool created = false;
};
Expand Down
Loading

0 comments on commit 0e2b4b1

Please sign in to comment.