Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: content/browser/bluetooth/bluetooth_dispatcher_host.h

Issue 1922923002: bluetooth: Move requestDevice to mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-separate-tests-request-device
Patch Set: Remove debug log Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_
Jeffrey Yasskin 2016/05/13 04:41:58 Any idea why this is showing as a modification ins
ortuno 2016/05/13 20:11:17 Maybe because I used this file as a base for bluet
6 #define CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_
7
8 #include <stdint.h>
9
10 #include <map>
11
12 #include "base/id_map.h"
13 #include "base/macros.h"
14 #include "base/memory/scoped_vector.h"
15 #include "base/memory/weak_ptr.h"
16 #include "content/browser/bluetooth/bluetooth_allowed_devices_map.h"
17 #include "content/public/browser/bluetooth_chooser.h"
18 #include "content/public/browser/browser_message_filter.h"
19 #include "device/bluetooth/bluetooth_adapter.h"
20 #include "device/bluetooth/bluetooth_gatt_notify_session.h"
21 #include "device/bluetooth/bluetooth_remote_gatt_service.h"
22
23 namespace device {
24 class BluetoothUUID;
25 }
26
27 namespace content {
28
29 class WebBluetoothServiceImpl;
30
31 struct BluetoothScanFilter;
32 struct CacheQueryResult;
33
34 // Dispatches and sends bluetooth related messages sent to/from a child
35 // process BluetoothDispatcher from/to the main browser process.
36 //
37 // Intended to be instantiated by the RenderProcessHost and installed as
38 // a filter on the channel. BrowserMessageFilter is refcounted and typically
39 // lives as long as it is installed on a channel.
40 //
41 // UI Thread Note:
42 // BluetoothDispatcherHost is constructed, operates, and destroyed on the UI
43 // thread because BluetoothAdapter and related objects live there.
44 class CONTENT_EXPORT BluetoothDispatcherHost final
45 : public BrowserMessageFilter,
46 public device::BluetoothAdapter::Observer {
47 public:
48 BluetoothDispatcherHost(int render_process_id);
49 // BrowserMessageFilter:
50 void OnDestruct() const override;
51 void OverrideThreadForMessage(const IPC::Message& message,
52 BrowserThread::ID* thread) override;
53 bool OnMessageReceived(const IPC::Message& message) override;
54
55 void SetBluetoothAdapterForTesting(
56 scoped_refptr<device::BluetoothAdapter> mock_adapter);
57
58 // Temporary functions so that WebBluetoothServices can add themselves as
59 // observers of the Bluetooth Adapter without having to get an adapter for
60 // themselves.
61 // TODO(ortuno): Remove once WebBluetoothServiceImpl gets its own adapter.
62 // https://crbug.com/508771
63 void AddAdapterObserver(device::BluetoothAdapter::Observer* observer);
64 void RemoveAdapterObserver(device::BluetoothAdapter::Observer* observer);
65
66 protected:
67 ~BluetoothDispatcherHost() override;
68
69 private:
70 friend class WebBluetoothServiceImpl;
71 friend class base::DeleteHelper<BluetoothDispatcherHost>;
72 friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
73
74 struct RequestDeviceSession;
75
76 // Set |adapter_| to a BluetoothAdapter instance and register observers,
77 // releasing references to previous |adapter_|.
78 //
79 // We currently keep track of observers that used BluetoothDispatcherHost
80 // to register themselves on the adapter and remove them from |adapter_| and
81 // add them to |adapter| when this function is called.
82 // TODO(ortuno): Observers should add/remove themselves to/from the adapter.
83 // http://crbug.com/603291
84 void set_adapter(scoped_refptr<device::BluetoothAdapter> adapter);
85
86 // Makes sure a BluetoothDiscoverySession is active for |session|, and resets
87 // its timeout.
88 void StartDeviceDiscovery(RequestDeviceSession* session, int chooser_id);
89
90 // Stops all BluetoothDiscoverySessions being run for requestDevice()
91 // choosers.
92 void StopDeviceDiscovery();
93
94 // BluetoothAdapter::Observer:
95 void AdapterPoweredChanged(device::BluetoothAdapter* adapter,
96 bool powered) override;
97 void DeviceAdded(device::BluetoothAdapter* adapter,
98 device::BluetoothDevice* device) override;
99 void DeviceRemoved(device::BluetoothAdapter* adapter,
100 device::BluetoothDevice* device) override;
101
102 // IPC Handlers, see definitions in bluetooth_messages.h.
103 void OnRequestDevice(
104 int thread_id,
105 int request_id,
106 int frame_routing_id,
107 const std::vector<content::BluetoothScanFilter>& filters,
108 const std::vector<device::BluetoothUUID>& optional_services);
109
110 // Callbacks for BluetoothDevice::OnRequestDevice.
111 // If necessary, the adapter must be obtained before continuing to Impl.
112 void OnGetAdapter(base::Closure continuation,
113 scoped_refptr<device::BluetoothAdapter> adapter);
114 void OnRequestDeviceImpl(
115 int thread_id,
116 int request_id,
117 int frame_routing_id,
118 const std::vector<content::BluetoothScanFilter>& filters,
119 const std::vector<device::BluetoothUUID>& optional_services);
120
121 // Callbacks for BluetoothAdapter::StartDiscoverySession.
122 void OnDiscoverySessionStarted(
123 int chooser_id,
124 std::unique_ptr<device::BluetoothDiscoverySession> discovery_session);
125 void OnDiscoverySessionStartedError(int chooser_id);
126
127 // BluetoothChooser::EventHandler:
128 void OnBluetoothChooserEvent(int chooser_id,
129 BluetoothChooser::Event event,
130 const std::string& device_id);
131
132 // The chooser implementation yields to the event loop to avoid re-entering
133 // code that's still using the RequestDeviceSession, and continues with this
134 // function.
135 void FinishClosingChooser(int chooser_id,
136 BluetoothChooser::Event event,
137 const std::string& device_id);
138
139 // Functions to query the platform cache for the bluetooth object.
140 // result.outcome == CacheQueryOutcome::SUCCESS if the object was found in the
141 // cache. Otherwise result.outcome that can used to record the outcome and
142 // result.error will contain the error that should be send to the renderer.
143 // One of the possible outcomes is BAD_RENDERER. In this case the outcome
144 // was already recorded and since there renderer crashed there is no need to
145 // send a response.
146 // Queries the platform cache for a Device with |device_id| for |origin|.
147 // Fills in the |outcome| field and the |device| field if successful.
148 CacheQueryResult QueryCacheForDevice(const url::Origin& origin,
149 const std::string& device_id);
150
151 int render_process_id_;
152
153 // Maps a (thread_id,request_id) to information about its requestDevice call,
154 // including the chooser dialog.
155 // An entry is added to this map in OnRequestDevice, and should be removed
156 // again everywhere a requestDevice() reply is sent.
157 IDMap<RequestDeviceSession, IDMapOwnPointer> request_device_sessions_;
158
159 BluetoothAllowedDevicesMap allowed_devices_map_;
160
161 // Defines how long to scan for and how long to discover services for.
162 int current_delay_time_;
163
164 // A BluetoothAdapter instance representing an adapter of the system.
165 scoped_refptr<device::BluetoothAdapter> adapter_;
166
167 std::unordered_set<device::BluetoothAdapter::Observer*> adapter_observers_;
168
169 // Automatically stops Bluetooth discovery a set amount of time after it was
170 // started. We have a single timer for all of Web Bluetooth because it's
171 // simpler than tracking timeouts for each RequestDeviceSession individually,
172 // and because there's no harm in extending the length of a few discovery
173 // sessions when other sessions are active.
174 base::Timer discovery_session_timer_;
175
176 // |weak_ptr_on_ui_thread_| provides weak pointers, e.g. for callbacks, and
177 // because it exists and has been bound to the UI thread enforces that all
178 // copies verify they are also used on the UI thread.
179 base::WeakPtr<BluetoothDispatcherHost> weak_ptr_on_ui_thread_;
180 base::WeakPtrFactory<BluetoothDispatcherHost> weak_ptr_factory_;
181
182 DISALLOW_COPY_AND_ASSIGN(BluetoothDispatcherHost);
183 };
184
185 } // namespace content
186
187 #endif // CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698