PassRefPtr<DOMStringList> Internals::formControlStateOfPreviousHistoryItem(ExceptionCode& ec) { HistoryItem* mainItem = frame()->loader()->history()->previousItem(); if (!mainItem) { ec = INVALID_ACCESS_ERR; return 0; } String uniqueName = frame()->tree()->uniqueName(); if (mainItem->target() != uniqueName && !mainItem->childItemWithTarget(uniqueName)) { ec = INVALID_ACCESS_ERR; return 0; } const Vector<String>& state = mainItem->target() == uniqueName ? mainItem->documentState() : mainItem->childItemWithTarget(uniqueName)->documentState(); RefPtr<DOMStringList> stringList = DOMStringList::create(); for (unsigned i = 0; i < state.size(); ++i) stringList->append(state[i]); return stringList.release(); }
static FrameState toFrameState(const HistoryItem& historyItem) { FrameState frameState; frameState.urlString = historyItem.urlString(); frameState.originalURLString = historyItem.originalURLString(); frameState.referrer = historyItem.referrer(); frameState.target = historyItem.target(); frameState.documentState = historyItem.documentState(); if (RefPtr<SerializedScriptValue> stateObject = historyItem.stateObject()) frameState.stateObjectData = stateObject->data(); frameState.documentSequenceNumber = historyItem.documentSequenceNumber(); frameState.itemSequenceNumber = historyItem.itemSequenceNumber(); frameState.scrollPoint = historyItem.scrollPoint(); frameState.pageScaleFactor = historyItem.pageScaleFactor(); if (FormData* formData = const_cast<HistoryItem&>(historyItem).formData()) { HTTPBody httpBody = toHTTPBody(*formData); httpBody.contentType = historyItem.formContentType(); frameState.httpBody = WTF::move(httpBody); } #if PLATFORM(IOS) frameState.exposedContentRect = historyItem.exposedContentRect(); frameState.unobscuredContentRect = historyItem.unobscuredContentRect(); frameState.minimumLayoutSizeInScrollViewCoordinates = historyItem.minimumLayoutSizeInScrollViewCoordinates(); frameState.contentSize = historyItem.contentSize(); frameState.scaleIsInitial = historyItem.scaleIsInitial(); #endif for (auto& childHistoryItem : historyItem.children()) { FrameState childFrameState = toFrameState(childHistoryItem); frameState.children.append(WTF::move(childFrameState)); } return frameState; }