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

Unified Diff: Source/bindings/core/v8/V8Binding.h

Issue 534133002: [WIP] bindings: Introduce PropertyBag (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 months 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
« no previous file with comments | « Source/bindings/core/v8/PropertyBagTraits.h ('k') | Source/bindings/core/v8/V8Binding.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/core/v8/V8Binding.h
diff --git a/Source/bindings/core/v8/V8Binding.h b/Source/bindings/core/v8/V8Binding.h
index 79ea8a9ce8f5e0c03dcab8a20c715d96e73aac26..d4c9550fa9fe4316d7c4e5cd7010626ce222edd2 100644
--- a/Source/bindings/core/v8/V8Binding.h
+++ b/Source/bindings/core/v8/V8Binding.h
@@ -34,6 +34,7 @@
#include "bindings/core/v8/DOMWrapperWorld.h"
#include "bindings/core/v8/ExceptionMessages.h"
+#include "bindings/core/v8/ExceptionState.h"
#include "bindings/core/v8/ScriptValue.h"
#include "bindings/core/v8/ScriptWrappable.h"
#include "bindings/core/v8/V8BindingMacros.h"
@@ -535,6 +536,9 @@ inline float toFloat(v8::Local<v8::Value> value)
return static_cast<float>(value->NumberValue());
}
+bool toBoolean(v8::Handle<v8::Value>, ExceptionState&);
+double toDouble(v8::Handle<v8::Value>, ExceptionState&);
+
// Converts a value to a String, throwing if any code unit is outside 0-255.
String toByteString(v8::Handle<v8::Value>, ExceptionState&);
@@ -568,12 +572,47 @@ PassRefPtrWillBeRawPtr<XPathNSResolver> toXPathNSResolver(v8::Handle<v8::Value>,
template<class T> struct NativeValueTraits;
template<>
+struct NativeValueTraits<bool> {
+ static inline bool nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toBoolean(value, exceptionState);
+ }
+};
+
+template<>
struct NativeValueTraits<String> {
static inline String nativeValue(const v8::Handle<v8::Value>& value, v8::Isolate* isolate)
{
TOSTRING_DEFAULT(V8StringResource<>, stringValue, value, String());
return stringValue;
}
+ static inline String nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ // FIXME: handle failure
+ TOSTRING_DEFAULT(V8StringResource<>, stringValue, value, String());
+ return stringValue;
+ }
+};
+
+template<>
+struct NativeValueTraits<AtomicString> {
+ static inline AtomicString nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ TOSTRING_DEFAULT(V8StringResource<>, stringValue, value, AtomicString());
+ return stringValue;
+ }
+};
+
+template<>
+struct NativeValueTraits<int> {
+ static inline int nativeValue(const v8::Handle<v8::Value>& value, v8::Isolate* isolate)
+ {
+ return toInt32(value);
+ }
+ static inline int nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toInt32(value, NormalConversion, exceptionState);
+ }
};
template<>
@@ -582,6 +621,58 @@ struct NativeValueTraits<unsigned> {
{
return toUInt32(value);
}
+ static inline unsigned nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toUInt32(value, NormalConversion, exceptionState);
+ }
+};
+
+template<>
+struct NativeValueTraits<unsigned long> {
+ static inline unsigned long nativeValue(const v8::Handle<v8::Value>& value, v8::Isolate* isolate)
+ {
+ return toUInt32(value);
+ }
+ static inline unsigned long nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toUInt32(value, NormalConversion, exceptionState);
+ }
+};
+
+template<>
+struct NativeValueTraits<unsigned long long> {
+ static inline unsigned long long nativeValue(const v8::Handle<v8::Value>& value, v8::Isolate* isolate)
+ {
+ return toUInt64(value);
+ }
+ static inline unsigned long long nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toUInt64(value, NormalConversion, exceptionState);
+ }
+};
+
+template<>
+struct NativeValueTraits<short> {
+ static inline short nativeValue(const v8::Handle<v8::Value>& value, v8::Isolate* isolate)
+ {
+ return toInt16(value);
+ }
+ static inline short nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toInt16(value, NormalConversion, exceptionState);
+ }
+};
+
+template<>
+struct NativeValueTraits<unsigned short> {
+ static inline unsigned short nativeValue(const v8::Handle<v8::Value>& value, v8::Isolate* isolate)
+ {
+ return toUInt16(value);
+ }
+ static inline unsigned short nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toUInt16(value, NormalConversion, exceptionState);
+ }
};
template<>
@@ -590,6 +681,10 @@ struct NativeValueTraits<float> {
{
return static_cast<float>(value->NumberValue());
}
+ static inline float nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toFloat(value, exceptionState);
+ }
};
template<>
@@ -598,6 +693,10 @@ struct NativeValueTraits<double> {
{
return static_cast<double>(value->NumberValue());
}
+ static inline double nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return toDouble(value, exceptionState);
+ }
};
template<>
@@ -614,6 +713,10 @@ struct NativeValueTraits<ScriptValue> {
{
return ScriptValue(ScriptState::current(isolate), value);
}
+ static inline ScriptValue nativeValueMayFail(v8::Isolate* isolate, const v8::Handle<v8::Value>& value, ExceptionState& exceptionState)
+ {
+ return ScriptValue(ScriptState::current(isolate), value);
+ }
};
v8::Handle<v8::Value> toV8Sequence(v8::Handle<v8::Value>, uint32_t& length, v8::Isolate*);
@@ -676,17 +779,17 @@ Vector<RefPtr<T> > toRefPtrNativeArray(v8::Handle<v8::Value> value, const String
}
template <class T, class V8T>
-WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8::Handle<v8::Value> value, int argumentIndex, v8::Isolate* isolate, bool* success = 0)
+WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8::Handle<v8::Value> value, int argumentIndex, v8::Isolate* isolate, ExceptionState* exceptionState = 0)
{
- if (success)
- *success = true;
-
v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value));
uint32_t length = 0;
if (value->IsArray()) {
length = v8::Local<v8::Array>::Cast(v8Value)->Length();
} else if (toV8Sequence(value, length, isolate).IsEmpty()) {
- V8ThrowException::throwTypeError(ExceptionMessages::notAnArrayTypeArgumentOrValue(argumentIndex), isolate);
+ if (exceptionState)
+ exceptionState->throwTypeError(ExceptionMessages::notAnArrayTypeArgumentOrValue(argumentIndex));
+ else
+ V8ThrowException::throwTypeError(ExceptionMessages::notAnArrayTypeArgumentOrValue(argumentIndex), isolate);
return WillBeHeapVector<RefPtrWillBeMember<T> >();
}
@@ -699,9 +802,10 @@ WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8::Han
v8::Handle<v8::Object> elementObject = v8::Handle<v8::Object>::Cast(element);
result.uncheckedAppend(V8T::toImpl(elementObject));
} else {
- if (success)
- *success = false;
- V8ThrowException::throwTypeError("Invalid Array element type", isolate);
+ if (exceptionState)
+ exceptionState->throwTypeError("Invalid Array element type");
+ else
+ V8ThrowException::throwTypeError("Invalid Array element type", isolate);
return WillBeHeapVector<RefPtrWillBeMember<T> >();
}
}
@@ -709,17 +813,17 @@ WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8::Han
}
template <class T, class V8T>
-WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8::Handle<v8::Value> value, const String& propertyName, v8::Isolate* isolate, bool* success = 0)
+WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8::Handle<v8::Value> value, const String& propertyName, v8::Isolate* isolate, ExceptionState* exceptionState = 0)
{
- if (success)
- *success = true;
-
v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value));
uint32_t length = 0;
if (value->IsArray()) {
length = v8::Local<v8::Array>::Cast(v8Value)->Length();
} else if (toV8Sequence(value, length, isolate).IsEmpty()) {
- V8ThrowException::throwTypeError(ExceptionMessages::notASequenceTypeProperty(propertyName), isolate);
+ if (exceptionState)
+ exceptionState->throwTypeError(ExceptionMessages::notASequenceTypeProperty(propertyName));
+ else
+ V8ThrowException::throwTypeError(ExceptionMessages::notASequenceTypeProperty(propertyName), isolate);
return WillBeHeapVector<RefPtrWillBeMember<T> >();
}
@@ -732,9 +836,10 @@ WillBeHeapVector<RefPtrWillBeMember<T> > toRefPtrWillBeMemberNativeArray(v8::Han
v8::Handle<v8::Object> elementObject = v8::Handle<v8::Object>::Cast(element);
result.uncheckedAppend(V8T::toImpl(elementObject));
} else {
- if (success)
- *success = false;
- V8ThrowException::throwTypeError("Invalid Array element type", isolate);
+ if (exceptionState)
+ exceptionState->throwTypeError("Invalid Array element type");
+ else
+ V8ThrowException::throwTypeError("Invalid Array element type", isolate);
return WillBeHeapVector<RefPtrWillBeMember<T> >();
}
}
« no previous file with comments | « Source/bindings/core/v8/PropertyBagTraits.h ('k') | Source/bindings/core/v8/V8Binding.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698