diff options
author | Grace Kloba <klobag@google.com> | 2009-11-24 14:22:22 -0800 |
---|---|---|
committer | Grace Kloba <klobag@google.com> | 2009-12-02 11:13:36 -0800 |
commit | 8ec4217018562da37ecf4144e582fa848b807263 (patch) | |
tree | e917a4c71fff6f8c4d065c130ba5bc1486d64e60 /WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp | |
parent | 73b03f71b87666e532e997c6bcd3eb6a4fc3228d (diff) | |
download | external_webkit-8ec4217018562da37ecf4144e582fa848b807263.zip external_webkit-8ec4217018562da37ecf4144e582fa848b807263.tar.gz external_webkit-8ec4217018562da37ecf4144e582fa848b807263.tar.bz2 |
Enable WebKit page cache through WebSettings.
Add setXX() for the meta data in Settings.
Add CachedFramePlatformDataAndroid to preserve the
state for the cachedFrame.
http://b/issue?id=2284168
Diffstat (limited to 'WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp')
-rw-r--r-- | WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp index 250382e..6338e26 100644 --- a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp +++ b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp @@ -29,6 +29,8 @@ #include "android_graphics.h" #include "CString.h" +#include "CachedFrame.h" +#include "CachedFramePlatformDataAndroid.h" #include "DocumentLoader.h" #include "DOMImplementation.h" #include "Frame.h" @@ -817,12 +819,16 @@ String FrameLoaderClientAndroid::userAgent(const KURL& u) { return m_webFrame->userAgentForURL(&u); } -void FrameLoaderClientAndroid::savePlatformDataToCachedFrame(WebCore::CachedFrame*) { - notImplemented(); +void FrameLoaderClientAndroid::savePlatformDataToCachedFrame(WebCore::CachedFrame* cachedFrame) { + CachedFramePlatformDataAndroid* platformData = new CachedFramePlatformDataAndroid(m_frame->settings()); + cachedFrame->setCachedFramePlatformData(platformData); } -void FrameLoaderClientAndroid::transitionToCommittedFromCachedFrame(WebCore::CachedFrame*) { - notImplemented(); +void FrameLoaderClientAndroid::transitionToCommittedFromCachedFrame(WebCore::CachedFrame* cachedFrame) { + CachedFramePlatformDataAndroid* platformData = reinterpret_cast<CachedFramePlatformDataAndroid*>(cachedFrame->cachedFramePlatformData()); +#ifdef ANDROID_META_SUPPORT + platformData->restoreMetadata(m_frame->settings()); +#endif } void FrameLoaderClientAndroid::transitionToCommittedForNewPage() { @@ -834,30 +840,23 @@ void FrameLoaderClientAndroid::transitionToCommittedForNewPage() { m_frame->settings()->resetMetadataSettings(); #endif - if (m_frame->settings() && !m_frame->settings()->usesPageCache()) { - m_webFrame->transitionToCommitted(m_frame); - return; - } - - // Remember the old WebFrameView - WebFrameView* webFrameView = static_cast<WebFrameView*> ( - m_frame->view()->platformWidget()); - Retain(webFrameView); - - // Remove the old FrameView - m_frame->setView(NULL); - - // Create a new FrameView and associate it with the saved webFrameView - RefPtr<FrameView> view = FrameView::create(m_frame); - webFrameView->setView(view.get()); - - Release(webFrameView); - - // Give the new FrameView to the Frame - m_frame->setView(view); - - if (m_frame->ownerRenderer()) - m_frame->ownerRenderer()->setWidget(view.get()); + // Save the old WebViewCore before creating a new FrameView. There is one + // WebViewCore per page. Each frame, including the main frame and sub frame, + // has a 1:1 FrameView and WebFrameView. + WebViewCore* webViewCore = WebViewCore::getWebViewCore(m_frame->view()); + Retain(webViewCore); + + WebFrameView* oldFrameView = static_cast<WebFrameView*> (m_frame->view()->platformWidget()); + // we only support opaque, white background for now + m_frame->createView(oldFrameView->getBounds().size(), Color::white, false, IntSize(), false); + + // Create a new WebFrameView for the new FrameView + WebFrameView* newFrameView = new WebFrameView(m_frame->view(), webViewCore); + // newFrameView attaches itself to FrameView which Retains the reference, so + // call Release for newFrameView + Release(newFrameView); + // WebFrameView Retains webViewCore, so call Release for webViewCore + Release(webViewCore); m_webFrame->transitionToCommitted(m_frame); } |