Index: third_party/WebKit/Source/platform/inspector_protocol/Values.h |
diff --git a/third_party/WebKit/Source/platform/inspector_protocol/Values.h b/third_party/WebKit/Source/platform/inspector_protocol/Values.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f7147a046f3297774fe47f802cd91e58275b646f |
--- /dev/null |
+++ b/third_party/WebKit/Source/platform/inspector_protocol/Values.h |
@@ -0,0 +1,228 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef Values_h |
+#define Values_h |
+ |
+#include "platform/PlatformExport.h" |
+#include "wtf/Allocator.h" |
+#include "wtf/Forward.h" |
+#include "wtf/HashMap.h" |
+#include "wtf/RefCounted.h" |
+#include "wtf/TypeTraits.h" |
+#include "wtf/Vector.h" |
+#include "wtf/text/StringHash.h" |
+#include "wtf/text/WTFString.h" |
+ |
+namespace blink { |
+namespace protocol { |
+ |
+class ListValue; |
+class DictionaryValue; |
+class Value; |
+ |
+class PLATFORM_EXPORT Value : public RefCounted<Value> { |
+public: |
+ static const int maxDepth = 1000; |
+ |
+ virtual ~Value() { } |
+ |
+ static PassRefPtr<Value> null() |
+ { |
+ return adoptRef(new Value()); |
+ } |
+ |
+ typedef enum { |
+ TypeNull = 0, |
+ TypeBoolean, |
+ TypeNumber, |
+ TypeString, |
+ TypeObject, |
+ TypeArray |
+ } Type; |
+ |
+ Type type() const { return m_type; } |
+ |
+ bool isNull() const { return m_type == TypeNull; } |
+ |
+ virtual bool asBoolean(bool* output) const; |
+ virtual bool asNumber(double* output) const; |
+ virtual bool asNumber(int* output) const; |
+ virtual bool asString(String* output) const; |
+ |
+ String toJSONString() const; |
+ virtual void writeJSON(StringBuilder* output) const; |
+ |
+protected: |
+ Value() : m_type(TypeNull) { } |
+ explicit Value(Type type) : m_type(type) { } |
+ |
+private: |
+ friend class DictionaryValue; |
+ friend class ListValue; |
+ |
+ Type m_type; |
+}; |
+ |
+class PLATFORM_EXPORT FundamentalValue : public Value { |
+public: |
+ |
+ static PassRefPtr<FundamentalValue> create(bool value) |
+ { |
+ return adoptRef(new FundamentalValue(value)); |
+ } |
+ |
+ static PassRefPtr<FundamentalValue> create(int value) |
+ { |
+ return adoptRef(new FundamentalValue(value)); |
+ } |
+ |
+ static PassRefPtr<FundamentalValue> create(double value) |
+ { |
+ return adoptRef(new FundamentalValue(value)); |
+ } |
+ |
+ bool asBoolean(bool* output) const override; |
+ bool asNumber(double* output) const override; |
+ bool asNumber(int* output) const override; |
+ |
+ void writeJSON(StringBuilder* output) const override; |
+ |
+private: |
+ explicit FundamentalValue(bool value) : Value(TypeBoolean), m_boolValue(value) { } |
+ explicit FundamentalValue(int value) : Value(TypeNumber), m_doubleValue((double)value) { } |
+ explicit FundamentalValue(double value) : Value(TypeNumber), m_doubleValue(value) { } |
+ |
+ union { |
+ bool m_boolValue; |
+ double m_doubleValue; |
+ }; |
+}; |
+ |
+class PLATFORM_EXPORT StringValue : public Value { |
+public: |
+ static PassRefPtr<StringValue> create(const String& value) |
+ { |
+ return adoptRef(new StringValue(value)); |
+ } |
+ |
+ static PassRefPtr<StringValue> create(const char* value) |
+ { |
+ return adoptRef(new StringValue(value)); |
+ } |
+ |
+ bool asString(String* output) const override; |
+ |
+ void writeJSON(StringBuilder* output) const override; |
+ |
+private: |
+ explicit StringValue(const String& value) : Value(TypeString), m_stringValue(value) { } |
+ explicit StringValue(const char* value) : Value(TypeString), m_stringValue(value) { } |
+ |
+ String m_stringValue; |
+}; |
+ |
+class PLATFORM_EXPORT DictionaryValue : public Value { |
+private: |
+ typedef HashMap<String, RefPtr<Value>> Dictionary; |
+ |
+public: |
+ typedef Dictionary::iterator iterator; |
+ typedef Dictionary::const_iterator const_iterator; |
+ |
+ static PassRefPtr<DictionaryValue> create() |
+ { |
+ return adoptRef(new DictionaryValue()); |
+ } |
+ |
+ static PassRefPtr<DictionaryValue> cast(PassRefPtr<Value> value) |
+ { |
+ if (!value || value->type() != TypeObject) |
+ return nullptr; |
+ return adoptRef(static_cast<DictionaryValue*>(value.leakRef())); |
+ } |
+ |
+ void writeJSON(StringBuilder* output) const override; |
+ |
+ int size() const { return m_data.size(); } |
+ |
+ void setBoolean(const String& name, bool); |
+ void setNumber(const String& name, double); |
+ void setString(const String& name, const String&); |
+ void setValue(const String& name, PassRefPtr<Value>); |
+ void setObject(const String& name, PassRefPtr<DictionaryValue>); |
+ void setArray(const String& name, PassRefPtr<ListValue>); |
+ |
+ iterator find(const String& name); |
+ const_iterator find(const String& name) const; |
+ bool getBoolean(const String& name, bool* output) const; |
+ template<class T> bool getNumber(const String& name, T* output) const |
+ { |
+ RefPtr<Value> value = get(name); |
+ if (!value) |
+ return false; |
+ return value->asNumber(output); |
+ } |
+ bool getString(const String& name, String* output) const; |
+ PassRefPtr<DictionaryValue> getObject(const String& name) const; |
+ PassRefPtr<ListValue> getArray(const String& name) const; |
+ PassRefPtr<Value> get(const String& name) const; |
+ |
+ bool booleanProperty(const String& name, bool defaultValue) const; |
+ |
+ void remove(const String& name); |
+ |
+ 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(); } |
+ ~DictionaryValue() override; |
+ |
+private: |
+ DictionaryValue(); |
+ |
+ Dictionary m_data; |
+ Vector<String> m_order; |
+}; |
+ |
+class PLATFORM_EXPORT ListValue : public Value { |
+public: |
+ typedef Vector<RefPtr<Value>>::iterator iterator; |
+ typedef Vector<RefPtr<Value>>::const_iterator const_iterator; |
+ |
+ static PassRefPtr<ListValue> create() |
+ { |
+ return adoptRef(new ListValue()); |
+ } |
+ |
+ static PassRefPtr<ListValue> cast(PassRefPtr<Value> value) |
+ { |
+ if (!value || value->type() != TypeArray) |
+ return nullptr; |
+ return adoptRef(static_cast<ListValue*>(value.leakRef())); |
+ } |
+ |
+ ~ListValue() override; |
+ |
+ void writeJSON(StringBuilder* output) const override; |
+ |
+ void pushValue(PassRefPtr<Value>); |
+ |
+ PassRefPtr<Value> get(size_t index); |
+ unsigned length() const { return m_data.size(); } |
+ |
+ 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(); } |
+ |
+private: |
+ ListValue(); |
+ Vector<RefPtr<Value>> m_data; |
+}; |
+ |
+} // namespace protocol |
+} // namespace blink |
+ |
+#endif // Values_h |