-
Notifications
You must be signed in to change notification settings - Fork 869
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3960 from /issues/6205
Fixes Ads History popup shows 2 entries for the same ad (even if only served once)
- Loading branch information
Showing
11 changed files
with
633 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
129 changes: 129 additions & 0 deletions
129
vendor/bat-native-ads/src/bat/ads/internal/filters/ad_history_confirmation_filter.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
/* Copyright (c) 2019 The Brave Authors. All rights reserved. | ||
* This Source Code Form is subject to the terms of the Mozilla Public | ||
* License, v. 2.0. If a copy of the MPL was not distributed with this file, | ||
* You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||
|
||
#include <algorithm> | ||
#include <memory> | ||
#include <string> | ||
|
||
#include "bat/ads/internal/filters/ad_history_confirmation_filter.h" | ||
#include "bat/ads/confirmation_type.h" | ||
#include "bat/ads/ad_history_detail.h" | ||
|
||
#include "bat/ads/ads_history.h" | ||
|
||
namespace ads { | ||
|
||
bool IsConfirmationTypeOfInterest( | ||
const ConfirmationType& confirmation_type) { | ||
bool is_of_interest = false; | ||
|
||
switch (confirmation_type.value()) { | ||
case ConfirmationType::Value::CLICK: | ||
case ConfirmationType::Value::VIEW: | ||
case ConfirmationType::Value::DISMISS: { | ||
is_of_interest = true; | ||
break; | ||
} | ||
case ConfirmationType::Value::UNKNOWN: | ||
case ConfirmationType::Value::LANDED: | ||
case ConfirmationType::Value::FLAG: | ||
case ConfirmationType::Value::UPVOTE: | ||
case ConfirmationType::Value::DOWNVOTE: { | ||
is_of_interest = false; | ||
break; | ||
} | ||
} | ||
return is_of_interest; | ||
} | ||
|
||
bool DoesConfirmationTypeATrumpB( | ||
const ConfirmationType& confirmation_type_a, | ||
const ConfirmationType& confirmation_type_b) { | ||
bool does_type_a_trump_type_b = false; | ||
|
||
switch (confirmation_type_a.value()) { | ||
case ConfirmationType::Value::CLICK: { | ||
switch (confirmation_type_b.value()) { | ||
case ConfirmationType::Value::CLICK: | ||
case ConfirmationType::Value::VIEW: | ||
case ConfirmationType::Value::DISMISS: { | ||
does_type_a_trump_type_b = true; | ||
break; | ||
} | ||
default: { | ||
break; | ||
} | ||
} | ||
break; | ||
} | ||
case ConfirmationType::Value::VIEW: { | ||
switch (confirmation_type_b.value()) { | ||
case ConfirmationType::Value::VIEW: | ||
case ConfirmationType::Value::DISMISS: { | ||
does_type_a_trump_type_b = true; | ||
break; | ||
} | ||
default: { | ||
break; | ||
} | ||
} | ||
break; | ||
} | ||
case ConfirmationType::Value::DISMISS: { | ||
switch (confirmation_type_b.value()) { | ||
case ConfirmationType::Value::DISMISS: { | ||
does_type_a_trump_type_b = true; | ||
break; | ||
} | ||
default: { | ||
break; | ||
} | ||
} | ||
break; | ||
} | ||
} | ||
|
||
return does_type_a_trump_type_b; | ||
} | ||
|
||
AdHistoryConfirmationFilter::~AdHistoryConfirmationFilter() = default; | ||
|
||
std::deque<AdHistoryDetail> AdHistoryConfirmationFilter::ApplyFilter( | ||
const std::deque<AdHistoryDetail>& ad_history_details) const { | ||
|
||
std::map<std::string, AdHistoryDetail> filtered_ad_history; | ||
|
||
for (const AdHistoryDetail& ad_history_detail : ad_history_details) { | ||
if (!IsConfirmationTypeOfInterest(ad_history_detail.ad_content.ad_action)) { | ||
continue; | ||
} | ||
if (filtered_ad_history.count(ad_history_detail.ad_content.uuid) != 0) { | ||
const AdHistoryDetail& check_ad_history_detail = | ||
filtered_ad_history[ad_history_detail.ad_content.uuid]; | ||
|
||
if (ad_history_detail.timestamp_in_seconds >= | ||
check_ad_history_detail.timestamp_in_seconds) { | ||
if (DoesConfirmationTypeATrumpB(ad_history_detail.ad_content.ad_action, | ||
check_ad_history_detail.ad_content.ad_action)) { | ||
filtered_ad_history[ad_history_detail.ad_content.uuid] = | ||
ad_history_detail; | ||
} | ||
} | ||
} else { | ||
filtered_ad_history[ad_history_detail.ad_content.uuid] = | ||
ad_history_detail; | ||
} | ||
} | ||
|
||
std::deque<AdHistoryDetail> filtered_ad_history_details; | ||
|
||
for (const auto& ad_history : filtered_ad_history) { | ||
filtered_ad_history_details.push_back(ad_history.second); | ||
} | ||
|
||
return filtered_ad_history_details; | ||
} | ||
|
||
} // namespace ads |
30 changes: 30 additions & 0 deletions
30
vendor/bat-native-ads/src/bat/ads/internal/filters/ad_history_confirmation_filter.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/* Copyright (c) 2019 The Brave Authors. All rights reserved. | ||
* This Source Code Form is subject to the terms of the Mozilla Public | ||
* License, v. 2.0. If a copy of the MPL was not distributed with this file, | ||
* You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||
|
||
#ifndef BAT_ADS_INTERNAL_AD_HISTORY_CONFIRMATION_FILTER_H_ | ||
#define BAT_ADS_INTERNAL_AD_HISTORY_CONFIRMATION_FILTER_H_ | ||
|
||
#include <deque> | ||
#include <map> | ||
#include <vector> | ||
|
||
#include "bat/ads/internal/filters/ad_history_filter.h" | ||
|
||
namespace ads { | ||
|
||
struct AdsHistory; | ||
|
||
class AdHistoryConfirmationFilter : public AdHistoryFilter { | ||
public : | ||
AdHistoryConfirmationFilter() = default; | ||
~AdHistoryConfirmationFilter() override; | ||
|
||
std::deque<AdHistoryDetail> ApplyFilter( | ||
const std::deque<AdHistoryDetail>& ad_history_details) const override; | ||
}; | ||
|
||
} // namespace ads | ||
|
||
#endif // BAT_ADS_INTERNAL_AD_HISTORY_CONFIRMATION_FILTER_H_ |
Oops, something went wrong.