| 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 |
| 11 #include <string> | 11 #include <string> |
| 12 | 12 |
| 13 #include "base/memory/ref_counted.h" |
| 13 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h" | 14 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h" |
| 15 #include "chrome/browser/extensions/bluetooth_event_router.h" |
| 14 #include "chrome/browser/extensions/event_names.h" | 16 #include "chrome/browser/extensions/event_names.h" |
| 15 #include "chrome/browser/extensions/event_router.h" | 17 #include "chrome/browser/extensions/event_router.h" |
| 16 #include "chrome/browser/extensions/extension_service.h" | 18 #include "chrome/browser/extensions/extension_service.h" |
| 17 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
| 18 #include "chrome/common/extensions/api/experimental_bluetooth.h" | 20 #include "chrome/common/extensions/api/experimental_bluetooth.h" |
| 19 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
| 22 #include "device/bluetooth/bluetooth_adapter.h" |
| 23 #include "device/bluetooth/bluetooth_device.h" |
| 24 #include "device/bluetooth/bluetooth_out_of_band_pairing_data.h" |
| 25 #include "device/bluetooth/bluetooth_service_record.h" |
| 26 #include "device/bluetooth/bluetooth_socket.h" |
| 27 #include "device/bluetooth/bluetooth_utils.h" |
| 20 | 28 |
| 21 #if defined(OS_CHROMEOS) | 29 #if defined(OS_CHROMEOS) |
| 22 #include "base/memory/ref_counted.h" | |
| 23 #include "base/safe_strerror_posix.h" | 30 #include "base/safe_strerror_posix.h" |
| 24 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" | 31 #endif |
| 25 #include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" | 32 |
| 26 #include "chrome/browser/chromeos/bluetooth/bluetooth_service_record.h" | 33 using device::BluetoothAdapter; |
| 27 #include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" | 34 using device::BluetoothDevice; |
| 28 #include "chrome/browser/chromeos/bluetooth/bluetooth_utils.h" | 35 using device::BluetoothServiceRecord; |
| 29 #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" | 36 using device::BluetoothSocket; |
| 30 #include "chromeos/dbus/bluetooth_out_of_band_client.h" | |
| 31 #include "chromeos/dbus/bluetooth_out_of_band_pairing_data.h" | |
| 32 | 37 |
| 33 namespace { | 38 namespace { |
| 34 | 39 |
| 35 chromeos::ExtensionBluetoothEventRouter* GetEventRouter(Profile* profile) { | 40 extensions::ExtensionBluetoothEventRouter* GetEventRouter(Profile* profile) { |
| 36 return profile->GetExtensionService()->bluetooth_event_router(); | 41 return profile->GetExtensionService()->bluetooth_event_router(); |
| 37 } | 42 } |
| 38 | 43 |
| 39 const chromeos::BluetoothAdapter& GetAdapter(Profile* profile) { | 44 const BluetoothAdapter* GetAdapter(Profile* profile) { |
| 40 return GetEventRouter(profile)->adapter(); | 45 return GetEventRouter(profile)->adapter(); |
| 41 } | 46 } |
| 42 | 47 |
| 43 chromeos::BluetoothAdapter* GetMutableAdapter(Profile* profile) { | 48 BluetoothAdapter* GetMutableAdapter(Profile* profile) { |
| 44 chromeos::BluetoothAdapter* adapter = | 49 BluetoothAdapter* adapter = GetEventRouter(profile)->GetMutableAdapter(); |
| 45 GetEventRouter(profile)->GetMutableAdapter(); | |
| 46 CHECK(adapter); | |
| 47 return adapter; | 50 return adapter; |
| 48 } | 51 } |
| 49 | 52 |
| 53 bool IsBluetoothSupported(Profile* profile) { |
| 54 return GetAdapter(profile) != NULL; |
| 55 } |
| 56 |
| 50 } // namespace | 57 } // namespace |
| 51 #endif | |
| 52 | 58 |
| 53 namespace { | 59 namespace { |
| 54 | 60 |
| 55 const char kCouldNotGetLocalOutOfBandPairingData[] = | 61 const char kCouldNotGetLocalOutOfBandPairingData[] = |
| 56 "Could not get local Out Of Band Pairing Data"; | 62 "Could not get local Out Of Band Pairing Data"; |
| 57 const char kCouldNotSetOutOfBandPairingData[] = | 63 const char kCouldNotSetOutOfBandPairingData[] = |
| 58 "Could not set Out Of Band Pairing Data"; | 64 "Could not set Out Of Band Pairing Data"; |
| 59 const char kFailedToConnect[] = "Connection failed"; | 65 const char kFailedToConnect[] = "Connection failed"; |
| 60 const char kInvalidDevice[] = "Invalid device"; | 66 const char kInvalidDevice[] = "Invalid device"; |
| 61 const char kInvalidUuid[] = "Invalid UUID"; | 67 const char kInvalidUuid[] = "Invalid UUID"; |
| 68 const char kPlatformNotSupported[] = |
| 69 "This operation is not supported on your platform"; |
| 62 const char kServiceDiscoveryFailed[] = "Service discovery failed"; | 70 const char kServiceDiscoveryFailed[] = "Service discovery failed"; |
| 63 const char kSocketNotFoundError[] = "Socket not found: invalid socket id"; | 71 const char kSocketNotFoundError[] = "Socket not found: invalid socket id"; |
| 64 const char kStartDiscoveryFailed[] = "Starting discovery failed"; | 72 const char kStartDiscoveryFailed[] = "Starting discovery failed"; |
| 65 const char kStopDiscoveryFailed[] = "Failed to stop discovery"; | 73 const char kStopDiscoveryFailed[] = "Failed to stop discovery"; |
| 66 | 74 |
| 67 } // namespace | 75 } // namespace |
| 68 | 76 |
| 69 namespace Connect = extensions::api::experimental_bluetooth::Connect; | 77 namespace Connect = extensions::api::experimental_bluetooth::Connect; |
| 70 namespace Disconnect = extensions::api::experimental_bluetooth::Disconnect; | 78 namespace Disconnect = extensions::api::experimental_bluetooth::Disconnect; |
| 71 namespace GetDevices = extensions::api::experimental_bluetooth::GetDevices; | 79 namespace GetDevices = extensions::api::experimental_bluetooth::GetDevices; |
| 72 namespace GetServices = extensions::api::experimental_bluetooth::GetServices; | 80 namespace GetServices = extensions::api::experimental_bluetooth::GetServices; |
| 73 namespace Read = extensions::api::experimental_bluetooth::Read; | 81 namespace Read = extensions::api::experimental_bluetooth::Read; |
| 74 namespace SetOutOfBandPairingData = | 82 namespace SetOutOfBandPairingData = |
| 75 extensions::api::experimental_bluetooth::SetOutOfBandPairingData; | 83 extensions::api::experimental_bluetooth::SetOutOfBandPairingData; |
| 76 namespace Write = extensions::api::experimental_bluetooth::Write; | 84 namespace Write = extensions::api::experimental_bluetooth::Write; |
| 77 | 85 |
| 78 namespace extensions { | 86 namespace extensions { |
| 79 namespace api { | 87 namespace api { |
| 80 | 88 |
| 81 #if defined(OS_CHROMEOS) | 89 bool BluetoothIsAvailableFunction::RunImpl() { |
| 90 if (!IsBluetoothSupported(profile())) { |
| 91 SetError(kPlatformNotSupported); |
| 92 return false; |
| 93 } |
| 82 | 94 |
| 83 bool BluetoothIsAvailableFunction::RunImpl() { | 95 SetResult(Value::CreateBooleanValue(GetAdapter(profile())->IsPresent())); |
| 84 SetResult(Value::CreateBooleanValue(GetAdapter(profile()).IsPresent())); | |
| 85 return true; | 96 return true; |
| 86 } | 97 } |
| 87 | 98 |
| 88 bool BluetoothIsPoweredFunction::RunImpl() { | 99 bool BluetoothIsPoweredFunction::RunImpl() { |
| 89 SetResult(Value::CreateBooleanValue(GetAdapter(profile()).IsPowered())); | 100 if (!IsBluetoothSupported(profile())) { |
| 101 SetError(kPlatformNotSupported); |
| 102 return false; |
| 103 } |
| 104 |
| 105 SetResult(Value::CreateBooleanValue(GetAdapter(profile())->IsPowered())); |
| 90 return true; | 106 return true; |
| 91 } | 107 } |
| 92 | 108 |
| 93 bool BluetoothGetAddressFunction::RunImpl() { | 109 bool BluetoothGetAddressFunction::RunImpl() { |
| 94 SetResult(Value::CreateStringValue(GetAdapter(profile()).address())); | 110 if (!IsBluetoothSupported(profile())) { |
| 111 SetError(kPlatformNotSupported); |
| 112 return false; |
| 113 } |
| 114 |
| 115 SetResult(Value::CreateStringValue(GetAdapter(profile())->address())); |
| 95 return true; | 116 return true; |
| 96 } | 117 } |
| 97 | 118 |
| 98 bool BluetoothGetNameFunction::RunImpl() { | 119 bool BluetoothGetNameFunction::RunImpl() { |
| 99 SetResult(Value::CreateStringValue(GetAdapter(profile()).name())); | 120 if (!IsBluetoothSupported(profile())) { |
| 121 SetError(kPlatformNotSupported); |
| 122 return false; |
| 123 } |
| 124 |
| 125 SetResult(Value::CreateStringValue(GetAdapter(profile())->name())); |
| 100 return true; | 126 return true; |
| 101 } | 127 } |
| 102 | 128 |
| 103 BluetoothGetDevicesFunction::BluetoothGetDevicesFunction() | 129 BluetoothGetDevicesFunction::BluetoothGetDevicesFunction() |
| 104 : callbacks_pending_(0), | 130 : callbacks_pending_(0), |
| 105 device_events_sent_(0) {} | 131 device_events_sent_(0) {} |
| 106 | 132 |
| 107 void BluetoothGetDevicesFunction::DispatchDeviceSearchResult( | 133 void BluetoothGetDevicesFunction::DispatchDeviceSearchResult( |
| 108 const chromeos::BluetoothDevice& device) { | 134 const BluetoothDevice& device) { |
| 109 experimental_bluetooth::Device extension_device; | 135 experimental_bluetooth::Device extension_device; |
| 110 experimental_bluetooth::BluetoothDeviceToApiDevice(device, &extension_device); | 136 experimental_bluetooth::BluetoothDeviceToApiDevice(device, &extension_device); |
| 111 GetEventRouter(profile())->DispatchDeviceEvent( | 137 GetEventRouter(profile())->DispatchDeviceEvent( |
| 112 extensions::event_names::kBluetoothOnDeviceSearchResult, | 138 extensions::event_names::kBluetoothOnDeviceSearchResult, |
| 113 extension_device); | 139 extension_device); |
| 114 | 140 |
| 115 device_events_sent_++; | 141 device_events_sent_++; |
| 116 } | 142 } |
| 117 | 143 |
| 118 void BluetoothGetDevicesFunction::ProvidesServiceCallback( | 144 void BluetoothGetDevicesFunction::ProvidesServiceCallback( |
| 119 const chromeos::BluetoothDevice* device, | 145 const BluetoothDevice* device, bool providesService) { |
| 120 bool providesService) { | |
| 121 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 146 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 122 | 147 |
| 123 CHECK(device); | 148 CHECK(device); |
| 124 if (providesService) | 149 if (providesService) |
| 125 DispatchDeviceSearchResult(*device); | 150 DispatchDeviceSearchResult(*device); |
| 126 | 151 |
| 127 callbacks_pending_--; | 152 callbacks_pending_--; |
| 128 if (callbacks_pending_ == -1) | 153 if (callbacks_pending_ == -1) |
| 129 FinishDeviceSearch(); | 154 FinishDeviceSearch(); |
| 130 } | 155 } |
| 131 | 156 |
| 132 void BluetoothGetDevicesFunction::FinishDeviceSearch() { | 157 void BluetoothGetDevicesFunction::FinishDeviceSearch() { |
| 133 scoped_ptr<base::ListValue> args(new base::ListValue()); | 158 scoped_ptr<base::ListValue> args(new base::ListValue()); |
| 134 scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue()); | 159 scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue()); |
| 135 info->SetInteger("expectedEventCount", device_events_sent_); | 160 info->SetInteger("expectedEventCount", device_events_sent_); |
| 136 args->Append(info.release()); | 161 args->Append(info.release()); |
| 137 | 162 |
| 138 profile()->GetExtensionEventRouter()->DispatchEventToRenderers( | 163 profile()->GetExtensionEventRouter()->DispatchEventToRenderers( |
| 139 extensions::event_names::kBluetoothOnDeviceSearchFinished, | 164 extensions::event_names::kBluetoothOnDeviceSearchFinished, |
| 140 args.Pass(), | 165 args.Pass(), |
| 141 NULL, | 166 NULL, |
| 142 GURL()); | 167 GURL()); |
| 143 | 168 |
| 144 SendResponse(true); | 169 SendResponse(true); |
| 145 } | 170 } |
| 146 | 171 |
| 147 bool BluetoothGetDevicesFunction::RunImpl() { | 172 bool BluetoothGetDevicesFunction::RunImpl() { |
| 173 if (!IsBluetoothSupported(profile())) { |
| 174 SetError(kPlatformNotSupported); |
| 175 return false; |
| 176 } |
| 177 |
| 148 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 178 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 149 | 179 |
| 150 scoped_ptr<GetDevices::Params> params(GetDevices::Params::Create(*args_)); | 180 scoped_ptr<GetDevices::Params> params(GetDevices::Params::Create(*args_)); |
| 151 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 181 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); |
| 152 const experimental_bluetooth::GetDevicesOptions& options = params->options; | 182 const experimental_bluetooth::GetDevicesOptions& options = params->options; |
| 153 | 183 |
| 154 std::string uuid; | 184 std::string uuid; |
| 155 if (options.uuid.get() != NULL) { | 185 if (options.uuid.get() != NULL) { |
| 156 uuid = chromeos::bluetooth_utils::CanonicalUuid(*options.uuid.get()); | 186 uuid = device::bluetooth_utils::CanonicalUuid(*options.uuid.get()); |
| 157 if (uuid.empty()) { | 187 if (uuid.empty()) { |
| 158 SetError(kInvalidUuid); | 188 SetError(kInvalidUuid); |
| 159 return false; | 189 return false; |
| 160 } | 190 } |
| 161 } | 191 } |
| 162 | 192 |
| 163 CHECK_EQ(0, callbacks_pending_); | 193 CHECK_EQ(0, callbacks_pending_); |
| 164 | 194 |
| 165 chromeos::BluetoothAdapter::DeviceList devices = | 195 BluetoothAdapter::DeviceList devices = |
| 166 GetMutableAdapter(profile())->GetDevices(); | 196 GetMutableAdapter(profile())->GetDevices(); |
| 167 for (chromeos::BluetoothAdapter::DeviceList::iterator i = devices.begin(); | 197 for (BluetoothAdapter::DeviceList::iterator i = devices.begin(); |
| 168 i != devices.end(); ++i) { | 198 i != devices.end(); ++i) { |
| 169 chromeos::BluetoothDevice* device = *i; | 199 BluetoothDevice* device = *i; |
| 170 CHECK(device); | 200 CHECK(device); |
| 171 | 201 |
| 172 if (!uuid.empty() && !(device->ProvidesServiceWithUUID(uuid))) | 202 if (!uuid.empty() && !(device->ProvidesServiceWithUUID(uuid))) |
| 173 continue; | 203 continue; |
| 174 | 204 |
| 175 if (options.name.get() == NULL) { | 205 if (options.name.get() == NULL) { |
| 176 DispatchDeviceSearchResult(*device); | 206 DispatchDeviceSearchResult(*device); |
| 177 continue; | 207 continue; |
| 178 } | 208 } |
| 179 | 209 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 190 // for-loop, which ensures that all requests have been made before | 220 // for-loop, which ensures that all requests have been made before |
| 191 // SendResponse happens. | 221 // SendResponse happens. |
| 192 if (callbacks_pending_ == -1) | 222 if (callbacks_pending_ == -1) |
| 193 FinishDeviceSearch(); | 223 FinishDeviceSearch(); |
| 194 | 224 |
| 195 return true; | 225 return true; |
| 196 } | 226 } |
| 197 | 227 |
| 198 void BluetoothGetServicesFunction::GetServiceRecordsCallback( | 228 void BluetoothGetServicesFunction::GetServiceRecordsCallback( |
| 199 base::ListValue* services, | 229 base::ListValue* services, |
| 200 const chromeos::BluetoothDevice::ServiceRecordList& records) { | 230 const BluetoothDevice::ServiceRecordList& records) { |
| 201 for (chromeos::BluetoothDevice::ServiceRecordList::const_iterator i = | 231 for (BluetoothDevice::ServiceRecordList::const_iterator i = records.begin(); |
| 202 records.begin(); i != records.end(); ++i) { | 232 i != records.end(); ++i) { |
| 203 const chromeos::BluetoothServiceRecord& record = **i; | 233 const BluetoothServiceRecord& record = **i; |
| 204 experimental_bluetooth::ServiceRecord api_record; | 234 experimental_bluetooth::ServiceRecord api_record; |
| 205 api_record.name = record.name(); | 235 api_record.name = record.name(); |
| 206 if (!record.uuid().empty()) | 236 if (!record.uuid().empty()) |
| 207 api_record.uuid.reset(new std::string(record.uuid())); | 237 api_record.uuid.reset(new std::string(record.uuid())); |
| 208 services->Append(api_record.ToValue().release()); | 238 services->Append(api_record.ToValue().release()); |
| 209 } | 239 } |
| 210 | 240 |
| 211 SendResponse(true); | 241 SendResponse(true); |
| 212 } | 242 } |
| 213 | 243 |
| 214 void BluetoothGetServicesFunction::OnErrorCallback() { | 244 void BluetoothGetServicesFunction::OnErrorCallback() { |
| 215 SetError(kServiceDiscoveryFailed); | 245 SetError(kServiceDiscoveryFailed); |
| 216 SendResponse(false); | 246 SendResponse(false); |
| 217 } | 247 } |
| 218 | 248 |
| 219 bool BluetoothGetServicesFunction::RunImpl() { | 249 bool BluetoothGetServicesFunction::RunImpl() { |
| 250 if (!IsBluetoothSupported(profile())) { |
| 251 SetError(kPlatformNotSupported); |
| 252 return false; |
| 253 } |
| 254 |
| 220 scoped_ptr<GetServices::Params> params(GetServices::Params::Create(*args_)); | 255 scoped_ptr<GetServices::Params> params(GetServices::Params::Create(*args_)); |
| 221 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 256 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); |
| 222 const experimental_bluetooth::GetServicesOptions& options = params->options; | 257 const experimental_bluetooth::GetServicesOptions& options = params->options; |
| 223 | 258 |
| 224 chromeos::BluetoothDevice* device = | 259 BluetoothDevice* device = |
| 225 GetMutableAdapter(profile())->GetDevice(options.device_address); | 260 GetMutableAdapter(profile())->GetDevice(options.device_address); |
| 226 if (!device) { | 261 if (!device) { |
| 227 SetError(kInvalidDevice); | 262 SetError(kInvalidDevice); |
| 228 return false; | 263 return false; |
| 229 } | 264 } |
| 230 | 265 |
| 231 ListValue* services = new ListValue; | 266 ListValue* services = new ListValue; |
| 232 SetResult(services); | 267 SetResult(services); |
| 233 | 268 |
| 234 device->GetServiceRecords( | 269 device->GetServiceRecords( |
| 235 base::Bind(&BluetoothGetServicesFunction::GetServiceRecordsCallback, | 270 base::Bind(&BluetoothGetServicesFunction::GetServiceRecordsCallback, |
| 236 this, | 271 this, |
| 237 services), | 272 services), |
| 238 base::Bind(&BluetoothGetServicesFunction::OnErrorCallback, | 273 base::Bind(&BluetoothGetServicesFunction::OnErrorCallback, |
| 239 this)); | 274 this)); |
| 240 | 275 |
| 241 return true; | 276 return true; |
| 242 } | 277 } |
| 243 | 278 |
| 244 void BluetoothConnectFunction::ConnectToServiceCallback( | 279 void BluetoothConnectFunction::ConnectToServiceCallback( |
| 245 const chromeos::BluetoothDevice* device, | 280 const BluetoothDevice* device, |
| 246 const std::string& service_uuid, | 281 const std::string& service_uuid, |
| 247 scoped_refptr<chromeos::BluetoothSocket> socket) { | 282 scoped_refptr<BluetoothSocket> socket) { |
| 248 if (socket.get()) { | 283 if (socket.get()) { |
| 249 int socket_id = GetEventRouter(profile())->RegisterSocket(socket); | 284 int socket_id = GetEventRouter(profile())->RegisterSocket(socket); |
| 250 | 285 |
| 251 experimental_bluetooth::Socket result_socket; | 286 experimental_bluetooth::Socket result_socket; |
| 252 experimental_bluetooth::BluetoothDeviceToApiDevice( | 287 experimental_bluetooth::BluetoothDeviceToApiDevice( |
| 253 *device, &result_socket.device); | 288 *device, &result_socket.device); |
| 254 result_socket.service_uuid = service_uuid; | 289 result_socket.service_uuid = service_uuid; |
| 255 result_socket.id = socket_id; | 290 result_socket.id = socket_id; |
| 256 SetResult(result_socket.ToValue().release()); | 291 SetResult(result_socket.ToValue().release()); |
| 257 SendResponse(true); | 292 SendResponse(true); |
| 258 } else { | 293 } else { |
| 259 SetError(kFailedToConnect); | 294 SetError(kFailedToConnect); |
| 260 SendResponse(false); | 295 SendResponse(false); |
| 261 } | 296 } |
| 262 } | 297 } |
| 263 | 298 |
| 264 bool BluetoothConnectFunction::RunImpl() { | 299 bool BluetoothConnectFunction::RunImpl() { |
| 300 if (!IsBluetoothSupported(profile())) { |
| 301 SetError(kPlatformNotSupported); |
| 302 return false; |
| 303 } |
| 304 |
| 265 scoped_ptr<Connect::Params> params(Connect::Params::Create(*args_)); | 305 scoped_ptr<Connect::Params> params(Connect::Params::Create(*args_)); |
| 266 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 306 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); |
| 267 const experimental_bluetooth::ConnectOptions& options = params->options; | 307 const experimental_bluetooth::ConnectOptions& options = params->options; |
| 268 | 308 |
| 269 std::string uuid = chromeos::bluetooth_utils::CanonicalUuid( | 309 std::string uuid = device::bluetooth_utils::CanonicalUuid( |
| 270 options.service_uuid); | 310 options.service_uuid); |
| 271 if (uuid.empty()) { | 311 if (uuid.empty()) { |
| 272 SetError(kInvalidUuid); | 312 SetError(kInvalidUuid); |
| 273 return false; | 313 return false; |
| 274 } | 314 } |
| 275 | 315 |
| 276 chromeos::BluetoothDevice* device = | 316 BluetoothDevice* device = |
| 277 GetMutableAdapter(profile())->GetDevice(options.device_address); | 317 GetMutableAdapter(profile())->GetDevice(options.device_address); |
| 278 if (!device) { | 318 if (!device) { |
| 279 SetError(kInvalidDevice); | 319 SetError(kInvalidDevice); |
| 280 return false; | 320 return false; |
| 281 } | 321 } |
| 282 | 322 |
| 283 device->ConnectToService(uuid, | 323 device->ConnectToService(uuid, |
| 284 base::Bind(&BluetoothConnectFunction::ConnectToServiceCallback, | 324 base::Bind(&BluetoothConnectFunction::ConnectToServiceCallback, |
| 285 this, | 325 this, |
| 286 device, | 326 device, |
| 287 uuid)); | 327 uuid)); |
| 288 return true; | 328 return true; |
| 289 } | 329 } |
| 290 | 330 |
| 291 bool BluetoothDisconnectFunction::RunImpl() { | 331 bool BluetoothDisconnectFunction::RunImpl() { |
| 292 scoped_ptr<Disconnect::Params> params(Disconnect::Params::Create(*args_)); | 332 scoped_ptr<Disconnect::Params> params(Disconnect::Params::Create(*args_)); |
| 293 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 333 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); |
| 294 const experimental_bluetooth::DisconnectOptions& options = params->options; | 334 const experimental_bluetooth::DisconnectOptions& options = params->options; |
| 295 return GetEventRouter(profile())->ReleaseSocket(options.socket_id); | 335 return GetEventRouter(profile())->ReleaseSocket(options.socket_id); |
| 296 } | 336 } |
| 297 | 337 |
| 338 BluetoothReadFunction::BluetoothReadFunction() {} |
| 339 BluetoothReadFunction::~BluetoothReadFunction() {} |
| 340 |
| 298 bool BluetoothReadFunction::Prepare() { | 341 bool BluetoothReadFunction::Prepare() { |
| 299 scoped_ptr<Read::Params> params(Read::Params::Create(*args_)); | 342 scoped_ptr<Read::Params> params(Read::Params::Create(*args_)); |
| 300 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 343 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); |
| 301 const experimental_bluetooth::ReadOptions& options = params->options; | 344 const experimental_bluetooth::ReadOptions& options = params->options; |
| 302 | 345 |
| 303 socket_ = GetEventRouter(profile())->GetSocket(options.socket_id); | 346 socket_ = GetEventRouter(profile())->GetSocket(options.socket_id); |
| 304 if (socket_.get() == NULL) { | 347 if (socket_.get() == NULL) { |
| 305 SetError(kSocketNotFoundError); | 348 SetError(kSocketNotFoundError); |
| 306 return false; | 349 return false; |
| 307 } | 350 } |
| 308 | 351 |
| 309 success_ = false; | 352 success_ = false; |
| 310 return true; | 353 return true; |
| 311 } | 354 } |
| 312 | 355 |
| 313 void BluetoothReadFunction::Work() { | 356 void BluetoothReadFunction::Work() { |
| 357 if (!socket_.get()) |
| 358 return; |
| 359 |
| 360 #if defined(OS_CHROMEOS) |
| 314 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 361 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 315 CHECK(socket_.get() != NULL); | |
| 316 | 362 |
| 317 char* all_bytes = NULL; | 363 char* all_bytes = NULL; |
| 318 ssize_t buffer_size = 0; | 364 ssize_t buffer_size = 0; |
| 319 ssize_t total_bytes_read = 0; | 365 ssize_t total_bytes_read = 0; |
| 320 int errsv; | 366 int errsv; |
| 321 while (true) { | 367 while (true) { |
| 322 buffer_size += 1024; | 368 buffer_size += 1024; |
| 323 all_bytes = static_cast<char*>(realloc(all_bytes, buffer_size)); | 369 all_bytes = static_cast<char*>(realloc(all_bytes, buffer_size)); |
| 324 CHECK(all_bytes) << "Failed to grow Bluetooth socket buffer"; | 370 CHECK(all_bytes) << "Failed to grow Bluetooth socket buffer"; |
| 325 | 371 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 336 if (total_bytes_read > 0) { | 382 if (total_bytes_read > 0) { |
| 337 success_ = true; | 383 success_ = true; |
| 338 SetResult(base::BinaryValue::Create(all_bytes, total_bytes_read)); | 384 SetResult(base::BinaryValue::Create(all_bytes, total_bytes_read)); |
| 339 } else { | 385 } else { |
| 340 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); | 386 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); |
| 341 free(all_bytes); | 387 free(all_bytes); |
| 342 } | 388 } |
| 343 | 389 |
| 344 if (!success_) | 390 if (!success_) |
| 345 SetError(safe_strerror(errsv)); | 391 SetError(safe_strerror(errsv)); |
| 392 #endif |
| 346 } | 393 } |
| 347 | 394 |
| 348 bool BluetoothReadFunction::Respond() { | 395 bool BluetoothReadFunction::Respond() { |
| 349 return success_; | 396 return success_; |
| 350 } | 397 } |
| 351 | 398 |
| 399 BluetoothWriteFunction::BluetoothWriteFunction() {} |
| 400 BluetoothWriteFunction::~BluetoothWriteFunction() {} |
| 401 |
| 352 bool BluetoothWriteFunction::Prepare() { | 402 bool BluetoothWriteFunction::Prepare() { |
| 353 // TODO(bryeung): update to new-style parameter passing when ArrayBuffer | 403 // TODO(bryeung): update to new-style parameter passing when ArrayBuffer |
| 354 // support is added | 404 // support is added |
| 355 DictionaryValue* options; | 405 DictionaryValue* options; |
| 356 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &options)); | 406 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &options)); |
| 357 int socket_id; | 407 int socket_id; |
| 358 EXTENSION_FUNCTION_VALIDATE(options->GetInteger("socketId", &socket_id)); | 408 EXTENSION_FUNCTION_VALIDATE(options->GetInteger("socketId", &socket_id)); |
| 359 | 409 |
| 360 socket_ = GetEventRouter(profile())->GetSocket(socket_id); | 410 socket_ = GetEventRouter(profile())->GetSocket(socket_id); |
| 361 if (socket_.get() == NULL) { | 411 if (socket_.get() == NULL) { |
| 362 SetError(kSocketNotFoundError); | 412 SetError(kSocketNotFoundError); |
| 363 return false; | 413 return false; |
| 364 } | 414 } |
| 365 | 415 |
| 366 base::BinaryValue* tmp_data; | 416 base::BinaryValue* tmp_data; |
| 367 EXTENSION_FUNCTION_VALIDATE(options->GetBinary("data", &tmp_data)); | 417 EXTENSION_FUNCTION_VALIDATE(options->GetBinary("data", &tmp_data)); |
| 368 data_to_write_ = tmp_data; | 418 data_to_write_ = tmp_data; |
| 369 | 419 |
| 370 success_ = false; | 420 success_ = false; |
| 371 return socket_.get() != NULL; | 421 return socket_.get() != NULL; |
| 372 } | 422 } |
| 373 | 423 |
| 374 void BluetoothWriteFunction::Work() { | 424 void BluetoothWriteFunction::Work() { |
| 375 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 425 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 376 | 426 |
| 377 if (socket_.get() == NULL) | 427 if (socket_.get() == NULL) |
| 378 return; | 428 return; |
| 379 | 429 |
| 430 #if defined(OS_CHROMEOS) |
| 380 ssize_t bytes_written = write(socket_->fd(), | 431 ssize_t bytes_written = write(socket_->fd(), |
| 381 data_to_write_->GetBuffer(), data_to_write_->GetSize()); | 432 data_to_write_->GetBuffer(), data_to_write_->GetSize()); |
| 382 int errsv = errno; | 433 int errsv = errno; |
| 383 | 434 |
| 384 if (bytes_written > 0) { | 435 if (bytes_written > 0) { |
| 385 SetResult(Value::CreateIntegerValue(bytes_written)); | 436 SetResult(Value::CreateIntegerValue(bytes_written)); |
| 386 success_ = true; | 437 success_ = true; |
| 387 } else { | 438 } else { |
| 388 results_.reset(); | 439 results_.reset(); |
| 389 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); | 440 success_ = (errsv == EAGAIN || errsv == EWOULDBLOCK); |
| 390 } | 441 } |
| 391 | 442 |
| 392 if (!success_) | 443 if (!success_) |
| 393 SetError(safe_strerror(errsv)); | 444 SetError(safe_strerror(errsv)); |
| 445 #endif |
| 394 } | 446 } |
| 395 | 447 |
| 396 bool BluetoothWriteFunction::Respond() { | 448 bool BluetoothWriteFunction::Respond() { |
| 397 return success_; | 449 return success_; |
| 398 } | 450 } |
| 399 | 451 |
| 400 void BluetoothSetOutOfBandPairingDataFunction::OnSuccessCallback() { | 452 void BluetoothSetOutOfBandPairingDataFunction::OnSuccessCallback() { |
| 401 SendResponse(true); | 453 SendResponse(true); |
| 402 } | 454 } |
| 403 | 455 |
| 404 void BluetoothSetOutOfBandPairingDataFunction::OnErrorCallback() { | 456 void BluetoothSetOutOfBandPairingDataFunction::OnErrorCallback() { |
| 405 SetError(kCouldNotSetOutOfBandPairingData); | 457 SetError(kCouldNotSetOutOfBandPairingData); |
| 406 SendResponse(false); | 458 SendResponse(false); |
| 407 } | 459 } |
| 408 | 460 |
| 409 bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { | 461 bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { |
| 462 if (!IsBluetoothSupported(profile())) { |
| 463 SetError(kPlatformNotSupported); |
| 464 return false; |
| 465 } |
| 466 |
| 410 // TODO(bryeung): update to new-style parameter passing when ArrayBuffer | 467 // TODO(bryeung): update to new-style parameter passing when ArrayBuffer |
| 411 // support is added | 468 // support is added |
| 412 DictionaryValue* options; | 469 DictionaryValue* options; |
| 413 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &options)); | 470 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &options)); |
| 414 std::string address; | 471 std::string address; |
| 415 EXTENSION_FUNCTION_VALIDATE(options->GetString("deviceAddress", &address)); | 472 EXTENSION_FUNCTION_VALIDATE(options->GetString("deviceAddress", &address)); |
| 416 | 473 |
| 417 chromeos::BluetoothDevice* device = | 474 BluetoothDevice* device = GetMutableAdapter(profile())->GetDevice(address); |
| 418 GetMutableAdapter(profile())->GetDevice(address); | |
| 419 if (!device) { | 475 if (!device) { |
| 420 SetError(kInvalidDevice); | 476 SetError(kInvalidDevice); |
| 421 return false; | 477 return false; |
| 422 } | 478 } |
| 423 | 479 |
| 424 if (options->HasKey("data")) { | 480 if (options->HasKey("data")) { |
| 425 DictionaryValue* data_in; | 481 DictionaryValue* data_in; |
| 426 EXTENSION_FUNCTION_VALIDATE(options->GetDictionary("data", &data_in)); | 482 EXTENSION_FUNCTION_VALIDATE(options->GetDictionary("data", &data_in)); |
| 427 | 483 |
| 428 chromeos::BluetoothOutOfBandPairingData data_out; | 484 device::BluetoothOutOfBandPairingData data_out; |
| 429 | 485 |
| 430 base::BinaryValue* tmp_data; | 486 base::BinaryValue* tmp_data; |
| 431 EXTENSION_FUNCTION_VALIDATE(data_in->GetBinary("hash", &tmp_data)); | 487 EXTENSION_FUNCTION_VALIDATE(data_in->GetBinary("hash", &tmp_data)); |
| 432 EXTENSION_FUNCTION_VALIDATE( | 488 EXTENSION_FUNCTION_VALIDATE( |
| 433 tmp_data->GetSize() == chromeos::kBluetoothOutOfBandPairingDataSize); | 489 tmp_data->GetSize() == device::kBluetoothOutOfBandPairingDataSize); |
| 434 memcpy(data_out.hash, | 490 memcpy(data_out.hash, |
| 435 reinterpret_cast<uint8_t*>(tmp_data->GetBuffer()), | 491 reinterpret_cast<uint8_t*>(tmp_data->GetBuffer()), |
| 436 chromeos::kBluetoothOutOfBandPairingDataSize); | 492 device::kBluetoothOutOfBandPairingDataSize); |
| 437 | 493 |
| 438 EXTENSION_FUNCTION_VALIDATE(data_in->GetBinary("randomizer", &tmp_data)); | 494 EXTENSION_FUNCTION_VALIDATE(data_in->GetBinary("randomizer", &tmp_data)); |
| 439 EXTENSION_FUNCTION_VALIDATE( | 495 EXTENSION_FUNCTION_VALIDATE( |
| 440 tmp_data->GetSize() == chromeos::kBluetoothOutOfBandPairingDataSize); | 496 tmp_data->GetSize() == device::kBluetoothOutOfBandPairingDataSize); |
| 441 memcpy(data_out.randomizer, | 497 memcpy(data_out.randomizer, |
| 442 reinterpret_cast<uint8_t*>(tmp_data->GetBuffer()), | 498 reinterpret_cast<uint8_t*>(tmp_data->GetBuffer()), |
| 443 chromeos::kBluetoothOutOfBandPairingDataSize); | 499 device::kBluetoothOutOfBandPairingDataSize); |
| 444 | 500 |
| 445 device->SetOutOfBandPairingData( | 501 device->SetOutOfBandPairingData( |
| 446 data_out, | 502 data_out, |
| 447 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnSuccessCallback, | 503 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnSuccessCallback, |
| 448 this), | 504 this), |
| 449 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnErrorCallback, | 505 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnErrorCallback, |
| 450 this)); | 506 this)); |
| 451 } else { | 507 } else { |
| 452 device->ClearOutOfBandPairingData( | 508 device->ClearOutOfBandPairingData( |
| 453 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnSuccessCallback, | 509 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnSuccessCallback, |
| 454 this), | 510 this), |
| 455 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnErrorCallback, | 511 base::Bind(&BluetoothSetOutOfBandPairingDataFunction::OnErrorCallback, |
| 456 this)); | 512 this)); |
| 457 } | 513 } |
| 458 | 514 |
| 459 return true; | 515 return true; |
| 460 } | 516 } |
| 461 | 517 |
| 462 void BluetoothGetLocalOutOfBandPairingDataFunction::ReadCallback( | 518 void BluetoothGetLocalOutOfBandPairingDataFunction::ReadCallback( |
| 463 const chromeos::BluetoothOutOfBandPairingData& data) { | 519 const device::BluetoothOutOfBandPairingData& data) { |
| 464 base::BinaryValue* hash = base::BinaryValue::CreateWithCopiedBuffer( | 520 base::BinaryValue* hash = base::BinaryValue::CreateWithCopiedBuffer( |
| 465 reinterpret_cast<const char*>(data.hash), | 521 reinterpret_cast<const char*>(data.hash), |
| 466 chromeos::kBluetoothOutOfBandPairingDataSize); | 522 device::kBluetoothOutOfBandPairingDataSize); |
| 467 base::BinaryValue* randomizer = base::BinaryValue::CreateWithCopiedBuffer( | 523 base::BinaryValue* randomizer = base::BinaryValue::CreateWithCopiedBuffer( |
| 468 reinterpret_cast<const char*>(data.randomizer), | 524 reinterpret_cast<const char*>(data.randomizer), |
| 469 chromeos::kBluetoothOutOfBandPairingDataSize); | 525 device::kBluetoothOutOfBandPairingDataSize); |
| 470 | 526 |
| 471 // TODO(bryeung): convert to experimental_bluetooth::OutOfBandPairingData | 527 // TODO(bryeung): convert to experimental_bluetooth::OutOfBandPairingData |
| 472 // when ArrayBuffer support within objects is completed. | 528 // when ArrayBuffer support within objects is completed. |
| 473 DictionaryValue* result = new DictionaryValue(); | 529 DictionaryValue* result = new DictionaryValue(); |
| 474 result->Set("hash", hash); | 530 result->Set("hash", hash); |
| 475 result->Set("randomizer", randomizer); | 531 result->Set("randomizer", randomizer); |
| 476 | 532 |
| 477 SetResult(result); | 533 SetResult(result); |
| 478 | 534 |
| 479 SendResponse(true); | 535 SendResponse(true); |
| 480 } | 536 } |
| 481 | 537 |
| 482 void BluetoothGetLocalOutOfBandPairingDataFunction::ErrorCallback() { | 538 void BluetoothGetLocalOutOfBandPairingDataFunction::ErrorCallback() { |
| 483 SetError(kCouldNotGetLocalOutOfBandPairingData); | 539 SetError(kCouldNotGetLocalOutOfBandPairingData); |
| 484 SendResponse(false); | 540 SendResponse(false); |
| 485 } | 541 } |
| 486 | 542 |
| 487 bool BluetoothGetLocalOutOfBandPairingDataFunction::RunImpl() { | 543 bool BluetoothGetLocalOutOfBandPairingDataFunction::RunImpl() { |
| 544 if (!IsBluetoothSupported(profile())) { |
| 545 SetError(kPlatformNotSupported); |
| 546 return false; |
| 547 } |
| 548 |
| 488 GetMutableAdapter(profile())->ReadLocalOutOfBandPairingData( | 549 GetMutableAdapter(profile())->ReadLocalOutOfBandPairingData( |
| 489 base::Bind(&BluetoothGetLocalOutOfBandPairingDataFunction::ReadCallback, | 550 base::Bind(&BluetoothGetLocalOutOfBandPairingDataFunction::ReadCallback, |
| 490 this), | 551 this), |
| 491 base::Bind(&BluetoothGetLocalOutOfBandPairingDataFunction::ErrorCallback, | 552 base::Bind(&BluetoothGetLocalOutOfBandPairingDataFunction::ErrorCallback, |
| 492 this)); | 553 this)); |
| 493 return true; | 554 return true; |
| 494 } | 555 } |
| 495 | 556 |
| 496 void BluetoothStartDiscoveryFunction::OnSuccessCallback() { | 557 void BluetoothStartDiscoveryFunction::OnSuccessCallback() { |
| 497 GetEventRouter(profile())->SetResponsibleForDiscovery(true); | 558 GetEventRouter(profile())->SetResponsibleForDiscovery(true); |
| 498 SendResponse(true); | 559 SendResponse(true); |
| 499 } | 560 } |
| 500 | 561 |
| 501 void BluetoothStartDiscoveryFunction::OnErrorCallback() { | 562 void BluetoothStartDiscoveryFunction::OnErrorCallback() { |
| 502 SetError(kStartDiscoveryFailed); | 563 SetError(kStartDiscoveryFailed); |
| 503 SendResponse(false); | 564 SendResponse(false); |
| 504 } | 565 } |
| 505 | 566 |
| 506 bool BluetoothStartDiscoveryFunction::RunImpl() { | 567 bool BluetoothStartDiscoveryFunction::RunImpl() { |
| 568 if (!IsBluetoothSupported(profile())) { |
| 569 SetError(kPlatformNotSupported); |
| 570 return false; |
| 571 } |
| 572 |
| 507 GetEventRouter(profile())->SetSendDiscoveryEvents(true); | 573 GetEventRouter(profile())->SetSendDiscoveryEvents(true); |
| 508 | 574 |
| 509 // If the adapter is already discovering, there is nothing else to do. | 575 // If the adapter is already discovering, there is nothing else to do. |
| 510 if (GetMutableAdapter(profile())->IsDiscovering()) { | 576 if (GetMutableAdapter(profile())->IsDiscovering()) { |
| 511 SendResponse(true); | 577 SendResponse(true); |
| 512 return true; | 578 return true; |
| 513 } | 579 } |
| 514 | 580 |
| 515 GetMutableAdapter(profile())->SetDiscovering(true, | 581 GetMutableAdapter(profile())->SetDiscovering(true, |
| 516 base::Bind(&BluetoothStartDiscoveryFunction::OnSuccessCallback, this), | 582 base::Bind(&BluetoothStartDiscoveryFunction::OnSuccessCallback, this), |
| 517 base::Bind(&BluetoothStartDiscoveryFunction::OnErrorCallback, this)); | 583 base::Bind(&BluetoothStartDiscoveryFunction::OnErrorCallback, this)); |
| 518 return true; | 584 return true; |
| 519 } | 585 } |
| 520 | 586 |
| 521 void BluetoothStopDiscoveryFunction::OnSuccessCallback() { | 587 void BluetoothStopDiscoveryFunction::OnSuccessCallback() { |
| 522 SendResponse(true); | 588 SendResponse(true); |
| 523 } | 589 } |
| 524 | 590 |
| 525 void BluetoothStopDiscoveryFunction::OnErrorCallback() { | 591 void BluetoothStopDiscoveryFunction::OnErrorCallback() { |
| 526 SetError(kStopDiscoveryFailed); | 592 SetError(kStopDiscoveryFailed); |
| 527 SendResponse(false); | 593 SendResponse(false); |
| 528 } | 594 } |
| 529 | 595 |
| 530 bool BluetoothStopDiscoveryFunction::RunImpl() { | 596 bool BluetoothStopDiscoveryFunction::RunImpl() { |
| 597 if (!IsBluetoothSupported(profile())) { |
| 598 SetError(kPlatformNotSupported); |
| 599 return false; |
| 600 } |
| 601 |
| 531 GetEventRouter(profile())->SetSendDiscoveryEvents(false); | 602 GetEventRouter(profile())->SetSendDiscoveryEvents(false); |
| 532 if (GetEventRouter(profile())->IsResponsibleForDiscovery()) { | 603 if (GetEventRouter(profile())->IsResponsibleForDiscovery()) { |
| 533 GetMutableAdapter(profile())->SetDiscovering(false, | 604 GetMutableAdapter(profile())->SetDiscovering(false, |
| 534 base::Bind(&BluetoothStopDiscoveryFunction::OnSuccessCallback, this), | 605 base::Bind(&BluetoothStopDiscoveryFunction::OnSuccessCallback, this), |
| 535 base::Bind(&BluetoothStopDiscoveryFunction::OnErrorCallback, this)); | 606 base::Bind(&BluetoothStopDiscoveryFunction::OnErrorCallback, this)); |
| 536 } | 607 } |
| 537 return true; | 608 return true; |
| 538 } | 609 } |
| 539 | 610 |
| 540 #else | |
| 541 | |
| 542 // ----------------------------------------------------------------------------- | |
| 543 // NIY stubs | |
| 544 // ----------------------------------------------------------------------------- | |
| 545 bool BluetoothIsAvailableFunction::RunImpl() { | |
| 546 NOTREACHED() << "Not implemented yet"; | |
| 547 return false; | |
| 548 } | |
| 549 | |
| 550 bool BluetoothIsPoweredFunction::RunImpl() { | |
| 551 NOTREACHED() << "Not implemented yet"; | |
| 552 return false; | |
| 553 } | |
| 554 | |
| 555 bool BluetoothGetAddressFunction::RunImpl() { | |
| 556 NOTREACHED() << "Not implemented yet"; | |
| 557 return false; | |
| 558 } | |
| 559 | |
| 560 bool BluetoothGetNameFunction::RunImpl() { | |
| 561 NOTREACHED() << "Not implemented yet"; | |
| 562 return false; | |
| 563 } | |
| 564 | |
| 565 bool BluetoothGetDevicesFunction::RunImpl() { | |
| 566 NOTREACHED() << "Not implemented yet"; | |
| 567 return false; | |
| 568 } | |
| 569 | |
| 570 bool BluetoothGetServicesFunction::RunImpl() { | |
| 571 NOTREACHED() << "Not implemented yet"; | |
| 572 return false; | |
| 573 } | |
| 574 | |
| 575 bool BluetoothConnectFunction::RunImpl() { | |
| 576 NOTREACHED() << "Not implemented yet"; | |
| 577 return false; | |
| 578 } | |
| 579 | |
| 580 bool BluetoothDisconnectFunction::RunImpl() { | |
| 581 NOTREACHED() << "Not implemented yet"; | |
| 582 return false; | |
| 583 } | |
| 584 | |
| 585 bool BluetoothReadFunction::Prepare() { | |
| 586 return true; | |
| 587 } | |
| 588 | |
| 589 void BluetoothReadFunction::Work() { | |
| 590 } | |
| 591 | |
| 592 bool BluetoothReadFunction::Respond() { | |
| 593 NOTREACHED() << "Not implemented yet"; | |
| 594 return false; | |
| 595 } | |
| 596 | |
| 597 bool BluetoothWriteFunction::Prepare() { | |
| 598 return true; | |
| 599 } | |
| 600 | |
| 601 void BluetoothWriteFunction::Work() { | |
| 602 } | |
| 603 | |
| 604 bool BluetoothWriteFunction::Respond() { | |
| 605 NOTREACHED() << "Not implemented yet"; | |
| 606 return false; | |
| 607 } | |
| 608 | |
| 609 bool BluetoothStartDiscoveryFunction::RunImpl() { | |
| 610 NOTREACHED() << "Not implemented yet"; | |
| 611 return false; | |
| 612 } | |
| 613 | |
| 614 bool BluetoothStopDiscoveryFunction::RunImpl() { | |
| 615 NOTREACHED() << "Not implemented yet"; | |
| 616 return false; | |
| 617 } | |
| 618 | |
| 619 bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { | |
| 620 NOTREACHED() << "Not implemented yet"; | |
| 621 return false; | |
| 622 } | |
| 623 | |
| 624 bool BluetoothGetLocalOutOfBandPairingDataFunction::RunImpl() { | |
| 625 NOTREACHED() << "Not implemented yet"; | |
| 626 return false; | |
| 627 } | |
| 628 | |
| 629 #endif | |
| 630 | |
| 631 BluetoothReadFunction::BluetoothReadFunction() {} | |
| 632 BluetoothReadFunction::~BluetoothReadFunction() {} | |
| 633 | |
| 634 BluetoothWriteFunction::BluetoothWriteFunction() {} | |
| 635 BluetoothWriteFunction::~BluetoothWriteFunction() {} | |
| 636 | |
| 637 } // namespace api | 611 } // namespace api |
| 638 } // namespace extensions | 612 } // namespace extensions |
| OLD | NEW |