1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file. 4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/bluetooth/bluetooth_api_pairing_delegate.h" 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/memory/scoped_ptr.h" 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/values.h" 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "content/public/browser/browser_context.h" 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "device/bluetooth/bluetooth_device.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/bluetooth/bluetooth_api_utils.h" 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/event_router.h" 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/extension_system.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/api/bluetooth_private.h" 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace extensions { 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace bt_private = core_api::bluetooth_private; 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace { 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid PopulatePairingEvent(const device::BluetoothDevice* device, 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEventType type, 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent* out) { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::bluetooth::BluetoothDeviceToApiDevice(*device, &out->device); 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch out->pairing = type; 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochBluetoothApiPairingDelegate::BluetoothApiPairingDelegate( 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::string& extension_id, 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content::BrowserContext* browser_context) 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : extension_id_(extension_id), browser_context_(browser_context) {} 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochBluetoothApiPairingDelegate::~BluetoothApiPairingDelegate() {} 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::RequestPinCode( 39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device::BluetoothDevice* device) { 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent event; 41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch PopulatePairingEvent( 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device, bt_private::PAIRING_EVENT_TYPE_REQUESTPINCODE, &event); 43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DispatchPairingEvent(event); 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::RequestPasskey( 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device::BluetoothDevice* device) { 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent event; 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch PopulatePairingEvent( 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device, bt_private::PAIRING_EVENT_TYPE_REQUESTPASSKEY, &event); 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DispatchPairingEvent(event); 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::DisplayPinCode( 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device::BluetoothDevice* device, 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::string& pincode) { 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent event; 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch PopulatePairingEvent( 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device, bt_private::PAIRING_EVENT_TYPE_DISPLAYPINCODE, &event); 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch event.pincode.reset(new std::string(pincode)); 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DispatchPairingEvent(event); 62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::DisplayPasskey( 65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device::BluetoothDevice* device, 66e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch uint32 passkey) { 67e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent event; 68e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch PopulatePairingEvent( 69e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device, bt_private::PAIRING_EVENT_TYPE_DISPLAYPASSKEY, &event); 70e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch event.passkey.reset(new int(passkey)); 71e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DispatchPairingEvent(event); 72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::KeysEntered(device::BluetoothDevice* device, 75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch uint32 entered) { 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent event; 77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch PopulatePairingEvent( 78e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device, bt_private::PAIRING_EVENT_TYPE_KEYSENTERED, &event); 79e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch event.entered_key.reset(new int(entered)); 80e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DispatchPairingEvent(event); 81e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 82e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 83e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::ConfirmPasskey( 84e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device::BluetoothDevice* device, 85e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch uint32 passkey) { 86e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent event; 87e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch PopulatePairingEvent( 88e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device, bt_private::PAIRING_EVENT_TYPE_CONFIRMPASSKEY, &event); 89e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch event.passkey.reset(new int(passkey)); 90e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DispatchPairingEvent(event); 91e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 92e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 93e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::AuthorizePairing( 94e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device::BluetoothDevice* device) { 95e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::PairingEvent event; 96e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch PopulatePairingEvent( 97e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device, bt_private::PAIRING_EVENT_TYPE_REQUESTAUTHORIZATION, &event); 98e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DispatchPairingEvent(event); 99e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 100e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 101e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid BluetoothApiPairingDelegate::DispatchPairingEvent( 102e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const bt_private::PairingEvent& pairing_event) { 103e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_ptr<base::ListValue> args = 104e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bt_private::OnPairing::Create(pairing_event); 105e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_ptr<Event> event( 106e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch new Event(bt_private::OnPairing::kEventName, args.Pass())); 1070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventRouter::Get(browser_context_) 108e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ->DispatchEventToExtension(extension_id_, event.Pass()); 109e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 110e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 111e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace extensions 112