v8::Handle<v8::Value> V8MessageEvent::initMessageEventCallback(const v8::Arguments& args) { INC_STATS("DOM.MessageEvent.initMessageEvent"); MessageEvent* event = V8MessageEvent::toNative(args.Holder()); String typeArg = v8ValueToWebCoreString(args[0]); bool canBubbleArg = args[1]->BooleanValue(); bool cancelableArg = args[2]->BooleanValue(); RefPtr<SerializedScriptValue> dataArg = SerializedScriptValue::create(args[3]); String originArg = v8ValueToWebCoreString(args[4]); String lastEventIdArg = v8ValueToWebCoreString(args[5]); DOMWindow* sourceArg = 0; if (args[6]->IsObject()) { v8::Handle<v8::Object> wrapper = v8::Handle<v8::Object>::Cast(args[6]); v8::Handle<v8::Object> window = V8DOMWrapper::lookupDOMWrapper(V8DOMWindow::GetTemplate(), wrapper); if (!window.IsEmpty()) sourceArg = V8DOMWindow::toNative(window); } OwnPtr<MessagePortArray> portArray; if (!isUndefinedOrNull(args[7])) { portArray = new MessagePortArray(); if (!getMessagePortArray(args[7], *portArray)) return v8::Undefined(); } event->initMessageEvent(typeArg, canBubbleArg, cancelableArg, dataArg.release(), originArg, lastEventIdArg, sourceArg, portArray.release()); return v8::Undefined(); }
bool Dictionary::getOwnPropertiesAsStringHashMap(WTF::HashMap<String, String>& hashMap) const { if (!isObject()) return false; v8::Handle<v8::Object> options = m_options->ToObject(); if (options.IsEmpty()) return false; v8::Local<v8::Array> properties = options->GetOwnPropertyNames(); if (properties.IsEmpty()) return true; for (uint32_t i = 0; i < properties->Length(); ++i) { v8::Local<v8::String> key = properties->Get(i)->ToString(); if (!options->Has(key)) continue; v8::Local<v8::Value> value = options->Get(key); String stringKey = v8ValueToWebCoreString(key); String stringValue = v8ValueToWebCoreString(value); if (!stringKey.isEmpty()) hashMap.set(stringKey, stringValue); } return true; }
static PassRefPtr<IDBKey> createIDBKeyFromValue(v8::Handle<v8::Value> value, Vector<v8::Handle<v8::Array> >& stack) { if (value->IsNumber() && !isnan(value->NumberValue())) return IDBKey::createNumber(value->NumberValue()); if (value->IsString()) return IDBKey::createString(v8ValueToWebCoreString(value)); if (value->IsDate() && !isnan(value->NumberValue())) return IDBKey::createDate(value->NumberValue()); if (value->IsArray()) { v8::Handle<v8::Array> array = v8::Handle<v8::Array>::Cast(value); if (stack.contains(array)) return 0; if (stack.size() >= maximumDepth) return 0; stack.append(array); IDBKey::KeyArray subkeys; uint32_t length = array->Length(); for (uint32_t i = 0; i < length; ++i) { v8::Local<v8::Value> item = array->Get(v8::Int32::New(i)); RefPtr<IDBKey> subkey = createIDBKeyFromValue(item, stack); if (!subkey) subkeys.append(IDBKey::createInvalid()); else subkeys.append(subkey); } stack.removeLast(); return IDBKey::createArray(subkeys); } return 0; }
AtomicString v8ValueToAtomicWebCoreString(v8::Handle<v8::Value> v8Value) { if (v8Value->IsString()) return v8StringToAtomicWebCoreString(v8::Handle<v8::String>::Cast(v8Value)); String string = v8ValueToWebCoreString(v8Value); return AtomicString(string); }
PassRefPtr<IDBKey> createIDBKeyFromValue(v8::Handle<v8::Value> value) { if (value->IsNull()) return IDBKey::create(); if (value->IsInt32()) return IDBKey::create(value->Int32Value()); if (value->IsString()) return IDBKey::create(v8ValueToWebCoreString(value)); // FIXME: Implement dates. return 0; }
bool OptionsObject::getKeyStringWithUndefinedOrNullCheck(const String& key, String& value) const { v8::Local<v8::Value> v8Value; if (!getKey(key, v8Value) || v8Value->IsNull() || v8Value->IsUndefined()) return false; // FIXME: It is possible for this to throw in which case we'd be getting back // an empty string and returning true when we should be returning false. // See fast/dom/Geolocation/script-tests/argument-types.js for a similar // example. value = WebCore::isUndefinedOrNull(v8Value) ? String() : v8ValueToWebCoreString(v8Value); return true; }
PassRefPtr<IDBKey> createIDBKeyFromValue(v8::Handle<v8::Value> value) { if (value->IsNull()) return IDBKey::createNull(); if (value->IsNumber()) return IDBKey::createNumber(value->NumberValue()); if (value->IsString()) return IDBKey::createString(v8ValueToWebCoreString(value)); if (value->IsDate()) return IDBKey::createDate(value->NumberValue()); return 0; // Signals type error. }
bool Dictionary::get(const String& key, String& value) const { v8::Local<v8::Value> v8Value; if (!getKey(key, v8Value)) return false; // FIXME: It is possible for this to throw in which case we'd be getting back // an empty string and returning true when we should be returning false. // See fast/dom/Geolocation/script-tests/argument-types.js for a similar // example. value = v8ValueToWebCoreString(v8Value); return true; }
PassRefPtr<DOMStringList> OptionsObject::getKeyDOMStringList(const String& key) const { v8::Local<v8::Value> v8Value; if (!getKey(key, v8Value)) return 0; 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(); }
bool Dictionary::get(const String& key, Vector<String>& value) const { v8::Local<v8::Value> v8Value; if (!getKey(key, v8Value)) return false; if (!v8Value->IsArray()) return false; 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::Uint32::New(i)); value.append(v8ValueToWebCoreString(indexedValue)); } return true; }
bool Dictionary::get(const String& key, HashSet<AtomicString>& value) const { v8::Local<v8::Value> v8Value; if (!getKey(key, v8Value)) return false; // FIXME: Support array-like objects if (!v8Value->IsArray()) return false; 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(v8Integer(i)); value.add(v8ValueToWebCoreString(indexedValue)); } return true; }
v8::Handle<v8::Value> V8PopStateEvent::initPopStateEventCallback(const v8::Arguments& args) { INC_STATS("DOM.PopStateEvent.initPopStateEvent"); String typeArg = v8ValueToWebCoreString(args[0]); bool canBubbleArg = args[1]->BooleanValue(); bool cancelableArg = args[2]->BooleanValue(); bool didThrow = false; RefPtr<SerializedScriptValue> stateArg = SerializedScriptValue::create(args[3], didThrow); if (didThrow) return v8::Undefined(); PopStateEvent* event = V8PopStateEvent::toNative(args.Holder()); event->initPopStateEvent(typeArg, canBubbleArg, cancelableArg, stateArg.release()); return v8::Undefined(); }
String toWebCoreStringWithNullCheck(v8::Handle<v8::Value> value) { if (value->IsNull()) return String(); return v8ValueToWebCoreString(value); }
String toWebCoreString(const v8::Arguments& args, int index) { return v8ValueToWebCoreString(args[index]); }