• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
19 namespace content {
20 class BrowserContext;
21 }
22 
23 namespace device {
24 class BluetoothAdapter;
25 }
26 
27 namespace extensions {
28 
29 class 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.
34 class 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>;
service_name()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 
67 namespace api {
68 
69 class 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 
81 class 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 
92 class 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 
103 class BluetoothStartDiscoveryFunction : public BluetoothExtensionFunction {
104  public:
105   DECLARE_EXTENSION_FUNCTION("bluetooth.startDiscovery",
106                              BLUETOOTH_STARTDISCOVERY)
107 
108  protected:
~BluetoothStartDiscoveryFunction()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 
119 class BluetoothStopDiscoveryFunction : public BluetoothExtensionFunction {
120  public:
121   DECLARE_EXTENSION_FUNCTION("bluetooth.stopDiscovery", BLUETOOTH_STOPDISCOVERY)
122 
123  protected:
~BluetoothStopDiscoveryFunction()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