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

Side by Side 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: 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 #include "core/loader/FrameLoadRequest.h" 50 #include "core/loader/FrameLoadRequest.h"
51 #include "core/page/Page.h" 51 #include "core/page/Page.h"
52 #include "core/page/ScopedPageLoadDeferrer.h" 52 #include "core/page/ScopedPageLoadDeferrer.h"
53 #include "core/paint/PaintLayer.h" 53 #include "core/paint/PaintLayer.h"
54 #include "core/paint/PaintLayerPainter.h" 54 #include "core/paint/PaintLayerPainter.h"
55 #include "core/timing/DOMWindowPerformance.h" 55 #include "core/timing/DOMWindowPerformance.h"
56 #include "core/timing/Performance.h" 56 #include "core/timing/Performance.h"
57 #include "core/timing/PerformanceCompositeTiming.h" 57 #include "core/timing/PerformanceCompositeTiming.h"
58 #include "platform/KeyboardCodes.h" 58 #include "platform/KeyboardCodes.h"
59 #include "platform/UserGestureIndicator.h" 59 #include "platform/UserGestureIndicator.h"
60 #include "platform/geometry/IntRect.h"
60 #include "platform/geometry/IntSize.h" 61 #include "platform/geometry/IntSize.h"
61 #include "platform/graphics/Color.h" 62 #include "platform/graphics/Color.h"
62 #include "platform/graphics/GraphicsContext.h" 63 #include "platform/graphics/GraphicsContext.h"
63 #include "platform/graphics/paint/SkPictureBuilder.h" 64 #include "platform/graphics/paint/SkPictureBuilder.h"
65 #include "platform/scroll/ScrollTypes.h"
64 #include "platform/testing/URLTestHelpers.h" 66 #include "platform/testing/URLTestHelpers.h"
65 #include "platform/testing/UnitTestHelpers.h" 67 #include "platform/testing/UnitTestHelpers.h"
66 #include "public/platform/Platform.h" 68 #include "public/platform/Platform.h"
67 #include "public/platform/WebDisplayMode.h" 69 #include "public/platform/WebDisplayMode.h"
68 #include "public/platform/WebDragData.h" 70 #include "public/platform/WebDragData.h"
69 #include "public/platform/WebDragOperation.h" 71 #include "public/platform/WebDragOperation.h"
72 #include "public/platform/WebFloatPoint.h"
73 #include "public/platform/WebLayerTreeView.h"
70 #include "public/platform/WebMockClipboard.h" 74 #include "public/platform/WebMockClipboard.h"
71 #include "public/platform/WebSize.h" 75 #include "public/platform/WebSize.h"
72 #include "public/platform/WebThread.h" 76 #include "public/platform/WebThread.h"
73 #include "public/platform/WebURLLoaderMockFactory.h" 77 #include "public/platform/WebURLLoaderMockFactory.h"
74 #include "public/web/WebAutofillClient.h" 78 #include "public/web/WebAutofillClient.h"
75 #include "public/web/WebCache.h" 79 #include "public/web/WebCache.h"
76 #include "public/web/WebDateTimeChooserCompletion.h" 80 #include "public/web/WebDateTimeChooserCompletion.h"
77 #include "public/web/WebDeviceEmulationParams.h" 81 #include "public/web/WebDeviceEmulationParams.h"
78 #include "public/web/WebDocument.h" 82 #include "public/web/WebDocument.h"
79 #include "public/web/WebElement.h" 83 #include "public/web/WebElement.h"
80 #include "public/web/WebFrame.h" 84 #include "public/web/WebFrame.h"
81 #include "public/web/WebFrameClient.h" 85 #include "public/web/WebFrameClient.h"
82 #include "public/web/WebFrameContentDumper.h" 86 #include "public/web/WebFrameContentDumper.h"
83 #include "public/web/WebHitTestResult.h" 87 #include "public/web/WebHitTestResult.h"
84 #include "public/web/WebInputEvent.h" 88 #include "public/web/WebInputEvent.h"
85 #include "public/web/WebScriptSource.h" 89 #include "public/web/WebScriptSource.h"
86 #include "public/web/WebSettings.h" 90 #include "public/web/WebSettings.h"
87 #include "public/web/WebTreeScopeType.h" 91 #include "public/web/WebTreeScopeType.h"
88 #include "public/web/WebViewClient.h" 92 #include "public/web/WebViewClient.h"
89 #include "public/web/WebWidget.h" 93 #include "public/web/WebWidget.h"
90 #include "public/web/WebWidgetClient.h" 94 #include "public/web/WebWidgetClient.h"
91 #include "testing/gtest/include/gtest/gtest.h" 95 #include "testing/gtest/include/gtest/gtest.h"
92 #include "third_party/skia/include/core/SkBitmap.h" 96 #include "third_party/skia/include/core/SkBitmap.h"
93 #include "third_party/skia/include/core/SkCanvas.h" 97 #include "third_party/skia/include/core/SkCanvas.h"
98 #include "web/DevToolsEmulator.h"
94 #include "web/WebLocalFrameImpl.h" 99 #include "web/WebLocalFrameImpl.h"
95 #include "web/WebSettingsImpl.h" 100 #include "web/WebSettingsImpl.h"
96 #include "web/WebViewImpl.h" 101 #include "web/WebViewImpl.h"
97 #include "web/tests/FrameTestHelpers.h" 102 #include "web/tests/FrameTestHelpers.h"
98 #include "wtf/PtrUtil.h" 103 #include "wtf/PtrUtil.h"
99 #include <memory> 104 #include <memory>
100 105
101 #if OS(MACOSX) 106 #if OS(MACOSX)
102 #include "public/web/mac/WebSubstringUtil.h" 107 #include "public/web/mac/WebSubstringUtil.h"
103 #endif 108 #endif
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c _str()), WebString::fromUTF8("200-by-300.html")); 1076 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c _str()), WebString::fromUTF8("200-by-300.html"));
1072 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "20 0-by-300.html"); 1077 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "20 0-by-300.html");
1073 webViewImpl->resize(WebSize(200, 300)); 1078 webViewImpl->resize(WebSize(200, 300));
1074 1079
1075 float pageScaleExpected = webViewImpl->pageScaleFactor(); 1080 float pageScaleExpected = webViewImpl->pageScaleFactor();
1076 1081
1077 WebDeviceEmulationParams params; 1082 WebDeviceEmulationParams params;
1078 params.screenPosition = WebDeviceEmulationParams::Desktop; 1083 params.screenPosition = WebDeviceEmulationParams::Desktop;
1079 params.deviceScaleFactor = 0; 1084 params.deviceScaleFactor = 0;
1080 params.fitToView = false; 1085 params.fitToView = false;
1081 params.offset = WebFloatPoint();
dgozman 2016/08/29 20:45:36 Please revert these.
Eric Seckler 2016/09/12 13:58:00 Done.
1082 params.scale = 1;
1083 1086
1084 webViewImpl->enableDeviceEmulation(params); 1087 webViewImpl->enableDeviceEmulation(params);
1085 1088
1086 webViewImpl->setPageScaleFactor(2); 1089 webViewImpl->setPageScaleFactor(2);
1087 1090
1088 webViewImpl->disableDeviceEmulation(); 1091 webViewImpl->disableDeviceEmulation();
1089 1092
1090 EXPECT_EQ(pageScaleExpected, webViewImpl->pageScaleFactor()); 1093 EXPECT_EQ(pageScaleExpected, webViewImpl->pageScaleFactor());
1091 } 1094 }
1092 1095
(...skipping 2186 matching lines...) Expand 10 before | Expand all | Expand 10 after
3279 ScopedPageLoadDeferrer deferrer2; 3282 ScopedPageLoadDeferrer deferrer2;
3280 EXPECT_TRUE(webView->page()->defersLoading()); 3283 EXPECT_TRUE(webView->page()->defersLoading());
3281 } 3284 }
3282 3285
3283 EXPECT_TRUE(webView->page()->defersLoading()); 3286 EXPECT_TRUE(webView->page()->defersLoading());
3284 } 3287 }
3285 3288
3286 EXPECT_FALSE(webView->page()->defersLoading()); 3289 EXPECT_FALSE(webView->page()->defersLoading());
3287 } 3290 }
3288 3291
3292 TEST_F(WebViewTest, ForceAndResetViewport)
3293 {
3294 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c _str()), WebString::fromUTF8("200-by-300.html"));
3295 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "20 0-by-300.html");
3296 webViewImpl->resize(WebSize(100, 150));
3297 webViewImpl->layerTreeView()->setViewportSize(WebSize(100, 150));
3298 VisualViewport* visualViewport = &webViewImpl->page()->frameHost().visualVie wport();
3299 DevToolsEmulator* devToolsEmulator = webViewImpl->devToolsEmulator();
3300
3301 TransformationMatrix expectedMatrix;
3302 expectedMatrix.makeIdentity();
3303 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3304 EXPECT_FALSE(devToolsEmulator->visibleContentRectForPainting());
3305 EXPECT_TRUE(visualViewport->containerLayer()->masksToBounds());
3306
3307 // Override applies transform, sets visibleContentRect, and disables
3308 // visual viewport clipping.
3309 devToolsEmulator->forceViewport(WebFloatPoint(50, 55), 2.f);
3310 expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55);
3311 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3312 EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForP ainting());
3313 EXPECT_FALSE(visualViewport->containerLayer()->masksToBounds());
3314
3315 // Setting new override discards previous one.
3316 devToolsEmulator->forceViewport(WebFloatPoint(5.4f, 10.5f), 1.5f);
3317 expectedMatrix.makeIdentity().scale(1.5f).translate(-5.4f, -10.5f);
3318 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3319 EXPECT_EQ(IntRect(5, 10, 68, 101), *devToolsEmulator->visibleContentRectForP ainting());
3320 EXPECT_FALSE(visualViewport->containerLayer()->masksToBounds());
3321
3322 // Clearing override restores original transform, visibleContentRect and
3323 // visual viewport clipping.
3324 devToolsEmulator->resetViewport();
3325 expectedMatrix.makeIdentity();
3326 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3327 EXPECT_FALSE(devToolsEmulator->visibleContentRectForPainting());
3328 EXPECT_TRUE(visualViewport->containerLayer()->masksToBounds());
3329 }
3330
3331 TEST_F(WebViewTest, ViewportOverrideIntegratesDeviceMetricsOffsetAndScale)
3332 {
3333 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c _str()), WebString::fromUTF8("200-by-300.html"));
3334 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "20 0-by-300.html");
3335 webViewImpl->resize(WebSize(100, 150));
3336
3337 TransformationMatrix expectedMatrix;
3338 expectedMatrix.makeIdentity();
3339 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3340
3341 WebDeviceEmulationParams emulationParams;
3342 emulationParams.offset = WebFloatPoint(50, 50);
3343 emulationParams.scale = 2.f;
3344 webViewImpl->enableDeviceEmulation(emulationParams);
3345 expectedMatrix.makeIdentity().translate(50, 50).scale(2.f);
3346 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3347
3348 // Device metrics offset and scale are applied before viewport override.
3349 webViewImpl->devToolsEmulator()->forceViewport(WebFloatPoint(5, 10), 1.5f);
3350 expectedMatrix.makeIdentity().scale(1.5f).translate(-5, -10).translate(50, 5 0).scale(2.f);
3351 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3352 }
3353
3354 TEST_F(WebViewTest, ViewportOverrideAdaptsToScaleAndScroll)
3355 {
3356 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c _str()), WebString::fromUTF8("200-by-300.html"));
3357 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(m_baseURL + "20 0-by-300.html");
3358 webViewImpl->resize(WebSize(100, 150));
3359 webViewImpl->layerTreeView()->setViewportSize(WebSize(100, 150));
3360 FrameView* frameView = webViewImpl->mainFrameImpl()->frame()->view();
3361 DevToolsEmulator* devToolsEmulator = webViewImpl->devToolsEmulator();
3362
3363 TransformationMatrix expectedMatrix;
3364 expectedMatrix.makeIdentity();
3365 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3366
3367 // Initial transform takes current page scale and scroll position into
3368 // account.
3369 webViewImpl->setPageScaleFactor(1.5f);
3370 frameView->setScrollPosition(DoublePoint(100, 150), ProgrammaticScroll, Scro llBehaviorInstant);
3371 devToolsEmulator->forceViewport(WebFloatPoint(50, 55), 2.f);
3372 expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55).translate(100, 150).scale(1. / 1.5f);
3373 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3374 // Page scroll and scale are irrelevant for visibleContentRect.
3375 EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForP ainting());
3376
3377 // Transform adapts to scroll changes.
3378 frameView->setScrollPosition(DoublePoint(50, 55), ProgrammaticScroll, Scroll BehaviorInstant);
3379 expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55).translate(50, 5 5).scale(1. / 1.5f);
3380 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3381 // visibleContentRect doesn't change.
3382 EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForP ainting());
3383
3384 // Transform adapts to page scale changes.
3385 webViewImpl->setPageScaleFactor(2.f);
3386 expectedMatrix.makeIdentity().scale(2.f).translate(-50, -55).translate(50, 5 5).scale(1. / 2.f);
3387 EXPECT_EQ(expectedMatrix, webViewImpl->getRootLayerTransformForTesting());
3388 // visibleContentRect doesn't change.
3389 EXPECT_EQ(IntRect(50, 55, 50, 75), *devToolsEmulator->visibleContentRectForP ainting());
3390 }
3391
3289 } // namespace blink 3392 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698