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 EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_EXTENSION_FUNCTION_H_
6#define EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_EXTENSION_FUNCTION_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/memory/weak_ptr.h"
10#include "extensions/browser/extension_function.h"
11
12namespace device {
13
14class BluetoothAdapter;
15
16}  // namespace device
17
18namespace extensions {
19namespace core_api {
20
21// Base class for bluetooth extension functions. This class initializes
22// bluetooth adapter and calls (on the UI thread) DoWork() implemented by
23// individual bluetooth extension functions.
24class BluetoothExtensionFunction : public AsyncExtensionFunction {
25 public:
26  BluetoothExtensionFunction();
27
28 protected:
29  virtual ~BluetoothExtensionFunction();
30
31  // ExtensionFunction:
32  virtual bool RunAsync() OVERRIDE;
33
34 private:
35  void RunOnAdapterReady(scoped_refptr<device::BluetoothAdapter> adapter);
36
37  // Implemented by individual bluetooth extension functions, called
38  // automatically on the UI thread once |adapter| has been initialized.
39  virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) = 0;
40
41  DISALLOW_COPY_AND_ASSIGN(BluetoothExtensionFunction);
42};
43
44}  // namespace core_api
45}  // namespace extensions
46
47#endif  // EXTENSIONS_BROWSER_API_BLUETOOTH_BLUETOOTH_EXTENSION_FUNCTION_H_
48