1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/tpcd/heuristics/opener_heuristic_service.h"
#include "base/functional/bind.h"
#include "chrome/browser/privacy_sandbox/tracking_protection_settings_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tpcd/experiment/tpcd_experiment_features.h"
#include "chrome/browser/tpcd/heuristics/opener_heuristic_service_factory.h"
#include "components/privacy_sandbox/tracking_protection_settings.h"
#include "url/origin.h"
OpenerHeuristicService::OpenerHeuristicService(
base::PassKey<OpenerHeuristicServiceFactory>,
content::BrowserContext* context)
: browser_context_(context),
tracking_protection_settings_(
TrackingProtectionSettingsFactory::GetForProfile(
Profile::FromBrowserContext(context))) {
if (tracking_protection_settings_) {
tracking_protection_settings_observation_.Observe(
tracking_protection_settings_.get());
}
}
OpenerHeuristicService::~OpenerHeuristicService() = default;
/* static */
OpenerHeuristicService* OpenerHeuristicService::Get(
content::BrowserContext* context) {
return OpenerHeuristicServiceFactory::GetForBrowserContext(context);
}
void OpenerHeuristicService::Shutdown() {
tracking_protection_settings_ = nullptr;
tracking_protection_settings_observation_.Reset();
}
void OpenerHeuristicService::OnTrackingProtection3pcdChanged() {
if (!tracking_protection_settings_ ||
!tracking_protection_settings_->IsTrackingProtection3pcdEnabled()) {
NotifyBackfillPopupHeuristicGrants(false);
return;
}
browser_context_->BackfillPopupHeuristicGrants(base::BindOnce(
&OpenerHeuristicService::NotifyBackfillPopupHeuristicGrants,
weak_factory_.GetWeakPtr()));
}
void OpenerHeuristicService::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void OpenerHeuristicService::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
void OpenerHeuristicService::NotifyBackfillPopupHeuristicGrants(bool success) {
for (auto& observer : observers_) {
observer.OnBackfillPopupHeuristicGrants(browser_context_.get(), success);
}
}
|