mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 23:31:56 +00:00
fe0bcc3a40
Most of the time, the return value of this method should be checked, because behavior should depend on whether or not an exception is thrown. However, if it is called immediately after a throw it doesn't need to be checked because it will always return true. bz said there is no public API that lets you assume there is an exception because it would be "too easy to misuse". MozReview-Commit-ID: CqyicBbcNjW --HG-- extra : rebase_source : a5b74ba88a927a90d491ceb8f0b750a67f62b0f4
75 lines
2.0 KiB
C++
75 lines
2.0 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* 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 "mozilla/dom/ToJSValue.h"
|
|
#include "mozilla/dom/DOMException.h"
|
|
#include "mozilla/dom/Exceptions.h"
|
|
#include "mozilla/dom/Promise.h"
|
|
#include "nsAString.h"
|
|
#include "nsContentUtils.h"
|
|
#include "nsStringBuffer.h"
|
|
#include "xpcpublic.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
bool
|
|
ToJSValue(JSContext* aCx, const nsAString& aArgument,
|
|
JS::MutableHandle<JS::Value> aValue)
|
|
{
|
|
// Make sure we're called in a compartment
|
|
MOZ_ASSERT(JS::CurrentGlobalOrNull(aCx));
|
|
|
|
// XXXkhuey I'd love to use xpc::NonVoidStringToJsval here, but it requires
|
|
// a non-const nsAString for silly reasons.
|
|
nsStringBuffer* sharedBuffer;
|
|
if (!XPCStringConvert::ReadableToJSVal(aCx, aArgument, &sharedBuffer,
|
|
aValue)) {
|
|
return false;
|
|
}
|
|
|
|
if (sharedBuffer) {
|
|
NS_ADDREF(sharedBuffer);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
bool
|
|
ToJSValue(JSContext* aCx,
|
|
nsresult aArgument,
|
|
JS::MutableHandle<JS::Value> aValue)
|
|
{
|
|
RefPtr<Exception> exception = CreateException(aArgument);
|
|
return ToJSValue(aCx, exception, aValue);
|
|
}
|
|
|
|
bool
|
|
ToJSValue(JSContext* aCx,
|
|
ErrorResult& aArgument,
|
|
JS::MutableHandle<JS::Value> aValue)
|
|
{
|
|
MOZ_ASSERT(aArgument.Failed());
|
|
MOZ_ASSERT(!aArgument.IsUncatchableException(),
|
|
"Doesn't make sense to convert uncatchable exception to a JS value!");
|
|
MOZ_ALWAYS_TRUE(aArgument.MaybeSetPendingException(aCx));
|
|
MOZ_ALWAYS_TRUE(JS_GetPendingException(aCx, aValue));
|
|
JS_ClearPendingException(aCx);
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
ToJSValue(JSContext* aCx, Promise& aArgument,
|
|
JS::MutableHandle<JS::Value> aValue)
|
|
{
|
|
aValue.setObject(*aArgument.PromiseObj());
|
|
return MaybeWrapObjectValue(aCx, aValue);
|
|
}
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|