| Index: Source/core/frame/History.cpp | 
| diff --git a/Source/core/frame/History.cpp b/Source/core/frame/History.cpp | 
| index ea3bd5dbbd232be4911c51cb1358434c4043f7c8..aab102f73bc30b521744e7b96e011ff08dddc881 100644 | 
| --- a/Source/core/frame/History.cpp | 
| +++ b/Source/core/frame/History.cpp | 
| @@ -30,7 +30,6 @@ | 
| #include "core/dom/Document.h" | 
| #include "core/dom/ExceptionCode.h" | 
| #include "core/frame/LocalFrame.h" | 
| -#include "core/frame/StateOptions.h" | 
| #include "core/loader/DocumentLoader.h" | 
| #include "core/loader/FrameLoader.h" | 
| #include "core/loader/FrameLoaderClient.h" | 
| @@ -78,14 +77,35 @@ SerializedScriptValue* History::stateInternal() const | 
| return 0; | 
| } | 
|  | 
| -void History::options(StateOptions& options) | 
| +void History::setScrollRestoration(const String& value) | 
| { | 
| -    if (!m_frame) | 
| +    ASSERT(value == "manual"  || value == "auto"); | 
| +    if (!m_frame || !m_frame->loader().client() || !RuntimeEnabledFeatures::scrollRestorationEnabled()) | 
| +        return; | 
| + | 
| +    HistoryScrollRestorationType scrollRestoration = value == "manual" ? ScrollRestorationManual : ScrollRestorationAuto; | 
| +    if (scrollRestoration == scrollRestorationInternal()) | 
| return; | 
|  | 
| if (HistoryItem* historyItem = m_frame->loader().currentItem()) { | 
| -        options.setScrollRestoration(historyItem->scrollRestorationType() == ScrollRestorationManual ? "manual" : "auto"); | 
| +        historyItem->setScrollRestorationType(scrollRestoration); | 
| +        m_frame->loader().client()->didUpdateCurrentHistoryItem(); | 
| +    } | 
| +} | 
| + | 
| +String History::scrollRestoration() | 
| +{ | 
| +    return scrollRestorationInternal() == ScrollRestorationManual ? "manual" : "auto"; | 
| +} | 
| + | 
| +HistoryScrollRestorationType History::scrollRestorationInternal() const | 
| +{ | 
| +    if (m_frame && RuntimeEnabledFeatures::scrollRestorationEnabled()) { | 
| +        if (HistoryItem* historyItem = m_frame->loader().currentItem()) | 
| +            return historyItem->scrollRestorationType(); | 
| } | 
| + | 
| +    return ScrollRestorationAuto; | 
| } | 
|  | 
| bool History::stateChanged() const | 
| @@ -139,7 +159,7 @@ KURL History::urlForState(const String& urlString) | 
| return KURL(document->baseURL(), urlString); | 
| } | 
|  | 
| -void History::stateObjectAdded(PassRefPtr<SerializedScriptValue> data, const String& /* title */, const String& urlString, const StateOptions& options, FrameLoadType type, ExceptionState& exceptionState) | 
| +void History::stateObjectAdded(PassRefPtr<SerializedScriptValue> data, const String& /* title */, const String& urlString, HistoryScrollRestorationType restorationType, FrameLoadType type, ExceptionState& exceptionState) | 
| { | 
| if (!m_frame || !m_frame->page() || !m_frame->loader().documentLoader()) | 
| return; | 
| @@ -151,10 +171,6 @@ void History::stateObjectAdded(PassRefPtr<SerializedScriptValue> data, const Str | 
| return; | 
| } | 
|  | 
| -    HistoryScrollRestorationType restorationType = ScrollRestorationAuto; | 
| -    if (RuntimeEnabledFeatures::scrollRestorationEnabled() && options.scrollRestoration() == "manual") | 
| -        restorationType = ScrollRestorationManual; | 
| - | 
| m_frame->loader().updateForSameDocumentNavigation(fullURL, SameDocumentNavigationHistoryApi, data, restorationType, type); | 
| } | 
|  | 
|  |