diff options
Diffstat (limited to 'Source/WebCore/bindings/v8/V8Binding.cpp')
-rw-r--r-- | Source/WebCore/bindings/v8/V8Binding.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Source/WebCore/bindings/v8/V8Binding.cpp b/Source/WebCore/bindings/v8/V8Binding.cpp index 52b23bd..2acd29a 100644 --- a/Source/WebCore/bindings/v8/V8Binding.cpp +++ b/Source/WebCore/bindings/v8/V8Binding.cpp @@ -31,6 +31,7 @@ #include "config.h" #include "V8Binding.h" +#include "DOMStringList.h" #include "Element.h" #include "MathExtras.h" #include "PlatformString.h" @@ -412,6 +413,13 @@ String v8NonStringValueToWebCoreString(v8::Handle<v8::Value> object) throwError(block.Exception()); return StringImpl::empty(); } + // This path is unexpected. However there is hypothesis that it + // might be combination of v8 and v8 bindings bugs. For now + // just bailout as we'll crash if attempt to convert empty handle into a string. + if (v8String.IsEmpty()) { + ASSERT_NOT_REACHED(); + return StringImpl::empty(); + } return v8StringToWebCoreString<String>(v8String, DoNotExternalize); } @@ -578,4 +586,19 @@ void setElementStringAttr(const v8::AccessorInfo& info, imp->setAttribute(name, v); } +PassRefPtr<DOMStringList> v8ValueToWebCoreDOMStringList(v8::Handle<v8::Value> value) +{ + v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(value)); + if (!v8Value->IsArray()) + return 0; + + RefPtr<DOMStringList> ret = DOMStringList::create(); + 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(i)); + ret->append(v8ValueToWebCoreString(indexedValue)); + } + return ret.release(); +} + } // namespace WebCore |