Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / extensions / browser / api / bluetooth / bluetooth_api_pairing_delegate.cc
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 #include "extensions/browser/api/bluetooth/bluetooth_api_pairing_delegate.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "base/values.h"
9 #include "content/public/browser/browser_context.h"
10 #include "device/bluetooth/bluetooth_device.h"
11 #include "extensions/browser/api/bluetooth/bluetooth_api_utils.h"
12 #include "extensions/browser/event_router.h"
13 #include "extensions/browser/extension_system.h"
14 #include "extensions/common/api/bluetooth_private.h"
15
16 namespace extensions {
17
18 namespace bt_private = core_api::bluetooth_private;
19
20 namespace {
21
22 void PopulatePairingEvent(const device::BluetoothDevice* device,
23                           bt_private::PairingEventType type,
24                           bt_private::PairingEvent* out) {
25   core_api::bluetooth::BluetoothDeviceToApiDevice(*device, &out->device);
26   out->pairing = type;
27 }
28
29 }  // namespace
30
31 BluetoothApiPairingDelegate::BluetoothApiPairingDelegate(
32     const std::string& extension_id,
33     content::BrowserContext* browser_context)
34     : extension_id_(extension_id), browser_context_(browser_context) {}
35
36 BluetoothApiPairingDelegate::~BluetoothApiPairingDelegate() {}
37
38 void BluetoothApiPairingDelegate::RequestPinCode(
39     device::BluetoothDevice* device) {
40   bt_private::PairingEvent event;
41   PopulatePairingEvent(
42       device, bt_private::PAIRING_EVENT_TYPE_REQUESTPINCODE, &event);
43   DispatchPairingEvent(event);
44 }
45
46 void BluetoothApiPairingDelegate::RequestPasskey(
47     device::BluetoothDevice* device) {
48   bt_private::PairingEvent event;
49   PopulatePairingEvent(
50       device, bt_private::PAIRING_EVENT_TYPE_REQUESTPASSKEY, &event);
51   DispatchPairingEvent(event);
52 }
53
54 void BluetoothApiPairingDelegate::DisplayPinCode(
55     device::BluetoothDevice* device,
56     const std::string& pincode) {
57   bt_private::PairingEvent event;
58   PopulatePairingEvent(
59       device, bt_private::PAIRING_EVENT_TYPE_DISPLAYPINCODE, &event);
60   event.pincode.reset(new std::string(pincode));
61   DispatchPairingEvent(event);
62 }
63
64 void BluetoothApiPairingDelegate::DisplayPasskey(
65     device::BluetoothDevice* device,
66     uint32 passkey) {
67   bt_private::PairingEvent event;
68   PopulatePairingEvent(
69       device, bt_private::PAIRING_EVENT_TYPE_DISPLAYPASSKEY, &event);
70   event.passkey.reset(new int(passkey));
71   DispatchPairingEvent(event);
72 }
73
74 void BluetoothApiPairingDelegate::KeysEntered(device::BluetoothDevice* device,
75                                               uint32 entered) {
76   bt_private::PairingEvent event;
77   PopulatePairingEvent(
78       device, bt_private::PAIRING_EVENT_TYPE_KEYSENTERED, &event);
79   event.entered_key.reset(new int(entered));
80   DispatchPairingEvent(event);
81 }
82
83 void BluetoothApiPairingDelegate::ConfirmPasskey(
84     device::BluetoothDevice* device,
85     uint32 passkey) {
86   bt_private::PairingEvent event;
87   PopulatePairingEvent(
88       device, bt_private::PAIRING_EVENT_TYPE_CONFIRMPASSKEY, &event);
89   event.passkey.reset(new int(passkey));
90   DispatchPairingEvent(event);
91 }
92
93 void BluetoothApiPairingDelegate::AuthorizePairing(
94     device::BluetoothDevice* device) {
95   bt_private::PairingEvent event;
96   PopulatePairingEvent(
97       device, bt_private::PAIRING_EVENT_TYPE_REQUESTAUTHORIZATION, &event);
98   DispatchPairingEvent(event);
99 }
100
101 void BluetoothApiPairingDelegate::DispatchPairingEvent(
102     const bt_private::PairingEvent& pairing_event) {
103   scoped_ptr<base::ListValue> args =
104       bt_private::OnPairing::Create(pairing_event);
105   scoped_ptr<Event> event(
106       new Event(bt_private::OnPairing::kEventName, args.Pass()));
107   EventRouter::Get(browser_context_)
108       ->DispatchEventToExtension(extension_id_, event.Pass());
109 }
110
111 }  // namespace extensions