| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  | // Copyright (c) 2020 Microsoft, Inc.
 | 
					
						
							|  |  |  | // Use of this source code is governed by the MIT license that can be
 | 
					
						
							|  |  |  | // found in the LICENSE file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-22 08:34:31 +01:00
										 |  |  | #ifndef ELECTRON_SHELL_BROWSER_SERIAL_ELECTRON_SERIAL_DELEGATE_H_
 | 
					
						
							|  |  |  | #define ELECTRON_SHELL_BROWSER_SERIAL_ELECTRON_SERIAL_DELEGATE_H_
 | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <memory>
 | 
					
						
							|  |  |  | #include <unordered_map>
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "base/memory/weak_ptr.h"
 | 
					
						
							| 
									
										
										
										
											2024-07-22 04:31:32 -05:00
										 |  |  | #include "base/observer_list.h"
 | 
					
						
							| 
									
										
										
										
											2022-10-17 10:22:24 -04:00
										 |  |  | #include "base/scoped_observation.h"
 | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  | #include "content/public/browser/serial_delegate.h"
 | 
					
						
							| 
									
										
										
										
											2022-07-25 10:50:19 -04:00
										 |  |  | #include "shell/browser/serial/serial_chooser_context.h"
 | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  | #include "shell/browser/serial/serial_chooser_controller.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace electron { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SerialChooserController; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 10:50:19 -04:00
										 |  |  | class ElectronSerialDelegate : public content::SerialDelegate, | 
					
						
							| 
									
										
										
										
											2024-05-29 13:07:02 -05:00
										 |  |  |                                private SerialChooserContext::PortObserver { | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  |  public: | 
					
						
							|  |  |  |   ElectronSerialDelegate(); | 
					
						
							|  |  |  |   ~ElectronSerialDelegate() override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-03 12:41:45 +01:00
										 |  |  |   // disable copy
 | 
					
						
							|  |  |  |   ElectronSerialDelegate(const ElectronSerialDelegate&) = delete; | 
					
						
							|  |  |  |   ElectronSerialDelegate& operator=(const ElectronSerialDelegate&) = delete; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-20 10:49:07 +02:00
										 |  |  |   // content::SerialDelegate:
 | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  |   std::unique_ptr<content::SerialChooser> RunChooser( | 
					
						
							|  |  |  |       content::RenderFrameHost* frame, | 
					
						
							|  |  |  |       std::vector<blink::mojom::SerialPortFilterPtr> filters, | 
					
						
							| 
									
										
										
										
											2023-06-09 16:08:36 -07:00
										 |  |  |       std::vector<device::BluetoothUUID> allowed_bluetooth_service_class_ids, | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  |       content::SerialChooser::Callback callback) override; | 
					
						
							|  |  |  |   bool CanRequestPortPermission(content::RenderFrameHost* frame) override; | 
					
						
							|  |  |  |   bool HasPortPermission(content::RenderFrameHost* frame, | 
					
						
							|  |  |  |                          const device::mojom::SerialPortInfo& port) override; | 
					
						
							| 
									
										
										
										
											2022-05-17 12:48:40 -04:00
										 |  |  |   void RevokePortPermissionWebInitiated( | 
					
						
							|  |  |  |       content::RenderFrameHost* frame, | 
					
						
							|  |  |  |       const base::UnguessableToken& token) override; | 
					
						
							|  |  |  |   const device::mojom::SerialPortInfo* GetPortInfo( | 
					
						
							|  |  |  |       content::RenderFrameHost* frame, | 
					
						
							|  |  |  |       const base::UnguessableToken& token) override; | 
					
						
							| 
									
										
										
										
											2022-10-18 02:22:32 -07:00
										 |  |  |   device::mojom::SerialPortManager* GetPortManager( | 
					
						
							|  |  |  |       content::RenderFrameHost* frame) override; | 
					
						
							|  |  |  |   void AddObserver(content::RenderFrameHost* frame, | 
					
						
							| 
									
										
										
										
											2022-12-13 19:55:08 +01:00
										 |  |  |                    content::SerialDelegate::Observer* observer) override; | 
					
						
							| 
									
										
										
										
											2022-10-18 02:22:32 -07:00
										 |  |  |   void RemoveObserver(content::RenderFrameHost* frame, | 
					
						
							| 
									
										
										
										
											2022-12-13 19:55:08 +01:00
										 |  |  |                       content::SerialDelegate::Observer* observer) override; | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   void DeleteControllerForFrame(content::RenderFrameHost* render_frame_host); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 10:50:19 -04:00
										 |  |  |   // SerialChooserContext::PortObserver:
 | 
					
						
							|  |  |  |   void OnPortAdded(const device::mojom::SerialPortInfo& port) override; | 
					
						
							|  |  |  |   void OnPortRemoved(const device::mojom::SerialPortInfo& port) override; | 
					
						
							| 
									
										
										
										
											2024-03-12 10:15:41 +01:00
										 |  |  |   void OnPortConnectedStateChanged( | 
					
						
							|  |  |  |       const device::mojom::SerialPortInfo& port) override {} | 
					
						
							| 
									
										
										
										
											2022-07-25 10:50:19 -04:00
										 |  |  |   void OnPortManagerConnectionError() override; | 
					
						
							|  |  |  |   void OnPermissionRevoked(const url::Origin& origin) override {} | 
					
						
							|  |  |  |   void OnSerialChooserContextShutdown() override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  |  private: | 
					
						
							|  |  |  |   SerialChooserController* ControllerForFrame( | 
					
						
							|  |  |  |       content::RenderFrameHost* render_frame_host); | 
					
						
							|  |  |  |   SerialChooserController* AddControllerForFrame( | 
					
						
							|  |  |  |       content::RenderFrameHost* render_frame_host, | 
					
						
							|  |  |  |       std::vector<blink::mojom::SerialPortFilterPtr> filters, | 
					
						
							| 
									
										
										
										
											2024-03-28 18:23:13 +01:00
										 |  |  |       std::vector<device::BluetoothUUID> allowed_bluetooth_service_class_ids, | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  |       content::SerialChooser::Callback callback); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 10:50:19 -04:00
										 |  |  |   base::ScopedObservation<SerialChooserContext, | 
					
						
							| 
									
										
										
										
											2022-11-17 14:59:23 -05:00
										 |  |  |                           SerialChooserContext::PortObserver> | 
					
						
							| 
									
										
										
										
											2022-07-25 10:50:19 -04:00
										 |  |  |       port_observation_{this}; | 
					
						
							|  |  |  |   base::ObserverList<content::SerialDelegate::Observer> observer_list_; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 12:22:03 -04:00
										 |  |  |   std::unordered_map<content::RenderFrameHost*, | 
					
						
							|  |  |  |                      std::unique_ptr<SerialChooserController>> | 
					
						
							|  |  |  |       controller_map_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   base::WeakPtrFactory<ElectronSerialDelegate> weak_factory_{this}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace electron
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-17 14:59:23 -05:00
										 |  |  | namespace base { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <> | 
					
						
							| 
									
										
										
										
											2023-04-26 16:40:02 +02:00
										 |  |  | struct ScopedObservationTraits<electron::SerialChooserContext, | 
					
						
							|  |  |  |                                electron::SerialChooserContext::PortObserver> { | 
					
						
							| 
									
										
										
										
											2022-11-17 14:59:23 -05:00
										 |  |  |   static void AddObserver( | 
					
						
							|  |  |  |       electron::SerialChooserContext* source, | 
					
						
							|  |  |  |       electron::SerialChooserContext::PortObserver* observer) { | 
					
						
							|  |  |  |     source->AddPortObserver(observer); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   static void RemoveObserver( | 
					
						
							|  |  |  |       electron::SerialChooserContext* source, | 
					
						
							|  |  |  |       electron::SerialChooserContext::PortObserver* observer) { | 
					
						
							|  |  |  |     source->RemovePortObserver(observer); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace base
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-22 08:34:31 +01:00
										 |  |  | #endif  // ELECTRON_SHELL_BROWSER_SERIAL_ELECTRON_SERIAL_DELEGATE_H_
 |