OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" | 5 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" |
6 | 6 |
7 #if defined(OS_CHROMEOS) | 7 #if defined(OS_CHROMEOS) |
8 #include <errno.h> | 8 #include <errno.h> |
9 #endif | 9 #endif |
10 | 10 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 namespace SetOutOfBandPairingData = | 66 namespace SetOutOfBandPairingData = |
67 extensions::api::experimental_bluetooth::SetOutOfBandPairingData; | 67 extensions::api::experimental_bluetooth::SetOutOfBandPairingData; |
68 namespace Write = extensions::api::experimental_bluetooth::Write; | 68 namespace Write = extensions::api::experimental_bluetooth::Write; |
69 | 69 |
70 namespace extensions { | 70 namespace extensions { |
71 namespace api { | 71 namespace api { |
72 | 72 |
73 #if defined(OS_CHROMEOS) | 73 #if defined(OS_CHROMEOS) |
74 | 74 |
75 bool BluetoothIsAvailableFunction::RunImpl() { | 75 bool BluetoothIsAvailableFunction::RunImpl() { |
76 result_.reset(Value::CreateBooleanValue(GetAdapter(profile())->IsPresent())); | 76 SetResult(Value::CreateBooleanValue(GetAdapter(profile())->IsPresent())); |
77 return true; | 77 return true; |
78 } | 78 } |
79 | 79 |
80 bool BluetoothIsPoweredFunction::RunImpl() { | 80 bool BluetoothIsPoweredFunction::RunImpl() { |
81 result_.reset(Value::CreateBooleanValue(GetAdapter(profile())->IsPowered())); | 81 SetResult(Value::CreateBooleanValue(GetAdapter(profile())->IsPowered())); |
82 return true; | 82 return true; |
83 } | 83 } |
84 | 84 |
85 bool BluetoothGetAddressFunction::RunImpl() { | 85 bool BluetoothGetAddressFunction::RunImpl() { |
86 result_.reset(Value::CreateStringValue(GetAdapter(profile())->address())); | 86 SetResult(Value::CreateStringValue(GetAdapter(profile())->address())); |
87 return true; | 87 return true; |
88 } | 88 } |
89 | 89 |
90 BluetoothGetDevicesFunction::BluetoothGetDevicesFunction() | 90 BluetoothGetDevicesFunction::BluetoothGetDevicesFunction() |
91 : callbacks_pending_(0) {} | 91 : callbacks_pending_(0) {} |
92 | 92 |
93 void BluetoothGetDevicesFunction::AddDeviceIfTrueCallback( | 93 void BluetoothGetDevicesFunction::AddDeviceIfTrueCallback( |
94 ListValue* list, | 94 ListValue* list, |
95 const chromeos::BluetoothDevice* device, | 95 const chromeos::BluetoothDevice* device, |
96 bool shouldAdd) { | 96 bool shouldAdd) { |
97 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 97 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
98 | 98 |
99 if (shouldAdd) | 99 if (shouldAdd) |
100 list->Append(experimental_bluetooth::BluetoothDeviceToValue(*device)); | 100 list->Append(experimental_bluetooth::BluetoothDeviceToValue(*device)); |
101 | 101 |
102 callbacks_pending_--; | 102 callbacks_pending_--; |
103 if (callbacks_pending_ == -1) | 103 if (callbacks_pending_ == -1) |
104 SendResponse(true); | 104 SendResponse(true); |
105 } | 105 } |
106 | 106 |
107 bool BluetoothGetDevicesFunction::RunImpl() { | 107 bool BluetoothGetDevicesFunction::RunImpl() { |
108 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 108 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
109 | 109 |
110 scoped_ptr<GetDevices::Params> params(GetDevices::Params::Create(*args_)); | 110 scoped_ptr<GetDevices::Params> params(GetDevices::Params::Create(*args_)); |
111 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 111 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); |
112 const experimental_bluetooth::GetDevicesOptions& options = params->options; | 112 const experimental_bluetooth::GetDevicesOptions& options = params->options; |
113 | 113 |
114 ListValue* matches = new ListValue; | 114 ListValue* matches = new ListValue; |
115 result_.reset(matches); | 115 SetResult(matches); |
116 | 116 |
117 CHECK_EQ(0, callbacks_pending_); | 117 CHECK_EQ(0, callbacks_pending_); |
118 | 118 |
119 chromeos::BluetoothAdapter::DeviceList devices = | 119 chromeos::BluetoothAdapter::DeviceList devices = |
120 GetMutableAdapter(profile())->GetDevices(); | 120 GetMutableAdapter(profile())->GetDevices(); |
121 for (chromeos::BluetoothAdapter::DeviceList::iterator i = devices.begin(); | 121 for (chromeos::BluetoothAdapter::DeviceList::iterator i = devices.begin(); |
122 i != devices.end(); ++i) { | 122 i != devices.end(); ++i) { |
123 chromeos::BluetoothDevice* device = *i; | 123 chromeos::BluetoothDevice* device = *i; |
124 | 124 |
125 if (options.uuid.get() != NULL && | 125 if (options.uuid.get() != NULL && |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 | 178 |
179 chromeos::BluetoothDevice* device = | 179 chromeos::BluetoothDevice* device = |
180 GetMutableAdapter(profile())->GetDevice(options.device_address); | 180 GetMutableAdapter(profile())->GetDevice(options.device_address); |
181 if (!device) { | 181 if (!device) { |
182 SendResponse(false); | 182 SendResponse(false); |
183 SetError(kInvalidDevice); | 183 SetError(kInvalidDevice); |
184 return false; | 184 return false; |
185 } | 185 } |
186 | 186 |
187 ListValue* services = new ListValue; | 187 ListValue* services = new ListValue; |
188 result_.reset(services); | 188 SetResult(services); |
189 | 189 |
190 device->GetServiceRecords( | 190 device->GetServiceRecords( |
191 base::Bind(&BluetoothGetServicesFunction::GetServiceRecordsCallback, | 191 base::Bind(&BluetoothGetServicesFunction::GetServiceRecordsCallback, |
192 this, | 192 this, |
193 services), | 193 services), |
194 base::Bind(&BluetoothGetServicesFunction::OnErrorCallback, | 194 base::Bind(&BluetoothGetServicesFunction::OnErrorCallback, |
195 this)); | 195 this)); |
196 | 196 |
197 return true; | 197 return true; |
198 } | 198 } |
199 | 199 |
200 void BluetoothConnectFunction::ConnectToServiceCallback( | 200 void BluetoothConnectFunction::ConnectToServiceCallback( |
201 const chromeos::BluetoothDevice* device, | 201 const chromeos::BluetoothDevice* device, |
202 const std::string& service_uuid, | 202 const std::string& service_uuid, |
203 scoped_refptr<chromeos::BluetoothSocket> socket) { | 203 scoped_refptr<chromeos::BluetoothSocket> socket) { |
204 if (socket.get()) { | 204 if (socket.get()) { |
205 int socket_id = GetEventRouter(profile())->RegisterSocket(socket); | 205 int socket_id = GetEventRouter(profile())->RegisterSocket(socket); |
206 | 206 |
207 experimental_bluetooth::Socket result_socket; | 207 experimental_bluetooth::Socket result_socket; |
208 experimental_bluetooth::BluetoothDeviceToApiDevice( | 208 experimental_bluetooth::BluetoothDeviceToApiDevice( |
209 *device, &result_socket.device); | 209 *device, &result_socket.device); |
210 result_socket.service_uuid = service_uuid; | 210 result_socket.service_uuid = service_uuid; |
211 result_socket.id = socket_id; | 211 result_socket.id = socket_id; |
212 result_.reset(result_socket.ToValue().release()); | 212 SetResult(result_socket.ToValue().release()); |
213 SendResponse(true); | 213 SendResponse(true); |
214 } else { | 214 } else { |
215 SetError(kFailedToConnect); | 215 SetError(kFailedToConnect); |
216 SendResponse(false); | 216 SendResponse(false); |
217 } | 217 } |
218 } | 218 } |
219 | 219 |
220 bool BluetoothConnectFunction::RunImpl() { | 220 bool BluetoothConnectFunction::RunImpl() { |
221 scoped_ptr<Connect::Params> params(Connect::Params::Create(*args_)); | 221 scoped_ptr<Connect::Params> params(Connect::Params::Create(*args_)); |
222 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 222 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 buffer_size - total_bytes_read); | 278 buffer_size - total_bytes_read); |
279 errsv = errno; | 279 errsv = errno; |
280 if (bytes_read <= 0) | 280 if (bytes_read <= 0) |
281 break; | 281 break; |
282 | 282 |
283 total_bytes_read += bytes_read; | 283 total_bytes_read += bytes_read; |
284 } | 284 } |
285 | 285 |
286 if (total_bytes_read > 0) { | 286 if (total_bytes_read > 0) { |
287 success_ = true; | 287 success_ = true; |
288 result_.reset(base::BinaryValue::Create(all_bytes, total_bytes_read)); | 288 SetResult(base::BinaryValue::Create(all_bytes, total_bytes_read)); |
289 } else { | 289 } else { |
290 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); | 290 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); |
291 free(all_bytes); | 291 free(all_bytes); |
292 } | 292 } |
293 | 293 |
294 if (!success_) | 294 if (!success_) |
295 SetError(safe_strerror(errsv)); | 295 SetError(safe_strerror(errsv)); |
296 } | 296 } |
297 | 297 |
298 bool BluetoothReadFunction::Respond() { | 298 bool BluetoothReadFunction::Respond() { |
(...skipping 26 matching lines...) Expand all Loading... |
325 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 325 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
326 | 326 |
327 if (socket_.get() == NULL) | 327 if (socket_.get() == NULL) |
328 return; | 328 return; |
329 | 329 |
330 ssize_t bytes_written = write(socket_->fd(), | 330 ssize_t bytes_written = write(socket_->fd(), |
331 data_to_write_->GetBuffer(), data_to_write_->GetSize()); | 331 data_to_write_->GetBuffer(), data_to_write_->GetSize()); |
332 int errsv = errno; | 332 int errsv = errno; |
333 | 333 |
334 if (bytes_written > 0) { | 334 if (bytes_written > 0) { |
335 result_.reset(Value::CreateIntegerValue(bytes_written)); | 335 SetResult(Value::CreateIntegerValue(bytes_written)); |
336 success_ = true; | 336 success_ = true; |
337 } else { | 337 } else { |
338 result_.reset(0); | 338 results_.reset(); |
339 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); | 339 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); |
340 } | 340 } |
341 | 341 |
342 if (!success_) | 342 if (!success_) |
343 SetError(safe_strerror(errsv)); | 343 SetError(safe_strerror(errsv)); |
344 } | 344 } |
345 | 345 |
346 bool BluetoothWriteFunction::Respond() { | 346 bool BluetoothWriteFunction::Respond() { |
347 return success_; | 347 return success_; |
348 } | 348 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 base::BinaryValue* randomizer = base::BinaryValue::CreateWithCopiedBuffer( | 418 base::BinaryValue* randomizer = base::BinaryValue::CreateWithCopiedBuffer( |
419 reinterpret_cast<const char*>(data.randomizer), | 419 reinterpret_cast<const char*>(data.randomizer), |
420 chromeos::kBluetoothOutOfBandPairingDataSize); | 420 chromeos::kBluetoothOutOfBandPairingDataSize); |
421 | 421 |
422 // TODO(bryeung): convert to experimental_bluetooth::OutOfBandPairingData | 422 // TODO(bryeung): convert to experimental_bluetooth::OutOfBandPairingData |
423 // when ArrayBuffer support within objects is completed. | 423 // when ArrayBuffer support within objects is completed. |
424 DictionaryValue* result = new DictionaryValue(); | 424 DictionaryValue* result = new DictionaryValue(); |
425 result->Set("hash", hash); | 425 result->Set("hash", hash); |
426 result->Set("randomizer", randomizer); | 426 result->Set("randomizer", randomizer); |
427 | 427 |
428 result_.reset(result); | 428 SetResult(result); |
429 | 429 |
430 SendResponse(true); | 430 SendResponse(true); |
431 } | 431 } |
432 | 432 |
433 void BluetoothGetLocalOutOfBandPairingDataFunction::ErrorCallback() { | 433 void BluetoothGetLocalOutOfBandPairingDataFunction::ErrorCallback() { |
434 SetError(kCouldNotGetLocalOutOfBandPairingData); | 434 SetError(kCouldNotGetLocalOutOfBandPairingData); |
435 SendResponse(false); | 435 SendResponse(false); |
436 } | 436 } |
437 | 437 |
438 bool BluetoothGetLocalOutOfBandPairingDataFunction::RunImpl() { | 438 bool BluetoothGetLocalOutOfBandPairingDataFunction::RunImpl() { |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 #endif | 573 #endif |
574 | 574 |
575 BluetoothReadFunction::BluetoothReadFunction() {} | 575 BluetoothReadFunction::BluetoothReadFunction() {} |
576 BluetoothReadFunction::~BluetoothReadFunction() {} | 576 BluetoothReadFunction::~BluetoothReadFunction() {} |
577 | 577 |
578 BluetoothWriteFunction::BluetoothWriteFunction() {} | 578 BluetoothWriteFunction::BluetoothWriteFunction() {} |
579 BluetoothWriteFunction::~BluetoothWriteFunction() {} | 579 BluetoothWriteFunction::~BluetoothWriteFunction() {} |
580 | 580 |
581 } // namespace api | 581 } // namespace api |
582 } // namespace extensions | 582 } // namespace extensions |
OLD | NEW |