| Index: device/bluetooth/bluetooth_pairing_chromeos.cc
|
| diff --git a/device/bluetooth/bluetooth_pairing_chromeos.cc b/device/bluetooth/bluetooth_pairing_chromeos.cc
|
| index b81c342dd5e1005de66571335da4726e6444e8d8..dc73f6d7f6c6e408833fbf00be80c7481ee19631 100644
|
| --- a/device/bluetooth/bluetooth_pairing_chromeos.cc
|
| +++ b/device/bluetooth/bluetooth_pairing_chromeos.cc
|
| @@ -26,6 +26,10 @@ enum UMAPairingMethod {
|
| UMA_PAIRING_METHOD_COUNT
|
| };
|
|
|
| +// Number of keys that will be entered for a passkey, six digits plus the
|
| +// final enter.
|
| +const uint16 kPasskeyMaxKeysEntered = 7;
|
| +
|
| } // namespace
|
|
|
| namespace chromeos {
|
| @@ -74,10 +78,10 @@ void BluetoothPairingChromeOS::RequestPinCode(
|
| UMA_PAIRING_METHOD_REQUEST_PINCODE,
|
| UMA_PAIRING_METHOD_COUNT);
|
|
|
| - DCHECK(pincode_callback_.is_null());
|
| + ResetCallbacks();
|
| pincode_callback_ = callback;
|
| - pairing_delegate_->RequestPinCode(device_);
|
| pairing_delegate_used_ = true;
|
| + pairing_delegate_->RequestPinCode(device_);
|
| }
|
|
|
| bool BluetoothPairingChromeOS::ExpectingPinCode() const {
|
| @@ -104,8 +108,9 @@ void BluetoothPairingChromeOS::DisplayPinCode(const std::string& pincode) {
|
| UMA_PAIRING_METHOD_DISPLAY_PINCODE,
|
| UMA_PAIRING_METHOD_COUNT);
|
|
|
| - pairing_delegate_->DisplayPinCode(device_, pincode);
|
| + ResetCallbacks();
|
| pairing_delegate_used_ = true;
|
| + pairing_delegate_->DisplayPinCode(device_, pincode);
|
|
|
| // If this is not an outgoing connection to the device, the pairing context
|
| // needs to be cleaned up again as there's no reliable indication of
|
| @@ -120,10 +125,10 @@ void BluetoothPairingChromeOS::RequestPasskey(
|
| UMA_PAIRING_METHOD_REQUEST_PASSKEY,
|
| UMA_PAIRING_METHOD_COUNT);
|
|
|
| - DCHECK(passkey_callback_.is_null());
|
| + ResetCallbacks();
|
| passkey_callback_ = callback;
|
| - pairing_delegate_->RequestPasskey(device_);
|
| pairing_delegate_used_ = true;
|
| + pairing_delegate_->RequestPasskey(device_);
|
| }
|
|
|
| bool BluetoothPairingChromeOS::ExpectingPasskey() const {
|
| @@ -150,22 +155,23 @@ void BluetoothPairingChromeOS::DisplayPasskey(uint32 passkey) {
|
| UMA_PAIRING_METHOD_DISPLAY_PASSKEY,
|
| UMA_PAIRING_METHOD_COUNT);
|
|
|
| -
|
| + ResetCallbacks();
|
| + pairing_delegate_used_ = true;
|
| pairing_delegate_->DisplayPasskey(device_, passkey);
|
| +
|
| +}
|
| +
|
| +void BluetoothPairingChromeOS::KeysEntered(uint16 entered) {
|
| pairing_delegate_used_ = true;
|
| + pairing_delegate_->KeysEntered(device_, entered);
|
|
|
| // If this is not an outgoing connection to the device, the pairing context
|
| // needs to be cleaned up again as there's no reliable indication of
|
| // completion of incoming pairing.
|
| - if (!device_->IsConnecting())
|
| + if (entered >= kPasskeyMaxKeysEntered && !device_->IsConnecting())
|
| device_->EndPairing();
|
| }
|
|
|
| -void BluetoothPairingChromeOS::KeysEntered(uint16 entered) {
|
| - pairing_delegate_->KeysEntered(device_, entered);
|
| - pairing_delegate_used_ = true;
|
| -}
|
| -
|
| void BluetoothPairingChromeOS::RequestConfirmation(
|
| uint32 passkey,
|
| const BluetoothAgentServiceProvider::Delegate::ConfirmationCallback&
|
| @@ -174,10 +180,10 @@ void BluetoothPairingChromeOS::RequestConfirmation(
|
| UMA_PAIRING_METHOD_CONFIRM_PASSKEY,
|
| UMA_PAIRING_METHOD_COUNT);
|
|
|
| - DCHECK(confirmation_callback_.is_null());
|
| + ResetCallbacks();
|
| confirmation_callback_ = callback;
|
| - pairing_delegate_->ConfirmPasskey(device_, passkey);
|
| pairing_delegate_used_ = true;
|
| + pairing_delegate_->ConfirmPasskey(device_, passkey);
|
| }
|
|
|
| void BluetoothPairingChromeOS::RequestAuthorization(
|
| @@ -187,10 +193,10 @@ void BluetoothPairingChromeOS::RequestAuthorization(
|
| UMA_PAIRING_METHOD_NONE,
|
| UMA_PAIRING_METHOD_COUNT);
|
|
|
| - DCHECK(confirmation_callback_.is_null());
|
| + ResetCallbacks();
|
| confirmation_callback_ = callback;
|
| - pairing_delegate_->AuthorizePairing(device_);
|
| pairing_delegate_used_ = true;
|
| + pairing_delegate_->AuthorizePairing(device_);
|
| }
|
|
|
| bool BluetoothPairingChromeOS::ExpectingConfirmation() const {
|
| @@ -226,6 +232,12 @@ BluetoothPairingChromeOS::GetPairingDelegate() const {
|
| return pairing_delegate_;
|
| }
|
|
|
| +void BluetoothPairingChromeOS::ResetCallbacks() {
|
| + pincode_callback_.Reset();
|
| + passkey_callback_.Reset();
|
| + confirmation_callback_.Reset();
|
| +}
|
| +
|
| bool BluetoothPairingChromeOS::RunPairingCallbacks(
|
| BluetoothAgentServiceProvider::Delegate::Status status) {
|
| pairing_delegate_used_ = true;
|
|
|