#include "config.h"
#include "Dictionary.h"
#if ENABLE(NOTIFICATIONS)
#include "JSNotification.h"
#include "Notification.h"
#endif
using namespace JSC;
namespace WebCore {
Dictionary::Dictionary()
: m_dictionary(0, 0)
{
}
Dictionary::Dictionary(JSC::ExecState* exec, JSC::JSValue value)
: m_dictionary(exec, value.isObject() ? value.getObject() : 0)
{
}
#if ENABLE(NOTIFICATIONS)
template<>
JSObject* Dictionary::asJSObject<Notification>(Notification* object) const
{
return asObject(toJS(m_dictionary.execState(), jsCast<JSDOMGlobalObject*>(m_dictionary.execState()->lexicalGlobalObject()), object));
}
#endif
bool Dictionary::getOwnPropertiesAsStringHashMap(HashMap<String, String>& map) const
{
if (!m_dictionary.isValid())
return false;
JSObject* object = m_dictionary.initializerObject();
ExecState* exec = m_dictionary.execState();
PropertyNameArray propertyNames(exec);
JSObject::getOwnPropertyNames(object, exec, propertyNames, EnumerationMode());
for (PropertyNameArray::const_iterator it = propertyNames.begin(); it != propertyNames.end(); ++it) {
String stringKey = it->string();
if (stringKey.isEmpty())
continue;
JSValue value = object->get(exec, *it);
if (exec->hadException())
continue;
String stringValue = value.toString(exec)->value(exec);
if (!exec->hadException())
map.set(stringKey, stringValue);
}
return true;
}
bool Dictionary::getOwnPropertyNames(Vector<String>& names) const
{
if (!m_dictionary.isValid())
return false;
JSObject* object = m_dictionary.initializerObject();
ExecState* exec = m_dictionary.execState();
PropertyNameArray propertyNames(exec);
JSObject::getOwnPropertyNames(object, exec, propertyNames, EnumerationMode());
for (PropertyNameArray::const_iterator it = propertyNames.begin(); it != propertyNames.end(); ++it) {
String stringKey = it->string();
if (!stringKey.isEmpty())
names.append(stringKey);
}
return true;
}
bool Dictionary::getWithUndefinedOrNullCheck(const char* propertyName, String& value) const
{
return m_dictionary.getWithUndefinedOrNullCheck(propertyName, value);
}
};