Changeset 121207 in webkit
- Timestamp:
- Jun 25, 2012 6:20:05 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r121203 r121207 1 2012-06-25 Kent Tamura <tkent@chromium.org> 2 3 Unreviewed, rolling out r121145. 4 http://trac.webkit.org/changeset/121145 5 https://bugs.webkit.org/show_bug.cgi?id=89847 6 7 Had an objection for the change. 8 9 * fast/forms/state-restore-broken-state-expected.txt: 10 * fast/forms/state-restore-various-values-expected.txt: Removed. 11 * fast/forms/state-restore-various-values.html: Removed. 12 1 13 2012-06-25 Anders Carlsson <andersca@apple.com> 2 14 -
trunk/LayoutTests/fast/forms/state-restore-broken-state-expected.txt
r121145 r121207 1 CONSOLE MESSAGE: line 5: Generated state: [name1,text, ,modified]1 CONSOLE MESSAGE: line 5: Generated state: [name1,text,1,modified] 2 2 The value was modified in the first load of state-restore-broken-state-1.html, but it should not be restored because the state-restore-broken-state-2.html breaks the state. 3 3 -
trunk/Source/WTF/ChangeLog
r121196 r121207 1 2012-06-25 Kent Tamura <tkent@chromium.org> 2 3 Unreviewed, rolling out r121145. 4 http://trac.webkit.org/changeset/121145 5 https://bugs.webkit.org/show_bug.cgi?id=89847 6 7 Had an objection for the change. 8 9 * wtf/text/StringBuilder.h: 10 1 11 2012-06-25 Yong Li <yoli@rim.com> 2 12 -
trunk/Source/WTF/wtf/text/StringBuilder.h
r121145 r121207 131 131 } 132 132 133 void appendEscaped(const String& string, UChar escape, UChar special)134 {135 if (string.isEmpty())136 return;137 unsigned requiredSize = length() + string.length();138 if (capacity() < requiredSize)139 reserveCapacity(requiredSize);140 for (unsigned i = 0; i < string.length(); ++i) {141 UChar ch = string[i];142 if (ch == escape || ch == special)143 append(escape);144 append(ch);145 }146 }147 148 133 String toString() 149 134 { -
trunk/Source/WebCore/ChangeLog
r121206 r121207 1 2012-06-25 Kent Tamura <tkent@chromium.org> 2 3 Unreviewed, rolling out r121145. 4 http://trac.webkit.org/changeset/121145 5 https://bugs.webkit.org/show_bug.cgi?id=89847 6 7 Had an objection for the change. 8 9 * html/FormController.cpp: 10 (WebCore): 11 (WebCore::FormControlState::serializeTo): 12 (WebCore::FormControlState::deserialize): 13 (WebCore::formStateSignature): 14 (WebCore::FormController::formElementsState): 15 (WebCore::FormController::setStateForNewFormElements): 16 * html/FormController.h: 17 (FormControlState): 18 * html/shadow/CalendarPickerElement.cpp: 19 (WebCore::addJavaScriptString): 20 1 21 2012-06-25 Jay Civelli <jcivelli@chromium.org> 2 22 -
trunk/Source/WebCore/html/FormController.cpp
r121145 r121207 23 23 24 24 #include "HTMLFormControlElementWithState.h" 25 #include <wtf/text/StringBuilder.h>26 25 27 26 namespace WebCore { … … 32 31 33 32 // Serilized form of FormControlState: 33 // (',' means strings around it are separated in stateVector.) 34 34 // 35 35 // SerializedControlState ::= SkipState | RestoreState 36 // SkipState ::= '' 37 // RestoreState ::= (',' EscapedValue )+ 38 // EscapedValue ::= ('\\' | '\,' | [^\,])+ 39 40 String FormControlState::serialize() const 36 // SkipState ::= '0' 37 // RestoreState ::= UnsignedNumber, ControlValue+ 38 // UnsignedNumber ::= [0-9]+ 39 // ControlValue ::= arbitrary string 40 // 41 // RestoreState has a sequence of ControlValues. The length of the 42 // sequence is represented by UnsignedNumber. 43 44 void FormControlState::serializeTo(Vector<String>& stateVector) const 41 45 { 42 46 ASSERT(!isFailure()); 43 if (!m_values.size()) 44 return emptyString(); 45 46 size_t enoughSize = 0; 47 stateVector.append(String::number(m_values.size())); 47 48 for (size_t i = 0; i < m_values.size(); ++i) 48 enoughSize += 1 + m_values[i].length() * 2; 49 StringBuilder builder; 50 builder.reserveCapacity(enoughSize); 51 for (size_t i = 0; i < m_values.size(); ++i) { 52 builder.append(','); 53 builder.appendEscaped(m_values[i], '\\', ','); 54 } 55 return builder.toString(); 56 } 57 58 FormControlState FormControlState::deserialize(const String& escaped) 59 { 60 if (!escaped.length()) 49 stateVector.append(m_values[i].isNull() ? emptyString() : m_values[i]); 50 } 51 52 FormControlState FormControlState::deserialize(const Vector<String>& stateVector, size_t& index) 53 { 54 if (index >= stateVector.size()) 55 return FormControlState(TypeFailure); 56 size_t valueSize = stateVector[index++].toUInt(); 57 if (!valueSize) 61 58 return FormControlState(); 62 if ( escaped[0] != ',')59 if (index + valueSize > stateVector.size()) 63 60 return FormControlState(TypeFailure); 64 65 size_t valueSize = 1;66 for (unsigned i = 1; i < escaped.length(); ++i) {67 if (escaped[i] == '\\') {68 if (++i >= escaped.length())69 return FormControlState(TypeFailure);70 } else if (escaped[i] == ',')71 valueSize++;72 }73 74 61 FormControlState state; 75 62 state.m_values.reserveCapacity(valueSize); 76 StringBuilder builder; 77 for (unsigned i = 1; i < escaped.length(); ++i) { 78 if (escaped[i] == '\\') { 79 if (++i >= escaped.length()) 80 return FormControlState(TypeFailure); 81 builder.append(escaped[i]); 82 } else if (escaped[i] == ',') { 83 state.append(builder.toString()); 84 builder.clear(); 85 } else 86 builder.append(escaped[i]); 87 } 88 state.append(builder.toString()); 63 for (size_t i = 0; i < valueSize; ++i) 64 state.append(stateVector[index++]); 89 65 return state; 90 66 } … … 106 82 // attribute value of a form control. The following string literal should 107 83 // contain some characters which are rarely used for name attribute values. 108 DEFINE_STATIC_LOCAL(String, signature, ("\n\r?% WebKit serialized form state version 4\n\r=&"));84 DEFINE_STATIC_LOCAL(String, signature, ("\n\r?% WebKit serialized form state version 3 \n\r=&")); 109 85 return signature; 110 86 } … … 113 89 { 114 90 Vector<String> stateVector; 115 stateVector.reserveInitialCapacity(m_formElementsWithState.size() * 3+ 1);91 stateVector.reserveInitialCapacity(m_formElementsWithState.size() * 4 + 1); 116 92 stateVector.append(formStateSignature()); 117 93 typedef FormElementListHashSet::const_iterator Iterator; … … 123 99 stateVector.append(elementWithState->name().string()); 124 100 stateVector.append(elementWithState->formControlType().string()); 125 stateVector.append(elementWithState->saveFormControlState().serialize());101 elementWithState->saveFormControlState().serializeTo(stateVector); 126 102 } 127 103 return stateVector; … … 138 114 m_formElementsWithState.clear(); 139 115 140 if (stateVector.size() < 1 || stateVector[0] != formStateSignature()) 116 size_t i = 0; 117 if (stateVector.size() < 1 || stateVector[i++] != formStateSignature()) 141 118 return; 142 if ((stateVector.size() - 1) % 3) 143 return; 144 145 for (size_t i = 1; i < stateVector.size(); i += 3) { 146 AtomicString name = stateVector[i]; 147 AtomicString type = stateVector[i + 1]; 148 FormControlState state = FormControlState::deserialize(stateVector[i + 2]); 119 120 while (i + 2 < stateVector.size()) { 121 AtomicString name = stateVector[i++]; 122 AtomicString type = stateVector[i++]; 123 FormControlState state = FormControlState::deserialize(stateVector, i); 149 124 if (type.isEmpty() || type.impl()->find(isNotFormControlTypeCharacter) != notFound || state.isFailure()) 150 125 break; … … 160 135 } 161 136 } 137 if (i != stateVector.size()) 138 m_stateForNewFormElements.clear(); 162 139 } 163 140 -
trunk/Source/WebCore/html/FormController.h
r121145 r121207 79 79 FormControlState() : m_type(TypeSkip) { } 80 80 explicit FormControlState(const String& value) : m_type(TypeRestore) { m_values.append(value); } 81 static FormControlState deserialize(const String&);81 static FormControlState deserialize(const Vector<String>& stateVector, size_t& index); 82 82 FormControlState(const FormControlState& another) : m_type(another.m_type), m_values(another.m_values) { } 83 83 FormControlState& operator=(const FormControlState&); … … 87 87 const String& operator[](size_t i) const { return m_values[i]; } 88 88 void append(const String&); 89 String serialize() const;89 void serializeTo(Vector<String>& stateVector) const; 90 90 91 91 private: -
trunk/Source/WebCore/html/shadow/CalendarPickerElement.cpp
r121145 r121207 152 152 addLiteral("\"", writer); 153 153 StringBuilder builder; 154 builder.appendEscaped(str, '\\', '"'); 154 builder.reserveCapacity(str.length()); 155 for (unsigned i = 0; i < str.length(); ++i) { 156 if (str[i] == '\\' || str[i] == '"') 157 builder.append('\\'); 158 builder.append(str[i]); 159 } 155 160 addString(builder.toString(), writer); 156 161 addLiteral("\"", writer);
Note: See TracChangeset
for help on using the changeset viewer.