OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. |
3 * Copyright (C) 2010, 2011, 2012 Google Inc. All rights reserved. | 3 * Copyright (C) 2010, 2011, 2012 Google Inc. All rights reserved. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
367 } | 367 } |
368 | 368 |
369 void FormKeyGenerator::willDeleteForm(HTMLFormElement* form) | 369 void FormKeyGenerator::willDeleteForm(HTMLFormElement* form) |
370 { | 370 { |
371 ASSERT(form); | 371 ASSERT(form); |
372 m_formToKeyMap.remove(form); | 372 m_formToKeyMap.remove(form); |
373 } | 373 } |
374 | 374 |
375 // ---------------------------------------------------------------------------- | 375 // ---------------------------------------------------------------------------- |
376 | 376 |
377 FormController::FormController() | 377 PassRefPtr<DocumentState> DocumentState::create() |
378 { | |
379 return adoptRef(new DocumentState); | |
380 } | |
381 | |
382 DocumentState::~DocumentState() | |
378 { | 383 { |
379 } | 384 } |
380 | 385 |
381 FormController::~FormController() | 386 void DocumentState::addControl(HTMLFormControlElementWithState* control) |
382 { | 387 { |
388 ASSERT(!m_formControls.contains(control)); | |
389 m_formControls.add(control); | |
390 } | |
391 | |
392 void DocumentState::removeControl(HTMLFormControlElementWithState* control) | |
393 { | |
394 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
| |
395 m_formControls.remove(control); | |
383 } | 396 } |
384 | 397 |
385 static String formStateSignature() | 398 static String formStateSignature() |
386 { | 399 { |
387 // In the legacy version of serialized state, the first item was a name | 400 // In the legacy version of serialized state, the first item was a name |
388 // attribute value of a form control. The following string literal should | 401 // attribute value of a form control. The following string literal should |
389 // contain some characters which are rarely used for name attribute values. | 402 // contain some characters which are rarely used for name attribute values. |
390 DEFINE_STATIC_LOCAL(String, signature, ("\n\r?% WebKit serialized form state version 8 \n\r=&")); | 403 DEFINE_STATIC_LOCAL(String, signature, ("\n\r?% WebKit serialized form state version 8 \n\r=&")); |
391 return signature; | 404 return signature; |
392 } | 405 } |
393 | 406 |
394 PassOwnPtr<FormController::SavedFormStateMap> FormController::createSavedFormSta teMap(const FormElementListHashSet& controlList) | 407 Vector<String> DocumentState::toStateVector() |
395 { | 408 { |
396 OwnPtr<FormKeyGenerator> keyGenerator = FormKeyGenerator::create(); | 409 OwnPtr<FormKeyGenerator> keyGenerator = FormKeyGenerator::create(); |
397 OwnPtr<SavedFormStateMap> stateMap = adoptPtr(new SavedFormStateMap); | 410 OwnPtr<SavedFormStateMap> stateMap = adoptPtr(new SavedFormStateMap); |
398 for (FormElementListHashSet::const_iterator it = controlList.begin(); it != controlList.end(); ++it) { | 411 for (FormElementListHashSet::const_iterator it = m_formControls.begin(); it != m_formControls.end(); ++it) { |
399 HTMLFormControlElementWithState* control = (*it).get(); | 412 HTMLFormControlElementWithState* control = (*it).get(); |
400 ASSERT(control->inDocument()); | 413 ASSERT(control->inDocument()); |
401 if (!control->shouldSaveAndRestoreFormControlState()) | 414 if (!control->shouldSaveAndRestoreFormControlState()) |
402 continue; | 415 continue; |
403 SavedFormStateMap::AddResult result = stateMap->add(keyGenerator->formKe y(*control), nullptr); | 416 SavedFormStateMap::AddResult result = stateMap->add(keyGenerator->formKe y(*control), nullptr); |
404 if (result.isNewEntry) | 417 if (result.isNewEntry) |
405 result.storedValue->value = SavedFormState::create(); | 418 result.storedValue->value = SavedFormState::create(); |
406 result.storedValue->value->appendControlState(control->name(), control-> type(), control->saveFormControlState()); | 419 result.storedValue->value->appendControlState(control->name(), control-> type(), control->saveFormControlState()); |
407 } | 420 } |
408 return stateMap.release(); | |
409 } | |
410 | 421 |
411 Vector<String> FormController::formElementsState() const | |
412 { | |
413 OwnPtr<SavedFormStateMap> stateMap = createSavedFormStateMap(m_formControls) ; | |
414 Vector<String> stateVector; | 422 Vector<String> stateVector; |
415 stateVector.reserveInitialCapacity(m_formControls.size() * 4); | 423 stateVector.reserveInitialCapacity(m_formControls.size() * 4); |
416 stateVector.append(formStateSignature()); | 424 stateVector.append(formStateSignature()); |
417 for (SavedFormStateMap::const_iterator it = stateMap->begin(); it != stateMa p->end(); ++it) { | 425 for (SavedFormStateMap::const_iterator it = stateMap->begin(); it != stateMa p->end(); ++it) { |
418 stateVector.append(it->key); | 426 stateVector.append(it->key); |
419 it->value->serializeTo(stateVector); | 427 it->value->serializeTo(stateVector); |
420 } | 428 } |
421 bool hasOnlySignature = stateVector.size() == 1; | 429 bool hasOnlySignature = stateVector.size() == 1; |
422 if (hasOnlySignature) | 430 if (hasOnlySignature) |
423 stateVector.clear(); | 431 stateVector.clear(); |
424 return stateVector; | 432 return stateVector; |
425 } | 433 } |
426 | 434 |
435 // ---------------------------------------------------------------------------- | |
436 | |
437 FormController::FormController() | |
438 : m_documentState(DocumentState::create()) | |
439 { | |
440 } | |
441 | |
442 FormController::~FormController() | |
443 { | |
444 } | |
445 | |
446 DocumentState* FormController::formElementsState() const | |
447 { | |
448 return m_documentState.get(); | |
449 } | |
450 | |
427 void FormController::setStateForNewFormElements(const Vector<String>& stateVecto r) | 451 void FormController::setStateForNewFormElements(const Vector<String>& stateVecto r) |
428 { | 452 { |
429 formStatesFromStateVector(stateVector, m_savedFormStateMap); | 453 formStatesFromStateVector(stateVector, m_savedFormStateMap); |
430 } | 454 } |
431 | 455 |
432 FormControlState FormController::takeStateForFormElement(const HTMLFormControlEl ementWithState& control) | 456 FormControlState FormController::takeStateForFormElement(const HTMLFormControlEl ementWithState& control) |
433 { | 457 { |
434 if (m_savedFormStateMap.isEmpty()) | 458 if (m_savedFormStateMap.isEmpty()) |
435 return FormControlState(); | 459 return FormControlState(); |
436 if (!m_formKeyGenerator) | 460 if (!m_formKeyGenerator) |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
507 Vector<String> toReturn; | 531 Vector<String> toReturn; |
508 SavedFormStateMap map; | 532 SavedFormStateMap map; |
509 formStatesFromStateVector(stateVector, map); | 533 formStatesFromStateVector(stateVector, map); |
510 for (SavedFormStateMap::const_iterator it = map.begin(); it != map.end(); ++ it) | 534 for (SavedFormStateMap::const_iterator it = map.begin(); it != map.end(); ++ it) |
511 toReturn.appendVector(it->value->getReferencedFilePaths()); | 535 toReturn.appendVector(it->value->getReferencedFilePaths()); |
512 return toReturn; | 536 return toReturn; |
513 } | 537 } |
514 | 538 |
515 void FormController::registerStatefulFormControl(HTMLFormControlElementWithState & control) | 539 void FormController::registerStatefulFormControl(HTMLFormControlElementWithState & control) |
516 { | 540 { |
517 ASSERT(!m_formControls.contains(&control)); | 541 m_documentState->addControl(&control); |
518 m_formControls.add(&control); | |
519 } | 542 } |
520 | 543 |
521 void FormController::unregisterStatefulFormControl(HTMLFormControlElementWithSta te& control) | 544 void FormController::unregisterStatefulFormControl(HTMLFormControlElementWithSta te& control) |
522 { | 545 { |
523 RELEASE_ASSERT(m_formControls.contains(&control)); | 546 m_documentState->removeControl(&control); |
524 m_formControls.remove(&control); | |
525 } | 547 } |
526 | 548 |
527 } // namespace WebCore | 549 } // namespace WebCore |
OLD | NEW |