OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Peter Kelly (pmk@post.com) | 4 * (C) 2001 Peter Kelly (pmk@post.com) |
5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
6 * (C) 2007 David Smith (catfish.man@gmail.com) | 6 * (C) 2007 David Smith (catfish.man@gmail.com) |
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. | 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. |
8 * All rights reserved. | 8 * All rights reserved. |
9 * (C) 2007 Eric Seidel (eric@webkit.org) | 9 * (C) 2007 Eric Seidel (eric@webkit.org) |
10 * | 10 * |
(...skipping 1435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 return true; | 1446 return true; |
1447 } | 1447 } |
1448 } | 1448 } |
1449 | 1449 |
1450 if (name == HTMLNames::classAttr) { | 1450 if (name == HTMLNames::classAttr) { |
1451 const AtomicString& newClassString = newValue; | 1451 const AtomicString& newClassString = newValue; |
1452 if (classStringHasClassName(newClassString) == | 1452 if (classStringHasClassName(newClassString) == |
1453 ClassStringContent::HasClasses) { | 1453 ClassStringContent::HasClasses) { |
1454 const SpaceSplitString& oldClasses = elementData()->classNames(); | 1454 const SpaceSplitString& oldClasses = elementData()->classNames(); |
1455 const SpaceSplitString newClasses( | 1455 const SpaceSplitString newClasses( |
1456 newClassString, document().inQuirksMode() | 1456 newClassString, |
1457 ? SpaceSplitString::ShouldFoldCase | 1457 document().inQuirksMode() ? SpaceSplitString::ShouldFoldCase |
1458 : SpaceSplitString::ShouldNotFoldCase); | 1458 : SpaceSplitString::ShouldNotFoldCase); |
1459 if (featureSet.checkSelectorsForClassChange(oldClasses, newClasses)) | 1459 if (featureSet.checkSelectorsForClassChange(oldClasses, newClasses)) |
1460 return true; | 1460 return true; |
1461 } else { | 1461 } else { |
1462 const SpaceSplitString& oldClasses = elementData()->classNames(); | 1462 const SpaceSplitString& oldClasses = elementData()->classNames(); |
1463 if (featureSet.checkSelectorsForClassChange(oldClasses)) | 1463 if (featureSet.checkSelectorsForClassChange(oldClasses)) |
1464 return true; | 1464 return true; |
1465 } | 1465 } |
1466 } | 1466 } |
1467 | 1467 |
1468 return featureSet.hasSelectorForAttribute(name.localName()); | 1468 return featureSet.hasSelectorForAttribute(name.localName()); |
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2122 return; | 2122 return; |
2123 if (ElementAnimations* elementAnimations = | 2123 if (ElementAnimations* elementAnimations = |
2124 elementRareData()->elementAnimations()) | 2124 elementRareData()->elementAnimations()) |
2125 elementAnimations->setAnimationStyleChange(false); | 2125 elementAnimations->setAnimationStyleChange(false); |
2126 } | 2126 } |
2127 | 2127 |
2128 void Element::setNeedsAnimationStyleRecalc() { | 2128 void Element::setNeedsAnimationStyleRecalc() { |
2129 if (getStyleChangeType() != NoStyleChange) | 2129 if (getStyleChangeType() != NoStyleChange) |
2130 return; | 2130 return; |
2131 | 2131 |
2132 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::create( | 2132 setNeedsStyleRecalc( |
2133 StyleChangeReason::Animation)); | 2133 LocalStyleChange, |
| 2134 StyleChangeReasonForTracing::create(StyleChangeReason::Animation)); |
2134 setAnimationStyleChange(true); | 2135 setAnimationStyleChange(true); |
2135 } | 2136 } |
2136 | 2137 |
2137 void Element::setNeedsCompositingUpdate() { | 2138 void Element::setNeedsCompositingUpdate() { |
2138 if (!document().isActive()) | 2139 if (!document().isActive()) |
2139 return; | 2140 return; |
2140 LayoutBoxModelObject* layoutObject = layoutBoxModelObject(); | 2141 LayoutBoxModelObject* layoutObject = layoutBoxModelObject(); |
2141 if (!layoutObject) | 2142 if (!layoutObject) |
2142 return; | 2143 return; |
2143 if (!layoutObject->hasLayer()) | 2144 if (!layoutObject->hasLayer()) |
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2908 if (equalIgnoringCase(where, "afterEnd")) { | 2909 if (equalIgnoringCase(where, "afterEnd")) { |
2909 if (ContainerNode* parent = this->parentNode()) { | 2910 if (ContainerNode* parent = this->parentNode()) { |
2910 parent->insertBefore(newChild, nextSibling(), exceptionState); | 2911 parent->insertBefore(newChild, nextSibling(), exceptionState); |
2911 if (!exceptionState.hadException()) | 2912 if (!exceptionState.hadException()) |
2912 return newChild; | 2913 return newChild; |
2913 } | 2914 } |
2914 return nullptr; | 2915 return nullptr; |
2915 } | 2916 } |
2916 | 2917 |
2917 exceptionState.throwDOMException( | 2918 exceptionState.throwDOMException( |
2918 SyntaxError, "The value provided ('" + where + | 2919 SyntaxError, |
2919 "') is not one of 'beforeBegin', 'afterBegin', " | 2920 "The value provided ('" + where + |
2920 "'beforeEnd', or 'afterEnd'."); | 2921 "') is not one of 'beforeBegin', 'afterBegin', " |
| 2922 "'beforeEnd', or 'afterEnd'."); |
2921 return nullptr; | 2923 return nullptr; |
2922 } | 2924 } |
2923 | 2925 |
2924 ElementIntersectionObserverData* Element::intersectionObserverData() const { | 2926 ElementIntersectionObserverData* Element::intersectionObserverData() const { |
2925 if (hasRareData()) | 2927 if (hasRareData()) |
2926 return elementRareData()->intersectionObserverData(); | 2928 return elementRareData()->intersectionObserverData(); |
2927 return nullptr; | 2929 return nullptr; |
2928 } | 2930 } |
2929 | 2931 |
2930 ElementIntersectionObserverData& Element::ensureIntersectionObserverData() { | 2932 ElementIntersectionObserverData& Element::ensureIntersectionObserverData() { |
(...skipping 30 matching lines...) Expand all Loading... |
2961 exceptionState.throwDOMException(NoModificationAllowedError, | 2963 exceptionState.throwDOMException(NoModificationAllowedError, |
2962 "The element has no parent."); | 2964 "The element has no parent."); |
2963 return nullptr; | 2965 return nullptr; |
2964 } | 2966 } |
2965 return parent; | 2967 return parent; |
2966 } | 2968 } |
2967 if (equalIgnoringCase(where, "afterBegin") || | 2969 if (equalIgnoringCase(where, "afterBegin") || |
2968 equalIgnoringCase(where, "beforeEnd")) | 2970 equalIgnoringCase(where, "beforeEnd")) |
2969 return element; | 2971 return element; |
2970 exceptionState.throwDOMException( | 2972 exceptionState.throwDOMException( |
2971 SyntaxError, "The value provided ('" + where + | 2973 SyntaxError, |
2972 "') is not one of 'beforeBegin', 'afterBegin', " | 2974 "The value provided ('" + where + |
2973 "'beforeEnd', or 'afterEnd'."); | 2975 "') is not one of 'beforeBegin', 'afterBegin', " |
| 2976 "'beforeEnd', or 'afterEnd'."); |
2974 return nullptr; | 2977 return nullptr; |
2975 } | 2978 } |
2976 | 2979 |
2977 Element* Element::insertAdjacentElement(const String& where, | 2980 Element* Element::insertAdjacentElement(const String& where, |
2978 Element* newChild, | 2981 Element* newChild, |
2979 ExceptionState& exceptionState) { | 2982 ExceptionState& exceptionState) { |
2980 Node* returnValue = insertAdjacent(where, newChild, exceptionState); | 2983 Node* returnValue = insertAdjacent(where, newChild, exceptionState); |
2981 return toElement(returnValue); | 2984 return toElement(returnValue); |
2982 } | 2985 } |
2983 | 2986 |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3163 | 3166 |
3164 if (!pseudoElementSpecifier) | 3167 if (!pseudoElementSpecifier) |
3165 return elementStyle; | 3168 return elementStyle; |
3166 | 3169 |
3167 if (ComputedStyle* pseudoElementStyle = | 3170 if (ComputedStyle* pseudoElementStyle = |
3168 elementStyle->getCachedPseudoStyle(pseudoElementSpecifier)) | 3171 elementStyle->getCachedPseudoStyle(pseudoElementSpecifier)) |
3169 return pseudoElementStyle; | 3172 return pseudoElementStyle; |
3170 | 3173 |
3171 RefPtr<ComputedStyle> result = | 3174 RefPtr<ComputedStyle> result = |
3172 document().ensureStyleResolver().pseudoStyleForElement( | 3175 document().ensureStyleResolver().pseudoStyleForElement( |
3173 this, PseudoStyleRequest(pseudoElementSpecifier, | 3176 this, |
3174 PseudoStyleRequest::ForComputedStyle), | 3177 PseudoStyleRequest(pseudoElementSpecifier, |
| 3178 PseudoStyleRequest::ForComputedStyle), |
3175 elementStyle); | 3179 elementStyle); |
3176 DCHECK(result); | 3180 DCHECK(result); |
3177 return elementStyle->addCachedPseudoStyle(result.release()); | 3181 return elementStyle->addCachedPseudoStyle(result.release()); |
3178 } | 3182 } |
3179 | 3183 |
3180 AtomicString Element::computeInheritedLanguage() const { | 3184 AtomicString Element::computeInheritedLanguage() const { |
3181 const Node* n = this; | 3185 const Node* n = this; |
3182 AtomicString value; | 3186 AtomicString value; |
3183 // The language property is inherited, so we iterate over the parents to find | 3187 // The language property is inherited, so we iterate over the parents to find |
3184 // the first language. | 3188 // the first language. |
(...skipping 25 matching lines...) Expand all Loading... |
3210 | 3214 |
3211 void Element::cancelFocusAppearanceUpdate() { | 3215 void Element::cancelFocusAppearanceUpdate() { |
3212 if (document().focusedElement() == this) | 3216 if (document().focusedElement() == this) |
3213 document().cancelFocusAppearanceUpdate(); | 3217 document().cancelFocusAppearanceUpdate(); |
3214 } | 3218 } |
3215 | 3219 |
3216 void Element::updatePseudoElement(PseudoId pseudoId, StyleRecalcChange change) { | 3220 void Element::updatePseudoElement(PseudoId pseudoId, StyleRecalcChange change) { |
3217 DCHECK(!needsStyleRecalc()); | 3221 DCHECK(!needsStyleRecalc()); |
3218 PseudoElement* element = pseudoElement(pseudoId); | 3222 PseudoElement* element = pseudoElement(pseudoId); |
3219 | 3223 |
3220 if (element && (change == UpdatePseudoElements || | 3224 if (element && |
3221 element->shouldCallRecalcStyle(change))) { | 3225 (change == UpdatePseudoElements || |
| 3226 element->shouldCallRecalcStyle(change))) { |
3222 if (pseudoId == PseudoIdFirstLetter && updateFirstLetter(element)) | 3227 if (pseudoId == PseudoIdFirstLetter && updateFirstLetter(element)) |
3223 return; | 3228 return; |
3224 | 3229 |
3225 // Need to clear the cached style if the PseudoElement wants a recalc so it | 3230 // Need to clear the cached style if the PseudoElement wants a recalc so it |
3226 // computes a new style. | 3231 // computes a new style. |
3227 if (element->needsStyleRecalc()) | 3232 if (element->needsStyleRecalc()) |
3228 layoutObject()->mutableStyle()->removeCachedPseudoStyle(pseudoId); | 3233 layoutObject()->mutableStyle()->removeCachedPseudoStyle(pseudoId); |
3229 | 3234 |
3230 // PseudoElement styles hang off their parent element's style so if we | 3235 // PseudoElement styles hang off their parent element's style so if we |
3231 // needed a style recalc we should Force one on the pseudo. FIXME: We | 3236 // needed a style recalc we should Force one on the pseudo. FIXME: We |
(...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3902 elementData()->m_styleAttributeIsDirty = false; | 3907 elementData()->m_styleAttributeIsDirty = false; |
3903 | 3908 |
3904 setNeedsStyleRecalc( | 3909 setNeedsStyleRecalc( |
3905 LocalStyleChange, | 3910 LocalStyleChange, |
3906 StyleChangeReasonForTracing::create(StyleChangeReason::StyleSheetChange)); | 3911 StyleChangeReasonForTracing::create(StyleChangeReason::StyleSheetChange)); |
3907 InspectorInstrumentation::didInvalidateStyleAttr(this); | 3912 InspectorInstrumentation::didInvalidateStyleAttr(this); |
3908 } | 3913 } |
3909 | 3914 |
3910 void Element::inlineStyleChanged() { | 3915 void Element::inlineStyleChanged() { |
3911 DCHECK(isStyledElement()); | 3916 DCHECK(isStyledElement()); |
3912 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::create( | 3917 setNeedsStyleRecalc( |
3913 StyleChangeReason::Inline)); | 3918 LocalStyleChange, |
| 3919 StyleChangeReasonForTracing::create(StyleChangeReason::Inline)); |
3914 DCHECK(elementData()); | 3920 DCHECK(elementData()); |
3915 elementData()->m_styleAttributeIsDirty = true; | 3921 elementData()->m_styleAttributeIsDirty = true; |
3916 InspectorInstrumentation::didInvalidateStyleAttr(this); | 3922 InspectorInstrumentation::didInvalidateStyleAttr(this); |
3917 | 3923 |
3918 if (MutationObserverInterestGroup* recipients = | 3924 if (MutationObserverInterestGroup* recipients = |
3919 MutationObserverInterestGroup::createForAttributesMutation( | 3925 MutationObserverInterestGroup::createForAttributesMutation( |
3920 *this, styleAttr)) { | 3926 *this, styleAttr)) { |
3921 // We don't use getAttribute() here to get a style attribute value | 3927 // We don't use getAttribute() here to get a style attribute value |
3922 // before the change. | 3928 // before the change. |
3923 AtomicString oldValue; | 3929 AtomicString oldValue; |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4134 } | 4140 } |
4135 | 4141 |
4136 DEFINE_TRACE_WRAPPERS(Element) { | 4142 DEFINE_TRACE_WRAPPERS(Element) { |
4137 if (hasRareData()) { | 4143 if (hasRareData()) { |
4138 visitor->traceWrappers(elementRareData()); | 4144 visitor->traceWrappers(elementRareData()); |
4139 } | 4145 } |
4140 ContainerNode::traceWrappers(visitor); | 4146 ContainerNode::traceWrappers(visitor); |
4141 } | 4147 } |
4142 | 4148 |
4143 } // namespace blink | 4149 } // namespace blink |
OLD | NEW |