#ifndef V8Binding_h
#define V8Binding_h
#include "AtomicString.h"
#include "BindingSecurity.h"
#include "MathExtras.h"
#include "PlatformString.h"
#include "V8DOMWrapper.h"
#include "V8Index.h"
#include <v8.h>
namespace WebCore {
class EventListener;
class EventTarget;
class V8BindingDOMWindow;
class V8Binding {
public:
typedef v8::Handle<v8::Value> Value;
typedef V8BindingDOMWindow DOMWindow;
};
typedef BindingSecurity<V8Binding> V8BindingSecurity;
enum ExternalMode {
Externalize,
DoNotExternalize
};
template <typename StringType>
StringType v8StringToWebCoreString(v8::Handle<v8::String> v8String, ExternalMode external);
inline String v8StringToWebCoreString(v8::Handle<v8::String> v8String)
{
return v8StringToWebCoreString<String>(v8String, Externalize);
}
String v8NonStringValueToWebCoreString(v8::Handle<v8::Value>);
String v8ValueToWebCoreString(v8::Handle<v8::Value> value);
inline AtomicString v8StringToAtomicWebCoreString(v8::Handle<v8::String> v8String)
{
return v8StringToWebCoreString<AtomicString>(v8String, Externalize);
}
AtomicString v8NonStringValueToAtomicWebCoreString(v8::Handle<v8::Value>);
AtomicString v8ValueToAtomicWebCoreString(v8::Handle<v8::Value> value);
v8::Local<v8::String> v8ExternalString(const String&);
inline v8::Handle<v8::String> v8String(const String& string)
{
return v8ExternalString(string);
}
void enableStringImplCache();
int toInt32(v8::Handle<v8::Value> value, bool& ok);
inline int toInt32(v8::Handle<v8::Value> value)
{
bool ok;
return toInt32(value, ok);
}
inline float toFloat(v8::Local<v8::Value> value)
{
return static_cast<float>(value->NumberValue());
}
inline long long toInt64(v8::Local<v8::Value> value)
{
return static_cast<long long>(value->IntegerValue());
}
inline String toWebCoreString(v8::Handle<v8::Value> object)
{
return v8ValueToWebCoreString(object);
}
String toWebCoreString(const v8::Arguments&, int index);
inline const uint16_t* fromWebCoreString(const String& str)
{
return reinterpret_cast<const uint16_t*>(str.characters());
}
bool isUndefinedOrNull(v8::Handle<v8::Value> value);
v8::Handle<v8::Boolean> v8Boolean(bool value);
String toWebCoreStringWithNullCheck(v8::Handle<v8::Value> value);
AtomicString toAtomicWebCoreStringWithNullCheck(v8::Handle<v8::Value> value);
String toWebCoreStringWithNullOrUndefinedCheck(v8::Handle<v8::Value> value);
v8::Handle<v8::String> v8UndetectableString(const String& str);
v8::Handle<v8::Value> v8StringOrNull(const String& str);
v8::Handle<v8::Value> v8StringOrUndefined(const String& str);
v8::Handle<v8::Value> v8StringOrFalse(const String& str);
double toWebCoreDate(v8::Handle<v8::Value> object);
v8::Handle<v8::Value> v8DateOrNull(double value);
v8::Persistent<v8::FunctionTemplate> createRawTemplate();
struct BatchedAttribute;
struct BatchedCallback;
v8::Local<v8::Signature> configureTemplate(v8::Persistent<v8::FunctionTemplate>,
const char *interfaceName,
V8ClassIndex::V8WrapperType parentClassIndex,
int fieldCount,
const BatchedAttribute*,
size_t attributeCount,
const BatchedCallback*,
size_t callbackCount);
v8::Handle<v8::Value> getElementStringAttr(const v8::AccessorInfo&,
const QualifiedName&);
void setElementStringAttr(const v8::AccessorInfo&,
const QualifiedName&,
v8::Local<v8::Value>);
v8::Persistent<v8::String> getToStringName();
v8::Persistent<v8::FunctionTemplate> getToStringTemplate();
enum V8ParameterMode {
DefaultMode,
WithNullCheck,
WithUndefinedOrNullCheck
};
template <V8ParameterMode MODE = DefaultMode>
class V8Parameter {
public:
V8Parameter (v8::Local<v8::Value> object) :m_v8Object(object) { }
operator String();
operator AtomicString();
private:
v8::Local<v8::Value> m_v8Object;
};
template<> inline V8Parameter<DefaultMode>::operator String() { return toWebCoreString(m_v8Object); }
template<> inline V8Parameter<WithNullCheck>::operator String() { return toWebCoreStringWithNullCheck(m_v8Object); }
template<> inline V8Parameter<WithUndefinedOrNullCheck>::operator String() { return toWebCoreStringWithNullOrUndefinedCheck(m_v8Object); }
template<> inline V8Parameter<DefaultMode>::operator AtomicString() { return v8ValueToAtomicWebCoreString(m_v8Object); }
template<> inline V8Parameter<WithNullCheck>::operator AtomicString() { return toAtomicWebCoreStringWithNullCheck(m_v8Object); }
template<> inline V8Parameter<WithUndefinedOrNullCheck>::operator AtomicString() { return toAtomicWebCoreStringWithNullCheck(m_v8Object); }
}
#endif // V8Binding_h