PassOwnPtr<SavedFormState> SavedFormState::deserialize(const Vector<String>& stateVector, size_t& index) { if (index >= stateVector.size()) return nullptr; // FIXME: We need String::toSizeT(). size_t itemCount = stateVector[index++].toUInt(); if (!itemCount) return nullptr; OwnPtr<SavedFormState> savedFormState = adoptPtr(new SavedFormState); while (itemCount--) { if (index + 1 >= stateVector.size()) return nullptr; String name = stateVector[index++]; String type = stateVector[index++]; FormControlState state = FormControlState::deserialize(stateVector, index); if (type.isEmpty() || type.find(isNotFormControlTypeCharacter) != kNotFound || state.isFailure()) return nullptr; savedFormState->appendControlState(AtomicString(name), AtomicString(type), state); } return savedFormState.release(); }
std::unique_ptr<SavedFormState> SavedFormState::deserialize(const Vector<String>& stateVector, size_t& index) { if (index >= stateVector.size()) return nullptr; // FIXME: We need String::toSizeT(). size_t itemCount = stateVector[index++].toUInt(); if (!itemCount) return nullptr; auto savedFormState = std::make_unique<SavedFormState>(); while (itemCount--) { if (index + 1 >= stateVector.size()) return nullptr; String name = stateVector[index++]; String type = stateVector[index++]; FormControlState state = FormControlState::deserialize(stateVector, index); if (type.isEmpty() || type.find(isNotFormControlTypeCharacter) != notFound || state.isFailure()) return nullptr; savedFormState->appendControlState(name, type, state); } return savedFormState; }