| // Copyright 2025 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/extensions/chrome_safe_browsing_delegate.h" |
| |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/safe_browsing/chrome_password_reuse_detection_manager_client.h" |
| #include "chrome/browser/safe_browsing/extension_telemetry/declarative_net_request_action_signal.h" |
| #include "chrome/browser/safe_browsing/extension_telemetry/declarative_net_request_signal.h" |
| #include "chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service.h" |
| #include "chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service_factory.h" |
| #include "chrome/browser/safe_browsing/extension_telemetry/remote_host_contacted_signal.h" |
| #include "chrome/browser/safe_browsing/extension_telemetry/tabs_execute_script_signal.h" |
| #include "components/safe_browsing/buildflags.h" |
| #include "components/safe_browsing/core/common/features.h" |
| |
| static_assert(BUILDFLAG(FULL_SAFE_BROWSING)); |
| |
| namespace extensions { |
| |
| ChromeSafeBrowsingDelegate::ChromeSafeBrowsingDelegate() = default; |
| |
| ChromeSafeBrowsingDelegate::~ChromeSafeBrowsingDelegate() = default; |
| |
| bool ChromeSafeBrowsingDelegate::IsExtensionTelemetryServiceEnabled( |
| content::BrowserContext* context) const { |
| auto* telemetry_service = |
| safe_browsing::ExtensionTelemetryServiceFactory::GetForProfile( |
| Profile::FromBrowserContext(context)); |
| return telemetry_service && telemetry_service->enabled(); |
| } |
| |
| void ChromeSafeBrowsingDelegate::NotifyExtensionApiTabExecuteScript( |
| content::BrowserContext* context, |
| const ExtensionId& extension_id, |
| const std::string& code) const { |
| auto* telemetry_service = |
| safe_browsing::ExtensionTelemetryServiceFactory::GetForProfile( |
| Profile::FromBrowserContext(context)); |
| if (!telemetry_service || !telemetry_service->enabled()) { |
| return; |
| } |
| |
| auto signal = std::make_unique<safe_browsing::TabsExecuteScriptSignal>( |
| extension_id, code); |
| telemetry_service->AddSignal(std::move(signal)); |
| } |
| |
| void ChromeSafeBrowsingDelegate::NotifyExtensionApiDeclarativeNetRequest( |
| content::BrowserContext* context, |
| const ExtensionId& extension_id, |
| const std::vector<api::declarative_net_request::Rule>& rules) const { |
| auto* telemetry_service = |
| safe_browsing::ExtensionTelemetryServiceFactory::GetForProfile( |
| Profile::FromBrowserContext(context)); |
| if (!telemetry_service || !telemetry_service->enabled()) { |
| return; |
| } |
| |
| // The telemetry service will consume and release the signal object inside the |
| // `AddSignal()` call. |
| auto signal = std::make_unique<safe_browsing::DeclarativeNetRequestSignal>( |
| extension_id, rules); |
| telemetry_service->AddSignal(std::move(signal)); |
| } |
| |
| void ChromeSafeBrowsingDelegate:: |
| NotifyExtensionDeclarativeNetRequestRedirectAction( |
| content::BrowserContext* context, |
| const ExtensionId& extension_id, |
| const GURL& request_url, |
| const GURL& redirect_url) const { |
| auto* telemetry_service = |
| safe_browsing::ExtensionTelemetryServiceFactory::GetForProfile( |
| Profile::FromBrowserContext(context)); |
| if (!telemetry_service || !telemetry_service->enabled() || |
| !base::FeatureList::IsEnabled( |
| safe_browsing:: |
| kExtensionTelemetryDeclarativeNetRequestActionSignal)) { |
| return; |
| } |
| |
| // The telemetry service will consume and release the signal object inside the |
| // `AddSignal()` call. |
| auto signal = safe_browsing::DeclarativeNetRequestActionSignal:: |
| CreateDeclarativeNetRequestRedirectActionSignal(extension_id, request_url, |
| redirect_url); |
| telemetry_service->AddSignal(std::move(signal)); |
| } |
| |
| void ChromeSafeBrowsingDelegate::CreatePasswordReuseDetectionManager( |
| content::WebContents* web_contents) const { |
| ChromePasswordReuseDetectionManagerClient::CreateForWebContents(web_contents); |
| } |
| |
| } // namespace extensions |