1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_
#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_
#include <optional>
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
#include "chrome/browser/enterprise/connectors/analysis/analysis_service_settings.h"
#include "components/enterprise/buildflags/buildflags.h"
#include "components/enterprise/connectors/core/analysis_settings.h"
#include "components/enterprise/connectors/core/connectors_manager_base.h"
#include "components/enterprise/connectors/core/reporting_service_settings.h"
#include "components/enterprise/connectors/core/service_provider_config.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/prefs/pref_service.h"
#include "url/gurl.h"
#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
#endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
#if BUILDFLAG(IS_CHROMEOS)
#include "content/public/browser/browser_context.h"
#endif // BUILDFLAG(IS_CHROMEOS)
namespace storage {
class FileSystemURL;
}
namespace enterprise_connectors {
// This class overrides `ConnectorsManagerBase` for desktop and Android usage.
// It manages access to Reporting and Analysis Connector policies for a given
// profile.
#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
class ConnectorsManager : public ConnectorsManagerBase,
public BrowserListObserver,
public TabStripModelObserver {
#else
class ConnectorsManager : public ConnectorsManagerBase {
#endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
public:
// Maps used to cache connectors settings.
using AnalysisConnectorsSettings =
std::map<AnalysisConnector, std::vector<AnalysisServiceSettings>>;
ConnectorsManager(PrefService* pref_service,
const ServiceProviderConfig* config,
bool observe_prefs = true);
~ConnectorsManager() override;
// Validates which settings should be applied to an analysis connector event
// against cached policies. This function will prioritize new connector
// policies over legacy ones if they are set.
std::optional<AnalysisSettings> GetAnalysisSettings(
const GURL& url,
AnalysisConnector connector);
#if BUILDFLAG(IS_CHROMEOS)
std::optional<AnalysisSettings> GetAnalysisSettings(
content::BrowserContext* context,
const storage::FileSystemURL& source_url,
const storage::FileSystemURL& destination_url,
AnalysisConnector connector);
#endif // BUILDFLAG(IS_CHROMEOS)
// Checks if the corresponding connector is enabled.
bool IsAnalysisConnectorEnabled(AnalysisConnector connector) const;
#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
// Check if the corresponding connector is enabled for any local agent.
bool IsConnectorEnabledForLocalAgent(AnalysisConnector connector) const;
#endif
bool DelayUntilVerdict(AnalysisConnector connector);
std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector,
const std::string& tag);
std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector,
const std::string& tag);
bool GetBypassJustificationRequired(AnalysisConnector connector,
const std::string& tag);
std::vector<std::string> GetAnalysisServiceProviderNames(
AnalysisConnector connector);
std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs(
AnalysisConnector connector);
void SetTelemetryObserverCallback(base::RepeatingCallback<void()> callback);
// Public testing functions.
const AnalysisConnectorsSettings& GetAnalysisConnectorsSettingsForTesting()
const;
const base::RepeatingCallback<void()> GetTelemetryObserverCallbackForTesting()
const;
private:
#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
// BrowserListObserver overrides:
void OnBrowserAdded(Browser* browser) override;
void OnBrowserRemoved(Browser* browser) override;
// TabStripModelObserver overrides:
void OnTabStripModelChanged(
TabStripModel* tab_strip_model,
const TabStripModelChange& change,
const TabStripSelectionChange& selection) override;
#endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
// Read and cache the policy corresponding to |connector|.
void CacheAnalysisConnectorPolicy(AnalysisConnector connector) const;
// Get data location region from policy.
DataRegion GetDataRegion(AnalysisConnector connector) const;
#if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
// Close connection with local agent if all the relevant connectors are turned
// off for it.
void MaybeCloseLocalContentAnalysisAgentConnection();
#endif // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
// Re-cache analysis connector policy and update local agent connection if
// needed.
void OnPrefChanged(AnalysisConnector connector);
// Sets up |pref_change_registrar_|. Used by the constructor and
// SetUpForTesting.
void StartObservingPref(AnalysisConnector connector);
// ConnectorsManagerBase overrides:
void StartObservingPrefs(PrefService* pref_service) override;
// Cached values of the connector policies. Updated when a connector is first
// used or when a policy is updated. Analysis connectors settings are
// mutable because they maybe updated by a call to IsConnectorEnabled(),
// which is a const method.
mutable AnalysisConnectorsSettings analysis_connector_settings_;
};
} // namespace enterprise_connectors
#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_
|