| Index: Source/bindings/core/v8/DictionaryHelperForCore.cpp
|
| diff --git a/Source/bindings/core/v8/DictionaryHelperForCore.cpp b/Source/bindings/core/v8/DictionaryHelperForCore.cpp
|
| index ca19bccaf69d9bed01e1756191602ee6d1a1cd58..1dd12c45b8b1104a2d2dae217388af9b990b2617 100644
|
| --- a/Source/bindings/core/v8/DictionaryHelperForCore.cpp
|
| +++ b/Source/bindings/core/v8/DictionaryHelperForCore.cpp
|
| @@ -105,10 +105,13 @@ bool DictionaryHelper::get(const Dictionary& dictionary, const String& key, doub
|
| }
|
|
|
| hasValue = true;
|
| - TONATIVE_DEFAULT(v8::Local<v8::Number>, v8Number, v8Value->ToNumber(dictionary.isolate()), false);
|
| - if (v8Number.IsEmpty())
|
| +
|
| + v8::TryCatch block;
|
| + value = v8Value->NumberValue();
|
| + if (UNLIKELY(block.HasCaught())) {
|
| + block.ReThrow();
|
| return false;
|
| - value = v8Number->Value();
|
| + }
|
| return true;
|
| }
|
|
|
| @@ -139,7 +142,9 @@ bool getStringType(const Dictionary& dictionary, const String& key, StringType&
|
| if (!dictionary.get(key, v8Value))
|
| return false;
|
|
|
| - TOSTRING_DEFAULT(V8StringResource<>, stringValue, v8Value, false);
|
| + V8StringResource<> stringValue(v8Value);
|
| + if (!stringValue.prepare())
|
| + return false;
|
| value = stringValue;
|
| return true;
|
| }
|
| @@ -165,7 +170,9 @@ bool DictionaryHelper::convert(const Dictionary& dictionary, Dictionary::Convers
|
| if (!dictionary.get(key, v8Value))
|
| return true;
|
|
|
| - TOSTRING_DEFAULT(V8StringResource<>, stringValue, v8Value, false);
|
| + V8StringResource<> stringValue(v8Value);
|
| + if (!stringValue.prepare())
|
| + return false;
|
| value = stringValue;
|
| return true;
|
| }
|
| @@ -243,10 +250,12 @@ bool DictionaryHelper::get(const Dictionary& dictionary, const String& key, unsi
|
| if (!dictionary.get(key, v8Value))
|
| return false;
|
|
|
| - TONATIVE_DEFAULT(v8::Local<v8::Number>, v8Number, v8Value->ToNumber(dictionary.isolate()), false);
|
| - if (v8Number.IsEmpty())
|
| + v8::TryCatch block;
|
| + double d = v8Value->NumberValue();
|
| + if (UNLIKELY(block.HasCaught())) {
|
| + block.ReThrow();
|
| return false;
|
| - double d = v8Number->Value();
|
| + }
|
| doubleToInteger(d, value);
|
| return true;
|
| }
|
| @@ -265,49 +274,6 @@ bool DictionaryHelper::get(const Dictionary& dictionary, const String& key, RefP
|
| }
|
|
|
| template <>
|
| -bool DictionaryHelper::get(const Dictionary& dictionary, const String& key, HashSet<AtomicString>& value)
|
| -{
|
| - v8::Local<v8::Value> v8Value;
|
| - if (!dictionary.get(key, v8Value))
|
| - return false;
|
| -
|
| - // FIXME: Support array-like objects
|
| - if (!v8Value->IsArray())
|
| - return false;
|
| -
|
| - ASSERT(dictionary.isolate());
|
| - ASSERT(dictionary.isolate() == v8::Isolate::GetCurrent());
|
| - v8::Local<v8::Array> v8Array = v8::Local<v8::Array>::Cast(v8Value);
|
| - for (size_t i = 0; i < v8Array->Length(); ++i) {
|
| - v8::Local<v8::Value> indexedValue = v8Array->Get(v8::Integer::New(dictionary.isolate(), i));
|
| - TOSTRING_DEFAULT(V8StringResource<>, stringValue, indexedValue, false);
|
| - value.add(stringValue);
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -template <>
|
| -bool DictionaryHelper::convert(const Dictionary& dictionary, Dictionary::ConversionContext& context, const String& key, HashSet<AtomicString>& value)
|
| -{
|
| - Dictionary::ConversionContextScope scope(context);
|
| -
|
| - v8::Local<v8::Value> v8Value;
|
| - if (!dictionary.get(key, v8Value))
|
| - return true;
|
| -
|
| - if (context.isNullable() && blink::isUndefinedOrNull(v8Value))
|
| - return true;
|
| -
|
| - if (!v8Value->IsArray()) {
|
| - context.throwTypeError(ExceptionMessages::notASequenceTypeProperty(key));
|
| - return false;
|
| - }
|
| -
|
| - return DictionaryHelper::get(dictionary, key, value);
|
| -}
|
| -
|
| -template <>
|
| bool DictionaryHelper::get(const Dictionary& dictionary, const String& key, RefPtrWillBeMember<TrackBase>& value)
|
| {
|
| v8::Local<v8::Value> v8Value;
|
| @@ -457,45 +423,7 @@ struct DictionaryHelperTraits<DOMUint8Array> {
|
| typedef V8Uint8Array type;
|
| };
|
|
|
| -template <>
|
| -struct DictionaryHelperTraits<DOMArrayBufferView> {
|
| - typedef V8ArrayBufferView type;
|
| -};
|
| -
|
| -template <>
|
| -struct DictionaryHelperTraits<MediaKeyError> {
|
| - typedef V8MediaKeyError type;
|
| -};
|
| -
|
| -template <>
|
| -struct DictionaryHelperTraits<DOMError> {
|
| - typedef V8DOMError type;
|
| -};
|
| -
|
| -template <>
|
| -struct DictionaryHelperTraits<Storage> {
|
| - typedef V8Storage type;
|
| -};
|
| -
|
| -template <>
|
| -struct DictionaryHelperTraits<Element> {
|
| - typedef V8Element type;
|
| -};
|
| -
|
| -template <>
|
| -struct DictionaryHelperTraits<Path2D> {
|
| - typedef V8Path2D type;
|
| -};
|
| -
|
| template bool DictionaryHelper::get(const Dictionary&, const String& key, RefPtr<DOMUint8Array>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, RefPtr<DOMArrayBufferView>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, RefPtrWillBeMember<MediaKeyError>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, Member<DOMError>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, RefPtrWillBeMember<Storage>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, RefPtrWillBeMember<Element>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, RawPtr<Element>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, RefPtrWillBeMember<Path2D>& value);
|
| -template bool DictionaryHelper::get(const Dictionary&, const String& key, RawPtr<Path2D>& value);
|
|
|
| template <typename T>
|
| struct IntegralTypeTraits {
|
| @@ -618,46 +546,6 @@ template bool DictionaryHelper::convert(const Dictionary&, Dictionary::Conversio
|
| template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, long long& value);
|
| template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, unsigned long long& value);
|
|
|
| -template<typename T>
|
| -bool DictionaryHelper::convert(const Dictionary& dictionary, Dictionary::ConversionContext& context, const String& key, Nullable<T>& value)
|
| -{
|
| - Dictionary::ConversionContextScope scope(context);
|
| -
|
| - v8::Local<v8::Value> v8Value;
|
| - if (!dictionary.get(key, v8Value))
|
| - return true;
|
| -
|
| - if (context.isNullable() && blink::isUndefinedOrNull(v8Value)) {
|
| - value = nullptr;
|
| - return true;
|
| - }
|
| -
|
| - T converted = IntegralTypeTraits<T>::toIntegral(v8Value, NormalConversion, context.exceptionState());
|
| -
|
| - if (context.exceptionState().throwIfNeeded())
|
| - return false;
|
| -
|
| - value = Nullable<T>(converted);
|
| - return true;
|
| -}
|
| -
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<uint8_t>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<int8_t>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<unsigned short>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<short>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<unsigned>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<unsigned long>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<int>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<long>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<long long>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Nullable<unsigned long long>& value);
|
| -
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtrWillBeMember<DOMWindow>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtrWillBeMember<Storage>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtr<DOMUint8Array>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtr<DOMArrayBufferView>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtrWillBeMember<MediaKeyError>& value);
|
| -template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtrWillBeMember<TrackBase>& value);
|
| template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtrWillBeMember<EventTarget>& value);
|
|
|
| template <>
|
|
|