| 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
|
|
|