EncodedJSValue jsTestEventTargetConstructor(ExecState* exec, EncodedJSValue slotBase, EncodedJSValue, PropertyName) { JSTestEventTarget* domObject = jsDynamicCast<JSTestEventTarget*>(JSValue::decode(slotBase)); if (!domObject) return throwVMTypeError(exec); return JSValue::encode(JSTestEventTarget::getConstructor(exec->vm(), domObject->globalObject())); }
void JSTestEventTargetOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context) { JSTestEventTarget* jsTestEventTarget = jsCast<JSTestEventTarget*>(handle.get().asCell()); DOMWrapperWorld* world = static_cast<DOMWrapperWorld*>(context); uncacheWrapper(world, jsTestEventTarget->impl(), jsTestEventTarget); jsTestEventTarget->releaseImpl(); }
bool JSTestEventTarget::getOwnPropertyDescriptor(JSObject* object, ExecState* exec, PropertyName propertyName, PropertyDescriptor& descriptor) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); const HashEntry* entry = JSTestEventTargetTable.entry(exec, propertyName); if (entry) { PropertySlot slot(thisObject); slot.setCustom(thisObject, entry->propertyGetter()); descriptor.setDescriptor(slot.getValue(exec, propertyName), entry->attributes()); return true; } unsigned index = propertyName.asIndex(); if (index != PropertyName::NotAnIndex && index < static_cast<TestEventTarget*>(thisObject->impl())->length()) { PropertySlot slot(thisObject); slot.setCustomIndex(thisObject, index, indexGetter); descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | ReadOnly); return true; } if (canGetItemsForName(exec, static_cast<TestEventTarget*>(thisObject->impl()), propertyName)) { PropertySlot slot(thisObject); slot.setCustom(thisObject, nameGetter); descriptor.setDescriptor(slot.getValue(exec, propertyName), ReadOnly | DontDelete | DontEnum); return true; } return getStaticValueDescriptor<JSTestEventTarget, Base>(exec, &JSTestEventTargetTable, thisObject, propertyName, descriptor); }
EncodedJSValue jsTestEventTargetConstructor(ExecState* state, JSObject*, EncodedJSValue thisValue, PropertyName) { JSTestEventTarget* domObject = jsDynamicCast<JSTestEventTarget*>(JSValue::decode(thisValue)); if (!domObject) return throwVMTypeError(state); return JSValue::encode(JSTestEventTarget::getConstructor(state->vm(), domObject->globalObject())); }
void JSTestEventTarget::visitChildren(JSCell* cell, SlotVisitor& visitor) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); thisObject->impl().visitJSEventListeners(visitor); }
bool JSTestEventTargetOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSTestEventTarget* jsTestEventTarget = jsCast<JSTestEventTarget*>(handle.get().asCell()); if (jsTestEventTarget->impl().isFiringEventListeners()) return true; UNUSED_PARAM(visitor); return false; }
void JSTestEventTarget::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); for (unsigned i = 0; i < static_cast<TestEventTarget*>(thisObject->impl())->length(); ++i) propertyNames.add(Identifier::from(exec, i)); Base::getOwnPropertyNames(thisObject, exec, propertyNames, mode); }
void JSTestEventTarget::visitChildren(JSCell* cell, SlotVisitor& visitor) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag); ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren()); Base::visitChildren(thisObject, visitor); thisObject->impl()->visitJSEventListeners(visitor); }
EncodedJSValue jsTestEventTargetConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName) { UNUSED_PARAM(baseValue); UNUSED_PARAM(thisValue); JSTestEventTarget* domObject = jsDynamicCast<JSTestEventTarget*>(JSValue::decode(thisValue)); if (!domObject) return throwVMTypeError(exec); return JSValue::encode(JSTestEventTarget::getConstructor(exec->vm(), domObject->globalObject())); }
bool JSTestEventTarget::getOwnPropertySlotByIndex(JSCell* cell, ExecState* exec, unsigned propertyName, PropertySlot& slot) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); if (propertyName < static_cast<TestEventTarget*>(thisObject->impl())->length()) { slot.setCustomIndex(thisObject, propertyName, thisObject->indexGetter); return true; } return thisObject->methodTable()->getOwnPropertySlot(thisObject, exec, Identifier::from(exec, propertyName), slot); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionRemoveEventListener(ExecState* exec) { JSValue thisValue = exec->thisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (UNLIKELY(!castedThis)) return throwThisTypeError(*exec, "TestEventTarget", "removeEventListener"); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); auto& impl = castedThis->impl(); JSValue listener = exec->argument(1); if (UNLIKELY(!listener.isObject())) return JSValue::encode(jsUndefined()); impl.removeEventListener(exec->argument(0).toString(exec)->toAtomicString(exec), createJSEventListenerForRemove(*exec, *asObject(listener), *castedThis).ptr(), exec->argument(2).toBoolean(exec)); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionAddEventListener(ExecState* state) { JSValue thisValue = state->thisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (UNLIKELY(!castedThis)) return throwThisTypeError(*state, "TestEventTarget", "addEventListener"); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); auto& impl = castedThis->wrapped(); JSValue listener = state->argument(1); if (UNLIKELY(!listener.isObject())) return JSValue::encode(jsUndefined()); impl.addEventListener(state->argument(0).toString(state)->toAtomicString(state), createJSEventListenerForAdd(*state, *asObject(listener), *castedThis), state->argument(2).toBoolean(state)); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionRemoveEventListener(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (UNLIKELY(!castedThis)) return throwVMTypeError(exec, makeDOMBindingsTypeErrorString("Can only call ", "TestEventTarget", ".", "removeEventListener", " on instances of ", "TestEventTarget")); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); TestEventTarget& impl = castedThis->impl(); JSValue listener = exec->argument(1); if (!listener.isObject()) return JSValue::encode(jsUndefined()); impl.removeEventListener(exec->argument(0).toString(exec)->value(exec), JSEventListener::create(asObject(listener), castedThis, false, currentWorld(exec)).get(), exec->argument(2).toBoolean(exec)); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionAddEventListener(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (!castedThis) return throwVMTypeError(exec); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); TestEventTarget& impl = castedThis->impl(); JSValue listener = exec->argument(1); if (!listener.isObject()) return JSValue::encode(jsUndefined()); impl.addEventListener(exec->argument(0).toString(exec)->value(exec), JSEventListener::create(asObject(listener), castedThis, false, currentWorld(exec)), exec->argument(2).toBoolean(exec)); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionRemoveEventListener(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSTestEventTarget::s_info)) return throwVMTypeError(exec); JSTestEventTarget* castedThis = jsCast<JSTestEventTarget*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSTestEventTarget::s_info); TestEventTarget* impl = static_cast<TestEventTarget*>(castedThis->impl()); JSValue listener = exec->argument(1); if (!listener.isObject()) return JSValue::encode(jsUndefined()); impl->removeEventListener(exec->argument(0).toString(exec)->value(exec), JSEventListener::create(asObject(listener), castedThis, false, currentWorld(exec)).get(), exec->argument(2).toBoolean(exec)); return JSValue::encode(jsUndefined()); }
bool JSTestEventTarget::getOwnPropertySlotByIndex(JSObject* object, ExecState* exec, unsigned index, PropertySlot& slot) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); if (index < static_cast<TestEventTarget*>(thisObject->impl())->length()) { slot.setCustomIndex(thisObject, index, thisObject->indexGetter); return true; } PropertyName propertyName = Identifier::from(exec, index); if (canGetItemsForName(exec, static_cast<TestEventTarget*>(thisObject->impl()), propertyName)) { slot.setCustom(thisObject, thisObject->nameGetter); return true; } return Base::getOwnPropertySlotByIndex(thisObject, exec, index, slot); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionItem(ExecState* state) { JSValue thisValue = state->thisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (UNLIKELY(!castedThis)) return throwThisTypeError(*state, "TestEventTarget", "item"); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); auto& impl = castedThis->wrapped(); if (UNLIKELY(state->argumentCount() < 1)) return throwVMError(state, createNotEnoughArgumentsError(state)); unsigned index = toUInt32(state, state->argument(0), NormalConversion); if (UNLIKELY(state->hadException())) return JSValue::encode(jsUndefined()); JSValue result = toJS(state, castedThis->globalObject(), WTF::getPtr(impl.item(index))); return JSValue::encode(result); }
bool JSTestEventTarget::getOwnPropertySlotByIndex(JSObject* object, ExecState* exec, unsigned index, PropertySlot& slot) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); if (index < thisObject->impl().length()) { unsigned attributes = DontDelete | ReadOnly; slot.setCustomIndex(thisObject, attributes, index, thisObject->indexGetter); return true; } PropertyName propertyName = Identifier::from(exec, index); if (canGetItemsForName(exec, &thisObject->impl(), propertyName)) { slot.setCustom(thisObject, ReadOnly | DontDelete | DontEnum, thisObject->nameGetter); return true; } return Base::getOwnPropertySlotByIndex(thisObject, exec, index, slot); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionDispatchEvent(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (UNLIKELY(!castedThis)) return throwVMTypeError(exec, makeDOMBindingsTypeErrorString("Can only call ", "TestEventTarget", ".", "dispatchEvent", " on instances of ", "TestEventTarget")); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); TestEventTarget& impl = castedThis->impl(); if (exec->argumentCount() < 1) return throwVMError(exec, createNotEnoughArgumentsError(exec)); ExceptionCode ec = 0; Event* evt(toEvent(exec->argument(0))); if (UNLIKELY(exec->hadException())) return JSValue::encode(jsUndefined()); JSValue result = jsBoolean(impl.dispatchEvent(evt, ec)); setDOMException(exec, ec); return JSValue::encode(result); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionDispatchEvent(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSTestEventTarget::s_info)) return throwVMTypeError(exec); JSTestEventTarget* castedThis = jsCast<JSTestEventTarget*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSTestEventTarget::s_info); TestEventTarget* impl = static_cast<TestEventTarget*>(castedThis->impl()); if (exec->argumentCount() < 1) return throwVMError(exec, createNotEnoughArgumentsError(exec)); ExceptionCode ec = 0; Event* evt(toEvent(exec->argument(0))); if (exec->hadException()) return JSValue::encode(jsUndefined()); JSC::JSValue result = jsBoolean(impl->dispatchEvent(evt, ec)); setDOMException(exec, ec); return JSValue::encode(result); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionDispatchEvent(ExecState* exec) { JSValue thisValue = exec->thisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (UNLIKELY(!castedThis)) return throwThisTypeError(*exec, "TestEventTarget", "dispatchEvent"); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); auto& impl = castedThis->impl(); if (UNLIKELY(exec->argumentCount() < 1)) return throwVMError(exec, createNotEnoughArgumentsError(exec)); ExceptionCode ec = 0; Event* evt = JSEvent::toWrapped(exec->argument(0)); if (UNLIKELY(exec->hadException())) return JSValue::encode(jsUndefined()); JSValue result = jsBoolean(impl.dispatchEvent(evt, ec)); setDOMException(exec, ec); return JSValue::encode(result); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionItem(ExecState* exec) { JSValue thisValue = exec->thisValue(); JSTestEventTarget* castedThis = jsDynamicCast<JSTestEventTarget*>(thisValue); if (UNLIKELY(!castedThis)) return throwThisTypeError(*exec, "TestEventTarget", "item"); ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info()); auto& impl = castedThis->impl(); if (UNLIKELY(exec->argumentCount() < 1)) return throwVMError(exec, createNotEnoughArgumentsError(exec)); int index = toUInt32(exec, exec->argument(0), NormalConversion); if (index < 0) { setDOMException(exec, INDEX_SIZE_ERR); return JSValue::encode(jsUndefined()); } if (UNLIKELY(exec->hadException())) return JSValue::encode(jsUndefined()); JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.item(index))); return JSValue::encode(result); }
bool JSTestEventTarget::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); const HashEntry* entry = getStaticValueSlotEntryWithoutCaching<JSTestEventTarget>(exec, propertyName); if (entry) { slot.setCustom(thisObject, entry->propertyGetter()); return true; } unsigned index = propertyName.asIndex(); if (index != PropertyName::NotAnIndex && index < static_cast<TestEventTarget*>(thisObject->impl())->length()) { slot.setCustomIndex(thisObject, index, indexGetter); return true; } if (canGetItemsForName(exec, static_cast<TestEventTarget*>(thisObject->impl()), propertyName)) { slot.setCustom(thisObject, thisObject->nameGetter); return true; } return getStaticValueSlot<JSTestEventTarget, Base>(exec, &JSTestEventTargetTable, thisObject, propertyName, slot); }
EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionItem(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSTestEventTarget::s_info)) return throwVMTypeError(exec); JSTestEventTarget* castedThis = jsCast<JSTestEventTarget*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSTestEventTarget::s_info); TestEventTarget* impl = static_cast<TestEventTarget*>(castedThis->impl()); if (exec->argumentCount() < 1) return throwVMError(exec, createNotEnoughArgumentsError(exec)); int index(toUInt32(exec, exec->argument(0), NormalConversion)); if (index < 0) { setDOMException(exec, INDEX_SIZE_ERR); return JSValue::encode(jsUndefined()); } if (exec->hadException()) return JSValue::encode(jsUndefined()); JSC::JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl->item(index))); return JSValue::encode(result); }
bool JSTestEventTarget::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(object); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); const HashEntry* entry = getStaticValueSlotEntryWithoutCaching<JSTestEventTarget>(exec, propertyName); if (entry) { slot.setCustom(thisObject, entry->attributes(), entry->propertyGetter()); return true; } unsigned index = propertyName.asIndex(); if (index != PropertyName::NotAnIndex && index < thisObject->impl().length()) { unsigned attributes = DontDelete | ReadOnly; slot.setCustomIndex(thisObject, attributes, index, indexGetter); return true; } if (canGetItemsForName(exec, &thisObject->impl(), propertyName)) { slot.setCustom(thisObject, ReadOnly | DontDelete | DontEnum, thisObject->nameGetter); return true; } return getStaticValueSlot<JSTestEventTarget, Base>(exec, JSTestEventTargetTable, thisObject, propertyName, slot); }
bool JSTestEventTarget::getOwnPropertySlot(JSCell* cell, ExecState* exec, const Identifier& propertyName, PropertySlot& slot) { JSTestEventTarget* thisObject = jsCast<JSTestEventTarget*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); const HashEntry* entry = JSTestEventTargetTable.entry(exec, propertyName); if (entry) { slot.setCustom(thisObject, entry->propertyGetter()); return true; } bool ok; unsigned index = propertyName.toUInt32(ok); if (ok && index < static_cast<TestEventTarget*>(thisObject->impl())->length()) { slot.setCustomIndex(thisObject, index, indexGetter); return true; } if (canGetItemsForName(exec, static_cast<TestEventTarget*>(thisObject->impl()), propertyName)) { slot.setCustom(thisObject, thisObject->nameGetter); return true; } return getStaticValueSlot<JSTestEventTarget, Base>(exec, &JSTestEventTargetTable, thisObject, propertyName, slot); }
JSValue jsTestEventTargetConstructor(ExecState* exec, JSValue slotBase, const Identifier&) { JSTestEventTarget* domObject = static_cast<JSTestEventTarget*>(asObject(slotBase)); return JSTestEventTarget::getConstructor(exec, domObject->globalObject()); }
JSValue JSTestEventTarget::indexGetter(ExecState* exec, JSValue slotBase, unsigned index) { JSTestEventTarget* thisObj = jsCast<JSTestEventTarget*>(asObject(slotBase)); ASSERT_GC_OBJECT_INHERITS(thisObj, &s_info); return toJS(exec, thisObj->globalObject(), static_cast<TestEventTarget*>(thisObj->impl())->item(index)); }
JSValue jsTestEventTargetConstructor(ExecState* exec, JSValue slotBase, PropertyName) { JSTestEventTarget* domObject = jsCast<JSTestEventTarget*>(asObject(slotBase)); return JSTestEventTarget::getConstructor(exec, domObject->globalObject()); }
EncodedJSValue JSTestEventTarget::indexGetter(ExecState* exec, EncodedJSValue slotBase, EncodedJSValue, unsigned index) { JSTestEventTarget* thisObj = jsCast<JSTestEventTarget*>(JSValue::decode(slotBase)); ASSERT_GC_OBJECT_INHERITS(thisObj, info()); return JSValue::encode(toJS(exec, thisObj->globalObject(), thisObj->impl().item(index))); }