summaryrefslogtreecommitdiffstats
path: root/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
diff options
context:
space:
mode:
authorGrace Kloba <klobag@google.com>2009-11-24 14:22:22 -0800
committerGrace Kloba <klobag@google.com>2009-12-02 11:13:36 -0800
commit8ec4217018562da37ecf4144e582fa848b807263 (patch)
treee917a4c71fff6f8c4d065c130ba5bc1486d64e60 /WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
parent73b03f71b87666e532e997c6bcd3eb6a4fc3228d (diff)
downloadexternal_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.cpp55
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);
}