Upload upstream chromium 108.0.5359.1
[platform/framework/web/chromium-efl.git] / services / device / serial / serial_device_enumerator.h
1 // Copyright 2014 The Chromium Authors
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 SERVICES_DEVICE_SERIAL_SERIAL_DEVICE_ENUMERATOR_H_
6 #define SERVICES_DEVICE_SERIAL_SERIAL_DEVICE_ENUMERATOR_H_
7
8 #include <map>
9 #include <memory>
10 #include <vector>
11
12 #include "base/observer_list.h"
13 #include "base/sequence_checker.h"
14 #include "base/unguessable_token.h"
15 #include "services/device/public/mojom/serial.mojom.h"
16 #include "services/device/serial/serial_io_handler.h"
17 #include "third_party/abseil-cpp/absl/types/optional.h"
18
19 namespace base {
20 class FilePath;
21 }
22
23 namespace device {
24
25 // Discovers and enumerates serial devices available to the host.
26 class SerialDeviceEnumerator {
27  public:
28   class Observer : public base::CheckedObserver {
29    public:
30     virtual void OnPortAdded(const mojom::SerialPortInfo& port) = 0;
31     virtual void OnPortRemoved(const mojom::SerialPortInfo& port) = 0;
32   };
33
34   static std::unique_ptr<SerialDeviceEnumerator> Create(
35       scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
36
37   SerialDeviceEnumerator();
38   virtual ~SerialDeviceEnumerator();
39
40   std::vector<mojom::SerialPortInfoPtr> GetDevices();
41   void AddObserver(Observer* observer);
42   void RemoveObserver(Observer* observer);
43
44   absl::optional<base::FilePath> GetPathFromToken(
45       const base::UnguessableToken& token,
46       bool use_alternate_path);
47
48  protected:
49   // These helper methods take care of managing |ports_| and notifying
50   // observers. |port|s passed to AddPort() must be unique and the |token|
51   // passed to RemovePort() must have previously been added.
52   void AddPort(mojom::SerialPortInfoPtr port);
53   void RemovePort(base::UnguessableToken token);
54
55   SEQUENCE_CHECKER(sequence_checker_);
56
57  private:
58   std::map<base::UnguessableToken, mojom::SerialPortInfoPtr> ports_;
59   base::ObserverList<Observer> observer_list_;
60 };
61
62 }  // namespace device
63
64 #endif  // SERVICES_DEVICE_SERIAL_SERIAL_DEVICE_ENUMERATOR_H_