/* bool newResolve (in nsIXPConnectWrappedNative wrapper, in JSContextPtr cx, in JSObjectPtr obj, in jsid id, in PRUint32 flags, out JSObjectPtr objp); */ NS_IMETHODIMP calDateTime::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext * cx, JSObject * obj, jsid id, PRUint32 flags, JSObject * *objp, bool *_retval) { NS_ENSURE_ARG_POINTER(objp); NS_ENSURE_ARG_POINTER(_retval); if (JSID_IS_STRING(id)) { size_t length; JSString *idString = JSID_TO_STRING(id); const jschar *str = JS_GetStringCharsAndLength(cx, idString, &length); nsDependentString const name(reinterpret_cast<PRUnichar const*>(str), length); if (name.EqualsLiteral("jsDate")) { *_retval = JS_DefineUCProperty(cx, obj, str, length, JSVAL_VOID, nsnull, nsnull, 0); *objp = obj; return *_retval ? NS_OK : NS_ERROR_FAILURE; } } *_retval = PR_TRUE; return NS_OK; }
bool ScriptInterface::SetProperty_(jsval obj, const wchar_t* name, jsval value, bool constant, bool enumerate) { uintN attrs = 0; if (constant) attrs |= JSPROP_READONLY | JSPROP_PERMANENT; if (enumerate) attrs |= JSPROP_ENUMERATE; if (! JSVAL_IS_OBJECT(obj)) return false; JSObject* object = JSVAL_TO_OBJECT(obj); utf16string name16(name, name + wcslen(name)); if (! JS_DefineUCProperty(m->m_cx, object, reinterpret_cast<const jschar*>(name16.c_str()), name16.length(), value, NULL, NULL, attrs)) return false; return true; }
bool ScriptInterface::SetProperty_(JS::HandleValue obj, const wchar_t* name, JS::HandleValue value, bool constant, bool enumerate) { JSAutoRequest rq(m->m_cx); uint attrs = 0; if (constant) attrs |= JSPROP_READONLY | JSPROP_PERMANENT; if (enumerate) attrs |= JSPROP_ENUMERATE; if (!obj.isObject()) return false; JS::RootedObject object(m->m_cx, &obj.toObject()); utf16string name16(name, name + wcslen(name)); if (! JS_DefineUCProperty(m->m_cx, object, reinterpret_cast<const jschar*>(name16.c_str()), name16.length(), value, NULL, NULL, attrs)) return false; return true; }
static JSBool PushValue(JSContext *cx, JSONParser *jp, JSObject *parent, jsval value) { JSAutoTempValueRooter tvr(cx, 1, &value); JSBool ok; if (OBJ_IS_ARRAY(cx, parent)) { jsuint len; ok = JS_GetArrayLength(cx, parent, &len); if (ok) ok = JS_SetElement(cx, parent, len, &value); } else { ok = JS_DefineUCProperty(cx, parent, JS_GetStringChars(jp->objectKey), JS_GetStringLength(jp->objectKey), value, NULL, NULL, JSPROP_ENUMERATE); } return ok; }
static JSBool PushValue(JSContext *cx, JSONParser *jp, JSObject *parent, jsval value) { JSAutoTempValueRooter tvr(cx, 1, &value); JSBool ok; if (OBJ_IS_ARRAY(cx, parent)) { jsuint len; ok = js_GetLengthProperty(cx, parent, &len); if (ok) { ok = OBJ_DEFINE_PROPERTY(cx, parent, INT_TO_JSID(len), value, NULL, NULL, JSPROP_ENUMERATE, NULL); } } else { ok = JS_DefineUCProperty(cx, parent, jp->objectKey->base, STRING_BUFFER_OFFSET(jp->objectKey), value, NULL, NULL, JSPROP_ENUMERATE); js_FinishStringBuffer(jp->objectKey); js_InitStringBuffer(jp->objectKey); } return ok; }
NS_IMETHODIMP IDBCursor::Update(const jsval &aValue, JSContext* aCx, nsIIDBRequest** _retval) { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); if (mType != OBJECTSTORE) { NS_NOTYETIMPLEMENTED("Implement me!"); return NS_ERROR_NOT_IMPLEMENTED; } if (!mObjectStore->TransactionIsOpen()) { return NS_ERROR_UNEXPECTED; } if (!mObjectStore->IsWriteAllowed()) { return NS_ERROR_OBJECT_IS_IMMUTABLE; } const Key& key = mData[mDataIndex].key; NS_ASSERTION(!key.IsUnset() && !key.IsNull(), "Bad key!"); JSAutoRequest ar(aCx); js::AutoValueRooter clone(aCx); nsresult rv = nsContentUtils::CreateStructuredClone(aCx, aValue, clone.jsval_addr()); if (NS_FAILED(rv)) { return rv; } if (!mObjectStore->KeyPath().IsEmpty()) { // Make sure the object given has the correct keyPath value set on it or // we will add it. const nsString& keyPath = mObjectStore->KeyPath(); const jschar* keyPathChars = reinterpret_cast<const jschar*>(keyPath.get()); const size_t keyPathLen = keyPath.Length(); js::AutoValueRooter prop(aCx); JSBool ok = JS_GetUCProperty(aCx, JSVAL_TO_OBJECT(clone.jsval_value()), keyPathChars, keyPathLen, prop.jsval_addr()); NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE); if (JSVAL_IS_VOID(prop.jsval_value())) { rv = IDBObjectStore::GetJSValFromKey(key, aCx, prop.jsval_addr()); NS_ENSURE_SUCCESS(rv, rv); ok = JS_DefineUCProperty(aCx, JSVAL_TO_OBJECT(clone.jsval_value()), keyPathChars, keyPathLen, prop.jsval_value(), nsnull, nsnull, JSPROP_ENUMERATE); NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE); } else { Key newKey; rv = IDBObjectStore::GetKeyFromJSVal(prop.jsval_value(), newKey); NS_ENSURE_SUCCESS(rv, rv); if (newKey.IsUnset() || newKey.IsNull() || newKey != key) { return NS_ERROR_INVALID_ARG; } } } nsTArray<IndexUpdateInfo> indexUpdateInfo; rv = IDBObjectStore::GetIndexUpdateInfo(mObjectStore->GetObjectStoreInfo(), aCx, clone.jsval_value(), indexUpdateInfo); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIJSON> json(new nsJSON()); nsString jsonValue; rv = json->EncodeFromJSVal(clone.jsval_addr(), aCx, jsonValue); NS_ENSURE_SUCCESS(rv, rv); nsRefPtr<IDBRequest> request = GenerateWriteRequest(mTransaction->ScriptContext(), mTransaction->Owner()); NS_ENSURE_TRUE(request, NS_ERROR_FAILURE); nsRefPtr<UpdateHelper> helper = new UpdateHelper(mTransaction, request, mObjectStore->Id(), jsonValue, key, mObjectStore->IsAutoIncrement(), indexUpdateInfo); rv = helper->DispatchToTransactionPool(); NS_ENSURE_SUCCESS(rv, rv); request.forget(_retval); return NS_OK; }