static void reflectStringAttributeAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { Element* imp = V8Element::toNative(info.Holder()); v8SetReturnValueString(info, imp->fastGetAttribute(HTMLNames::reflectstringattributeAttr), info.GetIsolate()); }
static void uLongLongAttributeAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { v8::Handle<v8::Object> holder = info.Holder(); TestTypedefs* impl = V8TestTypedefs::toNative(holder); v8SetReturnValue(info, static_cast<double>(impl->uLongLongAttribute())); }
static void attr2AttributeGetter(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) { TestEventConstructor* imp = V8TestEventConstructor::toNative(info.Holder()); v8SetReturnValueString(info, imp->attr2(), info.GetIsolate()); return; }
void V8XMLHttpRequest::responseAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info) { XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toNative(info.Holder()); switch (xmlHttpRequest->responseTypeCode()) { case XMLHttpRequest::ResponseTypeDefault: case XMLHttpRequest::ResponseTypeText: responseTextAttributeGetterCustom(info); return; case XMLHttpRequest::ResponseTypeJSON: { v8::Isolate* isolate = info.GetIsolate(); ScriptString jsonSource = xmlHttpRequest->responseJSONSource(); if (jsonSource.hasNoValue() || !jsonSource.v8Value()->IsString()) { v8SetReturnValue(info, v8::Null(isolate)); return; } // Catch syntax error. v8::TryCatch exceptionCatcher; v8::Handle<v8::Value> json = v8::JSON::Parse(jsonSource.v8Value().As<v8::String>()); if (exceptionCatcher.HasCaught() || json.IsEmpty()) v8SetReturnValue(info, v8::Null(isolate)); else v8SetReturnValue(info, json); return; } case XMLHttpRequest::ResponseTypeDocument: { ExceptionState exceptionState(ExceptionState::GetterContext, "response", "XMLHttpRequest", info.Holder(), info.GetIsolate()); Document* document = xmlHttpRequest->responseXML(exceptionState); if (exceptionState.throwIfNeeded()) return; v8SetReturnValueFast(info, document, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeBlob: { Blob* blob = xmlHttpRequest->responseBlob(); v8SetReturnValueFast(info, blob, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeStream: { Stream* stream = xmlHttpRequest->responseStream(); v8SetReturnValueFast(info, stream, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeArrayBuffer: { ArrayBuffer* arrayBuffer = xmlHttpRequest->responseArrayBuffer(); if (arrayBuffer) { arrayBuffer->setDeallocationObserver(V8ArrayBufferDeallocationObserver::instanceTemplate()); } v8SetReturnValueFast(info, arrayBuffer, xmlHttpRequest); return; } } }
void V8MessageEvent::dataAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info) { MessageEvent* event = V8MessageEvent::toNative(info.Holder()); v8::Handle<v8::Value> result; switch (event->dataType()) { case MessageEvent::DataTypeScriptValue: { result = V8HiddenValue::getHiddenValue(info.GetIsolate(), info.Holder(), V8HiddenValue::data(info.GetIsolate())); if (result.IsEmpty()) { if (!event->dataAsSerializedScriptValue()) { // If we're in an isolated world and the event was created in the main world, // we need to find the 'data' property on the main world wrapper and clone it. v8::Local<v8::Value> mainWorldData = V8HiddenValue::getHiddenValueFromMainWorldWrapper(info.GetIsolate(), event, V8HiddenValue::data(info.GetIsolate())); if (!mainWorldData.IsEmpty()) event->setSerializedData(SerializedScriptValue::createAndSwallowExceptions(mainWorldData, info.GetIsolate())); } if (event->dataAsSerializedScriptValue()) result = event->dataAsSerializedScriptValue()->deserialize(info.GetIsolate()); else result = v8::Null(info.GetIsolate()); } break; } case MessageEvent::DataTypeSerializedScriptValue: if (SerializedScriptValue* serializedValue = event->dataAsSerializedScriptValue()) { MessagePortArray ports = event->ports(); result = serializedValue->deserialize(info.GetIsolate(), &ports); } else { result = v8::Null(info.GetIsolate()); } break; case MessageEvent::DataTypeString: { result = V8HiddenValue::getHiddenValue(info.GetIsolate(), info.Holder(), V8HiddenValue::stringData(info.GetIsolate())); if (result.IsEmpty()) { String stringValue = event->dataAsString(); result = v8String(info.GetIsolate(), stringValue); } break; } case MessageEvent::DataTypeBlob: result = toV8(event->dataAsBlob(), info.Holder(), info.GetIsolate()); break; case MessageEvent::DataTypeArrayBuffer: result = V8HiddenValue::getHiddenValue(info.GetIsolate(), info.Holder(), V8HiddenValue::arrayBufferData(info.GetIsolate())); if (result.IsEmpty()) result = toV8(event->dataAsArrayBuffer(), info.Holder(), info.GetIsolate()); break; } // Overwrite the data attribute so it returns the cached result in future invocations. // This custom getter handler will not be called again. v8::PropertyAttribute dataAttr = static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly); info.Holder()->ForceSet(v8AtomicString(info.GetIsolate(), "data"), result, dataAttr); v8SetReturnValue(info, result); }
void npObjectSetIndexedProperty(v8::Local<v8::Object> self, uint32_t index, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) { NPIdentifier identifier = _NPN_GetIntIdentifier(index); v8SetReturnValue(info, npObjectSetProperty(self, identifier, value, info.GetIsolate())); }
static void attr1AttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { v8::Handle<v8::Object> holder = info.Holder(); TestInterfaceGarbageCollected* impl = V8TestInterfaceGarbageCollected::toNative(holder); v8SetReturnValueFast(info, WTF::getPtr(impl->attr1()), impl); }
static void attrWithSetterExceptionAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { TestTypedefs* imp = V8TestTypedefs::toNative(info.Holder()); v8SetReturnValueInt(info, imp->attrWithSetterException()); }
static void stringAttrWithGetterExceptionAttributeSetter(v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) { TestTypedefs* imp = V8TestTypedefs::toNative(info.Holder()); V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, cppValue, jsValue); imp->setStringAttrWithGetterException(cppValue); }
static void stringAttributeAttributeSetter(v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) { TestInterfaceNode* imp = V8TestInterfaceNode::toNative(info.Holder()); V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, cppValue, jsValue); imp->setStringAttribute(cppValue); }
void JSCanvasRenderingContext2D::JSSetFillStyle(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { JSCanvasRenderingContext2D* self = UnwrapSelf<JSCanvasRenderingContext2D>(info.Holder()); info.GetReturnValue().Set(self->GetFillStyle()); }
static void stringAttributeAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { TestInterfaceNode* imp = V8TestInterfaceNode::toNative(info.Holder()); v8SetReturnValueString(info, imp->stringAttribute(), info.GetIsolate()); }
static void reflectUrlStringAttributeAttributeSetter(v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) { Element* imp = V8Element::toNative(info.Holder()); V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, cppValue, jsValue); imp->setAttribute(HTMLNames::reflecturlstringattributeAttr, cppValue); }
static void reflectUrlStringAttributeAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { TestInterfaceNode* imp = V8TestInterfaceNode::toNative(info.Holder()); v8SetReturnValueString(info, imp->getURLAttribute(HTMLNames::reflecturlstringattributeAttr), info.GetIsolate()); }
void npObjectIndexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { NPIdentifier identifier = _NPN_GetIntIdentifier(index); v8SetReturnValue(info, npObjectGetProperty(info.Holder(), identifier, v8::Number::New(index), info.GetIsolate())); }
static void stringAttrWithSetterExceptionAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { TestTypedefs* imp = V8TestTypedefs::toNative(info.Holder()); v8SetReturnValueString(info, imp->stringAttrWithSetterException(), info.GetIsolate()); }
void npObjectSetNamedProperty(v8::Local<v8::Object> self, v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) { NPIdentifier identifier = getStringIdentifier(name); v8SetReturnValue(info, npObjectSetProperty(self, identifier, value, info.GetIsolate())); }
static void unsignedLongLongAttrAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { TestTypedefs* imp = V8TestTypedefs::toNative(info.Holder()); v8SetReturnValue(info, static_cast<double>(imp->unsignedLongLongAttr())); }
void V8Window::namedPropertyGetterCustom( const AtomicString& name, const v8::PropertyCallbackInfo<v8::Value>& info) { DOMWindow* window = V8Window::toImpl(info.Holder()); if (!window) return; Frame* frame = window->frame(); // window is detached from a frame. if (!frame) return; // Note that the spec doesn't allow any cross-origin named access to the // window object. However, UAs have traditionally allowed named access to // named child browsing contexts, even across origins. So first, search child // frames for a frame with a matching name. Frame* child = frame->tree().scopedChild(name); if (child) { v8SetReturnValueFast(info, child->domWindow(), window); return; } // If the frame is remote, the caller will never be able to access further // named results. if (!frame->isLocalFrame()) return; // Search named items in the document. Document* doc = toLocalFrame(frame)->document(); if (!doc || !doc->isHTMLDocument()) return; // This is an AllCanRead interceptor. Check that the caller has access to the // named results. if (!BindingSecurity::shouldAllowAccessTo( currentDOMWindow(info.GetIsolate()), window, BindingSecurity::ErrorReportOption::DoNotReport)) return; bool hasNamedItem = toHTMLDocument(doc)->hasNamedItem(name); bool hasIdItem = doc->hasElementWithId(name); if (!hasNamedItem && !hasIdItem) return; if (!hasNamedItem && hasIdItem && !doc->containsMultipleElementsWithId(name)) { v8SetReturnValueFast(info, doc->getElementById(name), window); return; } HTMLCollection* items = doc->windowNamedItems(name); if (!items->isEmpty()) { // TODO(esprehn): Firefox doesn't return an HTMLCollection here if there's // multiple with the same name, but Chrome and Safari does. What's the // right behavior? if (items->hasExactlyOneItem()) { v8SetReturnValueFast(info, items->item(0), window); return; } v8SetReturnValueFast(info, items, window); return; } }
static void TestInterfaceNamedConstructorReplaceableAttributeSetter(v8::Local<v8::String> name, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) { info.This()->ForceSet(name, jsValue); }
void V8CanvasRenderingContext2D::fillStyleAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info) { CanvasRenderingContext2D* impl = V8CanvasRenderingContext2D::toNative(info.Holder()); v8SetReturnValue(info, toV8Object(impl->fillStyle(), info.Holder(), info.GetIsolate())); }
void Proxy::onPropertyChanged(Local<Name> property, Local<Value> value, const v8::PropertyCallbackInfo<void>& info) { Isolate* isolate = info.GetIsolate(); onPropertyChangedForProxy(isolate, property->ToString(isolate), value, info.Holder()); }
static void keyLocationAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { Event* imp = V8TestExtendedEvent::toNative(info.Holder()); v8SetReturnValueUnsigned(info, imp->location()); }
void V8PopStateEvent::stateAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info) { v8::Handle<v8::Value> result = V8HiddenValue::getHiddenValue(info.GetIsolate(), info.Holder(), V8HiddenValue::state(info.GetIsolate())); if (!result.IsEmpty()) { v8SetReturnValue(info, result); return; } PopStateEvent* event = V8PopStateEvent::toNative(info.Holder()); History* history = event->history(); if (!history || !event->serializedState()) { if (!event->serializedState()) { // If we're in an isolated world and the event was created in the main world, // we need to find the 'state' property on the main world wrapper and clone it. v8::Local<v8::Value> mainWorldState = V8HiddenValue::getHiddenValueFromMainWorldWrapper(info.GetIsolate(), event, V8HiddenValue::state(info.GetIsolate())); if (!mainWorldState.IsEmpty()) event->setSerializedState(SerializedScriptValue::createAndSwallowExceptions(mainWorldState, info.GetIsolate())); } if (event->serializedState()) result = event->serializedState()->deserialize(); else result = v8::Null(info.GetIsolate()); v8SetReturnValue(info, cacheState(info.Holder(), result, info.GetIsolate())); return; } // There's no cached value from a previous invocation, nor a state value was provided by the // event, but there is a history object, so first we need to see if the state object has been // deserialized through the history object already. // The current history state object might've changed in the meantime, so we need to take care // of using the correct one, and always share the same deserialization with history.state. bool isSameState = history->isSameAsCurrentState(event->serializedState()); if (isSameState) { v8::Handle<v8::Object> v8History = toV8(history, info.Holder(), info.GetIsolate()).As<v8::Object>(); if (!history->stateChanged()) { result = V8HiddenValue::getHiddenValue(info.GetIsolate(), v8History, V8HiddenValue::state(info.GetIsolate())); if (!result.IsEmpty()) { v8SetReturnValue(info, cacheState(info.Holder(), result, info.GetIsolate())); return; } } result = event->serializedState()->deserialize(info.GetIsolate()); V8HiddenValue::setHiddenValue(info.GetIsolate(), v8History, V8HiddenValue::state(info.GetIsolate()), result); } else { result = event->serializedState()->deserialize(info.GetIsolate()); } v8SetReturnValue(info, cacheState(info.Holder(), result, info.GetIsolate())); }
static void nameAttributeGetter(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) { TestException* imp = V8TestException::toNative(info.Holder()); v8SetReturnValueString(info, imp->name(), info.GetIsolate()); return; }
void SessionWrapper::getPageSize(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) { SessionHolder* pSessionHolder = Wrapper::unwrapNative<SessionHolder>(info); info.GetReturnValue().Set(pSessionHolder->getPageSize()); }
static void TestTypedefsReplaceableAttributeSetter(v8::Local<v8::String> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { if (info.This()->IsObject()) v8::Handle<v8::Object>::Cast(info.This())->ForceSet(name, v8Value); }
void npObjectNamedPropertyGetter(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) { NPIdentifier identifier = getStringIdentifier(name); v8SetReturnValue(info, npObjectGetProperty(info.Holder(), identifier, name, info.GetIsolate())); }
static void hrefCallWithAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) { v8::Handle<v8::Object> holder = info.Holder(); TestNode* impl = V8TestNode::toImpl(holder); v8SetReturnValueString(info, impl->hrefCallWith(), info.GetIsolate()); }
static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterForMainWorld(const v8::PropertyCallbackInfo<v8::Value>& info) { TestInterfaceNode* imp = V8TestInterfaceNode::toNative(info.Holder()); v8SetReturnValueForMainWorld(info, imp->perWorldBindingsReadonlyTestInterfaceEmptyAttribute()); }