bool BroadcastSystemMessage(const nsAString& aType, const InfallibleTArray<BluetoothNamedValue>& aData) { JSContext* cx = nsContentUtils::GetSafeJSContext(); NS_ASSERTION(!::JS_IsExceptionPending(cx), "Shouldn't get here when an exception is pending!"); JSAutoRequest jsar(cx); JSObject* obj = JS_NewObject(cx, NULL, NULL, NULL); if (!obj) { NS_WARNING("Failed to new JSObject for system message!"); return false; } if (!SetJsObject(cx, aData, obj)) { NS_WARNING("Failed to set properties of system message!"); return false; } nsCOMPtr<nsISystemMessagesInternal> systemMessenger = do_GetService("@mozilla.org/system-message-internal;1"); NS_ENSURE_TRUE(systemMessenger, false); systemMessenger->BroadcastMessage(aType, OBJECT_TO_JSVAL(obj)); return true; }
bool BroadcastSystemMessage(const nsAString& aType, const InfallibleTArray<BluetoothNamedValue>& aData) { mozilla::AutoSafeJSContext cx; MOZ_ASSERT(!::JS_IsExceptionPending(cx), "Shouldn't get here when an exception is pending!"); JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx)); if (!obj) { BT_WARNING("Failed to new JSObject for system message!"); return false; } if (!SetJsObject(cx, aData, obj)) { BT_WARNING("Failed to set properties of system message!"); return false; } nsCOMPtr<nsISystemMessagesInternal> systemMessenger = do_GetService("@mozilla.org/system-message-internal;1"); NS_ENSURE_TRUE(systemMessenger, false); JS::Rooted<JS::Value> value(cx, JS::ObjectValue(*obj)); systemMessenger->BroadcastMessage(aType, value, JS::UndefinedHandleValue); return true; }
bool BroadcastSystemMessage(const nsAString& aType, const BluetoothValue& aData) { mozilla::AutoSafeJSContext cx; MOZ_ASSERT(!::JS_IsExceptionPending(cx), "Shouldn't get here when an exception is pending!"); nsCOMPtr<nsISystemMessagesInternal> systemMessenger = do_GetService("@mozilla.org/system-message-internal;1"); NS_ENSURE_TRUE(systemMessenger, false); JS::Rooted<JS::Value> value(cx); if (aData.type() == BluetoothValue::TnsString) { JSString* jsData = JS_NewUCStringCopyN(cx, aData.get_nsString().BeginReading(), aData.get_nsString().Length()); value.setString(jsData); } else if (aData.type() == BluetoothValue::TArrayOfBluetoothNamedValue) { JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx)); if (!obj) { BT_WARNING("Failed to new JSObject for system message!"); return false; } if (!SetJsObject(cx, aData, obj)) { BT_WARNING("Failed to set properties of system message!"); return false; } value = JS::ObjectValue(*obj); } else { BT_WARNING("Not support the unknown BluetoothValue type"); return false; } nsCOMPtr<nsISupports> promise; systemMessenger->BroadcastMessage(aType, value, JS::UndefinedHandleValue, getter_AddRefs(promise)); return true; }