blob: 6670d097d8fa659f4bdc17755ea89111ba4489c9 [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2020 The Chromium Authors
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:132// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_
6#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_
7
Arthur Sonzognife132ee2024-01-15 11:01:048#include <optional>
9
Keishi Hattori0e45c022021-11-27 09:25:5210#include "base/memory/raw_ptr.h"
Georg Neisef25199f2025-02-13 10:45:0311#include "build/build_config.h"
Dominique Fauteux-Chapleaud280fd52021-02-03 20:06:0012#include "chrome/browser/enterprise/connectors/analysis/analysis_service_settings.h"
Dominique Fauteux-Chapleaud991d8752023-08-10 16:44:1313#include "components/enterprise/buildflags/buildflags.h"
Nancy Xiao12fe3c8b72024-08-13 14:02:2714#include "components/enterprise/connectors/core/analysis_settings.h"
Nancy Xiao9acd53b992024-08-30 19:28:0915#include "components/enterprise/connectors/core/connectors_manager_base.h"
Nancy Xiao2ffefec2024-08-01 17:15:3816#include "components/enterprise/connectors/core/reporting_service_settings.h"
Nancy Xiao1e13dfa2024-08-08 19:30:1117#include "components/enterprise/connectors/core/service_provider_config.h"
Dominique Fauteux-Chapleau29775702020-04-30 15:50:3618#include "components/prefs/pref_change_registrar.h"
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4819#include "components/prefs/pref_service.h"
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1320#include "url/gurl.h"
21
Dominique Fauteux-Chapleaud991d8752023-08-10 16:44:1322#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
Nancy Xiao87e5e112023-05-18 16:54:4223#include "chrome/browser/ui/browser_list_observer.h"
24#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
Dominique Fauteux-Chapleaud991d8752023-08-10 16:44:1325#endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
Nancy Xiao87e5e112023-05-18 16:54:4226
Georg Neisef25199f2025-02-13 10:45:0327#if BUILDFLAG(IS_CHROMEOS)
Nancy Xiao12fe3c8b72024-08-13 14:02:2728#include "content/public/browser/browser_context.h"
Georg Neisef25199f2025-02-13 10:45:0329#endif // BUILDFLAG(IS_CHROMEOS)
Nancy Xiao12fe3c8b72024-08-13 14:02:2730
Steffen Seckler6ef24b82022-07-22 08:46:0731namespace storage {
32class FileSystemURL;
33}
34
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1335namespace enterprise_connectors {
36
Nancy Xiao9acd53b992024-08-30 19:28:0937// This class overrides `ConnectorsManagerBase` for desktop and Android usage.
38// It manages access to Reporting and Analysis Connector policies for a given
39// profile.
Dominique Fauteux-Chapleaud991d8752023-08-10 16:44:1340#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
Nancy Xiao9acd53b992024-08-30 19:28:0941class ConnectorsManager : public ConnectorsManagerBase,
42 public BrowserListObserver,
Nancy Xiao87e5e112023-05-18 16:54:4243 public TabStripModelObserver {
44#else
Nancy Xiao9acd53b992024-08-30 19:28:0945class ConnectorsManager : public ConnectorsManagerBase {
Dominique Fauteux-Chapleaud991d8752023-08-10 16:44:1346#endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
Nancy Xiao87e5e112023-05-18 16:54:4247
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1348 public:
Roger Tawa445a9972020-05-20 22:44:0249 // Maps used to cache connectors settings.
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4550 using AnalysisConnectorsSettings =
51 std::map<AnalysisConnector, std::vector<AnalysisServiceSettings>>;
52
Richard Chen1b0fa5d2024-07-02 18:34:4053 ConnectorsManager(PrefService* pref_service,
54 const ServiceProviderConfig* config,
55 bool observe_prefs = true);
Nancy Xiao87e5e112023-05-18 16:54:4256 ~ConnectorsManager() override;
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1357
58 // Validates which settings should be applied to an analysis connector event
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4559 // against cached policies. This function will prioritize new connector
60 // policies over legacy ones if they are set.
Arthur Sonzognife132ee2024-01-15 11:01:0461 std::optional<AnalysisSettings> GetAnalysisSettings(
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2662 const GURL& url,
63 AnalysisConnector connector);
Georg Neisef25199f2025-02-13 10:45:0364#if BUILDFLAG(IS_CHROMEOS)
Arthur Sonzognife132ee2024-01-15 11:01:0465 std::optional<AnalysisSettings> GetAnalysisSettings(
Steffen Seckler6ef24b82022-07-22 08:46:0766 content::BrowserContext* context,
67 const storage::FileSystemURL& source_url,
68 const storage::FileSystemURL& destination_url,
69 AnalysisConnector connector);
Georg Neisef25199f2025-02-13 10:45:0370#endif // BUILDFLAG(IS_CHROMEOS)
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2671
72 // Checks if the corresponding connector is enabled.
Nancy Xiao9acd53b992024-08-30 19:28:0973 bool IsAnalysisConnectorEnabled(AnalysisConnector connector) const;
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1374
Dominique Fauteux-Chapleaud991d8752023-08-10 16:44:1375#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
Nancy Xiao8f7c4a32023-04-26 16:16:2776 // Check if the corresponding connector is enabled for any local agent.
77 bool IsConnectorEnabledForLocalAgent(AnalysisConnector connector) const;
78#endif
79
Dominique Fauteux-Chapleauadf0b112020-05-25 13:24:0380 bool DelayUntilVerdict(AnalysisConnector connector);
Arthur Sonzognife132ee2024-01-15 11:01:0481 std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector,
82 const std::string& tag);
83 std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector,
84 const std::string& tag);
Sneha Nagpaul4325c7852022-07-19 13:51:3885 bool GetBypassJustificationRequired(AnalysisConnector connector,
86 const std::string& tag);
Dominique Fauteux-Chapleauccf53092020-04-08 17:15:2887
Anthony Vallee-Dubois53913ec2021-02-22 16:46:4488 std::vector<std::string> GetAnalysisServiceProviderNames(
89 AnalysisConnector connector);
90
Roger Tawa671dc432022-08-23 15:58:2191 std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs(
92 AnalysisConnector connector);
93
Richard Chen2a57429dc2024-07-18 17:19:3994 void SetTelemetryObserverCallback(base::RepeatingCallback<void()> callback);
Alexander-Joseph Silva278c4d92024-06-19 14:15:1195
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4596 // Public testing functions.
97 const AnalysisConnectorsSettings& GetAnalysisConnectorsSettingsForTesting()
98 const;
Richard Chen2a57429dc2024-07-18 17:19:3999 const base::RepeatingCallback<void()> GetTelemetryObserverCallbackForTesting()
100 const;
Dominique Fauteux-Chapleau