15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/bluetooth/bluetooth_extension_function.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/common/extensions/api/bluetooth.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "device/bluetooth/bluetooth_device.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/extension_function.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content { 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class BrowserContext; 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace device { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BluetoothAdapter; 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass BluetoothEventRouter; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The profile-keyed service that manages the bluetooth extension API. 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// All methods of this class must be called on the UI thread. 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// TODO(rpaquay): Rename this and move to separate file. 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class BluetoothAPI : public BrowserContextKeyedAPI, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public EventRouter::Observer { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Convenience method to get the BluetoothAPI for a browser context. 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static BluetoothAPI* Get(content::BrowserContext* context); 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static BrowserContextKeyedAPIFactory<BluetoothAPI>* GetFactoryInstance(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) explicit BluetoothAPI(content::BrowserContext* context); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~BluetoothAPI(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BluetoothEventRouter* event_router(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // KeyedService implementation. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // EventRouter::Observer implementation. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnListenerRemoved(const EventListenerInfo& details) OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // BrowserContextKeyedAPI implementation. 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch friend class BrowserContextKeyedAPIFactory<BluetoothAPI>; 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const char* service_name() { return "BluetoothAPI"; } 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const bool kServiceRedirectedInIncognito = true; 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const bool kServiceIsNULLWhileTesting = true; 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::BrowserContext* browser_context_; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Created lazily on first access. 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<BluetoothEventRouter> event_router_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace api { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass BluetoothGetAdapterStateFunction : public BluetoothExtensionFunction { 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DECLARE_EXTENSION_FUNCTION("bluetooth.getAdapterState", 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BLUETOOTH_GETADAPTERSTATE) 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~BluetoothGetAdapterStateFunction(); 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // BluetoothExtensionFunction: 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE; 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass BluetoothGetDevicesFunction : public BluetoothExtensionFunction { 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DECLARE_EXTENSION_FUNCTION("bluetooth.getDevices", BLUETOOTH_GETDEVICES) 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~BluetoothGetDevicesFunction(); 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // BluetoothExtensionFunction: 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE; 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass BluetoothGetDeviceFunction : public BluetoothExtensionFunction { 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DECLARE_EXTENSION_FUNCTION("bluetooth.getDevice", BLUETOOTH_GETDEVICE) 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // BluetoothExtensionFunction: 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE; 98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~BluetoothGetDeviceFunction(); 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BluetoothStartDiscoveryFunction : public BluetoothExtensionFunction { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("bluetooth.startDiscovery", 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BLUETOOTH_STARTDISCOVERY) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BluetoothStartDiscoveryFunction() {} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // BluetoothExtensionFunction: 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSuccessCallback(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnErrorCallback(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BluetoothStopDiscoveryFunction : public BluetoothExtensionFunction { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("bluetooth.stopDiscovery", BLUETOOTH_STOPDISCOVERY) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BluetoothStopDiscoveryFunction() {} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // BluetoothExtensionFunction: 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSuccessCallback(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnErrorCallback(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace api 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_H_ 138