gecko/dom/json/nsJSON.h
Phil Ringnalda b656763114 Backed out 6 changesets (bug 1060982, bug 1061058, bug 1060987, bug 1061060, bug 1060930) for build bustage
CLOSED TREE

Backed out changeset c23b8418e6be (bug 1060987)
Backed out changeset a8cddc6bdffc (bug 1061060)
Backed out changeset b5af5cbdac3f (bug 1060982)
Backed out changeset 4912d451011a (bug 1060930)
Backed out changeset bdacbf453238 (bug 1061058)
Backed out changeset da6c71a8f5ae (bug 1060987)
2014-09-01 16:48:51 -07:00

94 lines
2.4 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/. */
#ifndef nsJSON_h__
#define nsJSON_h__
#include "nsIJSON.h"
#include "nsString.h"
#include "nsCOMPtr.h"
#include "nsIOutputStream.h"
#include "nsIUnicodeEncoder.h"
#include "nsIUnicodeDecoder.h"
#include "nsIRequestObserver.h"
#include "nsIStreamListener.h"
#include "nsTArray.h"
class nsIURI;
class MOZ_STACK_CLASS nsJSONWriter
{
public:
nsJSONWriter();
nsJSONWriter(nsIOutputStream *aStream);
virtual ~nsJSONWriter();
nsresult SetCharset(const char *aCharset);
nsCOMPtr<nsIOutputStream> mStream;
nsresult Write(const char16_t *aBuffer, uint32_t aLength);
nsString mOutputString;
bool DidWrite();
void FlushBuffer();
protected:
char16_t *mBuffer;
uint32_t mBufferCount;
bool mDidWrite;
nsresult WriteToStream(nsIOutputStream *aStream, nsIUnicodeEncoder *encoder,
const char16_t *aBuffer, uint32_t aLength);
nsCOMPtr<nsIUnicodeEncoder> mEncoder;
};
class nsJSON : public nsIJSON
{
public:
nsJSON();
NS_DECL_ISUPPORTS
NS_DECL_NSIJSON
protected:
virtual ~nsJSON();
nsresult EncodeInternal(JSContext* cx,
const JS::Value& val,
nsJSONWriter* writer);
nsresult DecodeInternal(JSContext* cx,
nsIInputStream* aStream,
int32_t aContentLength,
bool aNeedsConverter,
JS::MutableHandle<JS::Value> aRetVal);
nsCOMPtr<nsIURI> mURI;
};
nsresult
NS_NewJSON(nsISupports* aOuter, REFNSIID aIID, void** aResult);
class nsJSONListener : public nsIStreamListener
{
public:
nsJSONListener(JSContext *cx, JS::Value *rootVal, bool needsConverter);
NS_DECL_ISUPPORTS
NS_DECL_NSIREQUESTOBSERVER
NS_DECL_NSISTREAMLISTENER
protected:
virtual ~nsJSONListener();
bool mNeedsConverter;
JSContext *mCx;
JS::Value *mRootVal;
nsCOMPtr<nsIUnicodeDecoder> mDecoder;
nsCString mSniffBuffer;
nsTArray<char16_t> mBufferedChars;
nsresult ProcessBytes(const char* aBuffer, uint32_t aByteLength);
nsresult ConsumeConverted(const char* aBuffer, uint32_t aByteLength);
nsresult Consume(const char16_t *data, uint32_t len);
};
#endif