void HistoryController::saveScrollPositionAndViewStateToItem(HistoryItem* item) { FrameView* frameView = m_frame.view(); if (!item || !frameView) return; if (m_frame.document()->inPageCache()) item->setScrollPosition(frameView->cachedScrollPosition()); else item->setScrollPosition(frameView->scrollPosition()); #if PLATFORM(IOS) item->setExposedContentRect(frameView->exposedContentRect()); item->setUnobscuredContentRect(frameView->unobscuredContentRect()); #endif Page* page = m_frame.page(); if (page && m_frame.isMainFrame()) { item->setPageScaleFactor(page->pageScaleFactor() / page->viewScaleFactor()); #if PLATFORM(IOS) item->setObscuredInset(page->obscuredInset()); #endif } // FIXME: It would be great to work out a way to put this code in WebCore instead of calling through to the client. m_frame.loader().client().saveViewStateToItem(*item); // Notify clients that the HistoryItem has changed. item->notifyChanged(); }