Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Unified Diff: Source/WebKit/chromium/tests/WebFrameTest.cpp

Issue 13704012: Improve mobile device rotation behavior. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)

Powered by Google App Engine
This is Rietveld 408576698