blob: d319b90214708dcfa8f91c0f0b613f621063985c [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-Chapleauc2d0a172020-04-01 20:04:138#include "base/callback_forward.h"
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:139#include "base/optional.h"
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4510#include "chrome/browser/enterprise/connectors/analysis_service_settings.h"
Dominique Fauteux-Chapleau5ae64242020-04-17 13:18:2611#include "chrome/browser/enterprise/connectors/common.h"
Roger Tawa542c883df2021-02-03 16:12:5212#include "chrome/browser/enterprise/connectors/file_system/service_settings.h"
Roger Tawa445a9972020-05-20 22:44:0213#include "chrome/browser/enterprise/connectors/reporting_service_settings.h"
Dominique Fauteux-Chapleau76b366a2020-05-28 17:15:0614#include "chrome/browser/enterprise/connectors/service_provider_config.h"
Dominique Fauteux-Chapleau29775702020-04-30 15:50:3615#include "components/prefs/pref_change_registrar.h"
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4816#include "components/prefs/pref_service.h"
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1317#include "url/gurl.h"
18
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1319namespace enterprise_connectors {
20
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4821// Manages access to Connector policies for a given profile. This class is
22// responsible for caching the Connector policies, validate them against
23// approved service providers and provide a simple interface to them.
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1324class ConnectorsManager {
25 public:
Roger Tawa445a9972020-05-20 22:44:0226 // Maps used to cache connectors settings.
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4527 using AnalysisConnectorsSettings =
28 std::map<AnalysisConnector, std::vector<AnalysisServiceSettings>>;
Roger Tawa445a9972020-05-20 22:44:0229 using ReportingConnectorsSettings =
30 std::map<ReportingConnector, std::vector<ReportingServiceSettings>>;
Roger Tawa542c883df2021-02-03 16:12:5231 using FileSystemConnectorsSettings =
32 std::map<FileSystemConnector, std::vector<FileSystemServiceSettings>>;
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4533
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4834 ConnectorsManager(PrefService* pref_service,
35 ServiceProviderConfig* config,
36 bool observe_prefs = true);
37 ~ConnectorsManager();
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1338
Roger Tawa445a9972020-05-20 22:44:0239 // Validates which settings should be applied to a reporting event
Dominique Fauteux-Chapleauc088fba2020-10-26 20:34:0840 // against cached policies. Cache the policy value the first time this is
41 // called for every different connector.
Roger Tawa445a9972020-05-20 22:44:0242 base::Optional<ReportingSettings> GetReportingSettings(
43 ReportingConnector connector);
44
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1345 // Validates which settings should be applied to an analysis connector event
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4546 // against cached policies. This function will prioritize new connector
47 // policies over legacy ones if they are set.
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2648 base::Optional<AnalysisSettings> GetAnalysisSettings(
49 const GURL& url,
50 AnalysisConnector connector);
51
Roger Tawa542c883df2021-02-03 16:12:5252 // Validates which settings should be applied to a file system connector
53 // against cached policies. Cache the policy value the first time this is
54 // called for every different connector.
55 base::Optional<FileSystemSettings> GetFileSystemSettings(
56 const GURL& url,
57 FileSystemConnector connector);
58
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2659 // Checks if the corresponding connector is enabled.
Dominique Fauteux-Chapleauadf0b112020-05-25 13:24:0360 bool IsConnectorEnabled(AnalysisConnector connector) const;
61 bool IsConnectorEnabled(ReportingConnector connector) const;
Roger Tawa542c883df2021-02-03 16:12:5262 bool IsConnectorEnabled(FileSystemConnector connector) const;
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1363
Dominique Fauteux-Chapleauadf0b112020-05-25 13:24:0364 bool DelayUntilVerdict(AnalysisConnector connector);
Dominique Fauteux-Chapleauccf53092020-04-08 17:15:2865
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4566 // Public testing functions.
67 const AnalysisConnectorsSettings& GetAnalysisConnectorsSettingsForTesting()
68 const;
Roger Tawa445a9972020-05-20 22:44:0269 const ReportingConnectorsSettings& GetReportingConnectorsSettingsForTesting()
70 const;
Roger Tawa542c883df2021-02-03 16:12:5271 const FileSystemConnectorsSettings&
72 GetFileSystemConnectorsSettingsForTesting() const;
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4573
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1374 private:
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4575 // Validates which settings should be applied to an analysis connector event
76 // against connector policies. Cache the policy value the first time this is
77 // called for every different connector.
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2678 base::Optional<AnalysisSettings> GetAnalysisSettingsFromConnectorPolicy(
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4579 const GURL& url,
Dominique Fauteux-Chapleauc08c8c962020-05-07 18:46:2680 AnalysisConnector connector);
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4581
82 // Read and cache the policy corresponding to |connector|.
Roger Tawa445a9972020-05-20 22:44:0283 void CacheAnalysisConnectorPolicy(AnalysisConnector connector);
84 void CacheReportingConnectorPolicy(ReportingConnector connector);
Roger Tawa542c883df2021-02-03 16:12:5285 void CacheFileSystemConnectorPolicy(FileSystemConnector connector);
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:4586
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:4887 // Sets up |pref_change_registrar_|. Used by the constructor and
88 // SetUpForTesting.
89 void StartObservingPrefs(PrefService* pref_service);
Dominique Fauteux-Chapleau045c37d2020-05-05 12:51:4090 void StartObservingPref(AnalysisConnector connector);
Roger Tawa445a9972020-05-20 22:44:0291 void StartObservingPref(ReportingConnector connector);
Roger Tawa542c883df2021-02-03 16:12:5292 void StartObservingPref(FileSystemConnector connector);
Dominique Fauteux-Chapleau29775702020-04-30 15:50:3693
Dominique Fauteux-Chapleau12381552020-09-21 18:45:5594 // Validates which settings should be applied to an analysis connector event
95 // against connector policies. Cache the policy value the first time this is
96 // called for every different connector.
97 base::Optional<ReportingSettings> GetReportingSettingsFromConnectorPolicy(
98 ReportingConnector connector);
99
Dominique Fauteux-Chapleau76b366a2020-05-28 17:15:06100 // Cached values of available service providers. This information validates
101 // the Connector policies have a valid provider.
Dominique Fauteux-Chapleau130242bf2020-12-07 19:07:48102 ServiceProviderConfig* service_provider_config_;
Dominique Fauteux-Chapleau76b366a2020-05-28 17:15:06103
Dominique Fauteux-Chapleaucb08fe42020-04-23 19:57:45104 // Cached values of the connector policies. Updated when a connector is first
105 // used or when a policy is updated.
Roger Tawa445a9972020-05-20 22:44:02106 AnalysisConnectorsSettings analysis_connector_settings_;
107 ReportingConnectorsSettings reporting_connector_settings_;
Roger Tawa542c883df2021-02-03 16:12:52108 FileSystemConnectorsSettings file_system_connector_settings_;
Dominique Fauteux-Chapleau29775702020-04-30 15:50:36109
110 // Used to track changes of connector policies and propagate them in
111 // |connector_settings_|.
112 PrefChangeRegistrar pref_change_registrar_;
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:13113};
114
115} // namespace enterprise_connectors
116
117#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_