Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/Dictionary.h

Issue 2509713002: binding: Makes Dictionary throw an exception (constructor). (Closed)
Patch Set: Addressed review comments. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/core/v8/Dictionary.h
diff --git a/third_party/WebKit/Source/bindings/core/v8/Dictionary.h b/third_party/WebKit/Source/bindings/core/v8/Dictionary.h
index 0f0ab1fb3211d2d570cea611b230251f4b240015..d280c7065be2aad800ddccfce7c951d9d4cd10e9 100644
--- a/third_party/WebKit/Source/bindings/core/v8/Dictionary.h
+++ b/third_party/WebKit/Source/bindings/core/v8/Dictionary.h
@@ -27,7 +27,6 @@
#define Dictionary_h
#include "bindings/core/v8/DictionaryIterator.h"
-#include "bindings/core/v8/ExceptionMessages.h"
#include "bindings/core/v8/Nullable.h"
#include "bindings/core/v8/V8Binding.h"
#include "core/CoreExport.h"
@@ -49,24 +48,35 @@ class CORE_EXPORT Dictionary final {
public:
Dictionary() : m_isolate(nullptr) {}
- Dictionary(v8::Isolate* isolate, const v8::Local<v8::Value>& options)
- : m_options(options), m_isolate(isolate) {
- DCHECK(m_isolate);
+ Dictionary(v8::Isolate*,
+ v8::Local<v8::Value> dictionaryObject,
+ ExceptionState&);
+
+ Dictionary& operator=(const Dictionary&) = default;
+
+ bool isObject() const { return !m_dictionaryObject.IsEmpty(); }
+ bool isUndefinedOrNull() const { return !isObject(); }
+
+ v8::Local<v8::Value> v8Value() const {
+ if (!m_isolate)
+ return v8::Local<v8::Value>();
+ switch (m_valueType) {
+ case ValueType::Undefined:
+ return v8::Undefined(m_isolate);
+ case ValueType::Null:
+ return v8::Null(m_isolate);
+ case ValueType::Object:
+ return m_dictionaryObject;
+ default:
+ NOTREACHED();
+ return v8::Local<v8::Value>();
+ }
}
- Dictionary(const v8::Local<v8::Value>& options,
- v8::Isolate* isolate,
- ExceptionState&) // DEPRECATED
- : Dictionary(isolate, options) {}
- Dictionary& operator=(const Dictionary&);
-
- bool isObject() const;
- bool isUndefinedOrNull() const;
-
- bool get(const StringView&, Dictionary&) const;
- bool get(const StringView&, v8::Local<v8::Value>&) const;
-
- v8::Local<v8::Value> v8Value() const { return m_options; }
+ bool get(const StringView& key, v8::Local<v8::Value>& value) const {
+ return m_isolate && getInternal(v8String(m_isolate, key), value);
+ }
+ bool get(const StringView& key, Dictionary&) const;
bool getOwnPropertiesAsStringHashMap(HashMap<String, String>&) const;
bool getPropertyNames(Vector<String>&) const;
@@ -84,18 +94,23 @@ class CORE_EXPORT Dictionary final {
private:
bool getInternal(const v8::Local<v8::Value>& key,
v8::Local<v8::Value>& result) const;
- bool toObject(v8::Local<v8::Object>&) const;
- v8::Local<v8::Value> m_options;
v8::Isolate* m_isolate;
+ // Undefined, Null, or Object is allowed as type of dictionary.
+ enum class ValueType {
+ Undefined,
+ Null,
+ Object
+ } m_valueType = ValueType::Undefined;
+ v8::Local<v8::Object> m_dictionaryObject; // an Object or empty
};
template <>
struct NativeValueTraits<Dictionary> {
- static inline Dictionary nativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState&) {
- return Dictionary(isolate, value);
+ static Dictionary nativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exceptionState) {
+ return Dictionary(isolate, value, exceptionState);
}
};
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/ArrayValue.cpp ('k') | third_party/WebKit/Source/bindings/core/v8/Dictionary.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698