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

Side by Side Diff: Source/core/html/FormData.h

Issue 1338193002: Reduce allocation size of FormData::m_entries. (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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/core/html/FormData.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 void set(const String& name, const String& value); 73 void set(const String& name, const String& value);
74 void set(const String& name, Blob*, const String& filename = String()); 74 void set(const String& name, Blob*, const String& filename = String());
75 75
76 // Internal functions. 76 // Internal functions.
77 77
78 void makeOpaque() { m_opaque = true; } 78 void makeOpaque() { m_opaque = true; }
79 bool opaque() const { return m_opaque; } 79 bool opaque() const { return m_opaque; }
80 80
81 const WTF::TextEncoding& encoding() const { return m_encoding; } 81 const WTF::TextEncoding& encoding() const { return m_encoding; }
82 class Entry; 82 class Entry;
83 const HeapVector<Entry>& entries() const { return m_entries; } 83 const HeapVector<Member<const Entry>>& entries() const { return m_entries; }
84 size_t size() const { return m_entries.size(); } 84 size_t size() const { return m_entries.size(); }
85 // TODO(tkent): Rename appendFoo functions to |append| for consistency with 85 // TODO(tkent): Rename appendFoo functions to |append| for consistency with
86 // public function. 86 // public function.
87 void appendData(const String& key, const String& value); 87 void appendData(const String& key, const String& value);
88 void appendData(const String& key, int value); 88 void appendData(const String& key, int value);
89 void appendBlob(const String& key, Blob*, const String& filename = String()) ; 89 void appendBlob(const String& key, Blob*, const String& filename = String()) ;
90 String decode(const CString& data) const; 90 String decode(const CString& data) const;
91 91
92 PassRefPtr<EncodedFormData> encodeFormData(EncodedFormData::EncodingType = E ncodedFormData::FormURLEncoded); 92 PassRefPtr<EncodedFormData> encodeFormData(EncodedFormData::EncodingType = E ncodedFormData::FormURLEncoded);
93 PassRefPtr<EncodedFormData> encodeMultiPartFormData(); 93 PassRefPtr<EncodedFormData> encodeMultiPartFormData();
94 94
95 private: 95 private:
96 explicit FormData(const WTF::TextEncoding&); 96 explicit FormData(const WTF::TextEncoding&);
97 explicit FormData(HTMLFormElement*); 97 explicit FormData(HTMLFormElement*);
98 void setEntry(const Entry&); 98 void setEntry(const Entry*);
99 CString encodeAndNormalize(const String& key) const; 99 CString encodeAndNormalize(const String& key) const;
100 IterationSource* startIteration(ScriptState*, ExceptionState&) override; 100 IterationSource* startIteration(ScriptState*, ExceptionState&) override;
101 101
102 WTF::TextEncoding m_encoding; 102 WTF::TextEncoding m_encoding;
103 HeapVector<Entry> m_entries; 103 // Entry pointers in m_entries never be nullptr.
104 HeapVector<Member<const Entry>> m_entries;
104 bool m_opaque; 105 bool m_opaque;
105 }; 106 };
106 107
107 // Represents entry, which is a pair of a name and a value. 108 // Represents entry, which is a pair of a name and a value.
108 // https://xhr.spec.whatwg.org/#concept-formdata-entry 109 // https://xhr.spec.whatwg.org/#concept-formdata-entry
109 class FormData::Entry { 110 // Entry objects are immutable.
110 ALLOW_ONLY_INLINE_ALLOCATION(); 111 class FormData::Entry : public GarbageCollectedFinalized<FormData::Entry> {
111 public: 112 public:
112 Entry(const CString& key, const CString& data) : m_key(key), m_data(data) { } 113 Entry(const CString& key, const CString& data) : m_key(key), m_data(data) { }
113 Entry(const CString& key, Blob* blob, const String& filename) : m_key(key), m_blob(blob), m_filename(filename) { } 114 Entry(const CString& key, Blob* blob, const String& filename) : m_key(key), m_blob(blob), m_filename(filename) { }
114 DECLARE_TRACE(); 115 DECLARE_TRACE();
115 116
116 bool isString() const { return !m_blob; } 117 bool isString() const { return !m_blob; }
117 bool isFile() const { return m_blob; } 118 bool isFile() const { return m_blob; }
118 const CString& key() const { return m_key; } 119 const CString& key() const { return m_key; }
119 const CString& data() const { return m_data; } 120 const CString& data() const { return m_data; }
120 Blob* blob() const { return m_blob.get(); } 121 Blob* blob() const { return m_blob.get(); }
121 File* file() const; 122 File* file() const;
122 const String& filename() const { return m_filename; } 123 const String& filename() const { return m_filename; }
123 124
124 private: 125 private:
125 CString m_key; 126 const CString m_key;
126 CString m_data; 127 const CString m_data;
127 Member<Blob> m_blob; 128 const Member<Blob> m_blob;
128 String m_filename; 129 const String m_filename;
129 }; 130 };
130 131
131 } // namespace blink 132 } // namespace blink
132 133
133 WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(blink::FormData::Entry);
134
135 #endif // FormData_h 134 #endif // FormData_h
OLDNEW
« no previous file with comments | « no previous file | Source/core/html/FormData.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698