Index: chrome/browser/extensions/bluetooth_event_router.cc |
diff --git a/chrome/browser/extensions/bluetooth_event_router.cc b/chrome/browser/extensions/bluetooth_event_router.cc |
index d38db9e8b925a6438b7a199889ee2f576b1ea5dc..b969e8b46eadd12fe0bfdd4433a25f6993ce7562 100644 |
--- a/chrome/browser/extensions/bluetooth_event_router.cc |
+++ b/chrome/browser/extensions/bluetooth_event_router.cc |
@@ -27,10 +27,20 @@ ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter(Profile* profile) |
responsible_for_discovery_(false), |
profile_(profile), |
adapter_(device::BluetoothAdapterFactory::DefaultAdapter()), |
+ observing_(false), |
+ next_socket_id_(1) { |
+ DCHECK(profile_); |
+} |
+ |
+ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter( |
+ Profile* profile, device::BluetoothAdapter* adapter) |
+ : send_discovery_events_(false), |
+ responsible_for_discovery_(false), |
+ profile_(profile), |
+ adapter_(adapter), |
+ observing_(false), |
next_socket_id_(1) { |
DCHECK(profile_); |
- if (adapter_.get()) |
- adapter_->AddObserver(this); |
} |
ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() { |
@@ -62,6 +72,22 @@ bool ExtensionBluetoothEventRouter::ReleaseSocket(int id) { |
return true; |
} |
+bool ExtensionBluetoothEventRouter::IsBluetoothEvent( |
+ const std::string& event_name) { |
+ return |
+ event_name == extensions::event_names::kBluetoothOnAvailabilityChanged || |
+ event_name == extensions::event_names::kBluetoothOnDiscoveringChanged || |
+ event_name == extensions::event_names::kBluetoothOnPowerChanged; |
+} |
+ |
+void ExtensionBluetoothEventRouter::OnEventListenerAdded( |
+ const std::string& event_name) { |
+ if (!observing_ && IsBluetoothEvent(event_name) && adapter_.get()) { |
+ adapter_->AddObserver(this); |
+ observing_ = true; |
+ } |
+} |
+ |
scoped_refptr<device::BluetoothSocket> |
ExtensionBluetoothEventRouter::GetSocket(int id) { |
SocketMap::iterator socket_entry = socket_map_.find(id); |