| 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 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 ToSVGElement(this)->SynchronizeAnimatedSVGAttribute(name); | 386 ToSVGElement(this)->SynchronizeAnimatedSVGAttribute(name); |
| 387 } | 387 } |
| 388 } | 388 } |
| 389 | 389 |
| 390 void Element::SynchronizeAttribute(const AtomicString& local_name) const { | 390 void Element::SynchronizeAttribute(const AtomicString& local_name) const { |
| 391 // This version of synchronizeAttribute() is streamlined for the case where | 391 // This version of synchronizeAttribute() is streamlined for the case where |
| 392 // you don't have a full QualifiedName, e.g when called from DOM API. | 392 // you don't have a full QualifiedName, e.g when called from DOM API. |
| 393 if (!GetElementData()) | 393 if (!GetElementData()) |
| 394 return; | 394 return; |
| 395 if (GetElementData()->style_attribute_is_dirty_ && | 395 if (GetElementData()->style_attribute_is_dirty_ && |
| 396 EqualPossiblyIgnoringCase(local_name, styleAttr.LocalName(), | 396 EqualPossiblyIgnoringASCIICase(local_name, styleAttr.LocalName(), |
| 397 ShouldIgnoreAttributeCase())) { | 397 ShouldIgnoreAttributeCase())) { |
| 398 DCHECK(IsStyledElement()); | 398 DCHECK(IsStyledElement()); |
| 399 SynchronizeStyleAttributeInternal(); | 399 SynchronizeStyleAttributeInternal(); |
| 400 return; | 400 return; |
| 401 } | 401 } |
| 402 if (GetElementData()->animated_svg_attributes_are_dirty_) { | 402 if (GetElementData()->animated_svg_attributes_are_dirty_) { |
| 403 // We're not passing a namespace argument on purpose. SVGNames::*Attr are | 403 // We're not passing a namespace argument on purpose. SVGNames::*Attr are |
| 404 // defined w/o namespaces as well. | 404 // defined w/o namespaces as well. |
| 405 | 405 |
| 406 // FIXME: this code is called regardless of whether name is an | 406 // FIXME: this code is called regardless of whether name is an |
| 407 // animated SVG Attribute. It would seem we should only call this method | 407 // animated SVG Attribute. It would seem we should only call this method |
| (...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1236 ExceptionState& exception_state) { | 1236 ExceptionState& exception_state) { |
| 1237 if (!Document::IsValidName(local_name)) { | 1237 if (!Document::IsValidName(local_name)) { |
| 1238 exception_state.ThrowDOMException( | 1238 exception_state.ThrowDOMException( |
| 1239 kInvalidCharacterError, | 1239 kInvalidCharacterError, |
| 1240 "'" + local_name + "' is not a valid attribute name."); | 1240 "'" + local_name + "' is not a valid attribute name."); |
| 1241 return; | 1241 return; |
| 1242 } | 1242 } |
| 1243 | 1243 |
| 1244 SynchronizeAttribute(local_name); | 1244 SynchronizeAttribute(local_name); |
| 1245 const AtomicString& case_adjusted_local_name = | 1245 const AtomicString& case_adjusted_local_name = |
| 1246 ShouldIgnoreAttributeCase() ? local_name.DeprecatedLower() : local_name; | 1246 ShouldIgnoreAttributeCase() ? local_name.LowerASCII() : local_name; |
| 1247 | 1247 |
| 1248 if (!GetElementData()) { | 1248 if (!GetElementData()) { |
| 1249 SetAttributeInternal( | 1249 SetAttributeInternal( |
| 1250 kNotFound, | 1250 kNotFound, |
| 1251 QualifiedName(g_null_atom, case_adjusted_local_name, g_null_atom), | 1251 QualifiedName(g_null_atom, case_adjusted_local_name, g_null_atom), |
| 1252 value, kNotInSynchronizationOfLazyAttribute); | 1252 value, kNotInSynchronizationOfLazyAttribute); |
| 1253 return; | 1253 return; |
| 1254 } | 1254 } |
| 1255 | 1255 |
| 1256 AttributeCollection attributes = GetElementData()->Attributes(); | 1256 AttributeCollection attributes = GetElementData()->Attributes(); |
| (...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2456 // to re-use them in other elements. | 2456 // to re-use them in other elements. |
| 2457 if (attr_node->ownerElement()) { | 2457 if (attr_node->ownerElement()) { |
| 2458 exception_state.ThrowDOMException( | 2458 exception_state.ThrowDOMException( |
| 2459 kInUseAttributeError, | 2459 kInUseAttributeError, |
| 2460 "The node provided is an attribute node that is already an attribute " | 2460 "The node provided is an attribute node that is already an attribute " |
| 2461 "of another Element; attribute nodes must be explicitly cloned."); | 2461 "of another Element; attribute nodes must be explicitly cloned."); |
| 2462 return nullptr; | 2462 return nullptr; |
| 2463 } | 2463 } |
| 2464 | 2464 |
| 2465 if (!IsHTMLElement() && attr_node->GetDocument().IsHTMLDocument() && | 2465 if (!IsHTMLElement() && attr_node->GetDocument().IsHTMLDocument() && |
| 2466 attr_node->name() != attr_node->name().DeprecatedLower()) | 2466 attr_node->name() != attr_node->name().LowerASCII()) |
| 2467 UseCounter::Count( | 2467 UseCounter::Count( |
| 2468 GetDocument(), | 2468 GetDocument(), |
| 2469 UseCounter:: | 2469 UseCounter:: |
| 2470 kNonHTMLElementSetAttributeNodeFromHTMLDocumentNameNotLowercase); | 2470 kNonHTMLElementSetAttributeNodeFromHTMLDocumentNameNotLowercase); |
| 2471 | 2471 |
| 2472 SynchronizeAllAttributes(); | 2472 SynchronizeAllAttributes(); |
| 2473 const UniqueElementData& element_data = EnsureUniqueElementData(); | 2473 const UniqueElementData& element_data = EnsureUniqueElementData(); |
| 2474 | 2474 |
| 2475 AttributeCollection attributes = element_data.Attributes(); | 2475 AttributeCollection attributes = element_data.Attributes(); |
| 2476 size_t index = attributes.FindIndex(attr_node->GetQualifiedName(), | 2476 size_t index = attributes.FindIndex(attr_node->GetQualifiedName(), |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2623 EnsureUniqueElementData().Attributes().Append(name, value); | 2623 EnsureUniqueElementData().Attributes().Append(name, value); |
| 2624 if (!in_synchronization_of_lazy_attribute) | 2624 if (!in_synchronization_of_lazy_attribute) |
| 2625 DidAddAttribute(name, value); | 2625 DidAddAttribute(name, value); |
| 2626 } | 2626 } |
| 2627 | 2627 |
| 2628 void Element::removeAttribute(const AtomicString& name) { | 2628 void Element::removeAttribute(const AtomicString& name) { |
| 2629 if (!GetElementData()) | 2629 if (!GetElementData()) |
| 2630 return; | 2630 return; |
| 2631 | 2631 |
| 2632 AtomicString local_name = | 2632 AtomicString local_name = |
| 2633 ShouldIgnoreAttributeCase() ? name.DeprecatedLower() : name; | 2633 ShouldIgnoreAttributeCase() ? name.LowerASCII() : name; |
| 2634 size_t index = GetElementData()->Attributes().FindIndex(local_name, false); | 2634 size_t index = GetElementData()->Attributes().FindIndex(local_name, false); |
| 2635 if (index == kNotFound) { | 2635 if (index == kNotFound) { |
| 2636 if (UNLIKELY(local_name == styleAttr) && | 2636 if (UNLIKELY(local_name == styleAttr) && |
| 2637 GetElementData()->style_attribute_is_dirty_ && IsStyledElement()) | 2637 GetElementData()->style_attribute_is_dirty_ && IsStyledElement()) |
| 2638 RemoveAllInlineStyleProperties(); | 2638 RemoveAllInlineStyleProperties(); |
| 2639 return; | 2639 return; |
| 2640 } | 2640 } |
| 2641 | 2641 |
| 2642 RemoveAttributeInternal(index, kNotInSynchronizationOfLazyAttribute); | 2642 RemoveAttributeInternal(index, kNotInSynchronizationOfLazyAttribute); |
| 2643 } | 2643 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2668 if (!attribute) | 2668 if (!attribute) |
| 2669 return nullptr; | 2669 return nullptr; |
| 2670 return EnsureAttr(attribute->GetName()); | 2670 return EnsureAttr(attribute->GetName()); |
| 2671 } | 2671 } |
| 2672 | 2672 |
| 2673 bool Element::hasAttribute(const AtomicString& local_name) const { | 2673 bool Element::hasAttribute(const AtomicString& local_name) const { |
| 2674 if (!GetElementData()) | 2674 if (!GetElementData()) |
| 2675 return false; | 2675 return false; |
| 2676 SynchronizeAttribute(local_name); | 2676 SynchronizeAttribute(local_name); |
| 2677 return GetElementData()->Attributes().FindIndex( | 2677 return GetElementData()->Attributes().FindIndex( |
| 2678 ShouldIgnoreAttributeCase() ? local_name.DeprecatedLower() | 2678 ShouldIgnoreAttributeCase() ? local_name.LowerASCII() : local_name, |
| 2679 : local_name, | |
| 2680 false) != kNotFound; | 2679 false) != kNotFound; |
| 2681 } | 2680 } |
| 2682 | 2681 |
| 2683 bool Element::hasAttributeNS(const AtomicString& namespace_uri, | 2682 bool Element::hasAttributeNS(const AtomicString& namespace_uri, |
| 2684 const AtomicString& local_name) const { | 2683 const AtomicString& local_name) const { |
| 2685 if (!GetElementData()) | 2684 if (!GetElementData()) |
| 2686 return false; | 2685 return false; |
| 2687 QualifiedName q_name(g_null_atom, local_name, namespace_uri); | 2686 QualifiedName q_name(g_null_atom, local_name, namespace_uri); |
| 2688 SynchronizeAttribute(q_name); | 2687 SynchronizeAttribute(q_name); |
| 2689 return GetElementData()->Attributes().Find(q_name); | 2688 return GetElementData()->Attributes().Find(q_name); |
| (...skipping 1191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3881 void Element::SetSavedLayerScrollOffset(const ScrollOffset& size) { | 3880 void Element::SetSavedLayerScrollOffset(const ScrollOffset& size) { |
| 3882 if (size.IsZero() && !HasRareData()) | 3881 if (size.IsZero() && !HasRareData()) |
| 3883 return; | 3882 return; |
| 3884 EnsureElementRareData().SetSavedLayerScrollOffset(size); | 3883 EnsureElementRareData().SetSavedLayerScrollOffset(size); |
| 3885 } | 3884 } |
| 3886 | 3885 |
| 3887 Attr* Element::AttrIfExists(const QualifiedName& name) { | 3886 Attr* Element::AttrIfExists(const QualifiedName& name) { |
| 3888 if (AttrNodeList* attr_node_list = this->GetAttrNodeList()) { | 3887 if (AttrNodeList* attr_node_list = this->GetAttrNodeList()) { |
| 3889 bool should_ignore_case = ShouldIgnoreAttributeCase(); | 3888 bool should_ignore_case = ShouldIgnoreAttributeCase(); |
| 3890 for (const auto& attr : *attr_node_list) { | 3889 for (const auto& attr : *attr_node_list) { |
| 3891 if (attr->GetQualifiedName().MatchesPossiblyIgnoringCase( | 3890 if (attr->GetQualifiedName().MatchesPossiblyIgnoringASCIICase( |
| 3892 name, should_ignore_case)) | 3891 name, should_ignore_case)) |
| 3893 return attr.Get(); | 3892 return attr.Get(); |
| 3894 } | 3893 } |
| 3895 } | 3894 } |
| 3896 return nullptr; | 3895 return nullptr; |
| 3897 } | 3896 } |
| 3898 | 3897 |
| 3899 Attr* Element::EnsureAttr(const QualifiedName& name) { | 3898 Attr* Element::EnsureAttr(const QualifiedName& name) { |
| 3900 Attr* attr_node = AttrIfExists(name); | 3899 Attr* attr_node = AttrIfExists(name); |
| 3901 if (!attr_node) { | 3900 if (!attr_node) { |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4343 } | 4342 } |
| 4344 | 4343 |
| 4345 DEFINE_TRACE_WRAPPERS(Element) { | 4344 DEFINE_TRACE_WRAPPERS(Element) { |
| 4346 if (HasRareData()) { | 4345 if (HasRareData()) { |
| 4347 visitor->TraceWrappers(GetElementRareData()); | 4346 visitor->TraceWrappers(GetElementRareData()); |
| 4348 } | 4347 } |
| 4349 ContainerNode::TraceWrappers(visitor); | 4348 ContainerNode::TraceWrappers(visitor); |
| 4350 } | 4349 } |
| 4351 | 4350 |
| 4352 } // namespace blink | 4351 } // namespace blink |
| OLD | NEW |