From 8ec4217018562da37ecf4144e582fa848b807263 Mon Sep 17 00:00:00 2001 From: Grace Kloba Date: Tue, 24 Nov 2009 14:22:22 -0800 Subject: 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 --- .../WebCoreSupport/FrameLoaderClientAndroid.cpp | 55 +++++++++++----------- 1 file changed, 27 insertions(+), 28 deletions(-) (limited to 'WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp') 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(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 ( - 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 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 (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); } -- cgit v1.1