Chromium Code Reviews| Index: Source/WebKit/chromium/tests/WebFrameTest.cpp |
| diff --git a/Source/WebKit/chromium/tests/WebFrameTest.cpp b/Source/WebKit/chromium/tests/WebFrameTest.cpp |
| index 005801ca99d5768ffe6f9709c407d6dd7f9b1f0b..0dae849169034f1573e05b5e412098a576f5d92e 100644 |
| --- a/Source/WebKit/chromium/tests/WebFrameTest.cpp |
| +++ b/Source/WebKit/chromium/tests/WebFrameTest.cpp |
| @@ -37,6 +37,7 @@ |
| #include "Frame.h" |
| #include "FrameTestHelpers.h" |
| #include "FrameView.h" |
| +#include "HitTestResult.h" |
| #include "PlatformContextSkia.h" |
| #include "Range.h" |
| #include "RenderView.h" |
| @@ -573,6 +574,52 @@ TEST_F(WebFrameTest, pageScaleFactorDoesNotApplyCssTransform) |
| EXPECT_EQ(980, webViewImpl->page()->mainFrame()->contentRenderer()->unscaledDocumentRect().width()); |
| EXPECT_EQ(980, webViewImpl->mainFrameImpl()->frameView()->contentsSize().width()); |
| } |
| + |
| +static WebCore::FloatSize computeRelativeOffset(const WebCore::IntPoint& absoluteOffset, const WebCore::LayoutRect& rect) |
| +{ |
| + WebCore::FloatSize relativeOffset = WebCore::FloatPoint(absoluteOffset) - rect.location(); |
| + relativeOffset.scale(1.f / rect.width(), 1.f / rect.height()); |
|
aelias_OOO_until_Jul13
2013/04/08 04:24:52
Delete .f
jdduke (slow)
2013/04/10 16:58:19
Done.
|
| + return relativeOffset; |
| +} |
| + |
| +TEST_F(WebFrameTest, resizePreservesRelativeScrollOffset) |
| +{ |
| + registerMockedHttpURLLoad("resize_scroll_anchor.html"); |
| + |
| + const WebSize viewportSize = WebSize(320, 240); |
| + |
| + m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "resize_scroll_anchor.html", true); |
| + m_webView->settings()->setViewportEnabled(true); |
| + m_webView->setPageScaleFactor(2.0f, WebPoint()); |
| + m_webView->enableFixedLayoutMode(false); |
|
aelias_OOO_until_Jul13
2013/04/08 04:24:52
This is odd, on Android fixedLayoutMode setting is
jdduke (slow)
2013/04/10 16:58:19
Nothing broken, I was too lazy to check the defaul
|
| + WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView); |
| + |
| + // Resize at origin |
| + webViewImpl->resize(WebSize(viewportSize.width, viewportSize.height)); |
| + webViewImpl->mainFrame()->setScrollOffset(WebSize()); |
| + ASSERT_EQ(WebSize(), webViewImpl->mainFrame()->scrollOffset()); |
|
aelias_OOO_until_Jul13
2013/04/08 04:24:52
Delete this assert.
jdduke (slow)
2013/04/10 16:58:19
Done.
|
| + webViewImpl->resize(WebSize(viewportSize.height * 2 , viewportSize.width / 2)); |
| + EXPECT_EQ(WebSize(), webViewImpl->mainFrame()->scrollOffset()); |
| + |
| + // Resize as rotation |
| + const WebSize scrollOffset = WebSize(200, 400); |
| + webViewImpl->resize(WebSize(viewportSize.width, viewportSize.height)); |
| + webViewImpl->mainFrame()->setScrollOffset(scrollOffset); |
| + ASSERT_EQ(scrollOffset, webViewImpl->mainFrame()->scrollOffset()); |
|
aelias_OOO_until_Jul13
2013/04/08 04:24:52
Delete this assert.
jdduke (slow)
2013/04/10 16:58:19
Done.
|
| + |
| + WebCore::IntPoint anchorPoint = WebCore::IntPoint(scrollOffset) + WebCore::IntPoint(viewportSize.width / 2, 0); |
| + RefPtr<WebCore::Node> anchorNode |
| + = webViewImpl->mainFrameImpl()->frame()->eventHandler()->hitTestResultAtPoint(anchorPoint).innerNode(); |
| + ASSERT(anchorNode); |
| + |
| + const WebCore::FloatSize preResizeRelativeOffset |
| + = computeRelativeOffset(anchorPoint, anchorNode->Node::boundingBox()); |
| + webViewImpl->resize(WebSize(viewportSize.height, viewportSize.width)); |
| + WebCore::IntPoint newAnchorPoint = WebCore::IntPoint(webViewImpl->mainFrame()->scrollOffset()) + WebCore::IntPoint(viewportSize.height / 2, 0); |
| + const WebCore::FloatSize postResizeRelativeOffset |
| + = computeRelativeOffset(newAnchorPoint, anchorNode->Node::boundingBox()); |
|
aelias_OOO_until_Jul13
2013/04/08 04:24:52
anchorNode->boundingBox()
|
| + EXPECT_NEAR(preResizeRelativeOffset.width(), postResizeRelativeOffset.width(), 0.1f); |
| +} |
| #endif |
| TEST_F(WebFrameTest, pageScaleFactorScalesPaintClip) |