void HTMLAppletElement::parseMappedAttribute(MappedAttribute *attr) { if (attr->name() == altAttr || attr->name() == archiveAttr || attr->name() == codeAttr || attr->name() == codebaseAttr || attr->name() == mayscriptAttr || attr->name() == objectAttr) { // Do nothing. } else if (attr->name() == nameAttr) { String newNameAttr = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->removeNamedItem(oldNameAttr); doc->addNamedItem(newNameAttr); } oldNameAttr = newNameAttr; } else if (attr->name() == idAttr) { String newIdAttr = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->removeDocExtraNamedItem(oldIdAttr); doc->addDocExtraNamedItem(newIdAttr); } oldIdAttr = newIdAttr; // also call superclass HTMLPlugInElement::parseMappedAttribute(attr); } else HTMLPlugInElement::parseMappedAttribute(attr); }
void HTMLObjectElement::updateDocNamedItem() { // The rule is "<object> elements with no children other than // <param> elements, unknown elements and whitespace can be // found by name in a document, and other <object> elements cannot." bool wasNamedItem = m_docNamedItem; bool isNamedItem = true; Node* child = firstChild(); while (child && isNamedItem) { if (child->isElementNode()) { Element* element = static_cast<Element*>(child); if (HTMLElement::isRecognizedTagName(element->tagQName()) && !element->hasTagName(paramTag)) isNamedItem = false; } else if (child->isTextNode()) { if (!static_cast<Text*>(child)->containsOnlyWhitespace()) isNamedItem = false; } else isNamedItem = false; child = child->nextSibling(); } if (isNamedItem != wasNamedItem && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); if (isNamedItem) { document->addNamedItem(m_name); document->addExtraNamedItem(m_id); } else { document->removeNamedItem(m_name); document->removeExtraNamedItem(m_id); } } m_docNamedItem = isNamedItem; }
void HTMLEmbedElement::parseMappedAttribute(MappedAttribute* attr) { String val = attr->value(); if (attr->name() == typeAttr) { m_serviceType = val.lower(); int pos = m_serviceType.find(";"); if (pos != -1) m_serviceType = m_serviceType.left(pos); } else if (attr->name() == codeAttr || attr->name() == srcAttr) url = parseURL(val).deprecatedString(); else if (attr->name() == pluginpageAttr || attr->name() == pluginspageAttr) m_pluginPage = val; else if (attr->name() == hiddenAttr) { if (val.lower() == "yes" || val.lower() == "true") { // FIXME: Not dynamic, but it's not really important that such a rarely-used // feature work dynamically. addCSSLength(attr, CSS_PROP_WIDTH, "0"); addCSSLength(attr, CSS_PROP_HEIGHT, "0"); } } else if (attr->name() == nameAttr) { if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* doc = static_cast<HTMLDocument*>(document()); doc->removeNamedItem(oldNameAttr); doc->addNamedItem(val); } oldNameAttr = val; } else HTMLPlugInElement::parseMappedAttribute(attr); }
void HTMLAppletElement::parseMappedAttribute(MappedAttribute* attr) { if (attr->name() == altAttr || attr->name() == archiveAttr || attr->name() == codeAttr || attr->name() == codebaseAttr || attr->name() == mayscriptAttr || attr->name() == objectAttr) { // Do nothing. } else if (attr->name() == nameAttr) { const AtomicString& newName = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(newName); } m_name = newName; } else if (attr->name() == idAttr) { const AtomicString& newId = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeExtraNamedItem(m_id); document->addExtraNamedItem(newId); } m_id = newId; // also call superclass HTMLPlugInElement::parseMappedAttribute(attr); } else HTMLPlugInElement::parseMappedAttribute(attr); }
void HTMLFormElement::parseMappedAttribute(Attribute* attr) { if (attr->name() == actionAttr) m_attributes.parseAction(attr->value()); else if (attr->name() == targetAttr) m_attributes.setTarget(attr->value()); else if (attr->name() == methodAttr) m_attributes.parseMethodType(attr->value()); else if (attr->name() == enctypeAttr) m_attributes.parseEncodingType(attr->value()); else if (attr->name() == accept_charsetAttr) m_attributes.setAcceptCharset(attr->value()); else if (attr->name() == autocompleteAttr) { if (!autoComplete()) document()->registerForDocumentActivationCallbacks(this); else document()->unregisterForDocumentActivationCallbacks(this); } else if (attr->name() == onsubmitAttr) setAttributeEventListener(eventNames().submitEvent, createAttributeEventListener(this, attr)); else if (attr->name() == onresetAttr) setAttributeEventListener(eventNames().resetEvent, createAttributeEventListener(this, attr)); else if (attr->name() == nameAttr) { const AtomicString& newName = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(newName); } m_name = newName; } else HTMLElement::parseMappedAttribute(attr); }
void HTMLEmbedElement::parseMappedAttribute(MappedAttribute* attr) { const AtomicString& value = attr->value(); if (attr->name() == typeAttr) { m_serviceType = value.string().lower(); int pos = m_serviceType.find(";"); if (pos != -1) m_serviceType = m_serviceType.left(pos); } else if (attr->name() == codeAttr || attr->name() == srcAttr) m_url = parseURL(value.string()); else if (attr->name() == pluginpageAttr || attr->name() == pluginspageAttr) m_pluginPage = value; else if (attr->name() == hiddenAttr) { if (equalIgnoringCase(value.string(), "yes") || equalIgnoringCase(value.string(), "true")) { // FIXME: Not dynamic, since we add this but don't remove it, but it may be OK for now // that this rarely-used attribute won't work properly if you remove it. addCSSLength(attr, CSSPropertyWidth, "0"); addCSSLength(attr, CSSPropertyHeight, "0"); } } else if (attr->name() == nameAttr) { if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(value); } m_name = value; } else HTMLPlugInElement::parseMappedAttribute(attr); }
void HTMLObjectElement::updateDocNamedItem() { // The rule is "<object> elements with no children other than // <param> elements and whitespace can be found by name in a // document, and other <object> elements cannot." bool wasNamedItem = m_docNamedItem; bool isNamedItem = true; Node* child = firstChild(); while (child && isNamedItem) { if (child->isElementNode()) { if (!static_cast<Element*>(child)->hasTagName(paramTag)) isNamedItem = false; } else if (child->isTextNode()) { if (!static_cast<Text*>(child)->containsOnlyWhitespace()) isNamedItem = false; } else isNamedItem = false; child = child->nextSibling(); } if (isNamedItem != wasNamedItem && document()->isHTMLDocument()) { HTMLDocument* doc = static_cast<HTMLDocument*>(document()); if (isNamedItem) { doc->addNamedItem(oldNameAttr); doc->addDocExtraNamedItem(oldIdAttr); } else { doc->removeNamedItem(oldNameAttr); doc->removeDocExtraNamedItem(oldIdAttr); } } m_docNamedItem = isNamedItem; }
void HTMLFormElement::insertedIntoDocument() { if (document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->addNamedItem(oldNameAttr); } HTMLElement::insertedIntoDocument(); }
void HTMLImageElement::parseMappedAttribute(Attribute* attr) { const QualifiedName& attrName = attr->name(); if (attrName == altAttr) { if (renderer() && renderer()->isImage()) toRenderImage(renderer())->updateAltText(); } else if (attrName == srcAttr) m_imageLoader.updateFromElementIgnoringPreviousError(); else if (attrName == widthAttr) addCSSLength(attr, CSSPropertyWidth, attr->value()); else if (attrName == heightAttr) addCSSLength(attr, CSSPropertyHeight, attr->value()); else if (attrName == borderAttr) { // border="noborder" -> border="0" applyBorderAttribute(attr); } else if (attrName == vspaceAttr) { addCSSLength(attr, CSSPropertyMarginTop, attr->value()); addCSSLength(attr, CSSPropertyMarginBottom, attr->value()); } else if (attrName == hspaceAttr) { addCSSLength(attr, CSSPropertyMarginLeft, attr->value()); addCSSLength(attr, CSSPropertyMarginRight, attr->value()); } else if (attrName == alignAttr) addHTMLAlignment(attr); else if (attrName == valignAttr) addCSSProperty(attr, CSSPropertyVerticalAlign, attr->value()); else if (attrName == usemapAttr) setIsLink(!attr->isNull()); else if (attrName == onabortAttr) setAttributeEventListener(eventNames().abortEvent, createAttributeEventListener(this, attr)); else if (attrName == onloadAttr) setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attr)); else if (attrName == onbeforeloadAttr) setAttributeEventListener(eventNames().beforeloadEvent, createAttributeEventListener(this, attr)); else if (attrName == compositeAttr) { if (!parseCompositeOperator(attr->value(), m_compositeOperator)) m_compositeOperator = CompositeSourceOver; } else if (attrName == nameAttr) { const AtomicString& newName = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(newName); } m_name = newName; } else if (isIdAttributeName(attr->name())) { const AtomicString& newId = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeExtraNamedItem(m_id); document->addExtraNamedItem(newId); } m_id = newId; // also call superclass HTMLElement::parseMappedAttribute(attr); } else HTMLElement::parseMappedAttribute(attr); }
void HTMLObjectElement::parseMappedAttribute(Attribute* attr) { if (attr->name() == typeAttr) { m_serviceType = attr->value().lower(); size_t pos = m_serviceType.find(";"); if (pos != notFound) m_serviceType = m_serviceType.left(pos); if (renderer()) setNeedsWidgetUpdate(true); if (!isImageType() && m_imageLoader) m_imageLoader.clear(); } else if (attr->name() == dataAttr) { m_url = stripLeadingAndTrailingHTMLSpaces(attr->value()); if (renderer()) { setNeedsWidgetUpdate(true); if (isImageType()) { if (!m_imageLoader) m_imageLoader = adoptPtr(new HTMLImageLoader(this)); m_imageLoader->updateFromElementIgnoringPreviousError(); } } } else if (attr->name() == classidAttr) { m_classId = attr->value(); if (renderer()) setNeedsWidgetUpdate(true); } else if (attr->name() == onloadAttr) setAttributeEventListener(eventNames().loadEvent, NULL_METHOD_RESULT(this, attr)); else if (attr->name() == onbeforeloadAttr) setAttributeEventListener(eventNames().beforeloadEvent, NULL_METHOD_RESULT(this, attr)); else if (attr->name() == nameAttr) { const AtomicString& newName = attr->value(); if (isDocNamedItem() && inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(newName); } m_name = newName; } else if (attr->name() == borderAttr) { addCSSLength(attr, CSSPropertyBorderWidth, attr->value().toInt() ? attr->value() : "0"); addCSSProperty(attr, CSSPropertyBorderTopStyle, CSSValueSolid); addCSSProperty(attr, CSSPropertyBorderRightStyle, CSSValueSolid); addCSSProperty(attr, CSSPropertyBorderBottomStyle, CSSValueSolid); addCSSProperty(attr, CSSPropertyBorderLeftStyle, CSSValueSolid); } else if (isIdAttributeName(attr->name())) { const AtomicString& newId = attr->value(); if (isDocNamedItem() && inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeExtraNamedItem(m_id); document->addExtraNamedItem(newId); } m_id = newId; // also call superclass HTMLPlugInImageElement::parseMappedAttribute(attr); } else HTMLPlugInImageElement::parseMappedAttribute(attr); }
void HTMLImageElement::insertedIntoDocument() { if (document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->addNamedItem(m_name); document->addExtraNamedItem(m_id); } HTMLElement::insertedIntoDocument(); }
void HTMLAppletElement::insertedIntoDocument() { if (document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->addNamedItem(oldNameAttr); doc->addDocExtraNamedItem(oldIdAttr); } HTMLPlugInElement::insertedIntoDocument(); }
void HTMLObjectElement::insertedIntoDocument() { if (isDocNamedItem() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->addNamedItem(m_name); document->addExtraNamedItem(m_id); } HTMLPlugInElement::insertedIntoDocument(); }
void HTMLObjectElement::parseMappedAttribute(MappedAttribute *attr) { String val = attr->value(); int pos; if (attr->name() == typeAttr) { m_serviceType = val.lower(); pos = m_serviceType.find(";"); if (pos != -1) m_serviceType = m_serviceType.left(pos); if (renderer()) m_needWidgetUpdate = true; if (!isImageType() && m_imageLoader) { delete m_imageLoader; m_imageLoader = 0; } } else if (attr->name() == dataAttr) { m_url = parseURL(val); if (renderer()) m_needWidgetUpdate = true; if (renderer() && isImageType()) { if (!m_imageLoader) m_imageLoader = new HTMLImageLoader(this); m_imageLoader->updateFromElement(); } } else if (attr->name() == classidAttr) { m_classId = val; if (renderer()) m_needWidgetUpdate = true; } else if (attr->name() == onloadAttr) { setHTMLEventListener(loadEvent, attr); } else if (attr->name() == onunloadAttr) { setHTMLEventListener(unloadEvent, attr); } else if (attr->name() == nameAttr) { String newNameAttr = attr->value(); if (isDocNamedItem() && inDocument() && document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->removeNamedItem(oldNameAttr); doc->addNamedItem(newNameAttr); } oldNameAttr = newNameAttr; } else if (attr->name() == idAttr) { String newIdAttr = attr->value(); if (isDocNamedItem() && inDocument() && document()->isHTMLDocument()) { HTMLDocument* doc = static_cast<HTMLDocument*>(document()); doc->removeDocExtraNamedItem(oldIdAttr); doc->addDocExtraNamedItem(newIdAttr); } oldIdAttr = newIdAttr; // also call superclass HTMLPlugInElement::parseMappedAttribute(attr); } else HTMLPlugInElement::parseMappedAttribute(attr); }
void HTMLObjectElement::parseMappedAttribute(Attribute* attr) { String val = attr->value(); int pos; if (attr->name() == typeAttr) { m_serviceType = val.lower(); pos = m_serviceType.find(";"); if (pos != -1) m_serviceType = m_serviceType.left(pos); if (renderer()) m_needWidgetUpdate = true; if (!isImageType() && m_imageLoader) m_imageLoader.clear(); } else if (attr->name() == dataAttr) { m_url = deprecatedParseURL(val); if (renderer()) m_needWidgetUpdate = true; if (renderer() && isImageType()) { if (!m_imageLoader) m_imageLoader.set(new HTMLImageLoader(this)); m_imageLoader->updateFromElementIgnoringPreviousError(); } } else if (attr->name() == classidAttr) { m_classId = val; if (renderer()) m_needWidgetUpdate = true; } else if (attr->name() == onloadAttr) setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attr)); else if (attr->name() == onbeforeloadAttr) setAttributeEventListener(eventNames().beforeloadEvent, createAttributeEventListener(this, attr)); else if (attr->name() == nameAttr) { const AtomicString& newName = attr->value(); if (isDocNamedItem() && inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(newName); } m_name = newName; } else if (isIdAttributeName(attr->name())) { const AtomicString& newId = attr->value(); if (isDocNamedItem() && inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeExtraNamedItem(m_id); document->addExtraNamedItem(newId); } m_id = newId; // also call superclass HTMLPlugInElement::parseMappedAttribute(attr); } else HTMLPlugInElement::parseMappedAttribute(attr); }
void HTMLObjectElement::insertedIntoDocument() { HTMLPlugInImageElement::insertedIntoDocument(); if (!inDocument()) return; if (isDocNamedItem() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->addNamedItem(m_name); document->addExtraNamedItem(m_id); } FormAssociatedElement::insertedIntoDocument(); }
void HTMLImageElement::insertedIntoDocument() { if (document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->addNamedItem(m_name); document->addExtraNamedItem(m_id); } // If we have been inserted from a renderer-less document, // our loader may have not fetched the image, so do it now. if (!m_imageLoader.image()) m_imageLoader.updateFromElement(); HTMLElement::insertedIntoDocument(); }
void HTMLFormElement::parseMappedAttribute(MappedAttribute *attr) { if (attr->name() == actionAttr) { bool oldURLWasSecure = formWouldHaveSecureSubmission(m_url); m_url = parseURL(attr->value()); bool newURLIsSecure = formWouldHaveSecureSubmission(m_url); if (m_attached && (oldURLWasSecure != newURLIsSecure)) if (newURLIsSecure) document()->secureFormAdded(); else document()->secureFormRemoved(); } else if (attr->name() == targetAttr) m_target = attr->value(); else if (attr->name() == methodAttr) { if (equalIgnoringCase(attr->value(), "post")) m_post = true; else if (equalIgnoringCase(attr->value(), "get")) m_post = false; } else if (attr->name() == enctypeAttr) parseEnctype(attr->value()); else if (attr->name() == accept_charsetAttr) // space separated list of charsets the server // accepts - see rfc2045 m_acceptcharset = attr->value(); else if (attr->name() == acceptAttr) { // ignore this one for the moment... } else if (attr->name() == autocompleteAttr) m_autocomplete = !equalIgnoringCase(attr->value(), "off"); else if (attr->name() == onsubmitAttr) setHTMLEventListener(submitEvent, attr); else if (attr->name() == onresetAttr) setHTMLEventListener(resetEvent, attr); else if (attr->name() == nameAttr) { String newNameAttr = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->removeNamedItem(oldNameAttr); doc->addNamedItem(newNameAttr); } oldNameAttr = newNameAttr; } else HTMLElement::parseMappedAttribute(attr); }
void HTMLImageElement::insertedIntoDocument() { if (document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->addNamedItem(m_name); document->addExtraNamedItem(m_id); } // If we have been inserted from a renderer-less document, // our loader may have not fetched the image, so do it now. if (!m_imageLoader.image()) m_imageLoader.updateFromElement(); HTMLElement::insertedIntoDocument(); Request* req = cache()->loader()->requestForUrl(src().string()); if (!req) return; req->setNode(PassRefPtr<Node>(this)); }
void HTMLEmbedElement::insertedIntoDocument() { if (document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->addNamedItem(oldNameAttr); } String width = getAttribute(widthAttr); String height = getAttribute(heightAttr); if (!width.isEmpty() || !height.isEmpty()) { Node* n = parent(); while (n && !n->hasTagName(objectTag)) n = n->parent(); if (n) { if (!width.isEmpty()) static_cast<HTMLObjectElement*>(n)->setAttribute(widthAttr, width); if (!height.isEmpty()) static_cast<HTMLObjectElement*>(n)->setAttribute(heightAttr, height); } } HTMLPlugInElement::insertedIntoDocument(); }
void HTMLFormElement::parseMappedAttribute(Attribute* attr) { if (attr->name() == actionAttr) m_attributes.parseAction(attr->value()); else if (attr->name() == targetAttr) m_attributes.setTarget(attr->value()); else if (attr->name() == methodAttr) m_attributes.parseMethodType(attr->value()); else if (attr->name() == enctypeAttr) m_attributes.parseEncodingType(attr->value()); else if (attr->name() == accept_charsetAttr) // space separated list of charsets the server // accepts - see rfc2045 m_attributes.setAcceptCharset(attr->value()); else if (attr->name() == acceptAttr) { // ignore this one for the moment... } else if (attr->name() == autocompleteAttr) { m_autocomplete = !equalIgnoringCase(attr->value(), "off"); if (!m_autocomplete) document()->registerForDocumentActivationCallbacks(this); else document()->unregisterForDocumentActivationCallbacks(this); } else if (attr->name() == onsubmitAttr) setAttributeEventListener(eventNames().submitEvent, createAttributeEventListener(this, attr)); else if (attr->name() == onresetAttr) setAttributeEventListener(eventNames().resetEvent, createAttributeEventListener(this, attr)); else if (attr->name() == nameAttr) { const AtomicString& newName = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(newName); } m_name = newName; } else HTMLElement::parseMappedAttribute(attr); }
void HTMLEmbedElement::parseMappedAttribute(Attribute* attr) { const AtomicString& value = attr->value(); if (attr->name() == typeAttr) { m_serviceType = value.string().lower(); size_t pos = m_serviceType.find(";"); if (pos != notFound) m_serviceType = m_serviceType.left(pos); if (!isImageType() && m_imageLoader) m_imageLoader.clear(); } else if (attr->name() == codeAttr) m_url = stripLeadingAndTrailingHTMLSpaces(value.string()); else if (attr->name() == srcAttr) { m_url = stripLeadingAndTrailingHTMLSpaces(value.string()); if (renderer() && isImageType()) { if (!m_imageLoader) m_imageLoader = adoptPtr(new HTMLImageLoader(this)); m_imageLoader->updateFromElementIgnoringPreviousError(); } } else if (attr->name() == hiddenAttr) { if (equalIgnoringCase(value.string(), "yes") || equalIgnoringCase(value.string(), "true")) { // FIXME: Not dynamic, since we add this but don't remove it, but it may be OK for now // that this rarely-used attribute won't work properly if you remove it. addCSSLength(attr, CSSPropertyWidth, "0"); addCSSLength(attr, CSSPropertyHeight, "0"); } } else if (attr->name() == nameAttr) { if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(value); } m_name = value; } else HTMLPlugInImageElement::parseMappedAttribute(attr); }
void HTMLImageElement::parseMappedAttribute(MappedAttribute* attr) { const QualifiedName& attrName = attr->name(); if (attrName == altAttr) { if (renderer() && renderer()->isImage()) static_cast<RenderImage*>(renderer())->updateAltText(); } else if (attrName == srcAttr) m_imageLoader.updateFromElement(); else if (attrName == widthAttr) addCSSLength(attr, CSSPropertyWidth, attr->value()); else if (attrName == heightAttr) addCSSLength(attr, CSSPropertyHeight, attr->value()); else if (attrName == borderAttr) { // border="noborder" -> border="0" addCSSLength(attr, CSSPropertyBorderWidth, attr->value().toInt() ? attr->value() : "0"); addCSSProperty(attr, CSSPropertyBorderTopStyle, CSSValueSolid); addCSSProperty(attr, CSSPropertyBorderRightStyle, CSSValueSolid); addCSSProperty(attr, CSSPropertyBorderBottomStyle, CSSValueSolid); addCSSProperty(attr, CSSPropertyBorderLeftStyle, CSSValueSolid); } else if (attrName == vspaceAttr) { addCSSLength(attr, CSSPropertyMarginTop, attr->value()); addCSSLength(attr, CSSPropertyMarginBottom, attr->value()); } else if (attrName == hspaceAttr) { addCSSLength(attr, CSSPropertyMarginLeft, attr->value()); addCSSLength(attr, CSSPropertyMarginRight, attr->value()); } else if (attrName == alignAttr) addHTMLAlignment(attr); else if (attrName == valignAttr) addCSSProperty(attr, CSSPropertyVerticalAlign, attr->value()); else if (attrName == usemapAttr) { if (attr->value().string()[0] == '#') usemap = attr->value(); else usemap = document()->completeURL(parseURL(attr->value())).string(); setIsLink(!attr->isNull()); } else if (attrName == ismapAttr) ismap = true; else if (attrName == onabortAttr) setInlineEventListenerForTypeAndAttribute(eventNames().abortEvent, attr); else if (attrName == onloadAttr) setInlineEventListenerForTypeAndAttribute(eventNames().loadEvent, attr); else if (attrName == compositeAttr) { if (!parseCompositeOperator(attr->value(), m_compositeOperator)) m_compositeOperator = CompositeSourceOver; } else if (attrName == nameAttr) { const AtomicString& newName = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeNamedItem(m_name); document->addNamedItem(newName); } m_name = newName; } else if (attr->name() == idAttr) { const AtomicString& newId = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* document = static_cast<HTMLDocument*>(this->document()); document->removeExtraNamedItem(m_id); document->addExtraNamedItem(newId); } m_id = newId; // also call superclass HTMLElement::parseMappedAttribute(attr); } else HTMLElement::parseMappedAttribute(attr); }
void HTMLImageElement::parseMappedAttribute(MappedAttribute* attr) { const QualifiedName& attrName = attr->name(); if (attrName == altAttr) { if (renderer() && renderer()->isImage()) static_cast<RenderImage*>(renderer())->updateAltText(); } else if (attrName == srcAttr) m_imageLoader.updateFromElement(); else if (attrName == widthAttr) addCSSLength(attr, CSS_PROP_WIDTH, attr->value()); else if (attrName == heightAttr) addCSSLength(attr, CSS_PROP_HEIGHT, attr->value()); else if (attrName == borderAttr) { // border="noborder" -> border="0" if(attr->value().toInt()) { addCSSLength(attr, CSS_PROP_BORDER_WIDTH, attr->value()); addCSSProperty(attr, CSS_PROP_BORDER_TOP_STYLE, CSS_VAL_SOLID); addCSSProperty(attr, CSS_PROP_BORDER_RIGHT_STYLE, CSS_VAL_SOLID); addCSSProperty(attr, CSS_PROP_BORDER_BOTTOM_STYLE, CSS_VAL_SOLID); addCSSProperty(attr, CSS_PROP_BORDER_LEFT_STYLE, CSS_VAL_SOLID); } } else if (attrName == vspaceAttr) { addCSSLength(attr, CSS_PROP_MARGIN_TOP, attr->value()); addCSSLength(attr, CSS_PROP_MARGIN_BOTTOM, attr->value()); } else if (attrName == hspaceAttr) { addCSSLength(attr, CSS_PROP_MARGIN_LEFT, attr->value()); addCSSLength(attr, CSS_PROP_MARGIN_RIGHT, attr->value()); } else if (attrName == alignAttr) addHTMLAlignment(attr); else if (attrName == valignAttr) addCSSProperty(attr, CSS_PROP_VERTICAL_ALIGN, attr->value()); else if (attrName == usemapAttr) { if (attr->value().domString()[0] == '#') usemap = attr->value(); else usemap = document()->completeURL(parseURL(attr->value())); m_isLink = !attr->isNull(); } else if (attrName == ismapAttr) ismap = true; else if (attrName == onabortAttr) setHTMLEventListener(abortEvent, attr); else if (attrName == onloadAttr) setHTMLEventListener(loadEvent, attr); else if (attrName == compositeAttr) { if (!parseCompositeOperator(attr->value(), m_compositeOperator)) m_compositeOperator = CompositeSourceOver; } else if (attrName == nameAttr) { String newNameAttr = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument* doc = static_cast<HTMLDocument*>(document()); doc->removeNamedItem(oldNameAttr); doc->addNamedItem(newNameAttr); } oldNameAttr = newNameAttr; } else if (attr->name() == idAttr) { String newIdAttr = attr->value(); if (inDocument() && document()->isHTMLDocument()) { HTMLDocument *doc = static_cast<HTMLDocument *>(document()); doc->removeDocExtraNamedItem(oldIdAttr); doc->addDocExtraNamedItem(newIdAttr); } oldIdAttr = newIdAttr; // also call superclass HTMLElement::parseMappedAttribute(attr); } else HTMLElement::parseMappedAttribute(attr); }
void CachedFrameBase::restore() { ASSERT(m_document->view() == m_view); Frame* frame = m_view->frame(); m_cachedFrameScriptData->restore(frame); #if ENABLE(SVG) if (m_document->svgExtensions()) m_document->accessSVGExtensions()->unpauseAnimations(); #endif frame->animation()->resumeAnimationsForDocument(m_document.get()); frame->eventHandler()->setMousePressNode(m_mousePressNode.get()); m_document->resumeActiveDOMObjects(); m_document->resumeScriptedAnimationControllerCallbacks(); // It is necessary to update any platform script objects after restoring the // cached page. frame->script()->updatePlatformScriptObjects(); frame->loader()->client()->didRestoreFromPageCache(); // Reconstruct the FrameTree for (unsigned i = 0; i < m_childFrames.size(); ++i) frame->tree()->appendChild(m_childFrames[i]->view()->frame()); // Open the child CachedFrames in their respective FrameLoaders. for (unsigned i = 0; i < m_childFrames.size(); ++i) m_childFrames[i]->open(); m_document->enqueuePageshowEvent(PageshowEventPersisted); HistoryItem* historyItem = frame->loader()->history()->currentItem(); m_document->enqueuePopstateEvent(historyItem && historyItem->stateObject() ? historyItem->stateObject() : SerializedScriptValue::nullValue()); #if ENABLE(TOUCH_EVENTS) if (m_document->hasListenerType(Document::TOUCH_LISTENER)) m_document->page()->chrome()->client()->needTouchEvents(true); #endif // CAPPFIX_WEB_NAMEDITEM_HISTORY_NAV : recover NamedItem for history navigation in case of HTMLDocument. Document* document = m_document.get(); if (document && document->isHTMLDocument() == true) { HTMLDocument* htmldocument = static_cast<HTMLDocument*>(document); RefPtr<HTMLCollection> items = document->all();; Node* item; for (unsigned i = 0; i < items->length(); i++) { item = items->item(i); if (!item->isElementNode()) continue; Element* e = static_cast<Element*>(item); if (e->hasLocalName(HTMLNames::imgTag) || e->hasLocalName(HTMLNames::formTag) || e->hasLocalName(HTMLNames::objectTag) || e->hasLocalName(HTMLNames::embedTag) || e->hasLocalName(HTMLNames::appletTag)) { const AtomicString &name = e->getAttribute(HTMLNames::nameAttr); if (name != nullAtom) htmldocument->addNamedItem(name); } } } // CAPPFIX_WEB_NAMEDITEM_HISTORY_NAV_END m_document->documentDidBecomeActive(); }