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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameView.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 4bcb8c64a50114a68bafbd7d272210df4ff084e8..14f288e631af292a4106dc9a226d949f63010792 100644
--- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -37,6 +37,7 @@
#include "core/dom/DocumentUserGestureToken.h"
#include "core/dom/Element.h"
#include "core/dom/Fullscreen.h"
+#include "core/dom/NodeComputedStyle.h"
#include "core/editing/FrameSelection.h"
#include "core/editing/InputMethodController.h"
#include "core/editing/markers/DocumentMarkerController.h"
@@ -258,6 +259,7 @@ class WebViewTest
const std::string& htmlFile);
bool tapElement(WebInputEvent::Type, Element*);
bool tapElementById(WebInputEvent::Type, const WebString& id);
+ IntSize printICBSizeFromPageSize(const FloatSize& pageSize);
std::string m_baseURL;
FrameTestHelpers::WebViewHelper m_webViewHelper;
@@ -1992,6 +1994,20 @@ bool WebViewTest::tapElementById(WebInputEvent::Type type,
return tapElement(type, element);
}
+IntSize WebViewTest::printICBSizeFromPageSize(const FloatSize& pageSize) {
+ // This needs to match printingMinimumShrinkFactor in PrintContext.cpp. The
+ // layout is scaled by this factor for printing.
+ constexpr float minimumShrinkFactor = 1.333f;
+
+ // The expected layout size comes from the calculation done in
+ // resizePageRectsKeepingRatio which is used from PrintContext::begin to
+ // scale the page size.
+ const float ratio = pageSize.height() / (float)pageSize.width();
+ const int icbWidth = floor(pageSize.width() * minimumShrinkFactor);
+ const int icbHeight = floor(icbWidth * ratio);
+ return IntSize(icbWidth, icbHeight);
+}
+
TEST_P(WebViewTest, DetectContentAroundPosition) {
registerMockedHttpURLLoad("content_listeners.html");
@@ -4263,26 +4279,17 @@ TEST_P(WebViewTest, ResizeForPrintingViewportUnits) {
printParams.printContentArea.width = pageSize.width();
printParams.printContentArea.height = pageSize.height();
- // This needs to match printingMinimumShrinkFactor in PrintContext.cpp. The
- // layout is scaled by this factor for printing.
- constexpr float minimumShrinkFactor = 1.333f;
-
- // The expected layout size comes from the calculation done in
- // resizePageRectsKeepingRatio which is used from PrintContext::begin to
- // scale the page size.
- const float ratio = pageSize.height() / (float)pageSize.width();
- const int expectedWidth = floor(pageSize.width() * minimumShrinkFactor);
- const int expectedHeight = floor(expectedWidth * ratio);
+ IntSize expectedSize = printICBSizeFromPageSize(pageSize);
frame->printBegin(printParams, WebNode());
- EXPECT_EQ(expectedWidth, vwElement->offsetWidth());
- EXPECT_EQ(expectedHeight, vwElement->offsetHeight());
+ EXPECT_EQ(expectedSize.width(), vwElement->offsetWidth());
+ EXPECT_EQ(expectedSize.height(), vwElement->offsetHeight());
webView->resize(flooredIntSize(pageSize));
- EXPECT_EQ(expectedWidth, vwElement->offsetWidth());
- EXPECT_EQ(expectedHeight, vwElement->offsetHeight());
+ EXPECT_EQ(expectedSize.width(), vwElement->offsetWidth());
+ EXPECT_EQ(expectedSize.height(), vwElement->offsetHeight());
webView->resize(WebSize(800, 600));
frame->printEnd();
@@ -4290,6 +4297,80 @@ TEST_P(WebViewTest, ResizeForPrintingViewportUnits) {
EXPECT_EQ(800, vwElement->offsetWidth());
}
+TEST_P(WebViewTest, WidthMediaQueryWithPageZoomAfterPrinting) {
+ WebViewImpl* webView = m_webViewHelper.initialize();
+ webView->resize(WebSize(800, 600));
+ webView->setZoomLevel(WebView::zoomFactorToZoomLevel(2.0));
+
+ WebURL baseURL = URLTestHelpers::toKURL("http://example.com/");
+ FrameTestHelpers::loadHTMLString(webView->mainFrame(),
+ "<style>"
+ " @media (max-width: 600px) {"
+ " div { color: green }"
+ " }"
+ "</style>"
+ "<div id=d></div>",
+ baseURL);
+
+ WebLocalFrameImpl* frame = webView->mainFrameImpl();
+ Document* document = frame->frame()->document();
+ Element* div = document->getElementById("d");
+
+ EXPECT_EQ(makeRGB(0, 128, 0),
+ div->computedStyle()->visitedDependentColor(CSSPropertyColor));
+
+ FloatSize pageSize(300, 360);
+
+ WebPrintParams printParams;
+ printParams.printContentArea.width = pageSize.width();
+ printParams.printContentArea.height = pageSize.height();
+
+ frame->printBegin(printParams, WebNode());
+ frame->printEnd();
+
+ EXPECT_EQ(makeRGB(0, 128, 0),
+ div->computedStyle()->visitedDependentColor(CSSPropertyColor));
+}
+
+TEST_P(WebViewTest, ViewportUnitsPrintingWithPageZoom) {
+ WebViewImpl* webView = m_webViewHelper.initialize();
+ webView->resize(WebSize(800, 600));
+ webView->setZoomLevel(WebView::zoomFactorToZoomLevel(2.0));
+
+ WebURL baseURL = URLTestHelpers::toKURL("http://example.com/");
+ FrameTestHelpers::loadHTMLString(webView->mainFrame(),
+ "<style>"
+ " body { margin: 0 }"
+ " #t1 { width: 100% }"
+ " #t2 { width: 100vw }"
+ "</style>"
+ "<div id=t1></div>"
+ "<div id=t2></div>",
+ baseURL);
+
+ WebLocalFrameImpl* frame = webView->mainFrameImpl();
+ Document* document = frame->frame()->document();
+ Element* t1 = document->getElementById("t1");
+ Element* t2 = document->getElementById("t2");
+
+ EXPECT_EQ(400, t1->offsetWidth());
+ EXPECT_EQ(400, t2->offsetWidth());
+
+ FloatSize pageSize(600, 720);
+ int expectedWidth = printICBSizeFromPageSize(pageSize).width();
+
+ WebPrintParams printParams;
+ printParams.printContentArea.width = pageSize.width();
+ printParams.printContentArea.height = pageSize.height();
+
+ frame->printBegin(printParams, WebNode());
+
+ EXPECT_EQ(expectedWidth, t1->offsetWidth());
+ EXPECT_EQ(expectedWidth, t2->offsetWidth());
+
+ frame->printEnd();
+}
+
TEST_P(WebViewTest, DeviceEmulationResetScrollbars) {
WebViewImpl* webView = m_webViewHelper.initialize();
webView->resize(WebSize(800, 600));
« 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