| // Copyright (c) 2012 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 EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_API_H_ |
| #define EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_API_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/memory/ref_counted.h" |
| #include "device/bluetooth/bluetooth_device.h" |
| #include "extensions/browser/api/bluetooth/bluetooth_extension_function.h" |
| #include "extensions/browser/browser_context_keyed_api_factory.h" |
| #include "extensions/browser/event_router.h" |
| #include "extensions/browser/extension_function.h" |
| #include "extensions/common/api/bluetooth.h" |
| |
| namespace content { |
| class BrowserContext; |
| } |
| |
| namespace device { |
| class BluetoothAdapter; |
| } |
| |
| namespace extensions { |
| |
| class BluetoothEventRouter; |
| |
| // The profile-keyed service that manages the bluetooth extension API. |
| // All methods of this class must be called on the UI thread. |
| // TODO(rpaquay): Rename this and move to separate file. |
| class BluetoothAPI : public BrowserContextKeyedAPI, |
| public EventRouter::Observer { |
| public: |
| // Convenience method to get the BluetoothAPI for a browser context. |
| static BluetoothAPI* Get(content::BrowserContext* context); |
| |
| static BrowserContextKeyedAPIFactory<BluetoothAPI>* GetFactoryInstance(); |
| |
| explicit BluetoothAPI(content::BrowserContext* context); |
| ~BluetoothAPI() override; |
| |
| BluetoothEventRouter* event_router(); |
| |
| // KeyedService implementation. |
| void Shutdown() override; |
| |
| // EventRouter::Observer implementation. |
| void OnListenerAdded(const EventListenerInfo& details) override; |
| void OnListenerRemoved(const EventListenerInfo& details) override; |
| |
| private: |
| // BrowserContextKeyedAPI implementation. |
| friend class BrowserContextKeyedAPIFactory<BluetoothAPI>; |
| static const char* service_name() { return "BluetoothAPI"; } |
| static const bool kServiceRedirectedInIncognito = true; |
| static const bool kServiceIsNULLWhileTesting = true; |
| |
| content::BrowserContext* browser_context_; |
| |
| // Created lazily on first access. |
| std::unique_ptr<BluetoothEventRouter> event_router_; |
| }; |
| |
| namespace api { |
| |
| class BluetoothGetAdapterStateFunction : public BluetoothExtensionFunction { |
| public: |
| DECLARE_EXTENSION_FUNCTION("bluetooth.getAdapterState", |
| BLUETOOTH_GETADAPTERSTATE) |
| |
| protected: |
| ~BluetoothGetAdapterStateFunction() override; |
| |
| // BluetoothExtensionFunction: |
| void DoWork(scoped_refptr<device::BluetoothAdapter> adapter) override; |
| }; |
| |
| class BluetoothGetDevicesFunction : public BluetoothExtensionFunction { |
| public: |
| DECLARE_EXTENSION_FUNCTION("bluetooth.getDevices", BLUETOOTH_GETDEVICES) |
| |
| BluetoothGetDevicesFunction(); |
| |
| protected: |
| ~BluetoothGetDevicesFunction() override; |
| |
| // BluetoothExtensionFunction: |
| bool CreateParams() override; |
| void DoWork(scoped_refptr<device::BluetoothAdapter> adapter) override; |
| |
| private: |
| std::unique_ptr<bluetooth::GetDevices::Params> params_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BluetoothGetDevicesFunction); |
| }; |
| |
| class BluetoothGetDeviceFunction : public BluetoothExtensionFunction { |
| public: |
| DECLARE_EXTENSION_FUNCTION("bluetooth.getDevice", BLUETOOTH_GETDEVICE) |
| |
| BluetoothGetDeviceFunction(); |
| |
| // BluetoothExtensionFunction: |
| bool CreateParams() override; |
| void DoWork(scoped_refptr<device::BluetoothAdapter> adapter) override; |
| |
| protected: |
| ~BluetoothGetDeviceFunction() override; |
| |
| private: |
| std::unique_ptr<extensions::api::bluetooth::GetDevice::Params> params_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BluetoothGetDeviceFunction); |
| }; |
| |
| class BluetoothStartDiscoveryFunction : public BluetoothExtensionFunction { |
| public: |
| DECLARE_EXTENSION_FUNCTION("bluetooth.startDiscovery", |
| BLUETOOTH_STARTDISCOVERY) |
| |
| protected: |
| ~BluetoothStartDiscoveryFunction() override {} |
| |
| // BluetoothExtensionFunction: |
| void DoWork(scoped_refptr<device::BluetoothAdapter> adapter) override; |
| |
| private: |
| void OnSuccessCallback(); |
| void OnErrorCallback(); |
| }; |
| |
| class BluetoothStopDiscoveryFunction : public BluetoothExtensionFunction { |
| public: |
| DECLARE_EXTENSION_FUNCTION("bluetooth.stopDiscovery", BLUETOOTH_STOPDISCOVERY) |
| |
| protected: |
| ~BluetoothStopDiscoveryFunction() override {} |
| |
| // BluetoothExtensionFunction: |
| void DoWork(scoped_refptr<device::BluetoothAdapter> adapter) override; |
| |
| private: |
| void OnSuccessCallback(); |
| void OnErrorCallback(); |
| }; |
| |
| } // namespace api |
| } // namespace extensions |
| |
| #endif // EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_API_H_ |