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

Unified Diff: third_party/WebKit/Source/web/tests/WebViewTest.cpp

Issue 2237433004: Adds DevTools commands for forced viewport override. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adress Dmitry's comments + sync. Created 4 years, 3 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: third_party/WebKit/Source/web/tests/WebViewTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
index 239123de6927ea4f08f3ac23fc9e5ed4c4a64c41..713d527b0ab9e1f3074dcf17f49e12d3be4d77b8 100644
--- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -57,16 +57,20 @@
#include "core/timing/PerformanceCompositeTiming.h"
#include "platform/KeyboardCodes.h"
#include "platform/UserGestureIndicator.h"
+#include "platform/geometry/IntRect.h"
#include "platform/geometry/IntSize.h"
#include "platform/graphics/Color.h"
#include "platform/graphics/GraphicsContext.h"
#include "platform/graphics/paint/SkPictureBuilder.h"
+#include "platform/scroll/ScrollTypes.h"
#include "platform/testing/URLTestHelpers.h"
#include "platform/testing/UnitTestHelpers.h"
#include "public/platform/Platform.h"
#include "public/platform/WebDisplayMode.h"
#include "public/platform/WebDragData.h"
#include "public/platform/WebDragOperation.h"
+#include "public/platform/WebFloatPoint.h"
+#include "public/platform/WebLayerTreeView.h"
#include "public/platform/WebMockClipboard.h"
#include "public/platform/WebSize.h"
#include "public/platform/WebThread.h"
@@ -91,6 +95,7 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
+#include "web/DevToolsEmulator.h"
#include "web/WebLocalFrameImpl.h"
#include "web/WebSettingsImpl.h"
#include "web/WebViewImpl.h"
@@ -3617,4 +3622,104 @@ TEST_F(WebViewTest, NestedLoadDeferrals)
EXPECT_FALSE(webView->page()->defersLoading());
}
+TEST_F(WebViewTest, ForceAndResetViewport)
+{
+ URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("200-by-300.html"));
+ WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "200-by-300.html");
+ webViewImpl->resize(WebSize(100, 150));
+ webViewImpl->layerTreeView()->setViewportSize(WebSize(100, 150));
+ VisualViewport* visualViewport = &webViewImpl->page()->frameHost().visualViewport();
+ DevToolsEmulator* devToolsEmulator = webViewImpl->devToolsEmulator();
+
+ TransformationMatrix expectedMatrix;
+ expectedMatrix.makeIdentity();
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+ EXPECT_FALSE(devToolsEmulator->visibleContentRectForPainting());
+ EXPECT_TRUE(visualViewport->containerLayer()->masksToBounds());
+
+ // Override applies transform, sets visibleContentRect, and disables
+ // visual viewport clipping.
+ devToolsEmulator->forceViewport(WebFloatPoint(50, 55), 2.f);
+ expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55);
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+ EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForPainting());
+ EXPECT_FALSE(visualViewport->containerLayer()->masksToBounds());
+
+ // Setting new override discards previous one.
+ devToolsEmulator->forceViewport(WebFloatPoint(5.4f, 10.5f), 1.5f);
+ expectedMatrix.makeIdentity().scale(1.5f).translate(-5.4f, -10.5f);
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+ EXPECT_EQ(IntRect(5, 10, 68, 101), *devToolsEmulator->visibleContentRectForPainting());
+ EXPECT_FALSE(visualViewport->containerLayer()->masksToBounds());
+
+ // Clearing override restores original transform, visibleContentRect and
+ // visual viewport clipping.
+ devToolsEmulator->resetViewport();
+ expectedMatrix.makeIdentity();
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+ EXPECT_FALSE(devToolsEmulator->visibleContentRectForPainting());
+ EXPECT_TRUE(visualViewport->containerLayer()->masksToBounds());
+}
+
+TEST_F(WebViewTest, ViewportOverrideIntegratesDeviceMetricsOffsetAndScale)
+{
+ URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("200-by-300.html"));
+ WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "200-by-300.html");
+ webViewImpl->resize(WebSize(100, 150));
+
+ TransformationMatrix expectedMatrix;
+ expectedMatrix.makeIdentity();
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+
+ WebDeviceEmulationParams emulationParams;
+ emulationParams.offset = WebFloatPoint(50, 50);
+ emulationParams.scale = 2.f;
+ webViewImpl->enableDeviceEmulation(emulationParams);
+ expectedMatrix.makeIdentity().translate(50, 50).scale(2.f);
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+
+ // Device metrics offset and scale are applied before viewport override.
+ webViewImpl->devToolsEmulator()->forceViewport(WebFloatPoint(5, 10), 1.5f);
+ expectedMatrix.makeIdentity().scale(1.5f).translate(-5, -10).translate(50, 50).scale(2.f);
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+}
+
+TEST_F(WebViewTest, ViewportOverrideAdaptsToScaleAndScroll)
+{
+ URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("200-by-300.html"));
+ WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "200-by-300.html");
+ webViewImpl->resize(WebSize(100, 150));
+ webViewImpl->layerTreeView()->setViewportSize(WebSize(100, 150));
+ FrameView* frameView = webViewImpl->mainFrameImpl()->frame()->view();
+ DevToolsEmulator* devToolsEmulator = webViewImpl->devToolsEmulator();
+
+ TransformationMatrix expectedMatrix;
+ expectedMatrix.makeIdentity();
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+
+ // Initial transform takes current page scale and scroll position into
+ // account.
+ webViewImpl->setPageScaleFactor(1.5f);
+ frameView->setScrollPosition(DoublePoint(100, 150), ProgrammaticScroll, ScrollBehaviorInstant);
+ devToolsEmulator->forceViewport(WebFloatPoint(50, 55), 2.f);
+ expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55).translate(100, 150).scale(1. / 1.5f);
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+ // Page scroll and scale are irrelevant for visibleContentRect.
+ EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForPainting());
+
+ // Transform adapts to scroll changes.
+ frameView->setScrollPosition(DoublePoint(50, 55), ProgrammaticScroll, ScrollBehaviorInstant);
+ expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55).translate(50, 55).scale(1. / 1.5f);
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+ // visibleContentRect doesn't change.
+ EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForPainting());
+
+ // Transform adapts to page scale changes.
+ webViewImpl->setPageScaleFactor(2.f);
+ expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55).translate(50, 55).scale(1. / 2.f);
+ EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
+ // visibleContentRect doesn't change.
+ EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForPainting());
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698