author | Jocelyn Liu <joliu@mozilla.com> |
Wed, 02 Jul 2014 10:13:39 +0800 | |
changeset 191878 | 5f64dfc096cd0c15c56d994a539e1220164fb59e |
parent 191877 | 3e2420167d11f0980b46d0333ffb2b9554b1dde3 |
child 191879 | 855a4b8a0968d0e19e013988b2206dfaec8e024e |
push id | 45685 |
push user | cbook@mozilla.com |
push date | Wed, 02 Jul 2014 13:09:48 +0000 |
treeherder | mozilla-inbound@60133a85f8ae [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | btian |
bugs | 1031253 |
milestone | 33.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/bluetooth2/BluetoothAdapter.cpp +++ b/dom/bluetooth2/BluetoothAdapter.cpp @@ -760,16 +760,18 @@ BluetoothAdapter::EnableDisable(bool aEn DispatchAttributeEvent(types); nsRefPtr<BluetoothReplyRunnable> result = new BluetoothVoidReplyRunnable(nullptr, /* DOMRequest */ promise, methodName); if(NS_FAILED(bs->EnableDisable(aEnable, result))) { + mState = aEnable ? BluetoothAdapterState::Disabled + : BluetoothAdapterState::Enabled; promise->MaybeReject(NS_ERROR_DOM_OPERATION_ERR); } return promise.forget(); } already_AddRefed<Promise> BluetoothAdapter::Enable(ErrorResult& aRv)
--- a/dom/bluetooth2/BluetoothService.cpp +++ b/dom/bluetooth2/BluetoothService.cpp @@ -376,20 +376,22 @@ BluetoothService::StartBluetooth(bool aI /* When IsEnabled() is true, we don't switch on Bluetooth but we still * send ToggleBtAck task. One special case happens at startup stage. At * startup, the initialization of BluetoothService still has to be done * even if Bluetooth is already enabled. * * Please see bug 892392 for more information. */ - if (aIsStartup || !sBluetoothService->IsEnabled()) { + if (aIsStartup || !IsEnabled()) { // Switch Bluetooth on - if (NS_FAILED(sBluetoothService->StartInternal(aRunnable))) { + nsresult rv = StartInternal(aRunnable); + if (NS_FAILED(rv)) { BT_WARNING("Bluetooth service failed to start!"); + return rv; } } else { BT_WARNING("Bluetooth has already been enabled before."); nsRefPtr<nsRunnable> runnable = new BluetoothService::ToggleBtAck(true); if (NS_FAILED(NS_DispatchToMainThread(runnable))) { BT_WARNING("Failed to dispatch to main thread!"); } } @@ -436,20 +438,22 @@ BluetoothService::StopBluetooth(bool aIs /* When IsEnabled() is false, we don't switch off Bluetooth but we still * send ToggleBtAck task. One special case happens at startup stage. At * startup, the initialization of BluetoothService still has to be done * even if Bluetooth is disabled. * * Please see bug 892392 for more information. */ - if (aIsStartup || sBluetoothService->IsEnabled()) { + if (aIsStartup || IsEnabled()) { // Switch Bluetooth off - if (NS_FAILED(sBluetoothService->StopInternal(aRunnable))) { + nsresult rv = StopInternal(aRunnable); + if (NS_FAILED(rv)) { BT_WARNING("Bluetooth service failed to stop!"); + return rv; } } else { BT_WARNING("Bluetooth has already been enabled/disabled before."); nsRefPtr<nsRunnable> runnable = new BluetoothService::ToggleBtAck(false); if (NS_FAILED(NS_DispatchToMainThread(runnable))) { BT_WARNING("Failed to dispatch to main thread!"); } }
--- a/dom/bluetooth2/bluedroid/BluetoothServiceBluedroid.cpp +++ b/dom/bluetooth2/bluedroid/BluetoothServiceBluedroid.cpp @@ -27,17 +27,19 @@ #include "BluetoothUtils.h" #include "BluetoothUuid.h" #include "mozilla/dom/bluetooth/BluetoothTypes.h" #include "mozilla/ipc/UnixSocket.h" #include "mozilla/StaticMutex.h" #include "mozilla/StaticPtr.h" #include "mozilla/unused.h" -#define ERR_SET_PROPERTY "SetPropertyError" +#define ERR_SET_PROPERTY "SetPropertyError" +#define ERR_START_BLUETOOTH "StartBluetoothError" +#define ERR_STOP_BLUETOOTH "StopBluetoothError" #define ENSURE_BLUETOOTH_IS_READY(runnable, result) \ do { \ if (!sBtInterface || !IsEnabled()) { \ NS_NAMED_LITERAL_STRING(errorStr, "Bluetooth is not ready"); \ DispatchBluetoothReply(runnable, BluetoothValue(), errorStr); \ return result; \ } \ @@ -907,19 +909,28 @@ BluetoothServiceBluedroid::StartInternal if(aRunnable) { sChangeAdapterStateRunnableArray.AppendElement(aRunnable); } nsresult ret = StartStopGonkBluetooth(true); if (NS_FAILED(ret)) { nsRefPtr<nsRunnable> runnable = new BluetoothService::ToggleBtAck(false); + if (NS_FAILED(NS_DispatchToMainThread(runnable))) { BT_WARNING("Failed to dispatch to main thread!"); } + + // Reject Promise + if(aRunnable) { + DispatchBluetoothReply(aRunnable, BluetoothValue(), + NS_LITERAL_STRING(ERR_START_BLUETOOTH)); + sChangeAdapterStateRunnableArray.RemoveElement(aRunnable); + } + BT_LOGR("Error"); } return ret; } nsresult BluetoothServiceBluedroid::StopInternal(BluetoothReplyRunnable* aRunnable) @@ -930,19 +941,28 @@ BluetoothServiceBluedroid::StopInternal( if(aRunnable) { sChangeAdapterStateRunnableArray.AppendElement(aRunnable); } nsresult ret = StartStopGonkBluetooth(false); if (NS_FAILED(ret)) { nsRefPtr<nsRunnable> runnable = new BluetoothService::ToggleBtAck(true); + if (NS_FAILED(NS_DispatchToMainThread(runnable))) { BT_WARNING("Failed to dispatch to main thread!"); } + + // Reject Promise + if(aRunnable) { + DispatchBluetoothReply(aRunnable, BluetoothValue(), + NS_LITERAL_STRING(ERR_STOP_BLUETOOTH)); + sChangeAdapterStateRunnableArray.RemoveElement(aRunnable); + } + BT_LOGR("Error"); } return ret; } nsresult BluetoothServiceBluedroid::GetAdaptersInternal(