/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ : * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */#include"nsJSUtils.h"#include"nsMemory.h"#include"nsString.h"#include"jsapi.h"#include"mozilla/dom/MozStorageAsyncStatementParamsBinding.h"#include"mozStoragePrivateHelpers.h"namespacemozilla{namespacestorage{//////////////////////////////////////////////////////////////////////////////////// AsyncStatementParamsNS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AsyncStatementParams,mWindow)NS_INTERFACE_TABLE_HEAD(AsyncStatementParams)NS_WRAPPERCACHE_INTERFACE_TABLE_ENTRYNS_INTERFACE_TABLE(AsyncStatementParams,nsISupports)NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(AsyncStatementParams)NS_INTERFACE_MAP_ENDNS_IMPL_CYCLE_COLLECTING_ADDREF(AsyncStatementParams)NS_IMPL_CYCLE_COLLECTING_RELEASE(AsyncStatementParams)AsyncStatementParams::AsyncStatementParams(nsPIDOMWindowInner*aWindow,AsyncStatement*aStatement):mWindow(aWindow),mStatement(aStatement){NS_ASSERTION(mStatement!=nullptr,"mStatement is null");}JSObject*AsyncStatementParams::WrapObject(JSContext*aCx,JS::Handle<JSObject*>aGivenProto){returndom::MozStorageAsyncStatementParams_Binding::Wrap(aCx,this,aGivenProto);}voidAsyncStatementParams::NamedGetter(JSContext*aCx,constnsAString&aName,bool&aFound,JS::MutableHandle<JS::Value>aResult,mozilla::ErrorResult&aRv){if(!mStatement){aRv.Throw(NS_ERROR_NOT_INITIALIZED);return;}// Unfortunately there's no API that lets us return the parameter value.aFound=false;}voidAsyncStatementParams::NamedSetter(JSContext*aCx,constnsAString&aName,JS::Handle<JS::Value>aValue,mozilla::ErrorResult&aRv){if(!mStatement){aRv.Throw(NS_ERROR_NOT_INITIALIZED);return;}NS_ConvertUTF16toUTF8name(aName);nsCOMPtr<nsIVariant>variant(convertJSValToVariant(aCx,aValue));if(!variant){aRv.Throw(NS_ERROR_UNEXPECTED);return;}aRv=mStatement->BindByName(name,variant);}voidAsyncStatementParams::GetSupportedNames(nsTArray<nsString>&aNames){// We don't know how many params there are, so we can't implement this for// AsyncStatementParams.}voidAsyncStatementParams::IndexedGetter(JSContext*aCx,uint32_taIndex,bool&aFound,JS::MutableHandle<JS::Value>aResult,mozilla::ErrorResult&aRv){if(!mStatement){aRv.Throw(NS_ERROR_NOT_INITIALIZED);return;}// Unfortunately there's no API that lets us return the parameter value.aFound=false;}voidAsyncStatementParams::IndexedSetter(JSContext*aCx,uint32_taIndex,JS::Handle<JS::Value>aValue,mozilla::ErrorResult&aRv){if(!mStatement){aRv.Throw(NS_ERROR_NOT_INITIALIZED);return;}nsCOMPtr<nsIVariant>variant(convertJSValToVariant(aCx,aValue));if(!variant){aRv.Throw(NS_ERROR_UNEXPECTED);return;}aRv=mStatement->BindByIndex(aIndex,variant);}}// namespace storage}// namespace mozilla