| Index: third_party/WebKit/Source/platform/JSONValues.h
|
| diff --git a/third_party/WebKit/Source/platform/JSONValues.h b/third_party/WebKit/Source/platform/JSONValues.h
|
| index a6cf1ddbb9f80f60b2b70468c5d7e3e8511d22f7..4a06be7eae0b8a7c7f3cf16f5cc41a6f0a50a1ab 100644
|
| --- a/third_party/WebKit/Source/platform/JSONValues.h
|
| +++ b/third_party/WebKit/Source/platform/JSONValues.h
|
| @@ -56,6 +56,7 @@
|
| public:
|
| static const int maxDepth = 1000;
|
|
|
| + JSONValue() : m_type(TypeNull) { }
|
| virtual ~JSONValue() { }
|
|
|
| static PassRefPtr<JSONValue> null()
|
| @@ -83,6 +84,10 @@
|
| virtual bool asNumber(unsigned long* output) const;
|
| virtual bool asNumber(unsigned* output) const;
|
| virtual bool asString(String* output) const;
|
| + virtual bool asObject(RefPtr<JSONObject>* output);
|
| + virtual bool asArray(RefPtr<JSONArray>* output);
|
| + virtual PassRefPtr<JSONObject> asObject();
|
| + virtual PassRefPtr<JSONArray> asArray();
|
|
|
| String toJSONString() const;
|
| String toPrettyJSONString() const;
|
| @@ -92,13 +97,12 @@
|
| static String quoteString(const String&);
|
|
|
| protected:
|
| - JSONValue() : m_type(TypeNull) { }
|
| explicit JSONValue(Type type) : m_type(type) { }
|
| virtual void prettyWriteJSONInternal(StringBuilder* output, int depth) const;
|
|
|
| private:
|
| - friend class JSONObject;
|
| - friend class JSONArray;
|
| + friend class JSONObjectBase;
|
| + friend class JSONArrayBase;
|
|
|
| Type m_type;
|
| };
|
| @@ -164,7 +168,7 @@
|
| String m_stringValue;
|
| };
|
|
|
| -class PLATFORM_EXPORT JSONObject : public JSONValue {
|
| +class PLATFORM_EXPORT JSONObjectBase : public JSONValue {
|
| private:
|
| typedef HashMap<String, RefPtr<JSONValue>> Dictionary;
|
|
|
| @@ -172,21 +176,17 @@
|
| typedef Dictionary::iterator iterator;
|
| typedef Dictionary::const_iterator const_iterator;
|
|
|
| - static PassRefPtr<JSONObject> create()
|
| - {
|
| - return adoptRef(new JSONObject());
|
| - }
|
| -
|
| - static PassRefPtr<JSONObject> cast(PassRefPtr<JSONValue> value)
|
| - {
|
| - if (!value || value->type() != TypeObject)
|
| - return nullptr;
|
| - return adoptRef(static_cast<JSONObject*>(value.leakRef()));
|
| - }
|
| + PassRefPtr<JSONObject> asObject() override;
|
| + JSONObject* openAccessors();
|
|
|
| void writeJSON(StringBuilder* output) const override;
|
|
|
| int size() const { return m_data.size(); }
|
| +
|
| +protected:
|
| + ~JSONObjectBase() override;
|
| +
|
| + bool asObject(RefPtr<JSONObject>* output) override;
|
|
|
| void setBoolean(const String& name, bool);
|
| void setNumber(const String& name, double);
|
| @@ -214,42 +214,71 @@
|
|
|
| void remove(const String& name);
|
|
|
| + void prettyWriteJSONInternal(StringBuilder* output, int depth) const override;
|
| +
|
| iterator begin() { return m_data.begin(); }
|
| iterator end() { return m_data.end(); }
|
| const_iterator begin() const { return m_data.begin(); }
|
| const_iterator end() const { return m_data.end(); }
|
| - ~JSONObject() override;
|
| -
|
| -protected:
|
| - void prettyWriteJSONInternal(StringBuilder* output, int depth) const override;
|
| -
|
| -private:
|
| - JSONObject();
|
| -
|
| +
|
| +protected:
|
| + JSONObjectBase();
|
| +
|
| +private:
|
| Dictionary m_data;
|
| Vector<String> m_order;
|
| };
|
|
|
| -class PLATFORM_EXPORT JSONArray : public JSONValue {
|
| +class PLATFORM_EXPORT JSONObject : public JSONObjectBase {
|
| +public:
|
| + static PassRefPtr<JSONObject> create()
|
| + {
|
| + return adoptRef(new JSONObject());
|
| + }
|
| +
|
| + using JSONObjectBase::asObject;
|
| +
|
| + using JSONObjectBase::setBoolean;
|
| + using JSONObjectBase::setNumber;
|
| + using JSONObjectBase::setString;
|
| + using JSONObjectBase::setValue;
|
| + using JSONObjectBase::setObject;
|
| + using JSONObjectBase::setArray;
|
| +
|
| + using JSONObjectBase::find;
|
| + using JSONObjectBase::getBoolean;
|
| + using JSONObjectBase::getNumber;
|
| + using JSONObjectBase::getString;
|
| + using JSONObjectBase::getObject;
|
| + using JSONObjectBase::getArray;
|
| + using JSONObjectBase::get;
|
| +
|
| + using JSONObjectBase::booleanProperty;
|
| +
|
| + using JSONObjectBase::remove;
|
| +
|
| + using JSONObjectBase::begin;
|
| + using JSONObjectBase::end;
|
| +
|
| + using JSONObjectBase::size;
|
| +};
|
| +
|
| +
|
| +class PLATFORM_EXPORT JSONArrayBase : public JSONValue {
|
| public:
|
| typedef Vector<RefPtr<JSONValue>>::iterator iterator;
|
| typedef Vector<RefPtr<JSONValue>>::const_iterator const_iterator;
|
|
|
| - static PassRefPtr<JSONArray> create()
|
| - {
|
| - return adoptRef(new JSONArray());
|
| - }
|
| -
|
| - static PassRefPtr<JSONArray> cast(PassRefPtr<JSONValue> value)
|
| - {
|
| - if (!value || value->type() != TypeArray)
|
| - return nullptr;
|
| - return adoptRef(static_cast<JSONArray*>(value.leakRef()));
|
| - }
|
| -
|
| - ~JSONArray() override;
|
| + PassRefPtr<JSONArray> asArray() override;
|
| +
|
| + unsigned length() const { return m_data.size(); }
|
|
|
| void writeJSON(StringBuilder* output) const override;
|
| +
|
| +protected:
|
| + ~JSONArrayBase() override;
|
| +
|
| + bool asArray(RefPtr<JSONArray>* output) override;
|
|
|
| void pushBoolean(bool);
|
| void pushInt(int);
|
| @@ -260,7 +289,8 @@
|
| void pushArray(PassRefPtr<JSONArray>);
|
|
|
| PassRefPtr<JSONValue> get(size_t index);
|
| - unsigned length() const { return m_data.size(); }
|
| +
|
| + void prettyWriteJSONInternal(StringBuilder* output, int depth) const override;
|
|
|
| iterator begin() { return m_data.begin(); }
|
| iterator end() { return m_data.end(); }
|
| @@ -268,11 +298,33 @@
|
| const_iterator end() const { return m_data.end(); }
|
|
|
| protected:
|
| - void prettyWriteJSONInternal(StringBuilder* output, int depth) const override;
|
| -
|
| -private:
|
| - JSONArray();
|
| + JSONArrayBase();
|
| +
|
| +private:
|
| Vector<RefPtr<JSONValue>> m_data;
|
| +};
|
| +
|
| +class PLATFORM_EXPORT JSONArray : public JSONArrayBase {
|
| +public:
|
| + static PassRefPtr<JSONArray> create()
|
| + {
|
| + return adoptRef(new JSONArray());
|
| + }
|
| +
|
| + using JSONArrayBase::asArray;
|
| +
|
| + using JSONArrayBase::pushBoolean;
|
| + using JSONArrayBase::pushInt;
|
| + using JSONArrayBase::pushNumber;
|
| + using JSONArrayBase::pushString;
|
| + using JSONArrayBase::pushValue;
|
| + using JSONArrayBase::pushObject;
|
| + using JSONArrayBase::pushArray;
|
| +
|
| + using JSONArrayBase::get;
|
| +
|
| + using JSONArrayBase::begin;
|
| + using JSONArrayBase::end;
|
| };
|
|
|
| PLATFORM_EXPORT void escapeStringForJSON(const String&, StringBuilder*);
|
|
|