already_AddRefed<DOMRequest> BluetoothAdapter::Disconnect(BluetoothDevice& aDevice, const Optional<short unsigned int>& aServiceUuid, ErrorResult& aRv) { nsCOMPtr<nsPIDOMWindow> win = GetOwner(); if (!win) { aRv.Throw(NS_ERROR_FAILURE); return nullptr; } nsRefPtr<DOMRequest> request = new DOMRequest(win); nsRefPtr<BluetoothVoidReplyRunnable> results = new BluetoothVoidReplyRunnable(request); nsAutoString address; aDevice.GetAddress(address); uint16_t serviceUuid = 0; if (aServiceUuid.WasPassed()) { serviceUuid = aServiceUuid.Value(); } BluetoothService* bs = BluetoothService::Get(); if (!bs) { aRv.Throw(NS_ERROR_FAILURE); return nullptr; } bs->Disconnect(address, serviceUuid, results); return request.forget(); }
already_AddRefed<DOMRequest> BluetoothAdapter::PairUnpair(bool aPair, BluetoothDevice& aDevice, ErrorResult& aRv) { nsCOMPtr<nsPIDOMWindow> win = GetOwner(); if (!win) { aRv.Throw(NS_ERROR_FAILURE); return nullptr; } nsRefPtr<DOMRequest> request = new DOMRequest(win); nsRefPtr<BluetoothVoidReplyRunnable> results = new BluetoothVoidReplyRunnable(request); nsAutoString addr; aDevice.GetAddress(addr); BluetoothService* bs = BluetoothService::Get(); if (!bs) { aRv.Throw(NS_ERROR_FAILURE); return nullptr; } nsresult rv; if (aPair) { rv = bs->CreatePairedDeviceInternal(addr, kCreatePairedDeviceTimeout, results); } else { rv = bs->RemoveDeviceInternal(addr, results); } if (NS_FAILED(rv)) { NS_WARNING("Pair/Unpair failed!"); aRv.Throw(rv); return nullptr; } return request.forget(); }