blob: 26714c42bf71e0554c4d0501a2dcc7fbcad03810 [file] [log] [blame]
// 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_