summaryrefslogtreecommitdiffstats
path: root/Source/WebKit
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-02-28 18:42:02 -0800
committerNicolas Roard <nicolasroard@google.com>2012-03-01 16:38:55 -0800
commit9a8423b643a8ce99e5642f2548600f9125382e89 (patch)
tree1121fb39001bead0e89edd593b40a16a0397d710 /Source/WebKit
parentbd4ee4debb53cea094c09b198f7ba4e8307a2998 (diff)
downloadexternal_webkit-9a8423b643a8ce99e5642f2548600f9125382e89.zip
external_webkit-9a8423b643a8ce99e5642f2548600f9125382e89.tar.gz
external_webkit-9a8423b643a8ce99e5642f2548600f9125382e89.tar.bz2
Fix iframe, for reals!
Change-Id: I588aa5709e7a3c2ced9479c3cf9c1827bf6f7733
Diffstat (limited to 'Source/WebKit')
-rw-r--r--Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp40
-rw-r--r--Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp6
-rw-r--r--Source/WebKit/android/jni/WebFrameView.cpp5
-rw-r--r--Source/WebKit/android/jni/WebFrameView.h2
-rw-r--r--Source/WebKit/android/jni/WebViewCore.cpp26
5 files changed, 37 insertions, 42 deletions
diff --git a/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp b/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
index c573b4e..d7c21e3 100644
--- a/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
+++ b/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
@@ -946,10 +946,10 @@ void FrameLoaderClientAndroid::transitionToCommittedForNewPage() {
// Save the old WebFrameView's bounds and apply them to the new WebFrameView
WebFrameView* oldWebFrameView = static_cast<WebFrameView*> (m_frame->view()->platformWidget());
- IntRect bounds = oldWebFrameView->getBounds();
- IntRect visBounds = oldWebFrameView->getVisibleBounds();
- IntRect windowBounds = oldWebFrameView->getWindowBounds();
- WebCore::FrameView* oldFrameView = oldWebFrameView->view();
+ IntRect bounds;
+ if (oldWebFrameView)
+ bounds = oldWebFrameView->getBounds();
+ WebCore::FrameView* oldFrameView = m_frame->view();
const float oldZoomFactor = oldFrameView->frame()->textZoomFactor();
m_frame->createView(bounds.size(), oldFrameView->baseBackgroundColor(), oldFrameView->isTransparent(),
oldFrameView->fixedLayoutSize(), oldFrameView->useFixedLayout());
@@ -957,21 +957,19 @@ void FrameLoaderClientAndroid::transitionToCommittedForNewPage() {
m_frame->setTextZoomFactor(oldZoomFactor);
}
- // Create a new WebFrameView for the new FrameView
- WebFrameView* newFrameView = new WebFrameView(m_frame->view(), webViewCore);
-
-#if ENABLE(ANDROID_OVERFLOW_SCROLL)
-#else
- webViewCore->clearContent();
-#endif
-
- newFrameView->setLocation(bounds.x(), bounds.y());
- newFrameView->setSize(bounds.width(), bounds.height());
- newFrameView->setVisibleSize(visBounds.width(), visBounds.height());
- newFrameView->setWindowBounds(windowBounds.x(), windowBounds.y(), windowBounds.width(), windowBounds.height());
- // newFrameView attaches itself to FrameView which Retains the reference, so
- // call Release for newFrameView
- Release(newFrameView);
+ if (oldWebFrameView) {
+ IntRect visBounds = oldWebFrameView->getVisibleBounds();
+ IntRect windowBounds = oldWebFrameView->getWindowBounds();
+ // Create a new WebFrameView for the new FrameView
+ WebFrameView* newFrameView = new WebFrameView(m_frame->view(), webViewCore);
+ newFrameView->setLocation(bounds.x(), bounds.y());
+ newFrameView->setSize(bounds.width(), bounds.height());
+ newFrameView->setVisibleSize(visBounds.width(), visBounds.height());
+ newFrameView->setWindowBounds(windowBounds.x(), windowBounds.y(), windowBounds.width(), windowBounds.height());
+ // 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);
@@ -1007,10 +1005,6 @@ WTF::PassRefPtr<WebCore::Frame> FrameLoaderClientAndroid::createFrame(const KURL
newFrame->tree()->setName(name);
// Create a new FrameView and WebFrameView for the child frame to draw into.
RefPtr<FrameView> frameView = FrameView::create(newFrame);
- WebFrameView* webFrameView = new WebFrameView(frameView.get(),
- WebViewCore::getWebViewCore(parent->view()));
- // frameView Retains webFrameView, so call Release for webFrameView
- Release(webFrameView);
// Attach the frameView to the newFrame.
newFrame->setView(frameView);
newFrame->init();
diff --git a/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp b/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp
index e536701..000cd5a 100644
--- a/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp
+++ b/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp
@@ -181,12 +181,6 @@ void PlatformBridge::setScrollPosition(ScrollView* scrollView, int x, int y) {
y = std::max(0, std::min(frameView->contentsHeight(), y));
if ((x != visibleContentRect.x()) || (y != visibleContentRect.y()))
webViewCore->scrollTo(x, y);
- } else {
- RenderView* renderer = frameView->frame()->contentRenderer();
- if (renderer) {
- RenderLayer* layer = renderer->layer();
- layer->scrollToOffset(x, y);
- }
}
}
diff --git a/Source/WebKit/android/jni/WebFrameView.cpp b/Source/WebKit/android/jni/WebFrameView.cpp
index 8e5eac4..a9b90cb 100644
--- a/Source/WebKit/android/jni/WebFrameView.cpp
+++ b/Source/WebKit/android/jni/WebFrameView.cpp
@@ -96,9 +96,4 @@ void WebFrameView::draw(WebCore::GraphicsContext* ctx, const WebCore::IntRect& r
}
}
-void WebFrameView::setView(WebCore::FrameView* frameView) {
- mFrameView = frameView;
- mFrameView->setPlatformWidget(this);
-}
-
} // namespace android
diff --git a/Source/WebKit/android/jni/WebFrameView.h b/Source/WebKit/android/jni/WebFrameView.h
index 117b603..ac81afe 100644
--- a/Source/WebKit/android/jni/WebFrameView.h
+++ b/Source/WebKit/android/jni/WebFrameView.h
@@ -47,8 +47,6 @@ namespace android {
return mWebViewCore;
}
- void setView(WebCore::FrameView* frameView);
-
WebCore::FrameView* view() const {
return mFrameView;
}
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp
index 1351d8f..443f2ca 100644
--- a/Source/WebKit/android/jni/WebViewCore.cpp
+++ b/Source/WebKit/android/jni/WebViewCore.cpp
@@ -536,18 +536,27 @@ WebViewCore::~WebViewCore()
WebViewCore* WebViewCore::getWebViewCore(const WebCore::FrameView* view)
{
- return getWebViewCore(static_cast<const WebCore::ScrollView*>(view));
+ if (!view)
+ return 0;
+ Frame* frame = view->frame();
+ while (Frame* parent = frame->tree()->parent())
+ frame = parent;
+ WebFrameView* webFrameView = 0;
+ if (frame && frame->view())
+ webFrameView = static_cast<WebFrameView*>(frame->view()->platformWidget());
+ if (!webFrameView)
+ return 0;
+ return webFrameView->webViewCore();
}
WebViewCore* WebViewCore::getWebViewCore(const WebCore::ScrollView* view)
{
if (!view)
return 0;
-
- WebFrameView* webFrameView = static_cast<WebFrameView*>(view->platformWidget());
- if (!webFrameView)
+ FrameView* frameView = static_cast<FrameView*>(view->root());
+ if (!frameView)
return 0;
- return webFrameView->webViewCore();
+ return getWebViewCore(frameView);
}
static bool layoutIfNeededRecursive(WebCore::Frame* f)
@@ -3997,7 +4006,12 @@ void WebViewCore::scrollRenderLayer(int layer, const SkRect& rect)
if (!owner)
return;
- owner->scrollToOffset(rect.fLeft, rect.fTop);
+ if (owner->isRootLayer()) {
+ FrameView* view = owner->renderer()->frame()->view();
+ IntPoint pt(rect.fLeft, rect.fTop);
+ view->setScrollPosition(pt);
+ } else
+ owner->scrollToOffset(rect.fLeft, rect.fTop);
#endif
}