Commit 9f128534 authored by tkent@chromium.org's avatar tkent@chromium.org

Merge odd items and even items of FormDataList::m_items.

FormDataList::Item class represents a name string in a form data, or a value in
a form data.  A value can be a string or Blob, but a name string is always a
string.  Representing a name string by Item class is overkill.  This CL adds
m_key member to Item class.

Odd items in FormDataList::m_items represented name strings, and even items in
FormDataList::m_items represented values. Now each of items in
FormDataList::m_items represents a pair of a name string and a value.  This
makes the code much simpler.

This CL has no behavior changes.

BUG=528840

Review URL: https://codereview.chromium.org/1314013007

git-svn-id: svn://svn.chromium.org/blink/trunk@201862 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 4da8a038
...@@ -34,6 +34,7 @@ namespace blink { ...@@ -34,6 +34,7 @@ namespace blink {
class CORE_EXPORT FormDataList : public GarbageCollected<FormDataList> { class CORE_EXPORT FormDataList : public GarbageCollected<FormDataList> {
public: public:
// TODO(tkent): Merge Entry and Item.
class Entry final { class Entry final {
ALLOW_ONLY_INLINE_ALLOCATION(); ALLOW_ONLY_INLINE_ALLOCATION();
public: public:
...@@ -63,10 +64,11 @@ public: ...@@ -63,10 +64,11 @@ public:
class Item { class Item {
ALLOW_ONLY_INLINE_ALLOCATION(); ALLOW_ONLY_INLINE_ALLOCATION();
public: public:
Item() { } Item(const CString& key) : m_key(key) { }
Item(const WTF::CString& data) : m_data(data) { } Item(const CString& key, const CString& data) : m_key(key), m_data(data) { }
Item(Blob* blob, const String& filename) : m_blob(blob), m_filename(filename) { } Item(const CString& key, Blob* blob, const String& filename) : m_key(key), m_blob(blob), m_filename(filename) { }
const CString& key() const { return m_key; }
const WTF::CString& data() const { return m_data; } const WTF::CString& data() const { return m_data; }
Blob* blob() const { return m_blob.get(); } Blob* blob() const { return m_blob.get(); }
const String& filename() const { return m_filename; } const String& filename() const { return m_filename; }
...@@ -74,6 +76,7 @@ public: ...@@ -74,6 +76,7 @@ public:
DECLARE_TRACE(); DECLARE_TRACE();
private: private:
CString m_key;
WTF::CString m_data; WTF::CString m_data;
Member<Blob> m_blob; Member<Blob> m_blob;
String m_filename; String m_filename;
...@@ -88,23 +91,19 @@ public: ...@@ -88,23 +91,19 @@ public:
void appendData(const String& key, const String& value) void appendData(const String& key, const String& value)
{ {
appendString(key); appendItem(Item(encodeAndNormalize(key), encodeAndNormalize(value)));
appendString(value);
} }
void appendData(const String& key, const CString& value) void appendData(const String& key, const CString& value)
{ {
appendString(key); appendItem(Item(encodeAndNormalize(key), value));
appendString(value);
} }
void appendData(const String& key, int value) void appendData(const String& key, int value)
{ {
appendString(key); appendItem(Item(encodeAndNormalize(key), encodeAndNormalize(String::number(value))));
appendString(String::number(value));
} }
void appendBlob(const String& key, Blob* blob, const String& filename = String()) void appendBlob(const String& key, Blob* blob, const String& filename = String())
{ {
appendString(key); appendItem(Item(encodeAndNormalize(key), blob, filename));
appendBlob(blob, filename);
} }
void deleteEntry(const String& key); void deleteEntry(const String& key);
...@@ -114,7 +113,7 @@ public: ...@@ -114,7 +113,7 @@ public:
bool hasEntry(const String& key) const; bool hasEntry(const String& key) const;
void setBlob(const String& key, Blob*, const String& filename); void setBlob(const String& key, Blob*, const String& filename);
void setData(const String& key, const String& value); void setData(const String& key, const String& value);
size_t size() const { return m_items.size() / 2; } size_t size() const { return m_items.size(); }
const FormDataListItems& items() const { return m_items; } const FormDataListItems& items() const { return m_items; }
const WTF::TextEncoding& encoding() const { return m_encoding; } const WTF::TextEncoding& encoding() const { return m_encoding; }
...@@ -130,11 +129,9 @@ protected: ...@@ -130,11 +129,9 @@ protected:
private: private:
void appendKeyValuePairItemsTo(FormData*, const WTF::TextEncoding&, bool isMultiPartForm, FormData::EncodingType = FormData::FormURLEncoded); void appendKeyValuePairItemsTo(FormData*, const WTF::TextEncoding&, bool isMultiPartForm, FormData::EncodingType = FormData::FormURLEncoded);
void appendString(const CString&); void appendItem(const Item&);
void appendString(const String&); void setEntry(const Item&);
void appendBlob(Blob*, const String& filename); Entry itemsToEntry(const Item&) const;
void setEntry(const String& key, const Item&);
Entry itemsToEntry(const Item& key, const Item& value) const;
CString encodeAndNormalize(const String& key) const; CString encodeAndNormalize(const String& key) const;
WTF::TextEncoding m_encoding; WTF::TextEncoding m_encoding;
......
...@@ -214,18 +214,17 @@ bool buildSearchString(const HTMLFormElement* form, Vector<char>* encodedString, ...@@ -214,18 +214,17 @@ bool buildSearchString(const HTMLFormElement* form, Vector<char>* encodedString,
if (!control->appendFormData(*dataList, false)) if (!control->appendFormData(*dataList, false))
continue; continue;
const FormDataList::FormDataListItems& items = dataList->items(); for (const FormDataList::Item& item : dataList->items()) {
for (FormDataList::FormDataListItems::const_iterator j(items.begin()); j != items.end(); ++j) {
if (!encodedString->isEmpty()) if (!encodedString->isEmpty())
encodedString->append('&'); encodedString->append('&');
FormDataBuilder::encodeStringAsFormData(*encodedString, j->data()); FormDataBuilder::encodeStringAsFormData(*encodedString, item.key());
encodedString->append('='); encodedString->append('=');
++j;
if (control == textElement) { if (control == textElement) {
encodedString->append("{searchTerms}", 13); encodedString->append("{searchTerms}", 13);
isElementFound = true; isElementFound = true;
} else } else {
FormDataBuilder::encodeStringAsFormData(*encodedString, j->data()); FormDataBuilder::encodeStringAsFormData(*encodedString, item.data());
}
} }
} }
return isElementFound; return isElementFound;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment