| Index: device/bluetooth/bluetooth_device_android.cc
 | 
| diff --git a/device/bluetooth/bluetooth_device_android.cc b/device/bluetooth/bluetooth_device_android.cc
 | 
| index 483d95e05a0e4a3d46088439e5df7656f2ed9ffa..244ab0233d167c34fc1f3128da13ed13b0d161f3 100644
 | 
| --- a/device/bluetooth/bluetooth_device_android.cc
 | 
| +++ b/device/bluetooth/bluetooth_device_android.cc
 | 
| @@ -21,7 +21,8 @@ BluetoothDeviceAndroid* BluetoothDeviceAndroid::Create(
 | 
|    BluetoothDeviceAndroid* device = new BluetoothDeviceAndroid(adapter);
 | 
|  
 | 
|    device->j_device_.Reset(Java_ChromeBluetoothDevice_create(
 | 
| -      AttachCurrentThread(), bluetooth_device_wrapper));
 | 
| +      AttachCurrentThread(), reinterpret_cast<intptr_t>(device),
 | 
| +      bluetooth_device_wrapper));
 | 
|  
 | 
|    return device;
 | 
|  }
 | 
| @@ -39,6 +40,11 @@ bool BluetoothDeviceAndroid::RegisterJNI(JNIEnv* env) {
 | 
|    return RegisterNativesImpl(env);  // Generated in ChromeBluetoothDevice_jni.h
 | 
|  }
 | 
|  
 | 
| +base::android::ScopedJavaLocalRef<jobject>
 | 
| +BluetoothDeviceAndroid::GetJavaObject() {
 | 
| +  return base::android::ScopedJavaLocalRef<jobject>(j_device_);
 | 
| +}
 | 
| +
 | 
|  uint32 BluetoothDeviceAndroid::GetBluetoothClass() const {
 | 
|    return Java_ChromeBluetoothDevice_getBluetoothClass(AttachCurrentThread(),
 | 
|                                                        j_device_.obj());
 | 
| @@ -167,6 +173,7 @@ void BluetoothDeviceAndroid::CancelPairing() {
 | 
|  
 | 
|  void BluetoothDeviceAndroid::Disconnect(const base::Closure& callback,
 | 
|                                          const ErrorCallback& error_callback) {
 | 
| +  // TODO(scheib): Also update unit tests for BluetoothGattConnection.
 | 
|    NOTIMPLEMENTED();
 | 
|  }
 | 
|  
 | 
| @@ -188,6 +195,30 @@ void BluetoothDeviceAndroid::ConnectToServiceInsecurely(
 | 
|    NOTIMPLEMENTED();
 | 
|  }
 | 
|  
 | 
| +void BluetoothDeviceAndroid::OnConnectionStateChange(JNIEnv* env,
 | 
| +                                                     jobject jcaller,
 | 
| +                                                     int32_t status,
 | 
| +                                                     bool connected) {
 | 
| +  gatt_connected_ = connected;
 | 
| +  if (gatt_connected_) {
 | 
| +    DidConnectGatt();
 | 
| +  } else {
 | 
| +    // TODO(scheib) Create new BluetoothDevice::ConnectErrorCode enums for
 | 
| +    // android values not yet represented. http://crbug.com/531058
 | 
| +    switch (status) {   // Constants are from android.bluetooth.BluetoothGatt.
 | 
| +      case 0x00000101:  // GATT_FAILURE
 | 
| +        return DidFailToConnectGatt(ERROR_FAILED);
 | 
| +      case 0x00000005:  // GATT_INSUFFICIENT_AUTHENTICATION
 | 
| +        return DidFailToConnectGatt(ERROR_AUTH_FAILED);
 | 
| +      case 0x00000000:  // GATT_SUCCESS
 | 
| +        return DidDisconnectGatt();
 | 
| +      default:
 | 
| +        VLOG(1) << "Unhandled status: " << status;
 | 
| +        return DidFailToConnectGatt(ERROR_UNKNOWN);
 | 
| +    }
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  BluetoothDeviceAndroid::BluetoothDeviceAndroid(BluetoothAdapterAndroid* adapter)
 | 
|      : BluetoothDevice(adapter) {}
 | 
|  
 | 
| @@ -197,14 +228,14 @@ std::string BluetoothDeviceAndroid::GetDeviceName() const {
 | 
|  }
 | 
|  
 | 
|  void BluetoothDeviceAndroid::CreateGattConnectionImpl() {
 | 
| -  // Implemented in following patch https://codereview.chromium.org/1256313002
 | 
| -  NOTIMPLEMENTED();
 | 
| -  DidFailToConnectGatt(ERROR_UNKNOWN);
 | 
| +  Java_ChromeBluetoothDevice_createGattConnectionImpl(
 | 
| +      AttachCurrentThread(), j_device_.obj(),
 | 
| +      base::android::GetApplicationContext());
 | 
|  }
 | 
|  
 | 
|  void BluetoothDeviceAndroid::DisconnectGatt() {
 | 
| -  // Implemented in following patch https://codereview.chromium.org/1256313002
 | 
| -  NOTIMPLEMENTED();
 | 
| +  Java_ChromeBluetoothDevice_disconnectGatt(AttachCurrentThread(),
 | 
| +                                            j_device_.obj());
 | 
|  }
 | 
|  
 | 
|  }  // namespace device
 | 
| 
 |