Chromium Code Reviews| Index: device/bluetooth/bluetooth_socket_mac.mm |
| diff --git a/device/bluetooth/bluetooth_socket_mac.mm b/device/bluetooth/bluetooth_socket_mac.mm |
| index 593a2d01a3ce91001fd6818e7a8f466d6fa3e091..5cf52502993cdb6e7dca956f3a297e5aee437792 100644 |
| --- a/device/bluetooth/bluetooth_socket_mac.mm |
| +++ b/device/bluetooth/bluetooth_socket_mac.mm |
| @@ -217,12 +217,8 @@ using device::BluetoothSocket; |
| namespace device { |
| namespace { |
| -// It's safe to use 0 to represent an unregistered service, as implied by the |
| -// documentation at [ http://goo.gl/YRtCkF ]. |
| -const BluetoothSDPServiceRecordHandle kInvalidServiceRecordHandle = 0; |
| - |
| -// Likewise, it's safe to use 0 to represent invalid channel or PSM port |
| -// numbers, as both are required to be non-zero for valid services. |
| +// It's safe to use 0 to represent invalid channel or PSM port numbers, as both |
| +// are required to be non-zero for valid services. |
| const BluetoothRFCOMMChannelID kInvalidRfcommChannelId = 0; |
| const BluetoothL2CAPPSM kInvalidL2capPsm = 0; |
| @@ -342,41 +338,25 @@ NSDictionary* BuildL2capServiceDefinition( |
| } |
| // Registers a Bluetooth service with the specified |service_definition| in the |
| -// system SDP server. Returns a handle to the registered service on success. If |
| -// the service could not be registered, or if |verify_service_callback| |
| -// indicates that the to-be-registered service is not configured correctly, |
| -// returns |kInvalidServiceRecordHandle|. |
| -BluetoothSDPServiceRecordHandle RegisterService( |
| +// system SDP server. Returns the registered service on success. If the service |
| +// could not be registered, or if |verify_service_callback| indicates that the |
| +// to-be-registered service was not configured correctly, returns nil. |
| +IOBluetoothSDPServiceRecord* RegisterService( |
|
Ilya Sherman
2016/10/20 01:11:05
In regular C++, I'd ask you to change this to be a
shrike
2016/10/20 19:26:18
The object returned by +publishedServiceRecordWith
Ilya Sherman
2016/10/20 19:37:35
That's fair, but it's hard to tell from the metho
erikchen
2016/10/21 01:18:00
In ObjC, any function/method that doesn't have the
|
| NSDictionary* service_definition, |
| const base::Callback<bool(IOBluetoothSDPServiceRecord*)>& |
| verify_service_callback) { |
| // Attempt to register the service. |
| - IOBluetoothSDPServiceRecordRef service_record_ref; |
| - IOReturn result = |
| - IOBluetoothAddServiceDict((CFDictionaryRef)service_definition, |
| - &service_record_ref); |
| - if (result != kIOReturnSuccess) |
| - return kInvalidServiceRecordHandle; |
| - // Transfer ownership to a scoped object, to simplify memory management. |
| - base::ScopedCFTypeRef<IOBluetoothSDPServiceRecordRef> |
| - scoped_service_record_ref(service_record_ref); |
| - |
| - // Extract the service record handle. |
| - BluetoothSDPServiceRecordHandle service_record_handle; |
| - IOBluetoothSDPServiceRecord* service_record = |
| - [IOBluetoothSDPServiceRecord withSDPServiceRecordRef:service_record_ref]; |
| - result = [service_record getServiceRecordHandle:&service_record_handle]; |
| - if (result != kIOReturnSuccess) |
| - return kInvalidServiceRecordHandle; |
| + IOBluetoothSDPServiceRecord* service_record = [IOBluetoothSDPServiceRecord |
| + publishedServiceRecordWithDictionary:service_definition]; |
|
Ilya Sherman
2016/10/20 01:11:05
Okay, it looks like this method is only available
shrike
2016/10/20 19:26:18
We only support Chrome running on OS X 10.9 and up
Ilya Sherman
2016/10/20 19:37:35
Oh, wow, I hadn't realized we dropped support for
|
| // Verify that the registered service was configured correctly. If not, |
| // withdraw the service. |
| - if (!verify_service_callback.Run(service_record)) { |
| - IOBluetoothRemoveServiceWithRecordHandle(service_record_handle); |
| - return kInvalidServiceRecordHandle; |
| + if (!service_record || !verify_service_callback.Run(service_record)) { |
| + [service_record removeServiceRecord]; |
| + service_record = nil; |
| } |
| - return service_record_handle; |
| + return service_record; |
| } |
| // Returns true iff the |requested_channel_id| was registered in the RFCOMM |
| @@ -403,9 +383,9 @@ bool VerifyRfcommService(const int* requested_channel_id, |
| // and |options.name| in the system SDP server. Automatically allocates a |
| // channel if |options.channel_id| is null. Does not specify a name if |
| // |options.name| is null. Returns a handle to the registered service and |
| -// updates |registered_channel_id| to the actual channel id, or returns |
| -// |kInvalidServiceRecordHandle| if the service could not be registered. |
| -BluetoothSDPServiceRecordHandle RegisterRfcommService( |
| +// updates |registered_channel_id| to the actual channel id, or returns nil if |
| +// the service could not be registered. |
| +IOBluetoothSDPServiceRecord* RegisterRfcommService( |
| const BluetoothUUID& uuid, |
| const BluetoothAdapter::ServiceOptions& options, |
| BluetoothRFCOMMChannelID* registered_channel_id) { |
| @@ -439,9 +419,8 @@ bool VerifyL2capService(const int* requested_psm, |
| // |options.name| in the system SDP server. Automatically allocates a PSM if |
| // |options.psm| is null. Does not register a name if |options.name| is null. |
| // Returns a handle to the registered service and updates |registered_psm| to |
| -// the actual PSM, or returns |kInvalidServiceRecordHandle| if the service could |
| -// not be registered. |
| -BluetoothSDPServiceRecordHandle RegisterL2capService( |
| +// the actual PSM, or returns nil if the service could not be registered. |
| +IOBluetoothSDPServiceRecord* RegisterL2capService( |
| const BluetoothUUID& uuid, |
| const BluetoothAdapter::ServiceOptions& options, |
| BluetoothL2CAPPSM* registered_psm) { |
| @@ -493,9 +472,9 @@ void BluetoothSocketMac::ListenUsingRfcomm( |
| DVLOG(1) << uuid_.canonical_value() << ": Registering RFCOMM service."; |
| BluetoothRFCOMMChannelID registered_channel_id; |
| - service_record_handle_ = |
| - RegisterRfcommService(uuid, options, ®istered_channel_id); |
| - if (service_record_handle_ == kInvalidServiceRecordHandle) { |
| + service_record_.reset( |
| + RegisterRfcommService(uuid, options, ®istered_channel_id)); |
| + if (!service_record_.get()) { |
| error_callback.Run(kInvalidOrUsedChannel); |
| return; |
| } |
| @@ -521,8 +500,8 @@ void BluetoothSocketMac::ListenUsingL2cap( |
| DVLOG(1) << uuid_.canonical_value() << ": Registering L2CAP service."; |
| BluetoothL2CAPPSM registered_psm; |
| - service_record_handle_ = RegisterL2capService(uuid, options, ®istered_psm); |
| - if (service_record_handle_ == kInvalidServiceRecordHandle) { |
| + service_record_.reset(RegisterL2capService(uuid, options, ®istered_psm)); |
| + if (!service_record_.get()) { |
| error_callback.Run(kInvalidOrUsedPsm); |
| return; |
| } |
| @@ -664,7 +643,7 @@ void BluetoothSocketMac::Close() { |
| if (channel_) |
| ReleaseChannel(); |
| - else if (service_record_handle_ != kInvalidServiceRecordHandle) |
| + else if (service_record_.get()) |
| ReleaseListener(); |
| } |
| @@ -909,9 +888,7 @@ BluetoothSocketMac::ConnectCallbacks::ConnectCallbacks() {} |
| BluetoothSocketMac::ConnectCallbacks::~ConnectCallbacks() {} |
| -BluetoothSocketMac::BluetoothSocketMac() |
| - : service_record_handle_(kInvalidServiceRecordHandle) { |
| -} |
| +BluetoothSocketMac::BluetoothSocketMac() {} |
| BluetoothSocketMac::~BluetoothSocketMac() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -933,9 +910,10 @@ void BluetoothSocketMac::ReleaseChannel() { |
| void BluetoothSocketMac::ReleaseListener() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| - DCHECK_NE(service_record_handle_, kInvalidServiceRecordHandle); |
| + DCHECK(service_record_.get()); |
| - IOBluetoothRemoveServiceWithRecordHandle(service_record_handle_); |
| + [service_record_ removeServiceRecord]; |
| + service_record_.reset(); |
| rfcomm_connection_listener_.reset(); |
| l2cap_connection_listener_.reset(); |