Index: Source/web/tests/WebFrameTest.cpp |
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
index ce479e49f729517d372f2f70f8744fa037ccabd4..d08fd605676aab61fcc0be89b0fdcca106bee359 100644 |
--- a/Source/web/tests/WebFrameTest.cpp |
+++ b/Source/web/tests/WebFrameTest.cpp |
@@ -97,6 +97,7 @@ |
#include "public/web/WebCache.h" |
#include "public/web/WebConsoleMessage.h" |
#include "public/web/WebDataSource.h" |
+#include "public/web/WebDeviceEmulationParams.h" |
#include "public/web/WebDocument.h" |
#include "public/web/WebFindOptions.h" |
#include "public/web/WebFormElement.h" |
@@ -7732,6 +7733,57 @@ TEST_P(ParameterizedWebFrameTest, CrossDomainAccessErrorsUseCallingWindow) |
popupWebViewHelper.reset(); |
} |
+class ViewportOnResizeTest : public ParameterizedWebFrameTest { |
+protected: |
+ ViewportOnResizeTest() |
+ : m_webViewHelper(this) |
+ { |
+ registerMockedHttpURLLoad("viewport_emulation.html"); |
+ m_client.m_screenInfo.deviceScaleFactor = 1; |
+ m_webViewHelper.initializeAndLoad(m_baseURL + "viewport_emulation.html", true, 0, &m_client); |
+ } |
+ |
+ void testResize(const WebSize size, const String& expectedSize) |
+ { |
+ m_client.m_screenInfo.rect = WebRect(0, 0, size.width, size.height); |
+ m_client.m_screenInfo.availableRect = m_client.m_screenInfo.rect; |
+ m_webViewHelper.webView()->resize(size); |
+ m_webViewHelper.webView()->layout(); |
+ |
+ v8::HandleScope scope(v8::Isolate::GetCurrent()); |
+ ScriptExecutionCallbackHelper callbackHelper(m_webViewHelper.webView()->mainFrame()->mainWorldScriptContext()); |
+ m_webViewHelper.webView()->mainFrame()->toWebLocalFrame()->requestExecuteScriptAndReturnValue(WebScriptSource(WebString("dumpSize()")), false, &callbackHelper); |
+ runPendingTasks(); |
+ EXPECT_TRUE(callbackHelper.didComplete()); |
+ EXPECT_EQ(expectedSize, callbackHelper.stringValue()); |
+ } |
+ |
+ FixedLayoutTestWebViewClient m_client; |
+ FrameTestHelpers::WebViewHelper m_webViewHelper; |
+}; |
+ |
+INSTANTIATE_TEST_CASE_P(All, ViewportOnResizeTest, ::testing::Values( |
+ ParameterizedWebFrameTestConfig::Default, |
+ ParameterizedWebFrameTestConfig::RootLayerScrolls)); |
+ |
+TEST_P(ViewportOnResizeTest, ViewportInvalidatedOnResizeWithEmulation) |
+{ |
+ WebDeviceEmulationParams params; |
+ params.screenPosition = WebDeviceEmulationParams::Mobile; |
+ m_webViewHelper.webView()->enableDeviceEmulation(params); |
+ |
+ testResize(WebSize(700, 500), "300x300"); |
+ testResize(WebSize(710, 500), "400x300"); |
+ testResize(WebSize(690, 500), "200x300"); |
+ testResize(WebSize(700, 510), "300x400"); |
+ testResize(WebSize(700, 490), "300x200"); |
+ testResize(WebSize(710, 510), "400x400"); |
+ testResize(WebSize(690, 490), "200x200"); |
+ testResize(WebSize(800, 600), "400x400"); |
+ |
+ m_webViewHelper.webView()->disableDeviceEmulation(); |
+} |
+ |
class WebLocalFrameScope final { |
public: |
WebLocalFrameScope(WebLocalFrame* localFrame) |