v8::Handle<v8::Value> V8TestEventConstructor::constructorCallback(const v8::Arguments& args) { INC_STATS("DOM.TestEventConstructor.Constructor"); if (!args.IsConstructCall()) return throwError("DOM object constructor cannot be called as a function.", V8Proxy::TypeError); if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) return args.Holder(); if (args.Length() < 1) return throwError("Not enough arguments", V8Proxy::TypeError); STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, type, args[0]); TestEventConstructorInit eventInit; if (args.Length() >= 2) { EXCEPTION_BLOCK(Dictionary, options, args[1]); if (!fillTestEventConstructorInit(eventInit, options)) return v8::Undefined(); } RefPtr<TestEventConstructor> event = TestEventConstructor::create(type, eventInit); V8DOMWrapper::setDOMWrapper(args.Holder(), &info, event.get()); return toV8(event.release(), args.Holder()); }
EncodedJSValue JSC_HOST_CALL JSTestEventConstructorConstructor::constructJSTestEventConstructor(ExecState* exec) { JSTestEventConstructorConstructor* jsConstructor = static_cast<JSTestEventConstructorConstructor*>(exec->callee()); ScriptExecutionContext* executionContext = jsConstructor->scriptExecutionContext(); if (!executionContext) return throwVMError(exec, createReferenceError(exec, "Constructor associated execution context is unavailable")); AtomicString eventType = ustringToAtomicString(exec->argument(0).toString(exec)->value(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); TestEventConstructorInit eventInit; JSValue initializerValue = exec->argument(1); if (!initializerValue.isUndefinedOrNull()) { // Given the above test, this will always yield an object. JSObject* initializerObject = initializerValue.toObject(exec); // Create the dictionary wrapper from the initializer object. JSDictionary dictionary(exec, initializerObject); // Attempt to fill in the EventInit. if (!fillTestEventConstructorInit(eventInit, dictionary)) return JSValue::encode(jsUndefined()); } RefPtr<TestEventConstructor> event = TestEventConstructor::create(eventType, eventInit); return JSValue::encode(toJS(exec, jsConstructor->globalObject(), event.get())); }
static v8::Handle<v8::Value> constructor(const v8::Arguments& args) { if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, type, args[0]); TestEventConstructorInit eventInit; if (args.Length() >= 2) { V8TRYCATCH(Dictionary, options, Dictionary(args[1], args.GetIsolate())); if (!fillTestEventConstructorInit(eventInit, options)) return v8Undefined(); } RefPtr<TestEventConstructor> event = TestEventConstructor::create(type, eventInit); v8::Handle<v8::Object> wrapper = args.Holder(); V8DOMWrapper::associateObjectWithWrapper(event.release(), &V8TestEventConstructor::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent); return wrapper; }
static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() < 1) { throwTypeError(ExceptionMessages::failedToConstruct("TestEventConstructor", "An event name must be provided."), args.GetIsolate()); return; } V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, args[0]); TestEventConstructorInit eventInit; if (args.Length() >= 2) { V8TRYCATCH_VOID(Dictionary, options, Dictionary(args[1], args.GetIsolate())); if (!fillTestEventConstructorInit(eventInit, options)) return; } RefPtr<TestEventConstructor> event = TestEventConstructor::create(type, eventInit); v8::Handle<v8::Object> wrapper = args.Holder(); V8DOMWrapper::associateObjectWithWrapper<V8TestEventConstructor>(event.release(), &V8TestEventConstructor::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent); v8SetReturnValue(args, wrapper); }
v8::Handle<v8::Value> V8TestEventConstructor::constructorCallback(const v8::Arguments& args) { if (!args.IsConstructCall()) return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate()); if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) return args.Holder(); if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, type, args[0]); TestEventConstructorInit eventInit; if (args.Length() >= 2) { V8TRYCATCH(Dictionary, options, Dictionary(args[1], args.GetIsolate())); if (!fillTestEventConstructorInit(eventInit, options)) return v8Undefined(); } RefPtr<TestEventConstructor> event = TestEventConstructor::create(type, eventInit); v8::Handle<v8::Object> wrapper = args.Holder(); V8DOMWrapper::associateObjectWithWrapper(event.release(), &info, wrapper, args.GetIsolate()); return wrapper; }