diff options
author | Nicolas Roard <nicolasroard@google.com> | 2012-03-01 17:58:10 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-01 17:58:10 -0800 |
commit | f9aa763e9ad41bee64fbd834d1acf4a158e93a3e (patch) | |
tree | 8a916a7c54b10b76e79cd02b80f4a434b42747f9 /Source/WebKit | |
parent | 1e0965438976cdf0f18c3594c0bc353c2cecfc6c (diff) | |
parent | 9a8423b643a8ce99e5642f2548600f9125382e89 (diff) | |
download | external_webkit-f9aa763e9ad41bee64fbd834d1acf4a158e93a3e.zip external_webkit-f9aa763e9ad41bee64fbd834d1acf4a158e93a3e.tar.gz external_webkit-f9aa763e9ad41bee64fbd834d1acf4a158e93a3e.tar.bz2 |
Merge "Fix iframe, for reals!"
Diffstat (limited to 'Source/WebKit')
-rw-r--r-- | Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp | 40 | ||||
-rw-r--r-- | Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp | 6 | ||||
-rw-r--r-- | Source/WebKit/android/jni/WebFrameView.cpp | 5 | ||||
-rw-r--r-- | Source/WebKit/android/jni/WebFrameView.h | 2 | ||||
-rw-r--r-- | Source/WebKit/android/jni/WebViewCore.cpp | 26 |
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 } |