void HTMLObjectElementImp::eval() { HTMLElementImp::eval(); HTMLElementImp::evalBorder(this); HTMLElementImp::evalHeight(this); HTMLElementImp::evalWidth(this); HTMLElementImp::evalHspace(this); HTMLElementImp::evalVspace(this); if (!active) return; std::u16string classid = getAttribute(u"classid"); if (!classid.empty()) { active = false; return; } std::u16string data = getAttribute(u"data"); if (data.empty()) { active = false; return; } std::u16string type = getAttribute(u"type"); // TODO: Check type is a supported one. DocumentImp* document = getOwnerDocumentImp(); request = new(std::nothrow) HttpRequest(document->getDocumentURI()); if (request) { request->open(u"GET", data); request->setHandler(boost::bind(&HTMLObjectElementImp::notify, this)); document->incrementLoadEventDelayCount(); request->send(); } else active = false; }
void HTMLElementImp::generateShadowContent(CSSStyleDeclarationImp* style) { if (style->binding.getValue() != CSSBindingValueImp::Uri || style->display.getValue() == CSSDisplayValueImp::None) return; if (getShadowTree()) // already attached? return; DocumentImp* document = getOwnerDocumentImp(); assert(document); URL base(document->getDocumentURI()); URL url(base, style->binding.getURL()); if (!base.isSameExceptFragments(url)) { document = dynamic_cast<DocumentImp*>(document->loadBindingDocument(url).self()); if (!document || document->getReadyState() != u"complete") return; } std::u16string hash = url.getHash(); if (hash[0] == '#') hash.erase(0, 1); Element element = document->getElementById(hash); if (!element) return; auto binding = dynamic_cast<HTMLBindingElementImp*>(element.self()); if (!binding) return; bindingImplementation = binding->getImplementation(); if (!bindingImplementation) return; if (html::HTMLTemplateElement shadowTree = binding->cloneTemplate()) { setShadowTree(shadowTree); shadowTarget = new(std::nothrow) EventTargetImp; // TODO: if (not called from the background thread) { #if 0 DocumentWindowPtr window = document->activate(); ECMAScriptContext* context = window->getContext(); shadowImplementation = context->xblCreateImplementation(shadowTarget, bindingImplementation, this, shadowTree); shadowImplementation .xblEnteredDocument(); } #endif }