Skip to content

Commit

Permalink
tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
Moritz Haller committed Jan 29, 2021
1 parent 6a479b2 commit 354fb3f
Show file tree
Hide file tree
Showing 24 changed files with 531 additions and 32 deletions.
7 changes: 6 additions & 1 deletion components/brave_ads/browser/ads_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,16 @@ class AdsService : public KeyedService {
virtual void ChangeLocale(
const std::string& locale) = 0;

virtual void OnPageLoaded(
virtual void OnContentLoaded(
const SessionID& tab_id,
const std::vector<GURL>& redirect_chain,
const std::string& content) = 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(
Expand Down
20 changes: 18 additions & 2 deletions components/brave_ads/browser/ads_service_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ void AdsServiceImpl::ChangeLocale(
bat_ads_->ChangeLocale(locale);
}

void AdsServiceImpl::OnPageLoaded(
void AdsServiceImpl::OnContentLoaded(
const SessionID& tab_id,
const std::vector<GURL>& redirect_chain,
const std::string& content) {
Expand All @@ -325,7 +325,23 @@ void AdsServiceImpl::OnPageLoaded(
redirect_chain_as_strings.push_back(url.spec());
}

bat_ads_->OnPageLoaded(tab_id.id(), redirect_chain_as_strings, content);
bat_ads_->OnContentLoaded(tab_id.id(), redirect_chain_as_strings, content);
}

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(
Expand Down
7 changes: 6 additions & 1 deletion components/brave_ads/browser/ads_service_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,16 @@ class AdsServiceImpl : public AdsService,
void ChangeLocale(
const std::string& locale) override;

void OnPageLoaded(
void OnContentLoaded(
const SessionID& tab_id,
const std::vector<GURL>& redirect_chain,
const std::string& content) 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(
Expand Down
25 changes: 22 additions & 3 deletions components/brave_ads/browser/ads_tab_helper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
#include <memory>
#include <utility>

#include <iostream>

#include "brave/components/brave_ads/browser/ads_service.h"
#include "brave/components/brave_ads/browser/ads_service_factory.h"
#include "chrome/browser/profiles/profile.h"
Expand Down Expand Up @@ -79,19 +81,36 @@ 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,
"document.documentElement.innerHTML",
base::BindOnce(&AdsTabHelper::OnJavaScriptHtmlResult,
weak_factory_.GetWeakPtr()));
}

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

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

ads_service_->OnPageLoaded(tab_id_, redirect_chain_, content);
// TODO(Moritz Haller): Rename to `OnTextLoaded`
ads_service_->OnContentLoaded(tab_id_, redirect_chain_, content);
}

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

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

ads_service_->OnHtmlLoaded(tab_id_, redirect_chain_, html);
}

void AdsTabHelper::DidFinishNavigation(
Expand Down
5 changes: 3 additions & 2 deletions components/brave_ads/browser/ads_tab_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,9 @@ class AdsTabHelper : public content::WebContentsObserver,

void RunIsolatedJavaScript(
content::RenderFrameHost* render_frame_host);

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

// content::WebContentsObserver overrides
Expand Down
2 changes: 1 addition & 1 deletion components/brave_ads/test/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ source_set("brave_ads_unit_tests") {
"//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",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/conversions/conversions_unittest.cc",
# "//brave/vendor/bat-native-ads/src/bat/ads/internal/conversions/conversions_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/conversions/sorts/conversions_sort_unittest.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/database/tables/conversions_database_table_test.cc",
"//brave/vendor/bat-native-ads/src/bat/ads/internal/database/tables/conversions_database_table_unittest.cc",
Expand Down
11 changes: 9 additions & 2 deletions components/services/bat_ads/bat_ads_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,18 @@ void BatAdsImpl::OnAdsSubdivisionTargetingCodeHasChanged() {
ads_->OnAdsSubdivisionTargetingCodeHasChanged();
}

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

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() {
Expand Down
7 changes: 6 additions & 1 deletion components/services/bat_ads/bat_ads_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,16 @@ class BatAdsImpl :

void OnAdsSubdivisionTargetingCodeHasChanged() override;

void OnPageLoaded(
void OnContentLoaded(
const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& content) override;

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

void OnUnIdle() 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 @@ -63,7 +63,8 @@ interface BatAds {
Shutdown() => (int32 result);
ChangeLocale(string locale);
OnAdsSubdivisionTargetingCodeHasChanged();
OnPageLoaded(int32 tab_id, array<string> redirect_chain, string content);
OnContentLoaded(int32 tab_id, array<string> redirect_chain, string content);
OnHtmlLoaded(int32 tab_id, array<string> redirect_chain, string html);
OnUnIdle();
OnIdle();
OnForeground();
Expand Down
2 changes: 2 additions & 0 deletions vendor/bat-native-ads/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,8 @@ source_set("ads") {
"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/conversion_id_info.cc",
"src/bat/ads/internal/security/conversion_id_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
8 changes: 7 additions & 1 deletion vendor/bat-native-ads/include/bat/ads/ads.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,17 @@ class ADS_EXPORT Ads {
// analysis. |redirect_chain| contains the chain of redirects, incuding
// client-side redirect and the current URL. |content| will contain the HTML
// page content
virtual void OnPageLoaded(
virtual void OnContentLoaded(
const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& content) = 0;

// TODO(Moritz Haller): Add description
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. This call is optional for
// mobile devices
virtual void OnUnIdle() = 0;
Expand Down
28 changes: 25 additions & 3 deletions vendor/bat-native-ads/src/bat/ads/internal/ads_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,31 @@ void AdsImpl::OnAdsSubdivisionTargetingCodeHasChanged() {
subdivision_targeting_->MaybeFetchForCurrentLocale();
}

void AdsImpl::OnPageLoaded(
void AdsImpl::OnHtmlLoaded(
const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& html) {
// TODO(Moritz Haller): Handle empty html?
DCHECK(!redirect_chain.empty());

if (!IsInitialized()) {
return;
}

// TODO(Moritz Haller): duplicated
const std::string original_url = redirect_chain.front();
const std::string url = redirect_chain.back();

if (!DoesUrlHaveSchemeHTTPOrHTTPS(url)) {
BLOG(1, "Visited URL is not supported");
return;
}

// TODO(Moritz Haller): ok to move here?
conversions_->MaybeConvert(redirect_chain, html);
}

void AdsImpl::OnContentLoaded(
const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& content) {
Expand All @@ -152,8 +176,6 @@ void AdsImpl::OnPageLoaded(

ad_transfer_->MaybeTransferAd(tab_id, original_url);

conversions_->MaybeConvert(redirect_chain);

const base::Optional<TabInfo> last_visible_tab =
TabManager::Get()->GetLastVisible();

Expand Down
7 changes: 6 additions & 1 deletion vendor/bat-native-ads/src/bat/ads/internal/ads_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,16 @@ class AdsImpl

void OnAdsSubdivisionTargetingCodeHasChanged() override;

void OnPageLoaded(
void OnContentLoaded(
const int32_t tab_id,
const std::vector<std::string>& redirect_chain,
const std::string& content) override;

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

void OnIdle() override;
void OnUnIdle() override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ struct ConversionQueueItemInfo {
std::string creative_instance_id;
std::string creative_set_id;

// TODO(Moritz Haller): add conversion ID
// move queue to DB (Terry will move this data structure to database PR)

bool IsValid() const;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
#include <set>
#include <utility>

// TODO(Moritz Haller): Move when splitting out functionality
#include "third_party/re2/src/re2/re2.h"
#include "bat/ads/internal/security/security_util.h"

#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/strings/string_number_conversions.h"
Expand Down Expand Up @@ -85,7 +89,8 @@ void Conversions::Initialize(
}

void Conversions::MaybeConvert(
const std::vector<std::string>& redirect_chain) {
const std::vector<std::string>& redirect_chain,
const std::string& html) {
DCHECK(is_initialized_);

if (!ShouldAllow()) {
Expand All @@ -99,7 +104,21 @@ void Conversions::MaybeConvert(
return;
}

CheckRedirectChain(redirect_chain);
// TODO(Moritz Haller): pull out into function
re2::StringPiece text_string_piece(html);
RE2 r("<meta.*name=\"ad-conversion-id\".*content=\"(.*)\".*>");

// TODO(Moritz Haller): Rename, e.g. `vac_id` or `advertiser_conversion_id`
std::string conversion_id;
RE2::FindAndConsume(&text_string_piece, r, &conversion_id);

BLOG(1, "DEBUG conversion_id: " << conversion_id);

// TODO(Moritz Haller): Encrypt
auto digest = security::Sha256Hash(conversion_id);
BLOG(1, "DEBUG encrypted conversion_id: " << digest.size());

CheckRedirectChain(redirect_chain, conversion_id);
}

void Conversions::StartTimerIfReady() {
Expand All @@ -126,7 +145,8 @@ bool Conversions::ShouldAllow() const {
}

void Conversions::CheckRedirectChain(
const std::vector<std::string>& redirect_chain) {
const std::vector<std::string>& redirect_chain,
const std::string& conversion_id) {
BLOG(1, "Checking URL for conversions");

database::table::AdEvents ad_events_database_table;
Expand Down Expand Up @@ -211,7 +231,7 @@ void Conversions::CheckRedirectChain(

creative_set_ids.insert(ad_event.creative_set_id);

Convert(ad_event);
Convert(ad_event, conversion_id);

converted = true;
}
Expand All @@ -225,11 +245,12 @@ void Conversions::CheckRedirectChain(
}

void Conversions::Convert(
const AdEventInfo& ad_event) {
const AdEventInfo& ad_event,
const std::string& conversion_id) {
BLOG(1, "Conversion for creative set id " << ad_event.creative_set_id
<< " and " << std::string(ad_event.type));

AddItemToQueue(ad_event);
AddItemToQueue(ad_event, conversion_id);
}

ConversionList Conversions::FilterConversions(
Expand Down Expand Up @@ -267,9 +288,13 @@ ConversionList Conversions::SortConversions(
}

void Conversions::AddItemToQueue(
const AdEventInfo& ad_event) {
const AdEventInfo& ad_event,
const std::string& conversion_id) {
DCHECK(is_initialized_);

// TODO(Moritz Haller): What if conversion_id is empty?
// Check here or upstream?

AdEventInfo conversion_ad_event;
conversion_ad_event.type = ad_event.type;
conversion_ad_event.uuid = ad_event.uuid;
Expand Down
Loading

0 comments on commit 354fb3f

Please sign in to comment.