Index: Source/bindings/modules/v8/DictionaryHelperForModules.cpp |
diff --git a/Source/bindings/modules/v8/DictionaryHelperForModules.cpp b/Source/bindings/modules/v8/DictionaryHelperForModules.cpp |
index 931123fd3239cd204d8ec99c45d1053cc97bd4d9..930c3b5f45ba81213e2ada80e9c887c1bea1d3ca 100644 |
--- a/Source/bindings/modules/v8/DictionaryHelperForModules.cpp |
+++ b/Source/bindings/modules/v8/DictionaryHelperForModules.cpp |
@@ -36,9 +36,11 @@ |
#include "bindings/modules/v8/V8SpeechRecognitionResult.h" |
#include "bindings/modules/v8/V8SpeechRecognitionResultList.h" |
#include "modules/gamepad/Gamepad.h" |
+#include "modules/indexeddb/IDBVersionChangeEvent.h" |
#include "modules/mediastream/MediaStream.h" |
#include "modules/speech/SpeechRecognitionResult.h" |
#include "modules/speech/SpeechRecognitionResultList.h" |
+#include "public/platform/WebIDBTypes.h" |
jsbell
2014/07/11 18:42:48
It'd be nice to drop this dependency...
cmumford
2014/07/11 20:53:05
Yes, this is obviously so that we can get at the W
|
namespace WebCore { |
@@ -72,6 +74,38 @@ struct DictionaryHelperTraits<Headers> { |
typedef V8Headers type; |
}; |
+template <typename T> |
jsbell
2014/07/11 18:42:48
This is basically doing two things:
* Dig the IDL
cmumford
2014/07/11 20:53:05
Well the string conversion is in IDBVersionChangeE
jsbell
2014/07/11 23:08:30
Right... I'm assuming that the DictionaryHelper.co
bashi
2014/07/13 04:53:32
I agree with jsbell here. Some classes are doing t
|
+struct IntegralTypeTraits { |
+}; |
+ |
+template <> |
+struct IntegralTypeTraits<blink::WebIDBDataLoss> { |
+ static inline blink::WebIDBDataLoss toIntegral(v8::Handle<v8::Value> value, IntegerConversionConfiguration configuration, ExceptionState& exceptionState) |
+ { |
+ blink::WebIDBDataLoss dataLoss = blink::WebIDBDataLossNone; |
+ if (!IDBVersionChangeEvent::toNativeDataLoss(value, &dataLoss)) |
+ exceptionState.throwTypeError("Invalid IDBDataLossAmount value"); |
+ return dataLoss; |
+ } |
+ static const String typeName() { return "IDBDataLossAmount"; } |
+}; |
+ |
+template<typename T> |
+bool DictionaryHelper::convert(const Dictionary& dictionary, Dictionary::ConversionContext& context, const String& key, T& value) |
+{ |
+ Dictionary::ConversionContextScope scope(context); |
+ |
+ v8::Local<v8::Value> v8Value; |
+ if (!dictionary.get(key, v8Value)) |
+ return true; |
+ |
+ value = IntegralTypeTraits<T>::toIntegral(v8Value, NormalConversion, context.exceptionState()); |
+ if (context.exceptionState().throwIfNeeded()) |
+ return false; |
+ |
+ return true; |
+} |
bashi
2014/07/13 04:53:32
This looks exactly the same as DictionaryHelper::c
cmumford
2014/07/14 22:09:37
Done.
|
+ |
template bool DictionaryHelper::get(const Dictionary&, const String& key, Member<MIDIPort>& value); |
template bool DictionaryHelper::get(const Dictionary&, const String& key, Member<SpeechRecognitionResult>& value); |
template bool DictionaryHelper::get(const Dictionary&, const String& key, Member<SpeechRecognitionResultList>& value); |
@@ -85,5 +119,6 @@ template bool DictionaryHelper::convert(const Dictionary&, Dictionary::Conversio |
template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Member<Gamepad>& value); |
template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, Member<MediaStream>& value); |
template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, RefPtrWillBeMember<Headers>& value); |
+template bool DictionaryHelper::convert(const Dictionary&, Dictionary::ConversionContext&, const String& key, blink::WebIDBDataLoss& value); |
} // namespace WebCore |