Skip to content

Commit

Permalink
[ads] Suppress RichNTT if brave://settings/content/javascript is disa…
Browse files Browse the repository at this point in the history
…bled
  • Loading branch information
tmancey committed Feb 24, 2025
1 parent b54f97e commit 5bc6b3e
Show file tree
Hide file tree
Showing 12 changed files with 109 additions and 41 deletions.
4 changes: 2 additions & 2 deletions browser/ntp_background/ntp_p3a_helper_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,12 @@ NTPP3AHelperImpl::NTPP3AHelperImpl(
if (ntp_background_images_service) {
if (const auto* sr_data =
ntp_background_images_service->GetBrandedImagesData(
/*super_referral=*/true)) {
/*super_referral=*/true, /*supports_rich_media=*/true)) {
CheckLoadedCampaigns(*sr_data);
}
if (const auto* si_data =
ntp_background_images_service->GetBrandedImagesData(
/*super_referral=*/false)) {
/*super_referral=*/false, /*supports_rich_media=*/true)) {
CheckLoadedCampaigns(*si_data);
}
ntp_background_images_service_observation_.Observe(
Expand Down
6 changes: 3 additions & 3 deletions browser/ntp_background/view_counter_service_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,9 @@ ViewCounterServiceFactory::BuildServiceInstanceForBrowserContext(
browser_context, std::make_unique<NTPBackgroundImagesSource>(service));
content::URLDataSource::Add(
browser_context, std::make_unique<NTPSponsoredImageSource>(service));
content::URLDataSource::Add(
browser_context,
std::make_unique<NTPSponsoredRichMediaSource>(service));
content::URLDataSource::Add(browser_context,
std::make_unique<NTPSponsoredRichMediaSource>(
service, profile->GetPrefs()));

std::unique_ptr<NTPP3AHelperImpl> ntp_p3a_helper;
if (g_brave_browser_process->p3a_service() != nullptr) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <optional>
#include <utility>

#include "base/check.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/files/file_path.h"
Expand Down Expand Up @@ -469,7 +470,8 @@ NTPBackgroundImagesData* NTPBackgroundImagesService::GetBackgroundImagesData()
}

