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

Side by Side Diff: third_party/WebKit/Source/web/tests/WebViewTest.cpp

Issue 2738173002: Initial containing block for print not affected by page zoom. (Closed)
Patch Set: Missing IncludeScrollbars. Created 3 years, 9 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
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameView.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 19 matching lines...) Expand all
30 30
31 #include "public/web/WebView.h" 31 #include "public/web/WebView.h"
32 32
33 #include <memory> 33 #include <memory>
34 34
35 #include "bindings/core/v8/V8Document.h" 35 #include "bindings/core/v8/V8Document.h"
36 #include "core/dom/Document.h" 36 #include "core/dom/Document.h"
37 #include "core/dom/DocumentUserGestureToken.h" 37 #include "core/dom/DocumentUserGestureToken.h"
38 #include "core/dom/Element.h" 38 #include "core/dom/Element.h"
39 #include "core/dom/Fullscreen.h" 39 #include "core/dom/Fullscreen.h"
40 #include "core/dom/NodeComputedStyle.h"
40 #include "core/editing/FrameSelection.h" 41 #include "core/editing/FrameSelection.h"
41 #include "core/editing/InputMethodController.h" 42 #include "core/editing/InputMethodController.h"
42 #include "core/editing/markers/DocumentMarkerController.h" 43 #include "core/editing/markers/DocumentMarkerController.h"
43 #include "core/frame/EventHandlerRegistry.h" 44 #include "core/frame/EventHandlerRegistry.h"
44 #include "core/frame/FrameHost.h" 45 #include "core/frame/FrameHost.h"
45 #include "core/frame/FrameView.h" 46 #include "core/frame/FrameView.h"
46 #include "core/frame/LocalFrame.h" 47 #include "core/frame/LocalFrame.h"
47 #include "core/frame/Settings.h" 48 #include "core/frame/Settings.h"
48 #include "core/frame/VisualViewport.h" 49 #include "core/frame/VisualViewport.h"
49 #include "core/html/HTMLIFrameElement.h" 50 #include "core/html/HTMLIFrameElement.h"
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 int expectedHeight, 252 int expectedHeight,
252 HorizontalScrollbarState expectedHorizontalState, 253 HorizontalScrollbarState expectedHorizontalState,
253 VerticalScrollbarState expectedVerticalState); 254 VerticalScrollbarState expectedVerticalState);
254 255
255 void testTextInputType(WebTextInputType expectedType, 256 void testTextInputType(WebTextInputType expectedType,
256 const std::string& htmlFile); 257 const std::string& htmlFile);
257 void testInputMode(WebTextInputMode expectedInputMode, 258 void testInputMode(WebTextInputMode expectedInputMode,
258 const std::string& htmlFile); 259 const std::string& htmlFile);
259 bool tapElement(WebInputEvent::Type, Element*); 260 bool tapElement(WebInputEvent::Type, Element*);
260 bool tapElementById(WebInputEvent::Type, const WebString& id); 261 bool tapElementById(WebInputEvent::Type, const WebString& id);
262 IntSize printICBSizeFromPageSize(const FloatSize& pageSize);
261 263
262 std::string m_baseURL; 264 std::string m_baseURL;
263 FrameTestHelpers::WebViewHelper m_webViewHelper; 265 FrameTestHelpers::WebViewHelper m_webViewHelper;
264 }; 266 };
265 267
266 static bool hitTestIsContentEditable(WebView* view, int x, int y) { 268 static bool hitTestIsContentEditable(WebView* view, int x, int y) {
267 WebPoint hitPoint(x, y); 269 WebPoint hitPoint(x, y);
268 WebHitTestResult hitTestResult = view->hitTestResultAt(hitPoint); 270 WebHitTestResult hitTestResult = view->hitTestResultAt(hitPoint);
269 return hitTestResult.isContentEditable(); 271 return hitTestResult.isContentEditable();
270 } 272 }
(...skipping 1714 matching lines...) Expand 10 before | Expand all | Expand 10 after
1985 } 1987 }
1986 1988
1987 bool WebViewTest::tapElementById(WebInputEvent::Type type, 1989 bool WebViewTest::tapElementById(WebInputEvent::Type type,
1988 const WebString& id) { 1990 const WebString& id) {
1989 DCHECK(m_webViewHelper.webView()); 1991 DCHECK(m_webViewHelper.webView());
1990 Element* element = static_cast<Element*>( 1992 Element* element = static_cast<Element*>(
1991 m_webViewHelper.webView()->mainFrame()->document().getElementById(id)); 1993 m_webViewHelper.webView()->mainFrame()->document().getElementById(id));
1992 return tapElement(type, element); 1994 return tapElement(type, element);
1993 } 1995 }
1994 1996
1997 IntSize WebViewTest::printICBSizeFromPageSize(const FloatSize& pageSize) {
1998 // This needs to match printingMinimumShrinkFactor in PrintContext.cpp. The
1999 // layout is scaled by this factor for printing.
2000 constexpr float minimumShrinkFactor = 1.333f;
2001
2002 // The expected layout size comes from the calculation done in
2003 // resizePageRectsKeepingRatio which is used from PrintContext::begin to
2004 // scale the page size.
2005 const float ratio = pageSize.height() / (float)pageSize.width();
2006 const int icbWidth = floor(pageSize.width() * minimumShrinkFactor);
2007 const int icbHeight = floor(icbWidth * ratio);
2008 return IntSize(icbWidth, icbHeight);
2009 }
2010
1995 TEST_P(WebViewTest, DetectContentAroundPosition) { 2011 TEST_P(WebViewTest, DetectContentAroundPosition) {
1996 registerMockedHttpURLLoad("content_listeners.html"); 2012 registerMockedHttpURLLoad("content_listeners.html");
1997 2013
1998 ContentDetectorClient client; 2014 ContentDetectorClient client;
1999 WebView* webView = m_webViewHelper.initializeAndLoad( 2015 WebView* webView = m_webViewHelper.initializeAndLoad(
2000 m_baseURL + "content_listeners.html", true, 0, &client); 2016 m_baseURL + "content_listeners.html", true, 0, &client);
2001 webView->resize(WebSize(500, 300)); 2017 webView->resize(WebSize(500, 300));
2002 webView->updateAllLifecyclePhases(); 2018 webView->updateAllLifecyclePhases();
2003 runPendingTasks(); 2019 runPendingTasks();
2004 2020
(...skipping 2251 matching lines...) Expand 10 before | Expand all | Expand 10 after
4256 Element* vwElement = document->getElementById("vw"); 4272 Element* vwElement = document->getElementById("vw");
4257 4273
4258 EXPECT_EQ(800, vwElement->offsetWidth()); 4274 EXPECT_EQ(800, vwElement->offsetWidth());
4259 4275
4260 FloatSize pageSize(300, 360); 4276 FloatSize pageSize(300, 360);
4261 4277
4262 WebPrintParams printParams; 4278 WebPrintParams printParams;
4263 printParams.printContentArea.width = pageSize.width(); 4279 printParams.printContentArea.width = pageSize.width();
4264 printParams.printContentArea.height = pageSize.height(); 4280 printParams.printContentArea.height = pageSize.height();
4265 4281
4266 // This needs to match printingMinimumShrinkFactor in PrintContext.cpp. The 4282 IntSize expectedSize = printICBSizeFromPageSize(pageSize);
4267 // layout is scaled by this factor for printing.
4268 constexpr float minimumShrinkFactor = 1.333f;
4269
4270 // The expected layout size comes from the calculation done in
4271 // resizePageRectsKeepingRatio which is used from PrintContext::begin to
4272 // scale the page size.
4273 const float ratio = pageSize.height() / (float)pageSize.width();
4274 const int expectedWidth = floor(pageSize.width() * minimumShrinkFactor);
4275 const int expectedHeight = floor(expectedWidth * ratio);
4276 4283
4277 frame->printBegin(printParams, WebNode()); 4284 frame->printBegin(printParams, WebNode());
4278 4285
4279 EXPECT_EQ(expectedWidth, vwElement->offsetWidth()); 4286 EXPECT_EQ(expectedSize.width(), vwElement->offsetWidth());
4280 EXPECT_EQ(expectedHeight, vwElement->offsetHeight()); 4287 EXPECT_EQ(expectedSize.height(), vwElement->offsetHeight());
4281 4288
4282 webView->resize(flooredIntSize(pageSize)); 4289 webView->resize(flooredIntSize(pageSize));
4283 4290
4284 EXPECT_EQ(expectedWidth, vwElement->offsetWidth()); 4291 EXPECT_EQ(expectedSize.width(), vwElement->offsetWidth());
4285 EXPECT_EQ(expectedHeight, vwElement->offsetHeight()); 4292 EXPECT_EQ(expectedSize.height(), vwElement->offsetHeight());
4286 4293
4287 webView->resize(WebSize(800, 600)); 4294 webView->resize(WebSize(800, 600));
4288 frame->printEnd(); 4295 frame->printEnd();
4289 4296
4290 EXPECT_EQ(800, vwElement->offsetWidth()); 4297 EXPECT_EQ(800, vwElement->offsetWidth());
4291 } 4298 }
4292 4299
4300 TEST_P(WebViewTest, WidthMediaQueryWithPageZoomAfterPrinting) {
4301 WebViewImpl* webView = m_webViewHelper.initialize();
4302 webView->resize(WebSize(800, 600));
4303 webView->setZoomLevel(WebView::zoomFactorToZoomLevel(2.0));
4304
4305 WebURL baseURL = URLTestHelpers::toKURL("http://example.com/");
4306 FrameTestHelpers::loadHTMLString(webView->mainFrame(),
4307 "<style>"
4308 " @media (max-width: 600px) {"
4309 " div { color: green }"
4310 " }"
4311 "</style>"
4312 "<div id=d></div>",
4313 baseURL);
4314
4315 WebLocalFrameImpl* frame = webView->mainFrameImpl();
4316 Document* document = frame->frame()->document();
4317 Element* div = document->getElementById("d");
4318
4319 EXPECT_EQ(makeRGB(0, 128, 0),
4320 div->computedStyle()->visitedDependentColor(CSSPropertyColor));
4321
4322 FloatSize pageSize(300, 360);
4323
4324 WebPrintParams printParams;
4325 printParams.printContentArea.width = pageSize.width();
4326 printParams.printContentArea.height = pageSize.height();
4327
4328 frame->printBegin(printParams, WebNode());
4329 frame->printEnd();
4330
4331 EXPECT_EQ(makeRGB(0, 128, 0),
4332 div->computedStyle()->visitedDependentColor(CSSPropertyColor));
4333 }
4334
4335 TEST_P(WebViewTest, ViewportUnitsPrintingWithPageZoom) {
4336 WebViewImpl* webView = m_webViewHelper.initialize();
4337 webView->resize(WebSize(800, 600));
4338 webView->setZoomLevel(WebView::zoomFactorToZoomLevel(2.0));
4339
4340 WebURL baseURL = URLTestHelpers::toKURL("http://example.com/");
4341 FrameTestHelpers::loadHTMLString(webView->mainFrame(),
4342 "<style>"
4343 " body { margin: 0 }"
4344 " #t1 { width: 100% }"
4345 " #t2 { width: 100vw }"
4346 "</style>"
4347 "<div id=t1></div>"
4348 "<div id=t2></div>",
4349 baseURL);
4350
4351 WebLocalFrameImpl* frame = webView->mainFrameImpl();
4352 Document* document = frame->frame()->document();
4353 Element* t1 = document->getElementById("t1");
4354 Element* t2 = document->getElementById("t2");
4355
4356 EXPECT_EQ(400, t1->offsetWidth());
4357 EXPECT_EQ(400, t2->offsetWidth());
4358
4359 FloatSize pageSize(600, 720);
4360 int expectedWidth = printICBSizeFromPageSize(pageSize).width();
4361
4362 WebPrintParams printParams;
4363 printParams.printContentArea.width = pageSize.width();
4364 printParams.printContentArea.height = pageSize.height();
4365
4366 frame->printBegin(printParams, WebNode());
4367
4368 EXPECT_EQ(expectedWidth, t1->offsetWidth());
4369 EXPECT_EQ(expectedWidth, t2->offsetWidth());
4370
4371 frame->printEnd();
4372 }
4373
4293 TEST_P(WebViewTest, DeviceEmulationResetScrollbars) { 4374 TEST_P(WebViewTest, DeviceEmulationResetScrollbars) {
4294 WebViewImpl* webView = m_webViewHelper.initialize(); 4375 WebViewImpl* webView = m_webViewHelper.initialize();
4295 webView->resize(WebSize(800, 600)); 4376 webView->resize(WebSize(800, 600));
4296 4377
4297 WebURL baseURL = URLTestHelpers::toKURL("http://example.com/"); 4378 WebURL baseURL = URLTestHelpers::toKURL("http://example.com/");
4298 FrameTestHelpers::loadHTMLString(webView->mainFrame(), 4379 FrameTestHelpers::loadHTMLString(webView->mainFrame(),
4299 "<!doctype html>" 4380 "<!doctype html>"
4300 "<meta name='viewport'" 4381 "<meta name='viewport'"
4301 " content='width=device-width'>" 4382 " content='width=device-width'>"
4302 "<style>" 4383 "<style>"
(...skipping 30 matching lines...) Expand all
4333 EXPECT_FALSE(frameView->visualViewportSuppliesScrollbars()); 4414 EXPECT_FALSE(frameView->visualViewportSuppliesScrollbars());
4334 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { 4415 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
4335 EXPECT_NE(nullptr, 4416 EXPECT_NE(nullptr,
4336 frameView->layoutViewportScrollableArea()->verticalScrollbar()); 4417 frameView->layoutViewportScrollableArea()->verticalScrollbar());
4337 } else { 4418 } else {
4338 EXPECT_NE(nullptr, frameView->verticalScrollbar()); 4419 EXPECT_NE(nullptr, frameView->verticalScrollbar());
4339 } 4420 }
4340 } 4421 }
4341 4422
4342 } // namespace blink 4423 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameView.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698