Home | History | Annotate | Download | only in bluetooth
      1 // Copyright 2014 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 EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_PRIVATE_API_H_
      6 #define EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_PRIVATE_API_H_
      7 
      8 #include "base/callback_forward.h"
      9 #include "extensions/browser/api/bluetooth/bluetooth_extension_function.h"
     10 #include "extensions/browser/browser_context_keyed_api_factory.h"
     11 #include "extensions/browser/event_router.h"
     12 
     13 namespace device {
     14 class BluetoothAdapter;
     15 }
     16 
     17 namespace extensions {
     18 
     19 class BluetoothApiPairingDelegate;
     20 
     21 // The profile-keyed service that manages the bluetoothPrivate extension API.
     22 class BluetoothPrivateAPI : public BrowserContextKeyedAPI,
     23                             public EventRouter::Observer {
     24  public:
     25   static BrowserContextKeyedAPIFactory<BluetoothPrivateAPI>*
     26       GetFactoryInstance();
     27 
     28   explicit BluetoothPrivateAPI(content::BrowserContext* context);
     29   virtual ~BluetoothPrivateAPI();
     30 
     31   // KeyedService implementation.
     32   virtual void Shutdown() OVERRIDE;
     33 
     34   // EventRouter::Observer implementation.
     35   virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE;
     36   virtual void OnListenerRemoved(const EventListenerInfo& details) OVERRIDE;
     37 
     38   // BrowserContextKeyedAPI implementation.
     39   static const char* service_name() { return "BluetoothPrivateAPI"; }
     40   static const bool kServiceRedirectedInIncognito = true;
     41   static const bool kServiceIsNULLWhileTesting = true;
     42 
     43  private:
     44   friend class BrowserContextKeyedAPIFactory<BluetoothPrivateAPI>;
     45 
     46   content::BrowserContext* browser_context_;
     47 };
     48 
     49 namespace core_api {
     50 
     51 class BluetoothPrivateSetAdapterStateFunction
     52     : public BluetoothExtensionFunction {
     53  public:
     54   DECLARE_EXTENSION_FUNCTION("bluetoothPrivate.setAdapterState",
     55                              BLUETOOTHPRIVATE_SETADAPTERSTATE)
     56   BluetoothPrivateSetAdapterStateFunction();
     57 
     58  private:
     59   virtual ~BluetoothPrivateSetAdapterStateFunction();
     60 
     61   base::Closure CreatePropertySetCallback(const std::string& property_name);
     62   base::Closure CreatePropertyErrorCallback(const std::string& property_name);
     63   void OnAdapterPropertySet(const std::string& property);
     64   void OnAdapterPropertyError(const std::string& property);
     65   void SendError();
     66 
     67   // BluetoothExtensionFunction overrides:
     68   virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE;
     69 
     70   // Set of expected adapter properties to be changed.
     71   std::set<std::string> pending_properties_;
     72 
     73   // Set of adapter properties that were not set successfully.
     74   std::set<std::string> failed_properties_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(BluetoothPrivateSetAdapterStateFunction);
     77 };
     78 
     79 class BluetoothPrivateSetPairingResponseFunction
     80     : public BluetoothExtensionFunction {
     81  public:
     82   DECLARE_EXTENSION_FUNCTION("bluetoothPrivate.setPairingResponse",
     83                              BLUETOOTHPRIVATE_SETPAIRINGRESPONSE)
     84   BluetoothPrivateSetPairingResponseFunction();
     85   // BluetoothExtensionFunction overrides:
     86   virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE;
     87 
     88  private:
     89   virtual ~BluetoothPrivateSetPairingResponseFunction();
     90   DISALLOW_COPY_AND_ASSIGN(BluetoothPrivateSetPairingResponseFunction);
     91 };
     92 
     93 }  // namespace core_api
     94 
     95 }  // namespace extensions
     96 
     97 #endif  // EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_PRIVATE_API_H_
     98