mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
b656763114
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)
94 lines
2.4 KiB
C++
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
|