Index: third_party/WebKit/Source/core/dom/SpaceSplitString.cpp |
diff --git a/third_party/WebKit/Source/core/dom/SpaceSplitString.cpp b/third_party/WebKit/Source/core/dom/SpaceSplitString.cpp |
index 9f4b94c66d95c5e869291bf13f07aec88a277076..79eae89657561295cbb4807fa39a1871f3b335f6 100644 |
--- a/third_party/WebKit/Source/core/dom/SpaceSplitString.cpp |
+++ b/third_party/WebKit/Source/core/dom/SpaceSplitString.cpp |
@@ -23,6 +23,7 @@ |
#include "core/html/parser/HTMLParserIdioms.h" |
#include "platform/wtf/ASCIICType.h" |
#include "platform/wtf/HashMap.h" |
+#include "platform/wtf/HashSet.h" |
#include "platform/wtf/text/AtomicStringHash.h" |
namespace blink { |
@@ -48,10 +49,12 @@ static inline bool HasNonASCIIOrUpper(const String& string) { |
return HasNonASCIIOrUpper(string.Characters16(), length); |
} |
+// https://dom.spec.whatwg.org/#concept-ordered-set-parser |
template <typename CharacterType> |
inline void SpaceSplitString::Data::CreateVector( |
const CharacterType* characters, |
unsigned length) { |
+ HashSet<AtomicString> token_set; |
unsigned start = 0; |
while (true) { |
while (start < length && IsHTMLSpace<CharacterType>(characters[start])) |
@@ -62,7 +65,11 @@ inline void SpaceSplitString::Data::CreateVector( |
while (end < length && IsNotHTMLSpace<CharacterType>(characters[end])) |
++end; |
- vector_.push_back(AtomicString(characters + start, end - start)); |
+ AtomicString token(characters + start, end - start); |
+ if (!token_set.Contains(token)) { |
+ token_set.insert(token); |
+ vector_.push_back(token); |
+ } |
start = end + 1; |
} |
@@ -110,7 +117,6 @@ void SpaceSplitString::Data::Remove(unsigned index) { |
} |
void SpaceSplitString::Add(const AtomicString& string) { |
- // FIXME: add() does not allow duplicates but createVector() does. |
if (Contains(string)) |
return; |
EnsureUnique(); |