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

Unified Diff: Source/core/html/FormDataList.cpp

Issue 1314013007: Merge odd items and even items of FormDataList::m_items. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 3 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
« no previous file with comments | « Source/core/html/FormDataList.h ('k') | Source/web/WebSearchableFormData.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/FormDataList.cpp
diff --git a/Source/core/html/FormDataList.cpp b/Source/core/html/FormDataList.cpp
index e4f62cfab4f24738d11e3f3a23bbed8cb6e067f3..9c33722b4a8bc395786a5b5087c7d756fbd9ee74 100644
--- a/Source/core/html/FormDataList.cpp
+++ b/Source/core/html/FormDataList.cpp
@@ -33,49 +33,31 @@ FormDataList::FormDataList(const WTF::TextEncoding& c)
{
}
-void FormDataList::appendString(const String& string)
+void FormDataList::appendItem(const FormDataList::Item& item)
{
- m_items.append(encodeAndNormalize(string));
-}
-
-void FormDataList::appendString(const CString& string)
-{
- m_items.append(string);
-}
-
-void FormDataList::appendBlob(Blob* blob, const String& filename)
-{
- m_items.append(Item(blob, filename));
+ m_items.append(item);
}
void FormDataList::deleteEntry(const String& key)
{
const CString keyData = encodeAndNormalize(key);
- ASSERT(!(m_items.size() % 2));
size_t i = 0;
while (i < m_items.size()) {
- if (m_items[i].data() == keyData) {
- m_items.remove(i, 2);
+ if (m_items[i].key() == keyData) {
+ m_items.remove(i);
} else {
- i += 2;
+ ++i;
}
}
- ASSERT(!(m_items.size() % 2));
return;
}
FormDataList::Entry FormDataList::getEntry(const String& key) const
{
const CString keyData = encodeAndNormalize(key);
- const FormDataListItems& items = this->items();
- size_t formDataListSize = items.size();
- ASSERT(!(formDataListSize % 2));
- for (size_t i = 0; i < formDataListSize; i += 2) {
- const FormDataList::Item& key = items[i];
- if (key.data() != keyData)
- continue;
- const FormDataList::Item& value = items[i + 1];
- return itemsToEntry(key, value);
+ for (const Item& item : items()) {
+ if (item.key() == keyData)
+ return itemsToEntry(item);
}
return Entry();
}
@@ -83,13 +65,9 @@ FormDataList::Entry FormDataList::getEntry(const String& key) const
FormDataList::Entry FormDataList::getEntry(size_t index) const
{
const FormDataListItems& items = this->items();
- size_t formDataListSize = items.size();
- ASSERT(!(formDataListSize % 2));
- if (index >= formDataListSize / 2)
+ if (index >= items.size())
return Entry();
- const FormDataList::Item& key = items[index * 2];
- const FormDataList::Item& value = items[index * 2 + 1];
- return itemsToEntry(key, value);
+ return itemsToEntry(items[index]);
}
HeapVector<FormDataList::Entry> FormDataList::getAll(const String& key) const
@@ -97,27 +75,21 @@ HeapVector<FormDataList::Entry> FormDataList::getAll(const String& key) const
HeapVector<FormDataList::Entry> matches;
const CString keyData = encodeAndNormalize(key);
- const FormDataListItems& items = this->items();
- size_t formDataListSize = items.size();
- ASSERT(!(formDataListSize % 2));
- for (size_t i = 0; i < formDataListSize; i += 2) {
- const FormDataList::Item& key = items[i];
- if (key.data() != keyData)
- continue;
- const FormDataList::Item& value = items[i + 1];
- matches.append(itemsToEntry(key, value));
+ for (const Item& item : items()) {
+ if (item.key() == keyData)
+ matches.append(itemsToEntry(item));
}
return matches;
}
-FormDataList::Entry FormDataList::itemsToEntry(const FormDataList::Item& key, const FormDataList::Item& value) const
+FormDataList::Entry FormDataList::itemsToEntry(const FormDataList::Item& item) const
{
- const CString nameData = key.data();
+ const CString nameData = item.key();
const String name = m_encoding.decode(nameData.data(), nameData.length());
- if (!value.blob()) {
- const CString valueData = value.data();
+ if (!item.blob()) {
+ const CString valueData = item.data();
return Entry(name, m_encoding.decode(valueData.data(), valueData.length()));
}
@@ -126,28 +98,24 @@ FormDataList::Entry FormDataList::itemsToEntry(const FormDataList::Item& key, co
// items.
// FIXME: Consider applying the name during insertion.
- if (value.blob()->isFile()) {
- File* file = toFile(value.blob());
- if (value.filename().isNull())
+ if (item.blob()->isFile()) {
+ File* file = toFile(item.blob());
+ if (item.filename().isNull())
return Entry(name, file);
- return Entry(name, file->clone(value.filename()));
+ return Entry(name, file->clone(item.filename()));
}
- String filename = value.filename();
+ String filename = item.filename();
if (filename.isNull())
filename = "blob";
- return Entry(name, File::create(filename, currentTimeMS(), value.blob()->blobDataHandle()));
+ return Entry(name, File::create(filename, currentTimeMS(), item.blob()->blobDataHandle()));
}
bool FormDataList::hasEntry(const String& key) const
{
const CString keyData = encodeAndNormalize(key);
- const FormDataListItems& items = this->items();
- size_t formDataListSize = items.size();
- ASSERT(!(formDataListSize % 2));
- for (size_t i = 0; i < formDataListSize; i += 2) {
- const FormDataList::Item& key = items[i];
- if (key.data() == keyData)
+ for (const Item& item : items()) {
+ if (item.key() == keyData)
return true;
}
return false;
@@ -155,36 +123,32 @@ bool FormDataList::hasEntry(const String& key) const
void FormDataList::setBlob(const String& key, Blob* blob, const String& filename)
{
- setEntry(key, Item(blob, filename));
+ setEntry(Item(encodeAndNormalize(key), blob, filename));
}
void FormDataList::setData(const String& key, const String& value)
{
- setEntry(key, encodeAndNormalize(value));
+ setEntry(Item(encodeAndNormalize(key), encodeAndNormalize(value)));
}
-void FormDataList::setEntry(const String& key, const Item& item)
+void FormDataList::setEntry(const Item& item)
{
- const CString keyData = encodeAndNormalize(key);
- ASSERT(!(m_items.size() % 2));
+ const CString keyData = item.key();
bool found = false;
size_t i = 0;
while (i < m_items.size()) {
- if (m_items[i].data() != keyData) {
- i += 2;
+ if (m_items[i].key() != keyData) {
+ ++i;
} else if (found) {
- m_items.remove(i, 2);
+ m_items.remove(i);
} else {
found = true;
- m_items[i + 1] = item;
- i += 2;
+ m_items[i] = item;
+ ++i;
}
}
- if (!found) {
- m_items.append(keyData);
+ if (!found)
m_items.append(item);
- }
- ASSERT(!(m_items.size() % 2));
return;
}
@@ -209,31 +173,26 @@ void FormDataList::appendKeyValuePairItemsTo(FormData* formData, const WTF::Text
Vector<char> encodedData;
- const FormDataListItems& items = this->items();
- size_t formDataListSize = items.size();
- ASSERT(!(formDataListSize % 2));
- for (size_t i = 0; i < formDataListSize; i += 2) {
- const FormDataList::Item& key = items[i];
- const FormDataList::Item& value = items[i + 1];
+ for (const Item& item : items()) {
if (isMultiPartForm) {
Vector<char> header;
- FormDataBuilder::beginMultiPartHeader(header, formData->boundary().data(), key.data());
+ FormDataBuilder::beginMultiPartHeader(header, formData->boundary().data(), item.key());
// If the current type is blob, then we also need to include the filename
- if (value.blob()) {
+ if (item.blob()) {
String name;
- if (value.blob()->isFile()) {
- File* file = toFile(value.blob());
+ if (item.blob()->isFile()) {
+ File* file = toFile(item.blob());
// For file blob, use the filename (or relative path if it is present) as the name.
name = file->webkitRelativePath().isEmpty() ? file->name() : file->webkitRelativePath();
// If a filename is passed in FormData.append(), use it instead of the file blob's name.
- if (!value.filename().isNull())
- name = value.filename();
+ if (!item.filename().isNull())
+ name = item.filename();
} else {
// For non-file blob, use the filename if it is passed in FormData.append().
- if (!value.filename().isNull())
- name = value.filename();
+ if (!item.filename().isNull())
+ name = item.filename();
else
name = "blob";
}
@@ -243,10 +202,10 @@ void FormDataList::appendKeyValuePairItemsTo(FormData* formData, const WTF::Text
// Add the content type if available, or "application/octet-stream" otherwise (RFC 1867).
String contentType;
- if (value.blob()->type().isEmpty())
+ if (item.blob()->type().isEmpty())
contentType = "application/octet-stream";
else
- contentType = value.blob()->type();
+ contentType = item.blob()->type();
FormDataBuilder::addContentTypeToMultiPartHeader(header, contentType.latin1());
}
@@ -254,23 +213,23 @@ void FormDataList::appendKeyValuePairItemsTo(FormData* formData, const WTF::Text
// Append body
formData->appendData(header.data(), header.size());
- if (value.blob()) {
- if (value.blob()->hasBackingFile()) {
- File* file = toFile(value.blob());
+ if (item.blob()) {
+ if (item.blob()->hasBackingFile()) {
+ File* file = toFile(item.blob());
// Do not add the file if the path is empty.
if (!file->path().isEmpty())
formData->appendFile(file->path());
if (!file->fileSystemURL().isEmpty())
formData->appendFileSystemURL(file->fileSystemURL());
} else {
- formData->appendBlob(value.blob()->uuid(), value.blob()->blobDataHandle());
+ formData->appendBlob(item.blob()->uuid(), item.blob()->blobDataHandle());
}
} else {
- formData->appendData(value.data().data(), value.data().length());
+ formData->appendData(item.data().data(), item.data().length());
}
formData->appendData("\r\n", 2);
} else {
- FormDataBuilder::addKeyValuePairAsFormData(encodedData, key.data(), value.data(), encodingType);
+ FormDataBuilder::addKeyValuePairAsFormData(encodedData, item.key(), item.data(), encodingType);
}
}
« no previous file with comments | « Source/core/html/FormDataList.h ('k') | Source/web/WebSearchableFormData.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698