Index: third_party/WebKit/Source/core/clipboard/DataObject.cpp |
diff --git a/third_party/WebKit/Source/core/clipboard/DataObject.cpp b/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
index 88f2e9a181d44b768a0c693e846cda61c9e8e623..c6513633a12aff40f44d173467509a522a30903c 100644 |
--- a/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
+++ b/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
@@ -37,23 +37,25 @@ |
#include "public/platform/Platform.h" |
#include "public/platform/WebClipboard.h" |
#include "public/platform/WebDragData.h" |
+#include "wtf/HashSet.h" |
namespace blink { |
DataObject* DataObject::createFromPasteboard(PasteMode pasteMode) |
{ |
DataObject* dataObject = create(); |
+#if ENABLE(ASSERT) |
+ HashSet<String> typesSeen; |
+#endif |
WebClipboard::Buffer buffer = Pasteboard::generalPasteboard()->buffer(); |
uint64_t sequenceNumber = Platform::current()->clipboard()->sequenceNumber(buffer); |
bool ignored; |
WebVector<WebString> webTypes = Platform::current()->clipboard()->readAvailableTypes(buffer, &ignored); |
- ListHashSet<String> types; |
- for (size_t i = 0; i < webTypes.size(); ++i) |
- types.add(webTypes[i]); |
- for (const String& type : types) { |
+ for (const WebString& type : webTypes) { |
if (pasteMode == PlainTextOnly && type != mimeTypeTextPlain) |
continue; |
dataObject->m_itemList.append(DataObjectItem::createFromPasteboard(type, sequenceNumber)); |
+ ASSERT(typesSeen.add(type).isNewEntry); |
} |
return dataObject; |
} |
@@ -120,22 +122,29 @@ void DataObject::clearData(const String& type) |
} |
} |
-ListHashSet<String> DataObject::types() const |
+Vector<String> DataObject::types() const |
{ |
- ListHashSet<String> results; |
+ Vector<String> results; |
+#if ENABLE(ASSERT) |
+ HashSet<String> typesSeen; |
+#endif |
bool containsFiles = false; |
- for (size_t i = 0; i < m_itemList.size(); ++i) { |
- switch (m_itemList[i]->kind()) { |
+ for (const auto& item : m_itemList) { |
+ switch (item->kind()) { |
case DataObjectItem::StringKind: |
- results.add(m_itemList[i]->type()); |
+ // Per the spec, type must be unique among all items of kind 'string'. |
+ results.append(item->type()); |
+ ASSERT(typesSeen.add(item->type()).isNewEntry); |
break; |
case DataObjectItem::FileKind: |
containsFiles = true; |
break; |
} |
} |
- if (containsFiles) |
- results.add(mimeTypeFiles); |
+ if (containsFiles) { |
+ results.append(mimeTypeFiles); |
+ ASSERT(typesSeen.add(mimeTypeFiles).isNewEntry); |
+ } |
return results; |
} |