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

Unified Diff: Source/core/html/forms/FormController.cpp

Issue 239993011: Lazily generate HistoryItem's serialized form state (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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: Source/core/html/forms/FormController.cpp
diff --git a/Source/core/html/forms/FormController.cpp b/Source/core/html/forms/FormController.cpp
index df0d2aba9125e72944acaa6974b9cdd16d4018c5..d7c6b30c389f4df47053fee19b54b96ff01378ef 100644
--- a/Source/core/html/forms/FormController.cpp
+++ b/Source/core/html/forms/FormController.cpp
@@ -374,12 +374,25 @@ void FormKeyGenerator::willDeleteForm(HTMLFormElement* form)
// ----------------------------------------------------------------------------
-FormController::FormController()
+PassRefPtr<DocumentState> DocumentState::create()
{
+ return adoptRef(new DocumentState);
}
-FormController::~FormController()
+DocumentState::~DocumentState()
+{
+}
+
+void DocumentState::addControl(HTMLFormControlElementWithState* control)
+{
+ ASSERT(!m_formControls.contains(control));
+ m_formControls.add(control);
+}
+
+void DocumentState::removeControl(HTMLFormControlElementWithState* control)
{
+ RELEASE_ASSERT(m_formControls.contains(control));
abarth-chromium 2014/04/17 23:41:24 Why RELEASE_ASSERT and not just ASSERT?
Nate Chapin 2014/04/17 23:48:19 I copy/pasted it without understanding the history
+ m_formControls.remove(control);
}
static String formStateSignature()
@@ -391,11 +404,11 @@ static String formStateSignature()
return signature;
}
-PassOwnPtr<FormController::SavedFormStateMap> FormController::createSavedFormStateMap(const FormElementListHashSet& controlList)
+Vector<String> DocumentState::toStateVector()
{
OwnPtr<FormKeyGenerator> keyGenerator = FormKeyGenerator::create();
OwnPtr<SavedFormStateMap> stateMap = adoptPtr(new SavedFormStateMap);
- for (FormElementListHashSet::const_iterator it = controlList.begin(); it != controlList.end(); ++it) {
+ for (FormElementListHashSet::const_iterator it = m_formControls.begin(); it != m_formControls.end(); ++it) {
HTMLFormControlElementWithState* control = (*it).get();
ASSERT(control->inDocument());
if (!control->shouldSaveAndRestoreFormControlState())
@@ -405,12 +418,7 @@ PassOwnPtr<FormController::SavedFormStateMap> FormController::createSavedFormSta
result.storedValue->value = SavedFormState::create();
result.storedValue->value->appendControlState(control->name(), control->type(), control->saveFormControlState());
}
- return stateMap.release();
-}
-Vector<String> FormController::formElementsState() const
-{
- OwnPtr<SavedFormStateMap> stateMap = createSavedFormStateMap(m_formControls);
Vector<String> stateVector;
stateVector.reserveInitialCapacity(m_formControls.size() * 4);
stateVector.append(formStateSignature());
@@ -424,6 +432,22 @@ Vector<String> FormController::formElementsState() const
return stateVector;
}
+// ----------------------------------------------------------------------------
+
+FormController::FormController()
+ : m_documentState(DocumentState::create())
+{
+}
+
+FormController::~FormController()
+{
+}
+
+DocumentState* FormController::formElementsState() const
+{
+ return m_documentState.get();
+}
+
void FormController::setStateForNewFormElements(const Vector<String>& stateVector)
{
formStatesFromStateVector(stateVector, m_savedFormStateMap);
@@ -514,14 +538,12 @@ Vector<String> FormController::getReferencedFilePaths(const Vector<String>& stat
void FormController::registerStatefulFormControl(HTMLFormControlElementWithState& control)
{
- ASSERT(!m_formControls.contains(&control));
- m_formControls.add(&control);
+ m_documentState->addControl(&control);
}
void FormController::unregisterStatefulFormControl(HTMLFormControlElementWithState& control)
{
- RELEASE_ASSERT(m_formControls.contains(&control));
- m_formControls.remove(&control);
+ m_documentState->removeControl(&control);
}
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698