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
|
// Copyright 2021 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_SERIAL_SERIAL_POLICY_ALLOWED_PORTS_H_
#define CHROME_BROWSER_SERIAL_SERIAL_POLICY_ALLOWED_PORTS_H_
#include <map>
#include <set>
#include "components/prefs/pref_change_registrar.h"
#include "url/origin.h"
namespace device {
namespace mojom {
class SerialPortInfo;
} // namespace mojom
} // namespace device
class PrefRegistrySimple;
class PrefService;
// This class is used to maintain and interpret the SerialAllowForUrls and
// SerialAllowUsbDevicesForUrls policies.
//
// A PrefChangeRegistrar is used to observe changes to the preference values so
// that the policy can be updated in real-time.
class SerialPolicyAllowedPorts {
public:
explicit SerialPolicyAllowedPorts(PrefService* pref_service);
SerialPolicyAllowedPorts(SerialPolicyAllowedPorts& other) = delete;
SerialPolicyAllowedPorts& operator=(SerialPolicyAllowedPorts& other) = delete;
~SerialPolicyAllowedPorts();
static void RegisterPrefs(PrefRegistrySimple* registry);
// Checks if |origin| is allowed to use the port with |port_info|.
bool HasPortPermission(const url::Origin& origin,
const device::mojom::SerialPortInfo& port_info);
const std::map<std::pair<int, int>, std::set<url::Origin>>&
usb_device_policy() const {
return usb_device_policy_;
}
const std::map<int, std::set<url::Origin>>& usb_vendor_policy() const {
return usb_vendor_policy_;
}
const std::set<url::Origin>& all_ports_policy() const {
return all_ports_policy_;
}
private:
void LoadAllowAllPortsForUrlsPolicy();
void LoadAllowUsbDevicesForUrlsPolicy();
PrefChangeRegistrar pref_change_registrar_;
// Stores the current policy configuration for specific USB devices
// identified by vendor and product IDs (usb_device_policy_), all USB
// devices from a particular vendor ID (usb_vendor_policy_) and origins
// which are allowed to access all ports.
std::map<std::pair<int, int>, std::set<url::Origin>> usb_device_policy_;
std::map<int, std::set<url::Origin>> usb_vendor_policy_;
std::set<url::Origin> all_ports_policy_;
};
#endif // CHROME_BROWSER_SERIAL_SERIAL_POLICY_ALLOWED_PORTS_H_
|