static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) { if ((info.Length() == 1 && (V8ArrayBuffer::HasInstance(info[0], info.GetIsolate(), worldType(info.GetIsolate()))))) { TestOverloadedConstructorsV8Internal::constructor1(info); return; } if ((info.Length() == 1 && (V8ArrayBufferView::HasInstance(info[0], info.GetIsolate(), worldType(info.GetIsolate()))))) { TestOverloadedConstructorsV8Internal::constructor2(info); return; } if ((info.Length() == 1 && (V8Blob::HasInstance(info[0], info.GetIsolate(), worldType(info.GetIsolate()))))) { TestOverloadedConstructorsV8Internal::constructor3(info); return; } if (info.Length() == 1) { TestOverloadedConstructorsV8Internal::constructor4(info); return; } if (UNLIKELY(info.Length() < 1)) { throwTypeError(ExceptionMessages::failedToConstruct("TestOverloadedConstructors", ExceptionMessages::notEnoughArguments(1, info.Length())), info.GetIsolate()); return; } throwUninformativeAndGenericTypeError(info.GetIsolate()); return; }
void V8Window::postMessageMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info) { // None of these need to be RefPtr because info and context are guaranteed // to hold on to them. DOMWindow* window = V8Window::toNative(info.Holder()); DOMWindow* source = activeDOMWindow(); // If called directly by WebCore we don't have a calling context. if (!source) { throwUninformativeAndGenericTypeError(info.GetIsolate()); return; } // This function has variable arguments and can be: // Per current spec: // postMessage(message, targetOrigin) // postMessage(message, targetOrigin, {sequence of transferrables}) // Legacy non-standard implementations in webkit allowed: // postMessage(message, {sequence of transferrables}, targetOrigin); MessagePortArray portArray; ArrayBufferArray arrayBufferArray; int targetOriginArgIndex = 1; if (info.Length() > 2) { int transferablesArgIndex = 2; if (isLegacyTargetOriginDesignation(info[2])) { targetOriginArgIndex = 2; transferablesArgIndex = 1; } bool notASequence = false; if (!extractTransferables(info[transferablesArgIndex], portArray, arrayBufferArray, notASequence, info.GetIsolate())) { if (notASequence) throwTypeError(ExceptionMessages::failedToExecute("postMessage", "Window", ExceptionMessages::notAnArrayTypeArgumentOrValue(transferablesArgIndex + 1)), info.GetIsolate()); return; } } V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<WithUndefinedOrNullCheck>, targetOrigin, info[targetOriginArgIndex]); bool didThrow = false; RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(info[0], &portArray, &arrayBufferArray, didThrow, info.GetIsolate()); if (didThrow) return; ExceptionState exceptionState(ExceptionState::ExecutionContext, "postMessage", "Window", info.Holder(), info.GetIsolate()); window->postMessage(message.release(), &portArray, targetOrigin, source, exceptionState); exceptionState.throwIfNeeded(); }
void V8SVGLength::valueAttributeSetterCustom(v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { SVGPropertyTearOff<SVGLength>* wrapper = V8SVGLength::toNative(info.Holder()); if (wrapper->isReadOnly()) { setDOMException(NoModificationAllowedError, info.GetIsolate()); return; } if (!isUndefinedOrNull(value) && !value->IsNumber() && !value->IsBoolean()) { throwUninformativeAndGenericTypeError(info.GetIsolate()); return; } SVGLength& imp = wrapper->propertyReference(); ExceptionState exceptionState(info.Holder(), info.GetIsolate()); SVGLengthContext lengthContext(wrapper->contextElement()); imp.setValue(static_cast<float>(value->NumberValue()), lengthContext, exceptionState); if (exceptionState.throwIfNeeded()) return; wrapper->commitChange(); }