Beispiel #1
0
NS_IMETHODIMP
nsJSONListener::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext,
                              nsresult aStatusCode)
{
  nsresult rv;

  // This can happen with short UTF-8 messages (<4 bytes)
  if (!mSniffBuffer.IsEmpty()) {
    // Just consume mSniffBuffer
    rv = ProcessBytes(nullptr, 0);
    NS_ENSURE_SUCCESS(rv, rv);
  }

  JS::RootedValue reviver(mCx, JS::NullValue()), value(mCx);

  JS::StableCharPtr chars(reinterpret_cast<const jschar*>(mBufferedChars.Elements()),
                          mBufferedChars.Length());
  JSBool ok = js::ParseJSONWithReviver(mCx, chars,
                                       (uint32_t) mBufferedChars.Length(),
                                       reviver, &value,
                                       mDecodingMode);

  *mRootVal = value;
  mBufferedChars.TruncateLength(0);
  return ok ? NS_OK : NS_ERROR_FAILURE;
}
Beispiel #2
0
NS_IMETHODIMP
nsJSON::LegacyDecodeToJSVal(const nsAString &str, JSContext *cx, JS::Value *result)
{
  JS::RootedValue reviver(cx, JS::NullValue()), value(cx);

  JS::StableCharPtr chars(static_cast<const jschar*>(PromiseFlatString(str).get()),
                          str.Length());
  if (!js::ParseJSONWithReviver(cx, chars, str.Length(), reviver,
                                &value, LEGACY)) {
    return NS_ERROR_UNEXPECTED;
  }

  *result = value;
  return NS_OK;
}