String valueToStringWithUndefinedOrNullCheck(ExecState* exec, JSValue value) { if (value.isUndefinedOrNull()) return String(); return ustringToString(value.toString(exec)->value(exec)); }
void setJSSVGSwitchElementXmlspace(ExecState* exec, JSObject* thisObject, JSValue value) { JSSVGSwitchElement* castedThisObj = static_cast<JSSVGSwitchElement*>(thisObject); SVGSwitchElement* imp = static_cast<SVGSwitchElement*>(castedThisObj->impl()); imp->setXmlspace(value.toString(exec)); }
void setRegExpConstructorInput(ExecState* exec, JSObject* baseObject, JSValue value) { asRegExpConstructor(baseObject)->setInput(exec, value.toString(exec)); }
void setJSSVGTextContentElementXmlspace(ExecState* exec, JSObject* thisObject, JSValue value) { SVGTextContentElement* imp = static_cast<SVGTextContentElement*>(static_cast<JSSVGTextContentElement*>(thisObject)->impl()); imp->setXmlspace(value.toString(exec)); }
// ECMA 8.6.2.2 void JSObject::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot) { ASSERT(value); ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this)); if (propertyName == exec->propertyNames().underscoreProto) { // Setting __proto__ to a non-object, non-null value is silently ignored to match Mozilla. if (!value.isObject() && !value.isNull()) return; JSValue nextPrototypeValue = value; while (nextPrototypeValue && nextPrototypeValue.isObject()) { JSObject* nextPrototype = asObject(nextPrototypeValue)->unwrappedObject(); if (nextPrototype == this) { throwError(exec, GeneralError, "cyclic __proto__ value"); return; } nextPrototypeValue = nextPrototype->prototype(); } setPrototype(value); return; } // Check if there are any setters or getters in the prototype chain JSValue prototype; for (JSObject* obj = this; !obj->structure()->hasGetterSetterProperties(); obj = asObject(prototype)) { prototype = obj->prototype(); if (prototype.isNull()) { putDirectInternal(exec->globalData(), propertyName, value, 0, true, slot); return; } } unsigned attributes; JSCell* specificValue; if ((m_structure->get(propertyName, attributes, specificValue) != WTF::notFound) && attributes & ReadOnly) return; for (JSObject* obj = this; ; obj = asObject(prototype)) { if (JSValue gs = obj->getDirect(propertyName)) { if (gs.isGetterSetter()) { JSObject* setterFunc = asGetterSetter(gs)->setter(); if (!setterFunc) { throwSetterError(exec); return; } CallData callData; CallType callType = setterFunc->getCallData(callData); MarkedArgumentBuffer args; args.append(value); call(exec, setterFunc, callType, callData, this, args); return; } // If there's an existing property on the object or one of its // prototypes it should be replaced, so break here. break; } prototype = obj->prototype(); if (prototype.isNull()) break; } putDirectInternal(exec->globalData(), propertyName, value, 0, true, slot); return; }
void JSDictionary::convertValue(ExecState* exec, JSValue value, String& result) { result = ustringToString(value.toString(exec)->value(exec)); }
static PassRefPtr<DeviceMotionData::RotationRate> readRotationRateArgument(JSValue value, ExecState* exec) { if (value.isUndefinedOrNull()) return 0; // Given the above test, this will always yield an object. JSObject* object = value.toObject(exec); JSValue alphaValue = object->get(exec, Identifier(exec, "alpha")); if (exec->hadException()) return 0; bool canProvideAlpha = !alphaValue.isUndefinedOrNull(); double alpha = alphaValue.toNumber(exec); if (exec->hadException()) return 0; JSValue betaValue = object->get(exec, Identifier(exec, "beta")); if (exec->hadException()) return 0; bool canProvideBeta = !betaValue.isUndefinedOrNull(); double beta = betaValue.toNumber(exec); if (exec->hadException()) return 0; JSValue gammaValue = object->get(exec, Identifier(exec, "gamma")); if (exec->hadException()) return 0; bool canProvideGamma = !gammaValue.isUndefinedOrNull(); double gamma = gammaValue.toNumber(exec); if (exec->hadException()) return 0; if (!canProvideAlpha && !canProvideBeta && !canProvideGamma) return 0; return DeviceMotionData::RotationRate::create(canProvideAlpha, alpha, canProvideBeta, beta, canProvideGamma, gamma); }
void setJSHTMLMediaElementWebkitPreservesPitch(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLMediaElement* castedThis = static_cast<JSHTMLMediaElement*>(thisObject); HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(castedThis->impl()); imp->setWebkitPreservesPitch(value.toBoolean(exec)); }
void setJSHTMLMediaElementWebkitClosedCaptionsVisible(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLMediaElement* castedThis = static_cast<JSHTMLMediaElement*>(thisObject); HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(castedThis->impl()); imp->setWebkitClosedCaptionsVisible(value.toBoolean(exec)); }
void setJSHTMLMediaElementLoop(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLMediaElement* castedThis = static_cast<JSHTMLMediaElement*>(thisObject); HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(castedThis->impl()); imp->setBooleanAttribute(WebCore::HTMLNames::loopAttr, value.toBoolean(exec)); }
void setJSHTMLMediaElementControls(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLMediaElement* castedThis = static_cast<JSHTMLMediaElement*>(thisObject); HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(castedThis->impl()); imp->setControls(value.toBoolean(exec)); }
void setJSHTMLMediaElementPlaybackRate(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLMediaElement* castedThis = static_cast<JSHTMLMediaElement*>(thisObject); HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(castedThis->impl()); imp->setPlaybackRate(value.toFloat(exec)); }
void setJSHTMLMediaElementPreload(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLMediaElement* castedThis = static_cast<JSHTMLMediaElement*>(thisObject); HTMLMediaElement* imp = static_cast<HTMLMediaElement*>(castedThis->impl()); imp->setPreload(ustringToString(value.toString(exec))); }
void WASMModuleParser::parseGlobalSection(ExecState* exec) { uint32_t numberOfInternalI32GlobalVariables; uint32_t numberOfInternalF32GlobalVariables; uint32_t numberOfInternalF64GlobalVariables; uint32_t numberOfImportedI32GlobalVariables; uint32_t numberOfImportedF32GlobalVariables; uint32_t numberOfImportedF64GlobalVariables; READ_COMPACT_UINT32_OR_FAIL(numberOfInternalI32GlobalVariables, "Cannot read the number of internal int32 global variables."); READ_COMPACT_UINT32_OR_FAIL(numberOfInternalF32GlobalVariables, "Cannot read the number of internal float32 global variables."); READ_COMPACT_UINT32_OR_FAIL(numberOfInternalF64GlobalVariables, "Cannot read the number of internal float64 global variables."); READ_COMPACT_UINT32_OR_FAIL(numberOfImportedI32GlobalVariables, "Cannot read the number of imported int32 global variables."); READ_COMPACT_UINT32_OR_FAIL(numberOfImportedF32GlobalVariables, "Cannot read the number of imported float32 global variables."); READ_COMPACT_UINT32_OR_FAIL(numberOfImportedF64GlobalVariables, "Cannot read the number of imported float64 global variables."); uint32_t numberOfGlobalVariables = numberOfInternalI32GlobalVariables + numberOfInternalF32GlobalVariables + numberOfInternalF64GlobalVariables + numberOfImportedI32GlobalVariables + numberOfImportedF32GlobalVariables + numberOfImportedF64GlobalVariables; Vector<WASMType>& globalVariableTypes = m_module->globalVariableTypes(); globalVariableTypes.reserveInitialCapacity(numberOfGlobalVariables); Vector<JSWASMModule::GlobalVariable>& globalVariables = m_module->globalVariables(); globalVariables.reserveInitialCapacity(numberOfGlobalVariables); for (uint32_t i = 0; i < numberOfInternalI32GlobalVariables; ++i) { globalVariableTypes.uncheckedAppend(WASMType::I32); globalVariables.uncheckedAppend(JSWASMModule::GlobalVariable(0)); } for (uint32_t i = 0; i < numberOfInternalF32GlobalVariables; ++i) { globalVariableTypes.uncheckedAppend(WASMType::F32); globalVariables.uncheckedAppend(JSWASMModule::GlobalVariable(0.0f)); } for (uint32_t i = 0; i < numberOfInternalF64GlobalVariables; ++i) { globalVariableTypes.uncheckedAppend(WASMType::F64); globalVariables.uncheckedAppend(JSWASMModule::GlobalVariable(0.0)); } for (uint32_t i = 0; i < numberOfImportedI32GlobalVariables; ++i) { String importName; READ_STRING_OR_FAIL(importName, "Cannot read the import name of an int32 global variable."); globalVariableTypes.uncheckedAppend(WASMType::I32); JSValue value; getImportedValue(exec, importName, value); PROPAGATE_ERROR(); FAIL_IF_FALSE(value.isPrimitive() && !value.isSymbol(), "\"" + importName + "\" is not a primitive or is a Symbol."); globalVariables.uncheckedAppend(JSWASMModule::GlobalVariable(value.toInt32(exec))); } for (uint32_t i = 0; i < numberOfImportedF32GlobalVariables; ++i) { String importName; READ_STRING_OR_FAIL(importName, "Cannot read the import name of a float32 global variable."); globalVariableTypes.uncheckedAppend(WASMType::F32); JSValue value; getImportedValue(exec, importName, value); PROPAGATE_ERROR(); FAIL_IF_FALSE(value.isPrimitive() && !value.isSymbol(), "\"" + importName + "\" is not a primitive or is a Symbol."); globalVariables.uncheckedAppend(JSWASMModule::GlobalVariable(static_cast<float>(value.toNumber(exec)))); } for (uint32_t i = 0; i < numberOfImportedF64GlobalVariables; ++i) { String importName; READ_STRING_OR_FAIL(importName, "Cannot read the import name of a float64 global variable."); globalVariableTypes.uncheckedAppend(WASMType::F64); JSValue value; getImportedValue(exec, importName, value); PROPAGATE_ERROR(); FAIL_IF_FALSE(value.isPrimitive() && !value.isSymbol(), "\"" + importName + "\" is not a primitive or is a Symbol."); globalVariables.uncheckedAppend(JSWASMModule::GlobalVariable(value.toNumber(exec))); } }
void JSDictionary::convertValue(ExecState* exec, JSValue value, unsigned long long& result) { double d = value.toNumber(exec); doubleToInteger(d, result); }
EncodedJSValue JSC_HOST_CALL objectProtoFuncValueOf(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); return JSValue::encode(thisValue.toObject(exec)); }
void JSDictionary::convertValue(ExecState* exec, JSValue value, double& result) { result = value.toNumber(exec); }
EncodedJSValue JSC_HOST_CALL objectProtoFuncPropertyIsEnumerable(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); return JSValue::encode(jsBoolean(thisValue.toObject(exec)->propertyIsEnumerable(exec, Identifier(exec, exec->argument(0).toString(exec)->value(exec))))); }
static PassRefPtr<DeviceMotionData::Acceleration> readAccelerationArgument(JSValue value, ExecState* exec) { if (value.isUndefinedOrNull()) return 0; // Given the above test, this will always yield an object. JSObject* object = value.toObject(exec); JSValue xValue = object->get(exec, Identifier(exec, "x")); if (exec->hadException()) return 0; bool canProvideX = !xValue.isUndefinedOrNull(); double x = xValue.toNumber(exec); if (exec->hadException()) return 0; JSValue yValue = object->get(exec, Identifier(exec, "y")); if (exec->hadException()) return 0; bool canProvideY = !yValue.isUndefinedOrNull(); double y = yValue.toNumber(exec); if (exec->hadException()) return 0; JSValue zValue = object->get(exec, Identifier(exec, "z")); if (exec->hadException()) return 0; bool canProvideZ = !zValue.isUndefinedOrNull(); double z = zValue.toNumber(exec); if (exec->hadException()) return 0; if (!canProvideX && !canProvideY && !canProvideZ) return 0; return DeviceMotionData::Acceleration::create(canProvideX, x, canProvideY, y, canProvideZ, z); }
void setJSHTMLFrameElementNoResize(ExecState* exec, JSObject* thisObject, JSValue value) { HTMLFrameElement* imp = static_cast<HTMLFrameElement*>(static_cast<JSHTMLFrameElement*>(thisObject)->impl()); imp->setNoResize(value.toBoolean(exec)); }
void JavaField::setValueToInstance(ExecState* exec, const Instance* i, JSValue aValue) const { const JavaInstance* instance = static_cast<const JavaInstance*>(i); jvalue javaValue = convertValueToJValue(exec, i->rootObject(), aValue, m_JNIType, type()); LOG(LiveConnect, "JavaField::setValueToInstance setting value %s to %s", UString(name()).utf8().data(), aValue.toString(exec).ascii().data()); switch (m_JNIType) { case array_type: case object_type: { dispatchSetValueToInstance(exec, instance, javaValue, "set", "(Ljava/lang/Object;Ljava/lang/Object;)V"); } break; case boolean_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setBoolean", "(Ljava/lang/Object;Z)V"); } break; case byte_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setByte", "(Ljava/lang/Object;B)V"); } break; case char_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setChar", "(Ljava/lang/Object;C)V"); } break; case short_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setShort", "(Ljava/lang/Object;S)V"); } break; case int_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setInt", "(Ljava/lang/Object;I)V"); } break; case long_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setLong", "(Ljava/lang/Object;J)V"); } break; case float_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setFloat", "(Ljava/lang/Object;F)V"); } break; case double_type: { dispatchSetValueToInstance(exec, instance, javaValue, "setDouble", "(Ljava/lang/Object;D)V"); } break; default: break; } }
void JSDictionary::convertValue(ExecState* exec, JSValue value, bool& result) { result = value.toBoolean(exec); }
bool JSObject::getPrimitiveNumber(ExecState* exec, double& number, JSValue& result) { result = defaultValue(exec, PreferNumber); number = result.toNumber(exec); return !result.isString(); }
void JSDictionary::convertValue(ExecState* exec, JSValue value, int& result) { result = value.toInt32(exec); }
void setJSWebKitFlagsExclusive(ExecState* exec, JSObject* thisObject, JSValue value) { JSWebKitFlags* castedThis = static_cast<JSWebKitFlags*>(thisObject); WebKitFlags* imp = static_cast<WebKitFlags*>(castedThis->impl()); imp->setExclusive(value.toBoolean(exec)); }
void JSDictionary::convertValue(ExecState* exec, JSValue value, unsigned& result) { result = value.toUInt32(exec); }
void JSEventListener::handleEvent(ScriptExecutionContext* scriptExecutionContext, Event* event) { ASSERT(scriptExecutionContext); if (!scriptExecutionContext) return; JSLock lock(SilenceAssertionsOnly); JSObject* jsFunction = this->jsFunction(scriptExecutionContext); if (!jsFunction) return; JSDOMGlobalObject* globalObject = toJSDOMGlobalObject(scriptExecutionContext, m_isolatedWorld.get()); if (!globalObject) return; if (scriptExecutionContext->isDocument()) { JSDOMWindow* window = static_cast<JSDOMWindow*>(globalObject); Frame* frame = window->impl()->frame(); if (!frame) return; // The window must still be active in its frame. See <https://bugs.webkit.org/show_bug.cgi?id=21921>. // FIXME: A better fix for this may be to change DOMWindow::frame() to not return a frame the detached window used to be in. if (frame->domWindow() != window->impl()) return; // FIXME: Is this check needed for other contexts? ScriptController* script = frame->script(); if (!script->canExecuteScripts() || script->isPaused()) return; } ExecState* exec = globalObject->globalExec(); JSValue handleEventFunction = jsFunction->get(exec, Identifier(exec, "handleEvent")); CallData callData; CallType callType = handleEventFunction.getCallData(callData); if (callType == CallTypeNone) { handleEventFunction = JSValue(); callType = jsFunction->getCallData(callData); } if (callType != CallTypeNone) { ref(); MarkedArgumentBuffer args; args.append(toJS(exec, globalObject, event)); Event* savedEvent = globalObject->currentEvent(); globalObject->setCurrentEvent(event); JSGlobalData* globalData = globalObject->globalData(); DynamicGlobalObjectScope globalObjectScope(exec, globalData->dynamicGlobalObject ? globalData->dynamicGlobalObject : globalObject); globalData->timeoutChecker.start(); JSValue retval = handleEventFunction ? JSC::call(exec, handleEventFunction, callType, callData, jsFunction, args) : JSC::call(exec, jsFunction, callType, callData, toJS(exec, globalObject, event->currentTarget()), args); globalData->timeoutChecker.stop(); globalObject->setCurrentEvent(savedEvent); if (exec->hadException()) reportCurrentException(exec); else { if (!retval.isUndefinedOrNull() && event->storesResultAsString()) event->storeResult(retval.toString(exec)); if (m_isAttribute) { bool retvalbool; if (retval.getBoolean(retvalbool) && !retvalbool) event->preventDefault(); } } if (scriptExecutionContext->isDocument()) Document::updateStyleForAllDocuments(); deref(); } }
void JSDictionary::convertValue(ExecState* exec, JSValue value, unsigned short& result) { result = static_cast<unsigned short>(value.toUInt32(exec)); }
void setRegExpConstructorMultiline(ExecState* exec, JSObject* baseObject, JSValue value) { asRegExpConstructor(baseObject)->setMultiline(value.toBoolean(exec)); }
void SlotVisitor::append(JSValue value) { if (!value || !value.isCell()) return; setMarkedAndAppendToMarkStack(value.asCell()); }