summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/bindings/v8/V8Binding.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/bindings/v8/V8Binding.cpp')
-rw-r--r--Source/WebCore/bindings/v8/V8Binding.cpp23
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