blob: 3ccb7d9b6cb091ad83f3ceed979c47b3a9016764 [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
Hans Wennborgb3e433a2020-04-21 11:21:408#include <set>
9
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1310#include "base/callback_forward.h"
11#include "base/optional.h"
Dominique Fauteux-Chapleau5ae64242020-04-17 13:18:2612#include "chrome/browser/enterprise/connectors/common.h"
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1313#include "url/gurl.h"
14
Dominique Fauteux-Chapleau8cf113f12020-04-08 18:14:0315namespace base {
16template <typename T>
17struct DefaultSingletonTraits;
18}
19
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1320namespace enterprise_connectors {
21
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1322// Manages access to Connector policies. This class is responsible for caching
23// the Connector policies, validate them against approved service providers and
24// provide a simple interface to them.
25class ConnectorsManager {
26 public:
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1327 // Callback used to retrieve AnalysisSettings objects from the manager
28 // asynchronously. base::nullopt means no analysis should take place.
29 using AnalysisSettingsCallback =
30 base::OnceCallback<void(base::Optional<AnalysisSettings>)>;
31
Dominique Fauteux-Chapleau8cf113f12020-04-08 18:14:0332 static ConnectorsManager* GetInstance();
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1333
34 // Validates which settings should be applied to an analysis connector event
35 // against cached policies.
36 void GetAnalysisSettings(const GURL& url,
37 AnalysisConnector connector,
38 AnalysisSettingsCallback callback);
39
Dominique Fauteux-Chapleauccf53092020-04-08 17:15:2840 // Public legacy functions.
41 // These functions are used to interact with legacy policies and should only
42 // be called while the connectors equivalent isn't available. They should be
43 // removed once legacy policies are deprecated.
44
45 // Check a url against the corresponding URL patterns policies.
46 bool MatchURLAgainstLegacyDlpPolicies(const GURL& url, bool upload) const;
47 bool MatchURLAgainstLegacyMalwarePolicies(const GURL& url, bool upload) const;
48
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1349 private:
Dominique Fauteux-Chapleau8cf113f12020-04-08 18:14:0350 friend struct base::DefaultSingletonTraits<ConnectorsManager>;
51
52 // Constructor and destructor are declared as private so callers use
53 // GetInstance instead.
54 ConnectorsManager();
55 ~ConnectorsManager();
56
Dominique Fauteux-Chapleauccf53092020-04-08 17:15:2857 // Private legacy functions.
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1358 // These functions are used to interact with legacy policies and should stay
59 // private. They should be removed once legacy policies are deprecated.
60
61 // Returns analysis settings based on legacy policies.
62 base::Optional<AnalysisSettings> GetAnalysisSettingsFromLegacyPolicies(
63 const GURL& url,
64 AnalysisConnector connector) const;
65
66 BlockUntilVerdict LegacyBlockUntilVerdict(bool upload) const;
67 bool LegacyBlockPasswordProtectedFiles(bool upload) const;
68 bool LegacyBlockLargeFiles(bool upload) const;
69 bool LegacyBlockUnsupportedFileTypes(bool upload) const;
70
Dominique Fauteux-Chapleauc2d0a172020-04-01 20:04:1371 std::set<std::string> MatchURLAgainstLegacyPolicies(const GURL& url,
72 bool upload) const;
73};
74
75} // namespace enterprise_connectors
76
77#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_CONNECTORS_MANAGER_H_