void nsGeolocationService::HandleMozsettingChanged(const PRUnichar* aData) { // The string that we're interested in will be a JSON string that looks like: // {"key":"gelocation.enabled","value":true} SafeAutoJSContext cx; nsDependentString dataStr(aData); JS::Value val; if (!JS_ParseJSON(cx, dataStr.get(), dataStr.Length(), &val) || !val.isObject()) { return; } JSObject &obj(val.toObject()); JS::Value key; if (!JS_GetProperty(cx, &obj, "key", &key) || !key.isString()) { return; } JSBool match; if (!JS_StringEqualsAscii(cx, key.toString(), GEO_SETINGS_ENABLED, &match) || (match != JS_TRUE)) { return; } JS::Value value; if (!JS_GetProperty(cx, &obj, "value", &value) || !value.isBoolean()) { return; } HandleMozsettingValue(value.toBoolean()); }
void nsGeolocationSettings::HandleGeolocationAlaEnabledChange(const JS::Value& aVal) { if (!aVal.isBoolean()) { return; } mAlaEnabled = aVal.toBoolean(); }
NS_IMETHOD Handle(const nsAString& aName, const JS::Value& aResult) { MOZ_ASSERT(NS_IsMainThread()); // The geolocation is enabled by default: bool value = true; if (aResult.isBoolean()) { value = aResult.toBoolean(); } MozSettingValue(value); return NS_OK; }
NS_IMETHODIMP SmsFilter::SetRead(JSContext* aCx, const JS::Value& aRead) { if (aRead == JSVAL_NULL) { mData.read() = eReadState_Unknown; return NS_OK; } if (!aRead.isBoolean()) { return NS_ERROR_INVALID_ARG; } mData.read() = aRead.toBoolean() ? eReadState_Read : eReadState_Unread; return NS_OK; }
std::string gjs_debug_value(JS::Value v) { std::ostringstream out; if (v.isNull()) return "null"; if (v.isUndefined()) return "undefined"; if (v.isInt32()) { out << v.toInt32(); return out.str(); } if (v.isDouble()) { out << v.toDouble(); return out.str(); } if (v.isString()) { out << gjs_debug_string(v.toString()); return out.str(); } if (v.isSymbol()) { out << gjs_debug_symbol(v.toSymbol()); return out.str(); } if (v.isObject() && js::IsFunctionObject(&v.toObject())) { JSFunction* fun = JS_GetObjectFunction(&v.toObject()); JSString *display_name = JS_GetFunctionDisplayId(fun); if (display_name) out << "<function " << gjs_debug_string(display_name); else out << "<unnamed function"; out << " at " << fun << '>'; return out.str(); } if (v.isObject()) { out << gjs_debug_object(&v.toObject()); return out.str(); } if (v.isBoolean()) return (v.toBoolean() ? "true" : "false"); if (v.isMagic()) return "<magic>"; return "unexpected value"; }
NS_DECL_ISUPPORTS NS_IMETHOD Handle(const nsAString& aName, const JS::Value& aResult) { MOZ_ASSERT(NS_IsMainThread()); if (!aResult.isBoolean()) { NS_WARNING("Setting for '" BLUETOOTH_ENABLED_SETTING "' is not a boolean!"); return NS_OK; } // It is theoretically possible to shut down before the first settings check // has completed (though extremely unlikely). if (gBluetoothService) { return gBluetoothService->HandleStartupSettingsCheck(aResult.toBoolean()); } return NS_OK; }
nsresult BluetoothService::HandleSettingsChanged(const nsAString& aData) { MOZ_ASSERT(NS_IsMainThread()); // The string that we're interested in will be a JSON string that looks like: // {"key":"bluetooth.enabled","value":true} JSContext* cx = nsContentUtils::GetSafeJSContext(); if (!cx) { return NS_OK; } JS::Value val; if (!JS_ParseJSON(cx, aData.BeginReading(), aData.Length(), &val)) { return JS_ReportPendingException(cx) ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } if (!val.isObject()) { return NS_OK; } JSObject& obj(val.toObject()); JS::Value key; if (!JS_GetProperty(cx, &obj, "key", &key)) { MOZ_ASSERT(!JS_IsExceptionPending(cx)); return NS_ERROR_OUT_OF_MEMORY; } if (!key.isString()) { return NS_OK; } JSBool match; if (!JS_StringEqualsAscii(cx, key.toString(), BLUETOOTH_ENABLED_SETTING, &match)) { MOZ_ASSERT(!JS_IsExceptionPending(cx)); return NS_ERROR_OUT_OF_MEMORY; } if (!match) { return NS_OK; } JS::Value value; if (!JS_GetProperty(cx, &obj, "value", &value)) { MOZ_ASSERT(!JS_IsExceptionPending(cx)); return NS_ERROR_OUT_OF_MEMORY; } if (!value.isBoolean()) { MOZ_ASSERT(false, "Expecting a boolean for 'bluetooth.enabled'!"); return NS_ERROR_UNEXPECTED; } if (value.toBoolean() == IsEnabled()) { // Nothing to do here. return NS_OK; } nsresult rv; if (IsEnabled()) { rv = Stop(); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; } rv = Start(); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }
nsresult BluetoothManager::HandleMozsettingChanged(const PRUnichar* aData) { // The string that we're interested in will be a JSON string that looks like: // {"key":"bluetooth.enabled","value":true} nsresult rv; nsIScriptContext* sc = GetContextForEventHandlers(&rv); if (NS_FAILED(rv)) { return NS_ERROR_UNEXPECTED; } JSContext *cx = sc->GetNativeContext(); if (!cx) { return NS_OK; } // In the following [if] blocks, NS_OK will be returned even if JS_* functions // return false. That's because this function gets called whenever mozSettings // changes, so that we'll receive signals we're not interested in and it would // be one of the reasons for making JS_* functions return false. nsDependentString dataStr(aData); JS::Value val; if (!JS_ParseJSON(cx, dataStr.get(), dataStr.Length(), &val)) { return NS_OK; } if (!val.isObject()) { return NS_OK; } JSObject &obj(val.toObject()); JS::Value key; if (!JS_GetProperty(cx, &obj, "key", &key)) { return NS_OK; } if (!key.isString()) { return NS_OK; } JSBool match; if (!JS_StringEqualsAscii(cx, key.toString(), "bluetooth.enabled", &match)) { return NS_OK; } if (!match) { return NS_OK; } JS::Value value; if (!JS_GetProperty(cx, &obj, "value", &value)) { return NS_OK; } if (!value.isBoolean()) { return NS_OK; } BluetoothService* bs = BluetoothService::Get(); if (!bs) { NS_WARNING("BluetoothService not available!"); return NS_ERROR_FAILURE; } bool enabled = value.toBoolean(); nsCOMPtr<nsIRunnable> resultTask = new ToggleBtResultTask(this, enabled); if (enabled) { if (NS_FAILED(bs->Start(resultTask))) { return NS_ERROR_FAILURE; } } else { if (NS_FAILED(bs->Stop(resultTask))) { return NS_ERROR_FAILURE; } } return NS_OK; }