void GeolocationSetting::HandleApproxDistanceChange(const JS::Value& aVal) { if (!aVal.isInt32()) { return; } GPSLOG("changing approx distance for %s to %d", (mOrigin.IsEmpty() ? "global" : NS_ConvertUTF16toUTF8(mOrigin).get()), aVal.toInt32()); // set the approximate distance mDistance = aVal.toInt32(); }
NS_IMETHODIMP MobileMessageManager::Delete(const JS::Value& aParam, nsIDOMDOMRequest** aRequest) { if (aParam.isInt32()) { return Delete(aParam.toInt32(), aRequest); } if (!aParam.isObject()) { return NS_ERROR_INVALID_ARG; } nsresult rv; nsIScriptContext* sc = GetContextForEventHandlers(&rv); AutoPushJSContext cx(sc->GetNativeContext()); NS_ENSURE_STATE(sc); int32_t id; nsCOMPtr<nsIDOMMozSmsMessage> smsMessage = do_QueryInterface(nsContentUtils::XPConnect()->GetNativeOfWrapper(cx, &aParam.toObject())); if (smsMessage) { smsMessage->GetId(&id); } else { nsCOMPtr<nsIDOMMozMmsMessage> mmsMessage = do_QueryInterface(nsContentUtils::XPConnect()->GetNativeOfWrapper(cx, &aParam.toObject())); if (mmsMessage) { mmsMessage->GetId(&id); } else { return NS_ERROR_INVALID_ARG; } } return Delete(id, aRequest); }
NS_IMETHODIMP AutoMounterSetting::Observe(nsISupports* aSubject, const char* aTopic, const PRUnichar* aData) { if (strcmp(aTopic, MOZSETTINGS_CHANGED) != 0) { return NS_OK; } // Note that this function gets called for any and all settings changes, // so we need to carefully check if we have the one we're interested in. // // The string that we're interested in will be a JSON string that looks like: // {"key":"ums.autoMount","value":true} nsCOMPtr<nsIThreadJSContextStack> stack = do_GetService("@mozilla.org/js/xpc/ContextStack;1"); if (!stack) { ERR("Failed to get JSContextStack"); return NS_OK; } JSContext* cx = stack->GetSafeJSContext(); if (!cx) { ERR("Failed to GetSafeJSContext"); return NS_OK; } nsDependentString dataStr(aData); JS::Value val; if (!JS_ParseJSON(cx, dataStr.get(), dataStr.Length(), &val) || !val.isObject()) { return NS_OK; } JSObject& obj(val.toObject()); JS::Value key; if (!JS_GetProperty(cx, &obj, "key", &key) || !key.isString()) { return NS_OK; } JSBool match; if (!JS_StringEqualsAscii(cx, key.toString(), UMS_MODE, &match) || (match != JS_TRUE)) { return NS_OK; } JS::Value value; if (!JS_GetProperty(cx, &obj, "value", &value) || !value.isInt32()) { return NS_OK; } int32_t mode = value.toInt32(); SetAutoMounterMode(mode); return NS_OK; }
bool CoerceDouble(const JS::Value& v, double* d) { if (v.isDouble()) { *d = v.toDouble(); } else if (v.isInt32()) { *d = double(v.toInt32()); } else if (v.isUndefined()) { *d = 0.0; } else { return false; } return true; }
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_IMETHODIMP MobileMessageManager::Delete(const JS::Value& aParam, nsIDOMDOMRequest** aRequest) { // We expect Int32, SmsMessage, MmsMessage, Int32[], SmsMessage[], MmsMessage[] if (!aParam.isObject() && !aParam.isInt32()) { return NS_ERROR_INVALID_ARG; } nsresult rv; nsIScriptContext* sc = GetContextForEventHandlers(&rv); AutoPushJSContext cx(sc->GetNativeContext()); NS_ENSURE_STATE(sc); int32_t id, *idArray; uint32_t size; if (aParam.isInt32()) { // Single Integer Message ID id = aParam.toInt32(); size = 1; idArray = &id; } else if (!JS_IsArrayObject(cx, &aParam.toObject())) { // Single SmsMessage/MmsMessage object rv = GetMessageId(cx, aParam, id); NS_ENSURE_SUCCESS(rv, rv); size = 1; idArray = &id; } else { // Int32[], SmsMessage[], or MmsMessage[] JS::Rooted<JSObject*> ids(cx, &aParam.toObject()); JS_ALWAYS_TRUE(JS_GetArrayLength(cx, ids, &size)); nsAutoArrayPtr<int32_t> idAutoArray(new int32_t[size]); JS::Rooted<JS::Value> idJsValue(cx); for (uint32_t i = 0; i < size; i++) { if (!JS_GetElement(cx, ids, i, &idJsValue)) { return NS_ERROR_INVALID_ARG; } if (idJsValue.isInt32()) { idAutoArray[i] = idJsValue.toInt32(); } else if (idJsValue.isObject()) { rv = GetMessageId(cx, idJsValue, id); NS_ENSURE_SUCCESS(rv, rv); idAutoArray[i] = id; } } idArray = idAutoArray.forget(); } nsCOMPtr<nsIMobileMessageDatabaseService> dbService = do_GetService(MOBILE_MESSAGE_DATABASE_SERVICE_CONTRACTID); NS_ENSURE_TRUE(dbService, NS_ERROR_FAILURE); nsRefPtr<DOMRequest> request = new DOMRequest(GetOwner()); nsCOMPtr<nsIMobileMessageCallback> msgCallback = new MobileMessageCallback(request); rv = dbService->DeleteMessage(idArray, size, msgCallback); NS_ENSURE_SUCCESS(rv, rv); request.forget(aRequest); return NS_OK; }