NTPSponsoredImagesData* NTPBackgroundImagesService::GetBrandedImagesData(
bool super_referral) const {
bool super_referral,
bool supports_rich_media) const {
const bool is_super_referrals_enabled =
base::FeatureList::IsEnabled(features::kBraveNTPSuperReferralWallpaper);
if (is_super_referrals_enabled) {
Expand All @@ -494,11 +496,14 @@ NTPSponsoredImagesData* NTPBackgroundImagesService::GetBrandedImagesData(
return nullptr;
}

if (sponsored_images_data_ && sponsored_images_data_->IsValid()) {
return sponsored_images_data_.get();
NTPSponsoredImagesData* const sponsored_images_data =
supports_rich_media ? sponsored_images_data_.get()
: sponsored_images_data_excluding_rich_media_.get();
if (!sponsored_images_data || !sponsored_images_data->IsValid()) {
return nullptr;
}

return nullptr;
return sponsored_images_data;
}

void NTPBackgroundImagesService::OnComponentReady(
Expand Down Expand Up @@ -572,6 +577,23 @@ void NTPBackgroundImagesService::OnGetSponsoredComponentJsonData(
} else {
sponsored_images_data_ = std::make_unique<NTPSponsoredImagesData>(
data, sponsored_images_installed_dir_);
sponsored_images_data_excluding_rich_media_ =
std::make_unique<NTPSponsoredImagesData>(
data, sponsored_images_installed_dir_);
for (auto& campaign :
sponsored_images_data_excluding_rich_media_->campaigns) {
std::erase_if(campaign.creatives, [](const auto& creative) {
return creative.wallpaper_type == WallpaperType::kRichMedia;
});
}
std::erase_if(
sponsored_images_data_excluding_rich_media_->campaigns,
[](const auto& campaign) { return campaign.creatives.empty(); });
if (!sponsored_images_data_excluding_rich_media_) {
sponsored_images_data_excluding_rich_media_ =
std::make_unique<NTPSponsoredImagesData>();
}

for (auto& observer : observers_) {
observer.OnSponsoredContentDidUpdate(data);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ class NTPBackgroundImagesService {
bool HasObserver(Observer* observer);

NTPBackgroundImagesData* GetBackgroundImagesData() const;
NTPSponsoredImagesData* GetBrandedImagesData(bool super_referral) const;
NTPSponsoredImagesData* GetBrandedImagesData(bool super_referral,
bool supports_rich_media) const;

bool test_data_used() const { return test_data_used_; }

Expand Down Expand Up @@ -195,6 +196,8 @@ class NTPBackgroundImagesService {
std::optional<std::string> sponsored_images_component_id_;
base::FilePath sponsored_images_installed_dir_;
std::unique_ptr<NTPSponsoredImagesData> sponsored_images_data_;
std::unique_ptr<NTPSponsoredImagesData>
sponsored_images_data_excluding_rich_media_;

base::FilePath super_referrals_installed_dir_;
std::unique_ptr<NTPSponsoredImagesData> super_referrals_images_data_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,8 @@ TEST_F(NTPBackgroundImagesServiceTest, DISABLED_InternalDataTest) {
// Check with json file w/o schema version with empty object.
service_->sponsored_images_data_.reset();
service_->OnGetSponsoredComponentJsonData(/*is_super_referral=*/false, "{}");
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
service_->background_images_data_.reset();
service_->OnGetComponentJsonData("{}");
EXPECT_FALSE(service_->GetBackgroundImagesData());
Expand All @@ -469,7 +470,8 @@ TEST_F(NTPBackgroundImagesServiceTest, DISABLED_InternalDataTest) {
observer_.on_sponsored_images_updated = false;
service_->OnGetSponsoredComponentJsonData(/*is_super_referral=*/false,
kTestEmptyComponent);
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
EXPECT_TRUE(observer_.on_sponsored_images_updated);
EXPECT_THAT(observer_.sponsored_images_data->campaigns, ::testing::IsEmpty());
observer_.background_images_data = nullptr;
Expand All @@ -490,7 +492,8 @@ TEST_F(NTPBackgroundImagesServiceTest, DISABLED_InternalDataTest) {
// Mark this is not SR to get SI data.
service_->MarkThisInstallIsNotSuperReferralForever();
NTPSponsoredImagesData* const images_data =
service_->GetBrandedImagesData(/*super_referral=*/false);
service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true);
EXPECT_TRUE(images_data);
EXPECT_TRUE(images_data->IsValid());
EXPECT_FALSE(images_data->IsSuperReferral());
Expand Down Expand Up @@ -600,7 +603,8 @@ TEST_F(NTPBackgroundImagesServiceTest, DISABLED_InternalDataTest) {
observer_.on_sponsored_images_updated = false;
service_->OnGetSponsoredComponentJsonData(/*is_super_referral=*/false,
test_json_string_higher_schema);
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));

constexpr char kTestBackgroundJsonStringHigherSchema[] = R"(
{
Expand Down Expand Up @@ -638,7 +642,8 @@ TEST_F(NTPBackgroundImagesServiceTest, MultipleCampaignsTest) {
// Mark this is not SR to get SI data.
service_->MarkThisInstallIsNotSuperReferralForever();
const NTPSponsoredImagesData* const images_data =
service_->GetBrandedImagesData(/*super_referral=*/false);
service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true);
EXPECT_TRUE(images_data);
EXPECT_TRUE(images_data->IsValid());
EXPECT_FALSE(images_data->IsSuperReferral());
Expand Down Expand Up @@ -677,7 +682,8 @@ TEST_F(NTPBackgroundImagesServiceTest,
// Mark this is not SR to get SI data.
service_->MarkThisInstallIsNotSuperReferralForever();

EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
EXPECT_TRUE(observer_.on_sponsored_images_updated);
EXPECT_THAT(observer_.sponsored_images_data->campaigns, ::testing::IsEmpty());
EXPECT_THAT(service_->sponsored_images_data_->campaigns,
Expand All @@ -699,7 +705,8 @@ TEST_F(NTPBackgroundImagesServiceTest,
// Mark this is not SR to get SI data.
service_->MarkThisInstallIsNotSuperReferralForever();

EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
EXPECT_TRUE(observer_.on_sponsored_images_updated);
EXPECT_THAT(observer_.sponsored_images_data->campaigns, ::testing::IsEmpty());
EXPECT_THAT(service_->sponsored_images_data_->campaigns,
Expand All @@ -723,7 +730,8 @@ TEST_F(
// Mark this is not SR to get SI data.
service_->MarkThisInstallIsNotSuperReferralForever();

EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
EXPECT_TRUE(observer_.on_sponsored_images_updated);
EXPECT_THAT(observer_.sponsored_images_data->campaigns, ::testing::IsEmpty());
EXPECT_THAT(service_->sponsored_images_data_->campaigns,
Expand All @@ -747,7 +755,8 @@ TEST_F(
// Mark this is not SR to get SI data.
service_->MarkThisInstallIsNotSuperReferralForever();

EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
EXPECT_TRUE(observer_.on_sponsored_images_updated);
EXPECT_THAT(observer_.sponsored_images_data->campaigns, ::testing::IsEmpty());
EXPECT_THAT(service_->sponsored_images_data_->campaigns,
Expand All @@ -768,7 +777,8 @@ TEST_F(NTPBackgroundImagesServiceTest, SponsoredImageWithMissingImageUrlTest) {
// Mark this is not SR to get SI data.
service_->MarkThisInstallIsNotSuperReferralForever();

EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
EXPECT_TRUE(observer_.on_sponsored_images_updated);
EXPECT_THAT(observer_.sponsored_images_data->campaigns, ::testing::IsEmpty());
EXPECT_THAT(service_->sponsored_images_data_->campaigns,
Expand Down Expand Up @@ -873,7 +883,8 @@ TEST_F(NTPBackgroundImagesServiceTest, BasicSuperReferralTest) {
service_->OnGetSponsoredComponentJsonData(/*is_super_referral=*/true,
kTestSuperReferral);
const NTPSponsoredImagesData* const images_data =
service_->GetBrandedImagesData(/*super_referral=*/true);
service_->GetBrandedImagesData(/*super_referral=*/true,
/*supports_rich_media=*/true);
EXPECT_TRUE(images_data);
EXPECT_THAT(images_data->campaigns[0].creatives, ::testing::SizeIs(1));
EXPECT_THAT(images_data->top_sites, ::testing::SizeIs(3));
Expand Down Expand Up @@ -943,7 +954,8 @@ TEST_F(NTPBackgroundImagesServiceTest, WithNonSuperReferralCodeTest) {
kTestSponsoredImages);
// NTP SI data is ready but don't give data until NTP SR initialization is
// complete. Only gives NTP SI data when browser confirms this is not NTP SR.
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));

observer_.on_super_referral_ended = false;
service_->OnGetMappingTableData(kTestMappingTable);
Expand Down Expand Up @@ -1000,7 +1012,8 @@ TEST_F(NTPBackgroundImagesServiceTest, WithSuperReferralCodeTest) {
EXPECT_FALSE(pref_service_.GetBoolean(
prefs::kNewTabPageGetInitialSuperReferralComponentInProgress));
const NTPSponsoredImagesData* const data =
service_->GetBrandedImagesData(/*super_referral=*/true);
service_->GetBrandedImagesData(/*super_referral=*/true,
/*supports_rich_media=*/true);
EXPECT_TRUE(service_->IsValidSuperReferralComponentInfo(pref_service_.GetDict(
prefs::kNewTabPageCachedSuperReferralComponentInfo)));
EXPECT_TRUE(data->IsSuperReferral());
Expand Down Expand Up @@ -1029,19 +1042,23 @@ TEST_F(NTPBackgroundImagesServiceTest, CheckReferralServiceInitStatusTest) {
Init();

// Initially, data is not available.
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/true));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/true,
/*supports_rich_media=*/true));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));

// Simulate SI data is initialized first before referral service is
// initialized.
// Check SI data is not available before referrals service is initialized.
service_->OnGetSponsoredComponentJsonData(/*is_super_referral=*/false,
kTestSponsoredImages);
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_FALSE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));

// Simulate that this install is not SR. Then, SI data is returned properly.
service_->MarkThisInstallIsNotSuperReferralForever();
EXPECT_TRUE(service_->GetBrandedImagesData(/*super_referral=*/false));
EXPECT_TRUE(service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true));
}

TEST_F(NTPBackgroundImagesServiceTest,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ base::FilePath NTPSponsoredImageSource::GetLocalFilePathFor(
const std::string& path) {
const bool is_super_referral_path = IsSuperReferralPath(path);
const NTPSponsoredImagesData* const images_data =
service_->GetBrandedImagesData(is_super_referral_path);
service_->GetBrandedImagesData(is_super_referral_path,
/*supports_rich_media=*/false);
CHECK(images_data);

const base::FilePath basename_from_path =
Expand Down Expand Up @@ -148,7 +149,8 @@ base::FilePath NTPSponsoredImageSource::GetLocalFilePathFor(
bool NTPSponsoredImageSource::IsValidPath(const std::string& path) const {
const bool is_super_referral_path = IsSuperReferralPath(path);
const NTPSponsoredImagesData* const images_data =
service_->GetBrandedImagesData(is_super_referral_path);
service_->GetBrandedImagesData(is_super_referral_path,
/*supports_rich_media=*/false);
if (!images_data) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,11 @@ std::optional<std::string> ReadFileToString(const base::FilePath& path) {
} // namespace

NTPSponsoredRichMediaSource::NTPSponsoredRichMediaSource(
NTPBackgroundImagesService* service)
: service_(service), weak_factory_(this) {}
NTPBackgroundImagesService* service,
const PrefService* pref_service)
: service_(service), pref_service_(pref_service), weak_factory_(this) {
CHECK(pref_service_);
}

NTPSponsoredRichMediaSource::~NTPSponsoredRichMediaSource() = default;

Expand All @@ -57,7 +60,8 @@ void NTPSponsoredRichMediaSource::StartDataRequest(
}

const NTPSponsoredImagesData* const images_data =
service_->GetBrandedImagesData(/*super_referral=*/false);
service_->GetBrandedImagesData(/*super_referral=*/false,
/*supports_rich_media=*/true);
if (!images_data) {
return DenyAccess(std::move(callback));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <string>

#include "base/memory/weak_ptr.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/url_data_source.h"

class GURL;
Expand All @@ -23,7 +24,8 @@ class NTPBackgroundImagesService;

class NTPSponsoredRichMediaSource : public content::URLDataSource {
public:
explicit NTPSponsoredRichMediaSource(NTPBackgroundImagesService* service);
explicit NTPSponsoredRichMediaSource(NTPBackgroundImagesService* service,
const PrefService* pref_service);

NTPSponsoredRichMediaSource(const NTPSponsoredRichMediaSource&) = delete;
NTPSponsoredRichMediaSource& operator=(const NTPSponsoredRichMediaSource&) =
Expand All @@ -49,6 +51,8 @@ class NTPSponsoredRichMediaSource : public content::URLDataSource {

const raw_ptr<NTPBackgroundImagesService> service_; // not owned.

const raw_ptr<const PrefService> pref_service_; // not owned.

base::WeakPtrFactory<NTPSponsoredRichMediaSource> weak_factory_;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class NTPSponsoredRichMediaSourceTest : public testing::Test {
background_images_service_ = std::make_unique<NTPBackgroundImagesService>(
/*component_update_service=*/nullptr, &pref_service_);
url_data_source_ = std::make_unique<NTPSponsoredRichMediaSource>(
background_images_service_.get());
background_images_service_.get(), &pref_service_);
}

void SetupSponsoredComponent() {
Expand Down
22 changes: 17 additions & 5 deletions components/ntp_background_images/browser/view_counter_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,10 @@ ViewCounterService::ViewCounterService(
prefs::kNewTabPageShowBackgroundImage,
base::BindRepeating(&ViewCounterService::OnPreferenceChanged,
base::Unretained(this)));
pref_change_registrar_.Add(
"profile.default_content_setting_values.javascript",
base::BindRepeating(&ViewCounterService::OnPreferenceChanged,
base::Unretained(this)));

OnBackgroundImagesDataDidUpdate(GetCurrentWallpaperData());
OnSponsoredImagesDataDidUpdate(GetCurrentBrandedWallpaperData());
Expand Down Expand Up @@ -165,14 +169,22 @@ NTPBackgroundImagesData* ViewCounterService::GetCurrentWallpaperData() const {

NTPSponsoredImagesData* ViewCounterService::GetCurrentBrandedWallpaperData()
const {
NTPSponsoredImagesData* const images_data =
background_images_service_->GetBrandedImagesData(/*super_referral=*/true);
if (images_data && IsSuperReferralWallpaperOptedIn()) {
return images_data;
const bool supports_rich_media =
prefs_->GetInteger("profile.default_content_setting_values.javascript") !=
2;

LOG(ERROR) << "FOOBAR.GetCurrentBrandedWallpaperData.supports_rich_media: "
<< supports_rich_media;

NTPSponsoredImagesData* sponsored_images_data =
background_images_service_->GetBrandedImagesData(/*super_referral=*/true,
supports_rich_media);
if (sponsored_images_data && IsSuperReferralWallpaperOptedIn()) {
return sponsored_images_data;
}

return background_images_service_->GetBrandedImagesData(
/*super_referral=*/false);
/*super_referral=*/false, supports_rich_media);
}

std::optional<base::Value::Dict>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,8 @@ class NTPBackgroundImagesViewCounterTest : public testing::Test {
brave::RegisterPrefsForBraveReferralsService(local_registry);
NTPBackgroundImagesService::RegisterLocalStatePrefs(local_registry);
ViewCounterService::RegisterLocalStatePrefs(local_registry);
pref_registry->RegisterIntegerPref(
"profile.default_content_setting_values.javascript", 0);

service_ = std::make_unique<NTPBackgroundImagesService>(
/*component_updater_service=*/nullptr, &pref_service_);
Expand Down
Loading

0 comments on commit 5bc6b3e

Please sign in to comment.