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(MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined))); 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 jsMessagePortPrototypeFunctionDispatchEvent(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSMessagePort::s_info)) return throwVMTypeError(exec); JSMessagePort* castedThis = static_cast<JSMessagePort*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSMessagePort::s_info); MessagePort* imp = static_cast<MessagePort*>(castedThis->impl()); if (exec->argumentCount() < 1) return throwVMError(exec, createTypeError(exec, "Not enough arguments")); ExceptionCode ec = 0; Event* evt(toEvent(exec->argument(0))); if (exec->hadException()) return JSValue::encode(jsUndefined()); JSC::JSValue result = jsBoolean(imp->dispatchEvent(evt, ec)); setDOMException(exec, ec); return JSValue::encode(result); }
JSValue* JSXMLHttpRequestPrototypeFunction::callAsFunction(ExecState* exec, JSObject* thisObj, const List& args) { if (!thisObj->inherits(&JSXMLHttpRequest::info)) return throwError(exec, TypeError); JSXMLHttpRequest* request = static_cast<JSXMLHttpRequest*>(thisObj); ExceptionCode ec = 0; switch (id) { case JSXMLHttpRequest::Abort: request->m_impl->abort(); return jsUndefined(); case JSXMLHttpRequest::GetAllResponseHeaders: return jsStringOrUndefined(request->m_impl->getAllResponseHeaders()); case JSXMLHttpRequest::GetResponseHeader: if (args.size() < 1) return throwError(exec, SyntaxError, "Not enough arguments"); return jsStringOrNull(request->m_impl->getResponseHeader(args[0]->toString(exec))); case JSXMLHttpRequest::Open: { if (args.size() < 2) return throwError(exec, SyntaxError, "Not enough arguments"); String method = args[0]->toString(exec); Frame* frame = Window::retrieveActive(exec)->impl()->frame(); if (!frame) return jsUndefined(); KURL url = frame->loader()->completeURL(DeprecatedString(args[1]->toString(exec))); bool async = true; if (args.size() >= 3) async = args[2]->toBoolean(exec); if (args.size() >= 4 && !args[3]->isUndefined()) { String user = valueToStringWithNullCheck(exec, args[3]); if (args.size() >= 5 && !args[4]->isUndefined()) { String password = valueToStringWithNullCheck(exec, args[4]); request->m_impl->open(method, url, async, user, password, ec); } else request->m_impl->open(method, url, async, user, ec); } else request->m_impl->open(method, url, async, ec); setDOMException(exec, ec); return jsUndefined(); } case JSXMLHttpRequest::Send: { String body; if (args.size() >= 1) { if (args[0]->toObject(exec)->inherits(&JSDocument::info)) { Document* doc = static_cast<Document*>(static_cast<JSDocument*>(args[0]->toObject(exec))->impl()); body = doc->toString().deprecatedString(); } else { // converting certain values (like null) to object can set an exception if (exec->hadException()) exec->clearException(); else body = args[0]->toString(exec); } } request->m_impl->send(body, ec); setDOMException(exec, ec); return jsUndefined(); } case JSXMLHttpRequest::SetRequestHeader: if (args.size() < 2) return throwError(exec, SyntaxError, "Not enough arguments"); request->m_impl->setRequestHeader(args[0]->toString(exec), args[1]->toString(exec), ec); setDOMException(exec, ec); return jsUndefined(); case JSXMLHttpRequest::OverrideMIMEType: if (args.size() < 1) return throwError(exec, SyntaxError, "Not enough arguments"); request->m_impl->overrideMIMEType(args[0]->toString(exec)); return jsUndefined(); case JSXMLHttpRequest::AddEventListener: { Document* doc = request->m_impl->document(); if (!doc) return jsUndefined(); Frame* frame = doc->frame(); if (!frame) return jsUndefined(); JSUnprotectedEventListener* listener = KJS::Window::retrieveWindow(frame)->findOrCreateJSUnprotectedEventListener(args[1], true); if (!listener) return jsUndefined(); request->m_impl->addEventListener(args[0]->toString(exec), listener, args[2]->toBoolean(exec)); return jsUndefined(); } case JSXMLHttpRequest::RemoveEventListener: { Document* doc = request->m_impl->document(); if (!doc) return jsUndefined(); Frame* frame = doc->frame(); if (!frame) return jsUndefined(); JSUnprotectedEventListener* listener = KJS::Window::retrieveWindow(frame)->findOrCreateJSUnprotectedEventListener(args[1], true); if (!listener) return jsUndefined(); request->m_impl->removeEventListener(args[0]->toString(exec), listener, args[2]->toBoolean(exec)); return jsUndefined(); } case JSXMLHttpRequest::DispatchEvent: { bool result = request->m_impl->dispatchEvent(toEvent(args[0]), ec); setDOMException(exec, ec); return jsBoolean(result); } } return jsUndefined(); }