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

Side by Side Diff: chrome/browser/extensions/bluetooth_event_router.cc

Issue 11360200: Decouple bluetooth_event_router from extension_system. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Removed MockBluetoothSocket Created 8 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/bluetooth_event_router.h"
6
7 #include <map>
8
9 #include "base/json/json_writer.h"
10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_vector.h"
12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h"
14 #include "chrome/browser/extensions/event_names.h"
15 #include "chrome/browser/extensions/event_router.h"
16 #include "chrome/browser/extensions/extension_system.h"
17 #include "chrome/common/extensions/api/bluetooth.h"
18 #include "device/bluetooth/bluetooth_adapter.h"
19 #include "device/bluetooth/bluetooth_adapter_factory.h"
20 #include "device/bluetooth/bluetooth_device.h"
21 #include "device/bluetooth/bluetooth_socket.h"
22
23 namespace extensions {
24
25 ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter(Profile* profile)
26 : send_discovery_events_(false),
27 responsible_for_discovery_(false),
28 profile_(profile),
29 adapter_(device::BluetoothAdapterFactory::DefaultAdapter()),
30 next_socket_id_(1) {
31 DCHECK(profile_);
32 if (adapter_.get())
33 adapter_->AddObserver(this);
34 }
35
36 ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() {
37 if (adapter_.get())
38 adapter_->RemoveObserver(this);
39
40 socket_map_.clear();
41 }
42
43 int ExtensionBluetoothEventRouter::RegisterSocket(
44 scoped_refptr<device::BluetoothSocket> socket) {
45 // If there is a socket registered with the same fd, just return it's id
46 for (SocketMap::const_iterator i = socket_map_.begin();
47 i != socket_map_.end(); ++i) {
48 if (i->second->fd() == socket->fd()) {
49 return i->first;
50 }
51 }
52 int return_id = next_socket_id_++;
53 socket_map_[return_id] = socket;
54 return return_id;
55 }
56
57 bool ExtensionBluetoothEventRouter::ReleaseSocket(int id) {
58 SocketMap::iterator socket_entry = socket_map_.find(id);
59 if (socket_entry == socket_map_.end())
60 return false;
61 socket_map_.erase(socket_entry);
62 return true;
63 }
64
65 scoped_refptr<device::BluetoothSocket>
66 ExtensionBluetoothEventRouter::GetSocket(int id) {
67 SocketMap::iterator socket_entry = socket_map_.find(id);
68 if (socket_entry == socket_map_.end())
69 return NULL;
70 return socket_entry->second;
71 }
72
73 void ExtensionBluetoothEventRouter::SetResponsibleForDiscovery(
74 bool responsible) {
75 responsible_for_discovery_ = responsible;
76 }
77
78 bool ExtensionBluetoothEventRouter::IsResponsibleForDiscovery() const {
79 return responsible_for_discovery_;
80 }
81
82 void ExtensionBluetoothEventRouter::SetSendDiscoveryEvents(bool should_send) {
83 // At the transition into sending devices, also send past devices that
84 // were discovered as they will not be discovered again.
85 if (should_send && !send_discovery_events_) {
86 for (DeviceList::const_iterator i = discovered_devices_.begin();
87 i != discovered_devices_.end(); ++i) {
88 DispatchDeviceEvent(extensions::event_names::kBluetoothOnDeviceDiscovered,
89 **i);
90 }
91 }
92
93 send_discovery_events_ = should_send;
94 }
95
96 void ExtensionBluetoothEventRouter::DispatchDeviceEvent(
97 const char* event_name, const extensions::api::bluetooth::Device& device) {
98 scoped_ptr<ListValue> args(new ListValue());
99 args->Append(device.ToValue().release());
100 extensions::ExtensionSystem::Get(profile_)->event_router()->
101 DispatchEventToRenderers(event_name, args.Pass(), NULL, GURL());
102 }
103
104 void ExtensionBluetoothEventRouter::AdapterPresentChanged(
105 device::BluetoothAdapter* adapter, bool present) {
106 if (adapter != adapter_.get()) {
107 DVLOG(1) << "Ignoring event for adapter " << adapter->address();
108 return;
109 }
110
111 DispatchBooleanValueEvent(
112 extensions::event_names::kBluetoothOnAvailabilityChanged,
113 present);
114 }
115
116 void ExtensionBluetoothEventRouter::AdapterPoweredChanged(
117 device::BluetoothAdapter* adapter, bool has_power) {
118 if (adapter != adapter_.get()) {
119 DVLOG(1) << "Ignoring event for adapter " << adapter->address();
120 return;
121 }
122
123 DispatchBooleanValueEvent(
124 extensions::event_names::kBluetoothOnPowerChanged,
125 has_power);
126 }
127
128 void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged(
129 device::BluetoothAdapter* adapter, bool discovering) {
130 if (adapter != adapter_.get()) {
131 DVLOG(1) << "Ignoring event for adapter " << adapter->address();
132 return;
133 }
134
135 if (!discovering) {
136 send_discovery_events_ = false;
137 responsible_for_discovery_ = false;
138 discovered_devices_.clear();
139 }
140
141 DispatchBooleanValueEvent(
142 extensions::event_names::kBluetoothOnDiscoveringChanged,
143 discovering);
144 }
145
146 void ExtensionBluetoothEventRouter::DeviceAdded(
147 device::BluetoothAdapter* adapter,
148 device::BluetoothDevice* device) {
149 if (adapter != adapter_.get()) {
150 DVLOG(1) << "Ignoring event for adapter " << adapter->address();
151 return;
152 }
153
154 extensions::api::bluetooth::Device* extension_device =
155 new extensions::api::bluetooth::Device();
156 extensions::api::bluetooth::BluetoothDeviceToApiDevice(
157 *device, extension_device);
158 discovered_devices_.push_back(extension_device);
159
160 if (!send_discovery_events_)
161 return;
162
163 DispatchDeviceEvent(extensions::event_names::kBluetoothOnDeviceDiscovered,
164 *extension_device);
165 }
166
167 void ExtensionBluetoothEventRouter::DispatchBooleanValueEvent(
168 const char* event_name, bool value) {
169 scoped_ptr<ListValue> args(new ListValue());
170 args->Append(Value::CreateBooleanValue(value));
171 extensions::ExtensionSystem::Get(profile_)->event_router()->
172 DispatchEventToRenderers(event_name, args.Pass(), NULL, GURL());
173 }
174
175 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/bluetooth_event_router.h ('k') | chrome/browser/extensions/extension_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698