Index: chrome/browser/chromeos/extensions/bluetooth_event_router.cc |
diff --git a/chrome/browser/chromeos/extensions/bluetooth_event_router.cc b/chrome/browser/chromeos/extensions/bluetooth_event_router.cc |
index 1643585930f523dbfe7a6be8e81cbccdc5d53023..d02649eac09b4b57d44009bdd00a9ac5c11cf570 100644 |
--- a/chrome/browser/chromeos/extensions/bluetooth_event_router.cc |
+++ b/chrome/browser/chromeos/extensions/bluetooth_event_router.cc |
@@ -4,8 +4,12 @@ |
#include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" |
+#include <map> |
+ |
#include "base/json/json_writer.h" |
+#include "base/memory/ref_counted.h" |
#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" |
+#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" |
#include "chrome/browser/extensions/extension_event_names.h" |
#include "chrome/browser/extensions/extension_event_router.h" |
@@ -13,7 +17,8 @@ namespace chromeos { |
ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter(Profile* profile) |
: profile_(profile), |
- adapter_(chromeos::BluetoothAdapter::CreateDefaultAdapter()) { |
+ adapter_(chromeos::BluetoothAdapter::CreateDefaultAdapter()), |
+ next_socket_id_(1) { |
DCHECK(profile_); |
DCHECK(adapter_.get()); |
adapter_->AddObserver(this); |
@@ -21,6 +26,37 @@ ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter(Profile* profile) |
ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() { |
adapter_->RemoveObserver(this); |
+ socket_map_.clear(); |
+} |
+ |
+int ExtensionBluetoothEventRouter::RegisterSocket( |
+ scoped_refptr<BluetoothSocket> socket) { |
+ // If there is a socket registered with the same fd, just return it's id |
+ for (SocketMap::const_iterator i = socket_map_.begin(); |
+ i != socket_map_.end(); ++i) { |
+ if (i->second->fd() == socket->fd()) { |
+ return i->first; |
+ } |
+ } |
+ int return_id = next_socket_id_++; |
+ socket_map_[return_id] = socket; |
+ return return_id; |
+} |
+ |
+bool ExtensionBluetoothEventRouter::ReleaseSocket(int id) { |
+ SocketMap::iterator socket_entry = socket_map_.find(id); |
+ if (socket_entry == socket_map_.end()) |
+ return false; |
+ socket_map_.erase(socket_entry); |
+ return true; |
+} |
+ |
+scoped_refptr<BluetoothSocket> ExtensionBluetoothEventRouter::GetSocket( |
+ int id) { |
+ SocketMap::iterator socket_entry = socket_map_.find(id); |
+ if (socket_entry == socket_map_.end()) |
+ return NULL; |
+ return socket_entry->second; |
} |
void ExtensionBluetoothEventRouter::AdapterPresentChanged( |