Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ads] Suppress RichNTT if brave://settings/content/javascript is disabled #27783

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions browser/brave_ads/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ source_set("impl") {
"//chrome/browser:browser_process",
"//chrome/browser:browser_public_dependencies",
"//chrome/browser:primitives",
"//chrome/browser/content_settings:content_settings_factory",
"//chrome/browser/profiles:profile",
"//chrome/browser/regional_capabilities",
"//chrome/browser/ui",
Expand Down
3 changes: 2 additions & 1 deletion browser/brave_ads/ads_service_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "brave/components/brave_ads/browser/ads_service_impl.h"
#include "brave/components/brave_ads/core/browser/service/ads_service.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/notifications/notification_display_service.h"
#include "chrome/browser/notifications/notification_display_service_factory.h"
Expand Down Expand Up @@ -98,7 +99,7 @@ AdsServiceFactory::BuildServiceInstanceForBrowserContext(
std::make_unique<DeviceIdImpl>(),
std::make_unique<BatAdsServiceFactoryImpl>(),
g_brave_browser_process->resource_component(), history_service,
rewards_service);
rewards_service, HostContentSettingsMapFactory::GetForProfile(profile));
}

bool AdsServiceFactory::ServiceIsNULLWhileTesting() const {
Expand Down
1 change: 1 addition & 0 deletions browser/ntp_background/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ source_set("ntp_background") {
"//brave/components/ntp_background_images/buildflags",
"//brave/components/p3a",
"//chrome/browser:browser_process",
"//chrome/browser/content_settings:content_settings_factory",
"//chrome/browser/profiles:profile",
"//components/keyed_service/content",
"//components/pref_registry",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,9 @@ void NTPBackgroundImagesBridge::OnBackgroundImagesDataDidUpdate(
void NTPBackgroundImagesBridge::OnSponsoredImagesDataDidUpdate(
NTPSponsoredImagesData* data) {
// Don't have interest about in-effective component data update.
if (data != view_counter_service_->GetCurrentBrandedWallpaperData())
if (data != view_counter_service_->GetSponsoredImagesData()) {
return;
}

JNIEnv* env = AttachCurrentThread();
Java_NTPBackgroundImagesBridge_onUpdated(env, java_object_);
Expand Down
8 changes: 4 additions & 4 deletions browser/ntp_background/ntp_p3a_helper_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,13 @@ NTPP3AHelperImpl::NTPP3AHelperImpl(
&NTPP3AHelperImpl::OnP3ARotation, base::Unretained(this)));
if (ntp_background_images_service) {
if (const auto* sr_data =
ntp_background_images_service->GetBrandedImagesData(
/*super_referral=*/true)) {
ntp_background_images_service->GetSponsoredImagesData(
/*super_referral=*/true, /*supports_rich_media=*/true)) {
CheckLoadedCampaigns(*sr_data);
}
if (const auto* si_data =
ntp_background_images_service->GetBrandedImagesData(
/*super_referral=*/false)) {
ntp_background_images_service->GetSponsoredImagesData(
/*super_referral=*/false, /*supports_rich_media=*/true)) {
CheckLoadedCampaigns(*si_data);
}
ntp_background_images_service_observation_.Observe(
Expand Down
3 changes: 2 additions & 1 deletion browser/ntp_background/view_counter_service_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "brave/components/ntp_background_images/browser/view_counter_service.h"
#include "brave/components/ntp_background_images/buildflags/buildflags.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
Expand Down Expand Up @@ -92,7 +93,7 @@ ViewCounterServiceFactory::BuildServiceInstanceForBrowserContext(
}

return std::make_unique<ViewCounterService>(
service,
HostContentSettingsMapFactory::GetForProfile(profile), service,
#if BUILDFLAG(ENABLE_CUSTOM_BACKGROUND)
BraveNTPCustomBackgroundServiceFactory::GetForContext(profile),
#else
Expand Down
1 change: 1 addition & 0 deletions components/brave_ads/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ static_library("browser") {
"//brave/components/ntp_background_images/common",
"//brave/components/p3a_utils",
"//brave/components/time_period_storage",
"//components/content_settings/core/browser",
"//components/pref_registry",
"//components/prefs",
"//components/sessions",
Expand Down
46 changes: 42 additions & 4 deletions components/brave_ads/browser/ads_service_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@
#include "brave/components/ntp_background_images/common/pref_names.h"
#include "brave/components/services/bat_ads/public/interfaces/bat_ads.mojom.h"
#include "build/build_config.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/content_settings/core/common/content_settings.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
Expand Down Expand Up @@ -194,13 +197,15 @@ AdsServiceImpl::AdsServiceImpl(
std::unique_ptr<BatAdsServiceFactory> bat_ads_service_factory,
brave_ads::ResourceComponent* resource_component,
history::HistoryService* history_service,
brave_rewards::RewardsService* rewards_service)
brave_rewards::RewardsService* rewards_service,
HostContentSettingsMap* host_content_settings_map)
: AdsService(std::move(delegate)),
prefs_(prefs),
local_state_(local_state),
url_loader_(std::move(url_loader)),
channel_name_(channel_name),
history_service_(history_service),
host_content_settings_map_(host_content_settings_map),
ads_tooltips_delegate_(std::move(ads_tooltips_delegate)),
device_id_(std::move(device_id)),
bat_ads_service_factory_(std::move(bat_ads_service_factory)),
Expand Down Expand Up @@ -485,6 +490,8 @@ void AdsServiceImpl::InitializeBatAdsCallback(bool success) {

BackgroundHelper::GetInstance()->AddObserver(this);

host_content_settings_map_->AddObserver(this);

MaybeShowOnboardingNotification();

MaybeOpenNewTabWithAd();
Expand Down Expand Up @@ -599,6 +606,25 @@ void AdsServiceImpl::SetFlags() {
bat_ads_associated_remote_->SetFlags(std::move(mojom_flags));
}

void AdsServiceImpl::SetContentSettings() {
if (!bat_ads_associated_remote_.is_bound()) {
return;
}

const ContentSetting javascript_content_setting =
host_content_settings_map_->GetDefaultContentSetting(
ContentSettingsType::JAVASCRIPT);

mojom::ContentSettingsPtr mojom_content_settings =
mojom::ContentSettings::New();
mojom_content_settings->allow_javascript =
javascript_content_setting == CONTENT_SETTING_ALLOW ||
javascript_content_setting == CONTENT_SETTING_SESSION_ONLY;

bat_ads_associated_remote_->SetContentSettings(
std::move(mojom_content_settings));
}

bool AdsServiceImpl::ShouldShowOnboardingNotification() {
const bool should_show_onboarding_notification =
prefs_->GetBoolean(prefs::kShouldShowOnboardingNotification);
Expand Down Expand Up @@ -1103,6 +1129,8 @@ void AdsServiceImpl::ShutdownAdsService() {

if (is_bat_ads_initialized_) {
BackgroundHelper::GetInstance()->RemoveObserver(this);

host_content_settings_map_->RemoveObserver(this);
}

CloseAllNotificationAds();
Expand Down Expand Up @@ -1275,7 +1303,7 @@ void AdsServiceImpl::PrefetchNewTabPageAd() {
}

std::optional<NewTabPageAdInfo>
AdsServiceImpl::MaybeGetPrefetchedNewTabPageAdForDisplay() {
AdsServiceImpl::MaybeGetPrefetchedNewTabPageAd() {
if (!bat_ads_associated_remote_.is_bound()) {
return std::nullopt;
}
Expand All @@ -1299,7 +1327,7 @@ void AdsServiceImpl::OnFailedToPrefetchNewTabPageAd(
}

void AdsServiceImpl::ParseAndSaveCreativeNewTabPageAds(
const base::Value::Dict& data,
const base::Value::Dict& dict,
ParseAndSaveCreativeNewTabPageAdsCallback callback) {
if (!bat_ads_associated_remote_.is_bound()) {
return std::move(callback).Run(/*success*/ false);
Expand All @@ -1308,7 +1336,7 @@ void AdsServiceImpl::ParseAndSaveCreativeNewTabPageAds(
// Since `data` contains small JSON from a CRX component, cloning it has
// no performance impact.
bat_ads_associated_remote_->ParseAndSaveCreativeNewTabPageAds(
data.Clone(), std::move(callback));
dict.Clone(), std::move(callback));
}

void AdsServiceImpl::TriggerNewTabPageAdEvent(
Expand Down Expand Up @@ -1895,4 +1923,14 @@ void AdsServiceImpl::OnCompleteReset(bool success) {
}
}

void AdsServiceImpl::OnContentSettingChanged(
const ContentSettingsPattern& /*primary_pattern*/,
const ContentSettingsPattern& /*secondary_pattern*/,
ContentSettingsTypeSet content_type_set) {
if (content_type_set.Contains(ContentSettingsType::JAVASCRIPT)) {
SetContentSettings();
PrefetchNewTabPageAd();
}
}

} // namespace brave_ads
25 changes: 20 additions & 5 deletions components/brave_ads/browser/ads_service_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
#include "brave/components/brave_ads/core/public/service/ads_service_callback.h"
#include "brave/components/brave_rewards/core/mojom/rewards.mojom-forward.h"
#include "brave/components/services/bat_ads/public/interfaces/bat_ads.mojom.h"
#include "components/content_settings/core/browser/content_settings_observer.h"
#include "components/content_settings/core/browser/content_settings_type_set.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
#include "components/history/core/browser/history_service.h"
#include "components/prefs/pref_change_registrar.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
Expand All @@ -39,6 +42,7 @@
#include "ui/base/idle/idle.h"

class GURL;
class HostContentSettingsMap;
class PrefService;

namespace base {
Expand Down Expand Up @@ -69,7 +73,8 @@ class AdsServiceImpl final : public AdsService,
public bat_ads::mojom::BatAdsObserver,
BackgroundHelper::Observer,
public ResourceComponentObserver,
public brave_rewards::RewardsServiceObserver {
public brave_rewards::RewardsServiceObserver,
public content_settings::Observer {
public:
explicit AdsServiceImpl(
std::unique_ptr<Delegate> delegate,
Expand All @@ -83,7 +88,8 @@ class AdsServiceImpl final : public AdsService,
std::unique_ptr<BatAdsServiceFactory> bat_ads_service_factory,
brave_ads::ResourceComponent* resource_component,
history::HistoryService* history_service,
brave_rewards::RewardsService* rewards_service);
brave_rewards::RewardsService* rewards_service,
HostContentSettingsMap* host_content_settings);

AdsServiceImpl(const AdsServiceImpl&) = delete;
AdsServiceImpl& operator=(const AdsServiceImpl&) = delete;
Expand Down Expand Up @@ -145,6 +151,7 @@ class AdsServiceImpl final : public AdsService,
void SetSysInfo();
void SetBuildChannel();
void SetFlags();
void SetContentSettings();

bool ShouldShowOnboardingNotification();
void MaybeShowOnboardingNotification();
Expand Down Expand Up @@ -243,14 +250,13 @@ class AdsServiceImpl final : public AdsService,
mojom::InlineContentAdEventType mojom_ad_event_type,
TriggerAdEventCallback callback) override;

std::optional<NewTabPageAdInfo> MaybeGetPrefetchedNewTabPageAdForDisplay()
override;
std::optional<NewTabPageAdInfo> MaybeGetPrefetchedNewTabPageAd() override;
void PrefetchNewTabPageAd() override;
void OnFailedToPrefetchNewTabPageAd(
const std::string& placement_id,
const std::string& creative_instance_id) override;
void ParseAndSaveCreativeNewTabPageAds(
const base::Value::Dict& data,
const base::Value::Dict& dict,
ParseAndSaveCreativeNewTabPageAdsCallback callback) override;
void TriggerNewTabPageAdEvent(
const std::string& placement_id,
Expand Down Expand Up @@ -406,6 +412,12 @@ class AdsServiceImpl final : public AdsService,
void OnExternalWalletConnected() override;
void OnCompleteReset(bool success) override;

// content_settings::Observer:
void OnContentSettingChanged(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsTypeSet content_type_set) override;

bool is_bat_ads_initialized_ = false;

bool is_shutting_down_ = false;
Expand Down Expand Up @@ -455,6 +467,9 @@ class AdsServiceImpl final : public AdsService,
const raw_ptr<history::HistoryService> history_service_ =
nullptr; // Not owned.

const raw_ptr<HostContentSettingsMap> host_content_settings_map_ =
nullptr; // Not owned.

const std::unique_ptr<AdsTooltipsDelegate> ads_tooltips_delegate_;

const std::unique_ptr<DeviceId> device_id_;
Expand Down
4 changes: 2 additions & 2 deletions components/brave_ads/browser/ads_service_mock.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class AdsServiceMock : public AdsService {
TriggerAdEventCallback));

MOCK_METHOD(std::optional<NewTabPageAdInfo>,
MaybeGetPrefetchedNewTabPageAdForDisplay,
MaybeGetPrefetchedNewTabPageAd,
());
MOCK_METHOD(void, PrefetchNewTabPageAd, ());
MOCK_METHOD(void,
Expand All @@ -71,7 +71,7 @@ class AdsServiceMock : public AdsService {
(const std::string&, const std::string&));
MOCK_METHOD(void,
ParseAndSaveCreativeNewTabPageAds,
(const base::Value::Dict& data,
(const base::Value::Dict& dict,
ParseAndSaveCreativeNewTabPageAdsCallback));

MOCK_METHOD(void,
Expand Down
5 changes: 2 additions & 3 deletions components/brave_ads/core/browser/service/ads_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,7 @@ class AdsService : public KeyedService {
virtual void PrefetchNewTabPageAd() = 0;

// Called to get the prefetched new tab page ad for display.
virtual std::optional<NewTabPageAdInfo>
MaybeGetPrefetchedNewTabPageAdForDisplay() = 0;
virtual std::optional<NewTabPageAdInfo> MaybeGetPrefetchedNewTabPageAd() = 0;

// Called when failing to prefetch a new tab page ad for the specified
// `placement_id` and `creative_instance_id`.
Expand All @@ -142,7 +141,7 @@ class AdsService : public KeyedService {
// Called to parse and save creative new tab page ads. The callback takes one
// argument - `bool` is set to `true` if successful otherwise `false`.
virtual void ParseAndSaveCreativeNewTabPageAds(
const base::Value::Dict& data,
const base::Value::Dict& dict,
ParseAndSaveCreativeNewTabPageAdsCallback callback) = 0;

// Called when a user views or interacts with a new tab page ad to trigger a
Expand Down
6 changes: 6 additions & 0 deletions components/brave_ads/core/internal/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,8 @@ static_library("internal") {
"common/url/url_util.cc",
"common/url/url_util_internal.cc",
"common/url/url_util_internal.h",
"content_settings/content_settings_util.cc",
"content_settings/content_settings_util.h",
"creatives/campaigns_database_table.cc",
"creatives/campaigns_database_table.h",
"creatives/conversions/creative_set_conversion_builder.cc",
Expand Down Expand Up @@ -540,6 +542,10 @@ static_library("internal") {
"creatives/inline_content_ads/inline_content_ad_builder.h",
"creatives/new_tab_page_ads/creative_new_tab_page_ad_info.cc",
"creatives/new_tab_page_ads/creative_new_tab_page_ad_info.h",
"creatives/new_tab_page_ads/creative_new_tab_page_ad_wallpaper_type.h",
"creatives/new_tab_page_ads/creative_new_tab_page_ad_wallpaper_type_constants.h",
"creatives/new_tab_page_ads/creative_new_tab_page_ad_wallpaper_type_util.cc",
"creatives/new_tab_page_ads/creative_new_tab_page_ad_wallpaper_type_util.h",
"creatives/new_tab_page_ads/creative_new_tab_page_ads_database_table.cc",
"creatives/new_tab_page_ads/creative_new_tab_page_ads_database_table.h",
"creatives/new_tab_page_ads/creative_new_tab_page_ads_database_util.cc",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "brave/components/brave_ads/core/internal/common/test/test_base.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/creative_new_tab_page_ad_info.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/creative_new_tab_page_ad_test_util.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/creative_new_tab_page_ad_wallpaper_type.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/new_tab_page_ad_builder.h"

// npm run test -- brave_unit_tests --filter=BraveAds*
Expand All @@ -19,7 +20,8 @@ class BraveAdsNewTabPageAdInfoTest : public test::TestBase {};
TEST_F(BraveAdsNewTabPageAdInfoTest, IsValid) {
// Arrange
const CreativeNewTabPageAdInfo creative_ad =
test::BuildCreativeNewTabPageAd(/*should_generate_random_uuids=*/true);
test::BuildCreativeNewTabPageAd(CreativeNewTabPageAdWallpaperType::kImage,
/*should_generate_random_uuids=*/true);
const NewTabPageAdInfo ad = BuildNewTabPageAd(creative_ad);

// Act & Assert
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ class BraveAdsNewTabPageAdIntegrationTest : public test::TestBase {
EXPECT_CALL(callback, Run(/*success=*/true))
.WillOnce(base::test::RunOnceClosure(run_loop.QuitClosure()));

base::Value::Dict data = base::test::ParseJsonDict(json);
GetAds().ParseAndSaveCreativeNewTabPageAds(std::move(data), callback.Get());
base::Value::Dict dict = base::test::ParseJsonDict(json);
GetAds().ParseAndSaveCreativeNewTabPageAds(std::move(dict), callback.Get());
run_loop.Run();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,22 @@

#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/creative_new_tab_page_ad_info.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/creative_new_tab_page_ad_test_util.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/creative_new_tab_page_ad_wallpaper_type.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/creative_new_tab_page_ads_database_util.h"
#include "brave/components/brave_ads/core/internal/creatives/new_tab_page_ads/new_tab_page_ad_builder.h"
#include "brave/components/brave_ads/core/public/ad_units/new_tab_page_ad/new_tab_page_ad_info.h"

namespace brave_ads::test {

NewTabPageAdInfo BuildNewTabPageAd(bool should_generate_random_uuids) {
const CreativeNewTabPageAdInfo creative_ad =
BuildCreativeNewTabPageAd(should_generate_random_uuids);
const CreativeNewTabPageAdInfo creative_ad = BuildCreativeNewTabPageAd(
CreativeNewTabPageAdWallpaperType::kImage, should_generate_random_uuids);
return BuildNewTabPageAd(creative_ad);
}

NewTabPageAdInfo BuildAndSaveNewTabPageAd(bool should_generate_random_uuids) {
const CreativeNewTabPageAdInfo creative_ad =
BuildCreativeNewTabPageAd(should_generate_random_uuids);
const CreativeNewTabPageAdInfo creative_ad = BuildCreativeNewTabPageAd(
CreativeNewTabPageAdWallpaperType::kImage, should_generate_random_uuids);
database::SaveCreativeNewTabPageAds({creative_ad});
return BuildNewTabPageAd(creative_ad);
}
Expand Down
Loading
Loading