1// Copyright (c) 2012 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 CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_H_
6#define CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_H_
7
8#include <string>
9
10#include "base/memory/ref_counted.h"
11#include "base/memory/scoped_ptr.h"
12#include "chrome/browser/extensions/api/bluetooth/bluetooth_extension_function.h"
13#include "chrome/common/extensions/api/bluetooth.h"
14#include "device/bluetooth/bluetooth_device.h"
15#include "extensions/browser/browser_context_keyed_api_factory.h"
16#include "extensions/browser/event_router.h"
17#include "extensions/browser/extension_function.h"
18
19namespace content {
20class BrowserContext;
21}
22
23namespace device {
24class BluetoothAdapter;
25}
26
27namespace extensions {
28
29class BluetoothEventRouter;
30
31// The profile-keyed service that manages the bluetooth extension API.
32// All methods of this class must be called on the UI thread.
33// TODO(rpaquay): Rename this and move to separate file.
34class BluetoothAPI : public BrowserContextKeyedAPI,
35                     public EventRouter::Observer {
36 public:
37  // Convenience method to get the BluetoothAPI for a browser context.
38  static BluetoothAPI* Get(content::BrowserContext* context);
39
40  static BrowserContextKeyedAPIFactory<BluetoothAPI>* GetFactoryInstance();
41
42  explicit BluetoothAPI(content::BrowserContext* context);
43  virtual ~BluetoothAPI();
44
45  BluetoothEventRouter* event_router();
46
47  // KeyedService implementation.
48  virtual void Shutdown() OVERRIDE;
49
50  // EventRouter::Observer implementation.
51  virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE;
52  virtual void OnListenerRemoved(const EventListenerInfo& details) OVERRIDE;
53
54 private:
55  // BrowserContextKeyedAPI implementation.
56  friend class BrowserContextKeyedAPIFactory<BluetoothAPI>;
57  static const char* service_name() { return "BluetoothAPI"; }
58  static const bool kServiceRedirectedInIncognito = true;
59  static const bool kServiceIsNULLWhileTesting = true;
60
61  content::BrowserContext* browser_context_;
62
63  // Created lazily on first access.
64  scoped_ptr<BluetoothEventRouter> event_router_;
65};
66
67namespace api {
68
69class BluetoothGetAdapterStateFunction : public BluetoothExtensionFunction {
70 public:
71  DECLARE_EXTENSION_FUNCTION("bluetooth.getAdapterState",
72                             BLUETOOTH_GETADAPTERSTATE)
73
74 protected:
75  virtual ~BluetoothGetAdapterStateFunction();
76
77  // BluetoothExtensionFunction:
78  virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE;
79};
80
81class BluetoothGetDevicesFunction : public BluetoothExtensionFunction {
82 public:
83  DECLARE_EXTENSION_FUNCTION("bluetooth.getDevices", BLUETOOTH_GETDEVICES)
84
85 protected:
86  virtual ~BluetoothGetDevicesFunction();
87
88  // BluetoothExtensionFunction:
89  virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE;
90};
91
92class BluetoothGetDeviceFunction : public BluetoothExtensionFunction {
93 public:
94  DECLARE_EXTENSION_FUNCTION("bluetooth.getDevice", BLUETOOTH_GETDEVICE)
95
96  // BluetoothExtensionFunction:
97  virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE;
98
99 protected:
100  virtual ~BluetoothGetDeviceFunction();
101};
102
103class BluetoothStartDiscoveryFunction : public BluetoothExtensionFunction {
104 public:
105  DECLARE_EXTENSION_FUNCTION("bluetooth.startDiscovery",
106                             BLUETOOTH_STARTDISCOVERY)
107
108 protected:
109  virtual ~BluetoothStartDiscoveryFunction() {}
110
111  // BluetoothExtensionFunction:
112  virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE;
113
114 private:
115  void OnSuccessCallback();
116  void OnErrorCallback();
117};
118
119class BluetoothStopDiscoveryFunction : public BluetoothExtensionFunction {
120 public:
121  DECLARE_EXTENSION_FUNCTION("bluetooth.stopDiscovery", BLUETOOTH_STOPDISCOVERY)
122
123 protected:
124  virtual ~BluetoothStopDiscoveryFunction() {}
125
126  // BluetoothExtensionFunction:
127  virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE;
128
129 private:
130  void OnSuccessCallback();
131  void OnErrorCallback();
132};
133
134}  // namespace api
135}  // namespace extensions
136
137#endif  // CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_H_
138