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

Unified Diff: third_party/WebKit/Source/core/clipboard/DataObject.cpp

Issue 1776133003: Have DataObject create less copies of mime type lists. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: iwyu Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
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;
}
« no previous file with comments | « third_party/WebKit/Source/core/clipboard/DataObject.h ('k') | third_party/WebKit/Source/core/clipboard/DataTransfer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698