| Index: chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
|
| diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
|
| index 4002616e46adb67186f1898e8527ca8c9165dc09..dde19305912b57cfba9e45aa09ed1cde0997e1e0 100644
|
| --- a/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
|
| +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
|
| @@ -20,6 +20,7 @@
|
| #include "device/bluetooth/bluetooth_adapter.h"
|
| #include "device/bluetooth/bluetooth_adapter_factory.h"
|
| #include "device/bluetooth/bluetooth_device.h"
|
| +#include "device/bluetooth/bluetooth_profile.h"
|
| #include "device/bluetooth/bluetooth_socket.h"
|
|
|
| namespace extensions {
|
| @@ -43,6 +44,12 @@ ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() {
|
| DLOG_IF(WARNING, socket_map_.size() != 0)
|
| << "Bluetooth sockets are still open.";
|
| socket_map_.clear();
|
| +
|
| + for (BluetoothProfileMap::iterator iter = bluetooth_profile_map_.begin();
|
| + iter != bluetooth_profile_map_.end();
|
| + ++iter) {
|
| + iter->second->Unregister();
|
| + }
|
| }
|
|
|
| bool ExtensionBluetoothEventRouter::IsBluetoothSupported() const {
|
| @@ -92,6 +99,26 @@ bool ExtensionBluetoothEventRouter::ReleaseSocket(int id) {
|
| return true;
|
| }
|
|
|
| +void ExtensionBluetoothEventRouter::AddProfile(
|
| + const std::string& uuid,
|
| + device::BluetoothProfile* bluetooth_profile) {
|
| + DCHECK(!HasProfile(uuid));
|
| + bluetooth_profile_map_[uuid] = bluetooth_profile;
|
| +}
|
| +
|
| +void ExtensionBluetoothEventRouter::RemoveProfile(const std::string& uuid) {
|
| + BluetoothProfileMap::iterator iter = bluetooth_profile_map_.find(uuid);
|
| + if (iter != bluetooth_profile_map_.end()) {
|
| + device::BluetoothProfile* bluetooth_profile = iter->second;
|
| + bluetooth_profile_map_.erase(iter);
|
| + bluetooth_profile->Unregister();
|
| + }
|
| +}
|
| +
|
| +bool ExtensionBluetoothEventRouter::HasProfile(const std::string& uuid) const {
|
| + return bluetooth_profile_map_.find(uuid) != bluetooth_profile_map_.end();
|
| +}
|
| +
|
| scoped_refptr<device::BluetoothSocket>
|
| ExtensionBluetoothEventRouter::GetSocket(int id) {
|
| SocketMap::iterator socket_entry = socket_map_.find(id);
|
| @@ -131,6 +158,28 @@ void ExtensionBluetoothEventRouter::DispatchDeviceEvent(
|
| ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass());
|
| }
|
|
|
| +void ExtensionBluetoothEventRouter::DispatchConnectionEvent(
|
| + const std::string& extension_id,
|
| + const std::string& uuid,
|
| + const device::BluetoothDevice* device,
|
| + scoped_refptr<device::BluetoothSocket> socket) {
|
| + if (!HasProfile(uuid))
|
| + return;
|
| +
|
| + int socket_id = RegisterSocket(socket);
|
| + api::bluetooth::Socket result_socket;
|
| + api::bluetooth::BluetoothDeviceToApiDevice(*device, &result_socket.device);
|
| + result_socket.profile.uuid = uuid;
|
| + result_socket.id = socket_id;
|
| +
|
| + scoped_ptr<ListValue> args(new ListValue());
|
| + args->Append(result_socket.ToValue().release());
|
| + scoped_ptr<Event> event(new Event(
|
| + extensions::event_names::kBluetoothOnConnection, args.Pass()));
|
| + ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
|
| + extension_id, event.Pass());
|
| +}
|
| +
|
| void ExtensionBluetoothEventRouter::AdapterPresentChanged(
|
| device::BluetoothAdapter* adapter, bool present) {
|
| if (adapter != adapter_) {
|
|
|