1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef CHROMECAST_BROWSER_BLUETOOTH_CAST_BLUETOOTH_CHOOSER_H_
- #define CHROMECAST_BROWSER_BLUETOOTH_CAST_BLUETOOTH_CHOOSER_H_
- #include <string>
- #include <unordered_set>
- #include "chromecast/browser/bluetooth/public/mojom/web_bluetooth.mojom.h"
- #include "content/public/browser/bluetooth_chooser.h"
- #include "mojo/public/cpp/bindings/pending_remote.h"
- #include "mojo/public/cpp/bindings/receiver.h"
- namespace chromecast {
- // This class requests access from a remote BluetoothDeviceAccessProvider
- // implemented by the Activity's host. The host will update this client with
- // whitelisted devices via GrantAccess(). Meanwhile, the WebBluetooth stack will
- // add devices that match the application's filter via AddOrUpdateDevice(). The
- // first device which matches both will be selected.
- class CastBluetoothChooser : public content::BluetoothChooser,
- public mojom::BluetoothDeviceAccessProviderClient {
- public:
- // |event_handler| is called when an approved device is discovered, or when
- // the |provider| destroys the connection to this client. |this| may destroy
- // |provider| immediately after requesting access.
- CastBluetoothChooser(content::BluetoothChooser::EventHandler event_handler,
- mojo::PendingRemote<mojom::BluetoothDeviceAccessProvider>
- pending_provider);
- CastBluetoothChooser(const CastBluetoothChooser&) = delete;
- CastBluetoothChooser& operator=(const CastBluetoothChooser&) = delete;
- ~CastBluetoothChooser() override;
- private:
- // mojom::BluetoothDeviceAccessProviderClient implementation:
- void GrantAccess(const std::string& address) override;
- void GrantAccessToAllDevices() override;
- // content::BluetoothChooser implementation:
- void AddOrUpdateDevice(const std::string& device_id,
- bool should_update_name,
- const std::u16string& device_name,
- bool is_gatt_connected,
- bool is_paired,
- int signal_strength_level) override;
- // Runs the event_handler and resets the client receiver. After this is
- // called, this class should not be used.
- void RunEventHandlerAndResetReceiver(content::BluetoothChooserEvent event,
- std::string address);
- // Called when the remote connection held by |receiver_| is torn down.
- void OnClientConnectionError();
- content::BluetoothChooser::EventHandler event_handler_;
- mojo::Receiver<mojom::BluetoothDeviceAccessProviderClient> receiver_{this};
- std::unordered_set<std::string> available_devices_;
- std::unordered_set<std::string> approved_devices_;
- bool all_devices_approved_ = false;
- };
- } // namespace chromecast
- #endif // CHROMECAST_BROWSER_BLUETOOTH_CAST_BLUETOOTH_CHOOSER_H_
|