Avi Drissman | 4a8573c | 2022-09-09 19:35:54 | [diff] [blame] | 1 | // Copyright 2020 The Chromium Authors |
Dominique Fauteux-Chapleau | c2d0a17 | 2020-04-01 20:04:13 | [diff] [blame] | 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 | |
Arthur Sonzogni | fe132ee | 2024-01-15 11:01:04 | [diff] [blame] | 8 | #include <optional> |
| 9 | |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 10 | #include "base/memory/raw_ptr.h" |
Georg Neis | ef25199f | 2025-02-13 10:45:03 | [diff] [blame] | 11 | #include "build/build_config.h" |
Dominique Fauteux-Chapleau | d280fd5 | 2021-02-03 20:06:00 | [diff] [blame] | 12 | #include "chrome/browser/enterprise/connectors/analysis/analysis_service_settings.h" |
Dominique Fauteux-Chapleau | d991d875 | 2023-08-10 16:44:13 | [diff] [blame] | 13 | #include "components/enterprise/buildflags/buildflags.h" |
Nancy Xiao | 12fe3c8b7 | 2024-08-13 14:02:27 | [diff] [blame] | 14 | #include "components/enterprise/connectors/core/analysis_settings.h" |
Nancy Xiao | 9acd53b99 | 2024-08-30 19:28:09 | [diff] [blame] | 15 | #include "components/enterprise/connectors/core/connectors_manager_base.h" |
Nancy Xiao | 2ffefec | 2024-08-01 17:15:38 | [diff] [blame] | 16 | #include "components/enterprise/connectors/core/reporting_service_settings.h" |
Nancy Xiao | 1e13dfa | 2024-08-08 19:30:11 | [diff] [blame] | 17 | #include "components/enterprise/connectors/core/service_provider_config.h" |
Dominique Fauteux-Chapleau | 2977570 | 2020-04-30 15:50:36 | [diff] [blame] | 18 | #include "components/prefs/pref_change_registrar.h" |
Dominique Fauteux-Chapleau | 130242bf | 2020-12-07 19:07:48 | [diff] [blame] | 19 | #include "components/prefs/pref_service.h" |
Dominique Fauteux-Chapleau | c2d0a17 | 2020-04-01 20:04:13 | [diff] [blame] | 20 | #include "url/gurl.h" |
| 21 | |
Dominique Fauteux-Chapleau | d991d875 | 2023-08-10 16:44:13 | [diff] [blame] | 22 | #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) |
Nancy Xiao | 87e5e11 | 2023-05-18 16:54:42 | [diff] [blame] | 23 | #include "chrome/browser/ui/browser_list_observer.h" |
| 24 | #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" |
Dominique Fauteux-Chapleau | d991d875 | 2023-08-10 16:44:13 | [diff] [blame] | 25 | #endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) |
Nancy Xiao | 87e5e11 | 2023-05-18 16:54:42 | [diff] [blame] | 26 | |
Georg Neis | ef25199f | 2025-02-13 10:45:03 | [diff] [blame] | 27 | #if BUILDFLAG(IS_CHROMEOS) |
Nancy Xiao | 12fe3c8b7 | 2024-08-13 14:02:27 | [diff] [blame] | 28 | #include "content/public/browser/browser_context.h" |
Georg Neis | ef25199f | 2025-02-13 10:45:03 | [diff] [blame] | 29 | #endif // BUILDFLAG(IS_CHROMEOS) |
Nancy Xiao | 12fe3c8b7 | 2024-08-13 14:02:27 | [diff] [blame] | 30 | |
Steffen Seckler | 6ef24b8 | 2022-07-22 08:46:07 | [diff] [blame] | 31 | namespace storage { |
| 32 | class FileSystemURL; |
| 33 | } |
| 34 | |
Dominique Fauteux-Chapleau | c2d0a17 | 2020-04-01 20:04:13 | [diff] [blame] | 35 | namespace enterprise_connectors { |
| 36 | |
Nancy Xiao | 9acd53b99 | 2024-08-30 19:28:09 | [diff] [blame] | 37 | // 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-Chapleau | d991d875 | 2023-08-10 16:44:13 | [diff] [blame] | 40 | #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) |
Nancy Xiao | 9acd53b99 | 2024-08-30 19:28:09 | [diff] [blame] | 41 | class ConnectorsManager : public ConnectorsManagerBase, |
| 42 | public BrowserListObserver, |
Nancy Xiao | 87e5e11 | 2023-05-18 16:54:42 | [diff] [blame] | 43 | public TabStripModelObserver { |
| 44 | #else |
Nancy Xiao | 9acd53b99 | 2024-08-30 19:28:09 | [diff] [blame] | 45 | class ConnectorsManager : public ConnectorsManagerBase { |
Dominique Fauteux-Chapleau | d991d875 | 2023-08-10 16:44:13 | [diff] [blame] | 46 | #endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) |
Nancy Xiao | 87e5e11 | 2023-05-18 16:54:42 | [diff] [blame] | 47 | |
Dominique Fauteux-Chapleau | c2d0a17 | 2020-04-01 20:04:13 | [diff] [blame] | 48 | public: |
Roger Tawa | 445a997 | 2020-05-20 22:44:02 | [diff] [blame] | 49 | // Maps used to cache connectors settings. |
Dominique Fauteux-Chapleau | cb08fe4 | 2020-04-23 19:57:45 | [diff] [blame] | 50 | using AnalysisConnectorsSettings = |
| 51 | std::map<AnalysisConnector, std::vector<AnalysisServiceSettings>>; |
| 52 | |
Richard Chen | 1b0fa5d | 2024-07-02 18:34:40 | [diff] [blame] | 53 | ConnectorsManager(PrefService* pref_service, |
| 54 | const ServiceProviderConfig* config, |
| 55 | bool observe_prefs = true); |
Nancy Xiao | 87e5e11 | 2023-05-18 16:54:42 | [diff] [blame] | 56 | ~ConnectorsManager() override; |
Dominique Fauteux-Chapleau | c2d0a17 | 2020-04-01 20:04:13 | [diff] [blame] | 57 | |
| 58 | // Validates which settings should be applied to an analysis connector event |
Dominique Fauteux-Chapleau | cb08fe4 | 2020-04-23 19:57:45 | [diff] [blame] | 59 | // against cached policies. This function will prioritize new connector |
| 60 | // policies over legacy ones if they are set. |
Arthur Sonzogni | fe132ee | 2024-01-15 11:01:04 | [diff] [blame] | 61 | std::optional<AnalysisSettings> GetAnalysisSettings( |
Dominique Fauteux-Chapleau | c08c8c96 | 2020-05-07 18:46:26 | [diff] [blame] | 62 | const GURL& url, |
| 63 | AnalysisConnector connector); |
Georg Neis | ef25199f | 2025-02-13 10:45:03 | [diff] [blame] | 64 | #if BUILDFLAG(IS_CHROMEOS) |
Arthur Sonzogni | fe132ee | 2024-01-15 11:01:04 | [diff] [blame] | 65 | std::optional<AnalysisSettings> GetAnalysisSettings( |
Steffen Seckler | 6ef24b8 | 2022-07-22 08:46:07 | [diff] [blame] | 66 | content::BrowserContext* context, |
| 67 | const storage::FileSystemURL& source_url, |
| 68 | const storage::FileSystemURL& destination_url, |
| 69 | AnalysisConnector connector); |
Georg Neis | ef25199f | 2025-02-13 10:45:03 | [diff] [blame] | 70 | #endif // BUILDFLAG(IS_CHROMEOS) |
Dominique Fauteux-Chapleau | c08c8c96 | 2020-05-07 18:46:26 | [diff] [blame] | 71 | |
| 72 | // Checks if the corresponding connector is enabled. |
Nancy Xiao | 9acd53b99 | 2024-08-30 19:28:09 | [diff] [blame] | 73 | bool IsAnalysisConnectorEnabled(AnalysisConnector connector) const; |
Dominique Fauteux-Chapleau | c2d0a17 | 2020-04-01 20:04:13 | [diff] [blame] | 74 | |
Dominique Fauteux-Chapleau | d991d875 | 2023-08-10 16:44:13 | [diff] [blame] | 75 | #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS) |
Nancy Xiao | 8f7c4a3 | 2023-04-26 16:16:27 | [diff] [blame] | 76 | // Check if the corresponding connector is enabled for any local agent. |
| 77 | bool IsConnectorEnabledForLocalAgent(AnalysisConnector connector) const; |
| 78 | #endif |
| 79 | |
Dominique Fauteux-Chapleau | adf0b11 | 2020-05-25 13:24:03 | [diff] [blame] | 80 | bool DelayUntilVerdict(AnalysisConnector connector); |
Arthur Sonzogni | fe132ee | 2024-01-15 11:01:04 | [diff] [blame] | 81 | 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 Nagpaul | 4325c785 | 2022-07-19 13:51:38 | [diff] [blame] | 85 | bool GetBypassJustificationRequired(AnalysisConnector connector, |
| 86 | const std::string& tag); |
Dominique Fauteux-Chapleau | ccf5309 | 2020-04-08 17:15:28 | [diff] [blame] | 87 | |
Anthony Vallee-Dubois | 53913ec | 2021-02-22 16:46:44 | [diff] [blame] | 88 | std::vector<std::string> GetAnalysisServiceProviderNames( |
| 89 | AnalysisConnector connector); |
| 90 | |
Roger Tawa | 671dc43 | 2022-08-23 15:58:21 | [diff] [blame] | 91 | std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs( |
| 92 | AnalysisConnector connector); |
| 93 | |
Richard Chen | 2a57429dc | 2024-07-18 17:19:39 | [diff] [blame] | 94 | void SetTelemetryObserverCallback(base::RepeatingCallback<void()> callback); |
Alexander-Joseph Silva | 278c4d9 | 2024-06-19 14:15:11 | [diff] [blame] | 95 | |
Dominique Fauteux-Chapleau | cb08fe4 | 2020-04-23 19:57:45 | [diff] [blame] | 96 | // Public testing functions. |
| 97 | const AnalysisConnectorsSettings& GetAnalysisConnectorsSettingsForTesting() |
| 98 | const; |
Richard Chen | 2a57429dc | 2024-07-18 17:19:39 | [diff] [blame] | 99 | const base::RepeatingCallback<void()> GetTelemetryObserverCallbackForTesting() |
| 100 | const; |
Dominique Fauteux-Chapleau |
|