--- a/dom/bluetooth/bluez/BluetoothDBusService.cpp
+++ b/dom/bluetooth/bluez/BluetoothDBusService.cpp
@@ -857,22 +857,22 @@ CheckDBusReply(DBusMessage* aMsg, void*
MOZ_ASSERT(!NS_IsMainThread()); // I/O thread
NS_ENSURE_TRUE_VOID(aMsg);
BluetoothValue v;
nsAutoString replyError;
UnpackVoidMessage(aMsg, nullptr, v, replyError);
- nsAutoPtr<BluetoothServiceClass> serviceClass(
- static_cast<BluetoothServiceClass*>(aServiceClass));
+ BluetoothServiceClass serviceClass =
+ static_cast<BluetoothServiceClass>(NS_PTR_TO_INT32(aServiceClass));
if (!replyError.IsEmpty()) {
NS_DispatchToMainThread(
- new ReplyErrorToProfileManager(*serviceClass, aConnect, replyError));
+ new ReplyErrorToProfileManager(serviceClass, aConnect, replyError));
}
}
static void
InputConnectCallback(DBusMessage* aMsg, void* aParam)
{
CheckDBusReply(aMsg, aParam, true);
}
@@ -2587,49 +2587,48 @@ BluetoothDBusService::SendInputMessage(c
nsString objectPath = GetObjectPathFromAddress(sAdapterPath, aDeviceAddress);
return SendAsyncDBusMessage(objectPath, DBUS_INPUT_IFACE, aMessage, callback);
}
class SendAsyncDBusMessageTask : public Task
{
public:
SendAsyncDBusMessageTask(DBusReplyCallback aCallback,
- BluetoothServiceClass* aServiceClass,
+ BluetoothServiceClass aServiceClass,
const nsACString& aObjectPath,
const char* aInterface,
const nsACString& aMessage)
: mCallback(aCallback)
, mServiceClass(aServiceClass)
, mObjectPath(aObjectPath)
, mInterface(aInterface)
, mMessage(aMessage)
{
- MOZ_ASSERT(mServiceClass);
MOZ_ASSERT(!mObjectPath.IsEmpty());
MOZ_ASSERT(!mInterface.IsEmpty());
MOZ_ASSERT(!mMessage.IsEmpty());
}
void Run() override
{
MOZ_ASSERT(!NS_IsMainThread()); // I/O thread
MOZ_ASSERT(sDBusConnection);
+ static_assert(sizeof(BluetoothServiceClass) <= sizeof(intptr_t),
+ "BluetoothServiceClass cannot be passed via intptr_t");
bool success = sDBusConnection->SendWithReply(
- mCallback, static_cast<void*>(mServiceClass), -1,
+ mCallback, NS_INT32_TO_PTR(mServiceClass), -1,
BLUEZ_DBUS_BASE_IFC, mObjectPath.get(), mInterface.get(),
mMessage.get(), DBUS_TYPE_INVALID);
NS_ENSURE_TRUE_VOID(success);
-
- mServiceClass.forget();
}
private:
DBusReplyCallback mCallback;
- nsAutoPtr<BluetoothServiceClass> mServiceClass;
+ BluetoothServiceClass mServiceClass;
const nsCString mObjectPath;
const nsCString mInterface;
const nsCString mMessage;
};
nsresult
BluetoothDBusService::SendAsyncDBusMessage(const nsAString& aObjectPath,
const char* aInterface,
@@ -2637,28 +2636,28 @@ BluetoothDBusService::SendAsyncDBusMessa
DBusReplyCallback aCallback)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(IsEnabled());
MOZ_ASSERT(aCallback);
MOZ_ASSERT(!aObjectPath.IsEmpty());
MOZ_ASSERT(aInterface);
- nsAutoPtr<BluetoothServiceClass> serviceClass(new BluetoothServiceClass());
+ BluetoothServiceClass serviceClass;
if (!strcmp(aInterface, DBUS_SINK_IFACE)) {
- *serviceClass = BluetoothServiceClass::A2DP;
+ serviceClass = BluetoothServiceClass::A2DP;
} else if (!strcmp(aInterface, DBUS_INPUT_IFACE)) {
- *serviceClass = BluetoothServiceClass::HID;
+ serviceClass = BluetoothServiceClass::HID;
} else {
MOZ_ASSERT(false);
return NS_ERROR_FAILURE;
}
Task* task = new SendAsyncDBusMessageTask(aCallback,
- serviceClass.forget(),
+ serviceClass,
NS_ConvertUTF16toUTF8(aObjectPath),
aInterface,
NS_ConvertUTF16toUTF8(aMessage));
DispatchToDBusThread(task);
return NS_OK;
}