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

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: fix licenses 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 7fec7e5925971d1151049672e3056b534e3de3b7..9aa5fc30786d7a69d61031b51d118eb5c140eee2 100644
--- a/chrome/browser/chromeos/extensions/bluetooth_event_router.cc
+++ b/chrome/browser/chromeos/extensions/bluetooth_event_router.cc
@@ -8,6 +8,7 @@
#include "base/json/json_writer.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_vector.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h"
#include "chrome/browser/chromeos/bluetooth/bluetooth_device.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,12 @@ void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged(
return;
}
+ if (!discovering) {
+ send_discovery_events_ = false;
+ responsible_for_discovery_ = false;
+ discovered_devices_.clear();
+ }
+
DispatchBooleanValueEvent(
extensions::event_names::kBluetoothOnDiscoveringChanged,
discovering);
@@ -105,34 +132,39 @@ 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());
-
- extensions::api::experimental_bluetooth::Device extension_device;
- extensions::api::experimental_bluetooth::BluetoothDeviceToApiDevice(
- *device, &extension_device);
+ experimental_bluetooth::Device* extension_device =
+ new experimental_bluetooth::Device();
+ experimental_bluetooth::BluetoothDeviceToApiDevice(*device, extension_device);
+ discovered_devices_.push_back(extension_device);
- scoped_ptr<ListValue> args(new ListValue());
- args->Append(extension_device.ToValue().release());
+ if (!send_discovery_events_)
+ return;
- profile_->GetExtensionEventRouter()->DispatchEventToRenderers(
- extensions::event_names::kBluetoothOnDeviceDiscovered,
- args.Pass(),
- NULL,
- GURL());
+ DispatchDeviceEvent(*extension_device);
}
void ExtensionBluetoothEventRouter::DispatchBooleanValueEvent(
const char* event_name, bool value) {
scoped_ptr<ListValue> args(new ListValue());
args->Append(Value::CreateBooleanValue(value));
-
- // TODO(bryeung): only dispatch the event to interested renderers
- // crbug.com/133179
profile_->GetExtensionEventRouter()->DispatchEventToRenderers(
event_name, args.Pass(), NULL, GURL());
}
+void ExtensionBluetoothEventRouter::DispatchDeviceEvent(
+ const experimental_bluetooth::Device& device) {
+ scoped_ptr<ListValue> args(new ListValue());
+ args->Append(device.ToValue().release());
+ profile_->GetExtensionEventRouter()->DispatchEventToRenderers(
+ extensions::event_names::kBluetoothOnDeviceDiscovered,
+ args.Pass(),
+ NULL,
+ GURL());
+}
+
} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/extensions/bluetooth_event_router.h ('k') | chrome/browser/extensions/api/bluetooth/bluetooth_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698