Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Unified Diff: chrome/browser/chromeos/extensions/bluetooth_event_router.cc

Issue 10815072: Bluetooth API: improve discovery (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review comments Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 8cd0b0c61442555914aec47feb195201aec83228..2b4e774420162ab3529c66e5a20f3d69cbbd14b8 100644
--- a/chrome/browser/chromeos/extensions/bluetooth_event_router.cc
+++ b/chrome/browser/chromeos/extensions/bluetooth_event_router.cc
@@ -7,6 +7,7 @@
#include <map>
#include "base/json/json_writer.h"
+#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h"
@@ -17,6 +18,8 @@
#include "chrome/browser/extensions/event_router.h"
#include "chrome/common/extensions/api/experimental_bluetooth.h"
+namespace experimental_bluetooth = extensions::api::experimental_bluetooth;
+
namespace chromeos {
ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter(Profile* profile)
@@ -63,7 +66,25 @@ scoped_refptr<BluetoothSocket> ExtensionBluetoothEventRouter::GetSocket(
return socket_entry->second;
}
+void ExtensionBluetoothEventRouter::SetResponsibleForDiscovery(
+ bool responsible) {
+ responsible_for_discovery_ = responsible;
+}
+
+bool ExtensionBluetoothEventRouter::IsResponsibleForDiscovery() const {
+ return responsible_for_discovery_;
+}
+
void ExtensionBluetoothEventRouter::SetSendDiscoveryEvents(bool should_send) {
+ // At the transition into sending devices, also send past devices that
+ // were discovered as they will not be discovered again.
+ if (should_send && !send_discovery_events_) {
+ for (DeviceList::const_iterator i = discovered_devices_.begin();
+ i != discovered_devices_.end(); ++i) {
+ DispatchDeviceEvent(**i);
+ }
+ }
+
send_discovery_events_ = should_send;
}
@@ -98,6 +119,13 @@ void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged(
return;
}
+ if (!discovering) {
+ send_discovery_events_ = false;
+ responsible_for_discovery_ = false;
+
+ STLClearObject(&discovered_devices_);
+ }
+
DispatchBooleanValueEvent(
extensions::event_names::kBluetoothOnDiscoveringChanged,
discovering);
@@ -105,38 +133,45 @@ void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged(
void ExtensionBluetoothEventRouter::DeviceAdded(
chromeos::BluetoothAdapter* adapter, chromeos::BluetoothDevice* device) {
- if (!send_discovery_events_)
+ if (adapter != adapter_.get()) {
+ DVLOG(1) << "Ignoring event for adapter " << adapter->address();
return;
+ }
- DCHECK(adapter == adapter_.get());
+ experimental_bluetooth::Device* extension_device =
+ new experimental_bluetooth::Device();
+ experimental_bluetooth::BluetoothDeviceToApiDevice(*device, extension_device);
+ discovered_devices_.push_back(make_linked_ptr(extension_device));
- extensions::api::experimental_bluetooth::Device extension_device;
- extensions::api::experimental_bluetooth::BluetoothDeviceToApiDevice(
- *device, &extension_device);
+ if (!send_discovery_events_)
+ return;
+ DispatchDeviceEvent(*extension_device);
+}
+
+void ExtensionBluetoothEventRouter::DispatchBooleanValueEvent(
+ const char* event_name, bool value) {
ListValue args;
- args.Append(extension_device.ToValue().release());
+ args.Append(Value::CreateBooleanValue(value));
std::string json_args;
base::JSONWriter::Write(&args, &json_args);
profile_->GetExtensionEventRouter()->DispatchEventToRenderers(
- extensions::event_names::kBluetoothOnDeviceDiscovered,
- json_args,
- NULL,
- GURL());
+ event_name, json_args, NULL, GURL());
}
-void ExtensionBluetoothEventRouter::DispatchBooleanValueEvent(
- const char* event_name, bool value) {
+void ExtensionBluetoothEventRouter::DispatchDeviceEvent(
+ const experimental_bluetooth::Device& device) {
asargent_no_longer_on_chrome 2012/08/03 23:35:23 Can you call HasEventListener on the extension eve
bryeung 2012/08/07 14:22:12 I'd prefer to leave it out, if you don't mind. Th
asargent_no_longer_on_chrome 2012/08/07 15:32:48 Ok, no problem.
ListValue args;
- args.Append(Value::CreateBooleanValue(value));
+ args.Append(device.ToValue().release());
std::string json_args;
base::JSONWriter::Write(&args, &json_args);
- // TODO(bryeung): only dispatch the event to interested renderers
- // crbug.com/133179
profile_->GetExtensionEventRouter()->DispatchEventToRenderers(
- event_name, json_args, NULL, GURL());
+ extensions::event_names::kBluetoothOnDeviceDiscovered,
+ json_args,
+ NULL,
+ GURL());
}
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698