Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: third_party/WebKit/Source/core/dom/AttributeCollection.h

Issue 2814673002: Use ASCII-caseless matching for attribute names. (Closed)
Patch Set: . Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * Copyright (C) 2014 Apple Inc. All rights reserved. 3 * Copyright (C) 2014 Apple Inc. All rights reserved.
4 * Copyright (C) 2014 Samsung Electronics. All rights reserved. 4 * Copyright (C) 2014 Samsung Electronics. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are 7 * modification, are permitted provided that the following conditions are
8 * met: 8 * met:
9 * 9 *
10 * * Redistributions of source code must retain the above copyright 10 * * Redistributions of source code must retain the above copyright
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } 135 }
136 136
137 template <typename Container, typename ContainerMemberType> 137 template <typename Container, typename ContainerMemberType>
138 inline size_t 138 inline size_t
139 AttributeCollectionGeneric<Container, ContainerMemberType>::FindIndex( 139 AttributeCollectionGeneric<Container, ContainerMemberType>::FindIndex(
140 const QualifiedName& name, 140 const QualifiedName& name,
141 bool should_ignore_case) const { 141 bool should_ignore_case) const {
142 iterator end = this->end(); 142 iterator end = this->end();
143 unsigned index = 0; 143 unsigned index = 0;
144 for (iterator it = begin(); it != end; ++it, ++index) { 144 for (iterator it = begin(); it != end; ++it, ++index) {
145 if (it->GetName().MatchesPossiblyIgnoringCase(name, should_ignore_case)) 145 if (it->GetName().MatchesPossiblyIgnoringASCIICase(name,
146 should_ignore_case))
146 return index; 147 return index;
147 } 148 }
148 return kNotFound; 149 return kNotFound;
149 } 150 }
150 151
151 // We use a boolean parameter instead of calling shouldIgnoreAttributeCase so 152 // We use a boolean parameter instead of calling shouldIgnoreAttributeCase so
152 // that the caller can tune the behavior (hasAttribute is case sensitive whereas 153 // that the caller can tune the behavior (hasAttribute is case sensitive whereas
153 // getAttribute is not). 154 // getAttribute is not).
154 template <typename Container, typename ContainerMemberType> 155 template <typename Container, typename ContainerMemberType>
155 inline size_t 156 inline size_t
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 bool should_ignore_attribute_case) const { 198 bool should_ignore_attribute_case) const {
198 // Continue to checking case-insensitively and/or full namespaced names if 199 // Continue to checking case-insensitively and/or full namespaced names if
199 // necessary: 200 // necessary:
200 iterator end = this->end(); 201 iterator end = this->end();
201 unsigned index = 0; 202 unsigned index = 0;
202 for (iterator it = begin(); it != end; ++it, ++index) { 203 for (iterator it = begin(); it != end; ++it, ++index) {
203 // FIXME: Why check the prefix? Namespace is all that should matter 204 // FIXME: Why check the prefix? Namespace is all that should matter
204 // and all HTML/SVG attributes have a null namespace! 205 // and all HTML/SVG attributes have a null namespace!
205 if (!it->GetName().HasPrefix()) { 206 if (!it->GetName().HasPrefix()) {
206 if (should_ignore_attribute_case && 207 if (should_ignore_attribute_case &&
207 DeprecatedEqualIgnoringCase(name, it->LocalName())) 208 EqualIgnoringASCIICase(name, it->LocalName()))
208 return index; 209 return index;
209 } else { 210 } else {
210 // FIXME: Would be faster to do this comparison without calling toString, 211 // FIXME: Would be faster to do this comparison without calling ToString,
211 // which generates a temporary string by concatenation. But this branch is 212 // which generates a temporary string by concatenation. But this branch is
212 // only reached if the attribute name has a prefix, which is rare in HTML. 213 // only reached if the attribute name has a prefix, which is rare in HTML.
213 if (EqualPossiblyIgnoringCase(name, it->GetName().ToString(), 214 if (EqualPossiblyIgnoringASCIICase(name, it->GetName().ToString(),
214 should_ignore_attribute_case)) 215 should_ignore_attribute_case))
215 return index; 216 return index;
216 } 217 }
217 } 218 }
218 return kNotFound; 219 return kNotFound;
219 } 220 }
220 221
221 } // namespace blink 222 } // namespace blink
222 223
223 #endif // AttributeCollection_h 224 #endif // AttributeCollection_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698