blob: ae25ee03276ad45559fb8d2f5805f106c14b3377 [file] [log] [blame]
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:131// Copyright 2020 The Chromium Authors. All rights reserved.
2// 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
Dominique Fauteux-Chapleaud280fd52021-02-03 20:06:008#include "chrome/browser/enterprise/connectors/analysis/analysis_service_settings.h"
Dominique Fauteux-Chapleau5ae64242020-04-17 13:18:269#include "chrome/browser/enterprise/connectors/common.h"
Roger Tawa542c883df2021-02-03 16:12:5210#include "chrome/browser/enterprise/connectors/file_system/service_settings.h"
Dominique Fauteux-Chapleaud280fd52021-02-03 20:06:0011#include "chrome/browser/enterprise/connectors/reporting/reporting_service_settings.h"
Dominique Fauteux-Chapleau76b366a2020-05-28 17:15:0612#include "chrome/browser/enterprise/connectors/service_provider_config.h"
Dominique Fauteux-Chapleau29775702020-04-30 15:50:3613#include "components/prefs/pref_change_registrar.h"
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4814#include "components/prefs/pref_service.h"
Anton Bikineev46bbb972021-05-15 17:53:5315#include "third_party/abseil-cpp/absl/types/optional.h"
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1316#include "url/gurl.h"
17
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1318namespace enterprise_connectors {
19
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4820// Manages access to Connector policies for a given profile. This class is
21// responsible for caching the Connector policies, validate them against
22// approved service providers and provide a simple interface to them.
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1323class ConnectorsManager {
24 public:
Roger Tawa445a9972020-05-20 22:44:0225 // Maps used to cache connectors settings.
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4526 using AnalysisConnectorsSettings =
27 std::map<AnalysisConnector, std::vector<AnalysisServiceSettings>>;
Roger Tawa445a9972020-05-20 22:44:0228 using ReportingConnectorsSettings =
29 std::map<ReportingConnector, std::vector<ReportingServiceSettings>>;
Roger Tawa542c883df2021-02-03 16:12:5230 using FileSystemConnectorsSettings =
31 std::map<FileSystemConnector, std::vector<FileSystemServiceSettings>>;
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4532
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4833 ConnectorsManager(PrefService* pref_service,
34 ServiceProviderConfig* config,
35 bool observe_prefs = true);
36 ~ConnectorsManager();
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1337
Roger Tawa445a9972020-05-20 22:44:0238 // Validates which settings should be applied to a reporting event
Dominique Fauteux-Chapleauc088fba2020-10-26 20:34:0839 // against cached policies. Cache the policy value the first time this is
40 // called for every different connector.
Anton Bikineev46bbb972021-05-15 17:53:5341 absl::optional<ReportingSettings> GetReportingSettings(
Roger Tawa445a9972020-05-20 22:44:0242 ReportingConnector connector);
43
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1344 // Validates which settings should be applied to an analysis connector event
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4545 // against cached policies. This function will prioritize new connector
46 // policies over legacy ones if they are set.
Anton Bikineev46bbb972021-05-15 17:53:5347 absl::optional<AnalysisSettings> GetAnalysisSettings(
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2648 const GURL& url,
49 AnalysisConnector connector);
50
Roger Tawa542c883df2021-02-03 16:12:5251 // Validates which settings should be applied to a file system connector
52 // against cached policies. Cache the policy value the first time this is
53 // called for every different connector.
Anton Bikineev46bbb972021-05-15 17:53:5354 absl::optional<FileSystemSettings> GetFileSystemSettings(
Roger Tawa542c883df2021-02-03 16:12:5255 const GURL& url,
56 FileSystemConnector connector);
57
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2658 // Checks if the corresponding connector is enabled.
Dominique Fauteux-Chapleauadf0b112020-05-25 13:24:0359 bool IsConnectorEnabled(AnalysisConnector connector) const;
60 bool IsConnectorEnabled(ReportingConnector connector) const;
Roger Tawa542c883df2021-02-03 16:12:5261 bool IsConnectorEnabled(FileSystemConnector connector) const;
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1362
Dominique Fauteux-Chapleauadf0b112020-05-25 13:24:0363 bool DelayUntilVerdict(AnalysisConnector connector);
Dominique Fauteux-Chapleauccf53092020-04-08 17:15:2864
Anthony Vallee-Dubois53913ec2021-02-22 16:46:4465 std::vector<std::string> GetAnalysisServiceProviderNames(
66 AnalysisConnector connector);
Anthony Vallee-Dubois9a6a0402021-02-24 14:46:1667 std::vector<std::string> GetReportingServiceProviderNames(
68 ReportingConnector connector);
Anthony Vallee-Dubois53913ec2021-02-22 16:46:4469
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4570 // Public testing functions.
71 const AnalysisConnectorsSettings& GetAnalysisConnectorsSettingsForTesting()
72 const;
Roger Tawa445a9972020-05-20 22:44:0273 const ReportingConnectorsSettings& GetReportingConnectorsSettingsForTesting()
74 const;
Roger Tawa542c883df2021-02-03 16:12:5275 const FileSystemConnectorsSettings&
76 GetFileSystemConnectorsSettingsForTesting() const;
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4577
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1378 private:
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4579 // Validates which settings should be applied to an analysis connector event
80 // against connector policies. Cache the policy value the first time this is
81 // called for every different connector.
Anton Bikineev46bbb972021-05-15 17:53:5382 absl::optional<AnalysisSettings> GetAnalysisSettingsFromConnectorPolicy(
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4583 const GURL& url,
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2684 AnalysisConnector connector);
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4585
86 // Read and cache the policy corresponding to |connector|.
Roger Tawa445a9972020-05-20 22:44:0287 void CacheAnalysisConnectorPolicy(AnalysisConnector connector);
88 void CacheReportingConnectorPolicy(ReportingConnector connector);
Roger Tawa542c883df2021-02-03 16:12:5289 void CacheFileSystemConnectorPolicy(FileSystemConnector connector);
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4590
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4891 // Sets up |pref_change_registrar_|. Used by the constructor and
92 // SetUpForTesting.
93 void StartObservingPrefs(PrefService* pref_service);
Dominique Fauteux-Chapleau045c37d2020-05-05 12:51:4094 void StartObservingPref(AnalysisConnector connector);
Roger Tawa445a9972020-05-20 22:44:0295 void StartObservingPref(ReportingConnector connector);
Roger Tawa542c883df2021-02-03 16:12:5296 void StartObservingPref(FileSystemConnector connector);
Dominique Fauteux-Chapleau29775702020-04-30 15:50:3697
Dominique Fauteux-Chapleau12381552020-09-21 18:45:5598 // Validates which settings should be applied to an analysis connector event
99 // against connector policies. Cache the policy value the first time this is
100 // called for every different connector.
Anton Bikineev46bbb972021-05-15 17:53:53101 absl::optional<ReportingSettings> GetReportingSettingsFromConnectorPolicy(
Dominique Fauteux-Chapleau12381552020-09-21 18:45:55102 ReportingConnector connector);
103
Dominique Fauteux-Chapleau76b366a2020-05-28 17:15:06104 // Cached values of available service providers. This information validates
105 // the Connector policies have a valid provider.
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:48106 ServiceProviderConfig* service_provider_config_;
Dominique Fauteux-Chapleau76b366a2020-05-28 17:15:06107
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:45108 // Cached values of the connector policies. Updated when a connector is first
109 // used or when a policy is updated.
Roger Tawa445a9972020-05-20 22:44:02110 AnalysisConnectorsSettings analysis_connector_settings_;
111 ReportingConnectorsSettings reporting_connector_settings_;
Roger Tawa542c883df2021-02-03 16:12:52112 FileSystemConnectorsSettings file_system_connector_settings_;
Dominique Fauteux-Chapleau29775702020-04-30 15:50:36113
114 // Used to track changes of connector policies and propagate them in
115 // |connector_settings_|.
116 PrefChangeRegistrar pref_change_registrar_;
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:13117};
118
119} // namespace enterprise_connectors
120
121#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_