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

Side by Side Diff: third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp

Issue 1516893002: Second reland: Fix incorrect sign in scroll and content box offset in absoluteToLocalPoint. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/layout/compositing/CompositedLayerMapping.h" 6 #include "core/layout/compositing/CompositedLayerMapping.h"
7 7
8 #include "core/frame/FrameView.h" 8 #include "core/frame/FrameView.h"
9 #include "core/html/HTMLIFrameElement.h"
10 #include "core/layout/LayoutBoxModelObject.h" 9 #include "core/layout/LayoutBoxModelObject.h"
11 #include "core/layout/LayoutTestHelper.h" 10 #include "core/layout/LayoutTestHelper.h"
12 #include "core/layout/LayoutView.h" 11 #include "core/layout/LayoutView.h"
13 #include "core/loader/EmptyClients.h"
14 #include "core/paint/PaintLayer.h" 12 #include "core/paint/PaintLayer.h"
15 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
16 14
17 namespace blink { 15 namespace blink {
18 16
19 class CompositedLayerMappingTest : public RenderingTest { 17 class CompositedLayerMappingTest : public RenderingTest {
20 public: 18 public:
21 CompositedLayerMappingTest() 19 CompositedLayerMappingTest()
22 : RenderingTest(SingleChildFrameLoaderClient::create()) 20 : RenderingTest(SingleChildFrameLoaderClient::create())
23 , m_originalSlimmingPaintSynchronizedPaintingEnabled(RuntimeEnabledFeatu res::slimmingPaintSynchronizedPaintingEnabled()) 21 , m_originalSlimmingPaintSynchronizedPaintingEnabled(RuntimeEnabledFeatu res::slimmingPaintSynchronizedPaintingEnabled())
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 54
57 RenderingTest::SetUp(); 55 RenderingTest::SetUp();
58 enableCompositing(); 56 enableCompositing();
59 GraphicsLayer::setDrawDebugRedFillForTesting(false); 57 GraphicsLayer::setDrawDebugRedFillForTesting(false);
60 } 58 }
61 59
62 void TearDown() override 60 void TearDown() override
63 { 61 {
64 GraphicsLayer::setDrawDebugRedFillForTesting(true); 62 GraphicsLayer::setDrawDebugRedFillForTesting(true);
65 RuntimeEnabledFeatures::setSlimmingPaintSynchronizedPaintingEnabled(m_or iginalSlimmingPaintSynchronizedPaintingEnabled); 63 RuntimeEnabledFeatures::setSlimmingPaintSynchronizedPaintingEnabled(m_or iginalSlimmingPaintSynchronizedPaintingEnabled);
64
65 RenderingTest::TearDown();
66 } 66 }
67 67
68 bool m_originalSlimmingPaintSynchronizedPaintingEnabled; 68 bool m_originalSlimmingPaintSynchronizedPaintingEnabled;
69 }; 69 };
70 70
71 #define EXPECT_RECT_EQ(expected, actual) \ 71 #define EXPECT_RECT_EQ(expected, actual) \
72 do { \ 72 do { \
73 EXPECT_EQ(expected.x(), actual.x()); \ 73 const IntRect& actualRect = actual; \
74 EXPECT_EQ(expected.y(), actual.y()); \ 74 EXPECT_EQ(expected.x(), actualRect.x()); \
75 EXPECT_EQ(expected.width(), actual.width()); \ 75 EXPECT_EQ(expected.y(), actualRect.y()); \
76 EXPECT_EQ(expected.height(), actual.height()); \ 76 EXPECT_EQ(expected.width(), actualRect.width()); \
77 EXPECT_EQ(expected.height(), actualRect.height()); \
77 } while (false) 78 } while (false)
78 79
79 TEST_F(CompositedLayerMappingTest, SimpleInterestRect) 80 TEST_F(CompositedLayerMappingTest, SimpleInterestRect)
80 { 81 {
81 setBodyInnerHTML("<div id='target' style='width: 200px; height: 200px; will- change: transform'></div>"); 82 setBodyInnerHTML("<div id='target' style='width: 200px; height: 200px; will- change: transform'></div>");
82 83
83 document().view()->updateAllLifecyclePhases(); 84 document().view()->updateAllLifecyclePhases();
84 Element* element = document().getElementById("target"); 85 Element* element = document().getElementById("target");
85 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer(); 86 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
86 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking()); 87 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 " <div id='squashed' style='height: 1000px; width: 10000px; right: 0; position: absolute'></div>" 506 " <div id='squashed' style='height: 1000px; width: 10000px; right: 0; position: absolute'></div>"
506 " </div>" 507 " </div>"
507 "</div>"); 508 "</div>");
508 509
509 CompositedLayerMapping* groupedMapping = document().getElementById("squashed ")->layoutBox()->layer()->groupedMapping(); 510 CompositedLayerMapping* groupedMapping = document().getElementById("squashed ")->layoutBox()->layer()->groupedMapping();
510 // The squashing layer is at (-9600, 0, 10000, 1000) in viewport coordinates . 511 // The squashing layer is at (-9600, 0, 10000, 1000) in viewport coordinates .
511 // The following rect is at (-4000, 0, 4400, 1000) in viewport coordinates. 512 // The following rect is at (-4000, 0, 4400, 1000) in viewport coordinates.
512 EXPECT_RECT_EQ(IntRect(5600, 0, 4400, 1000), groupedMapping->computeInterest Rect(groupedMapping->squashingLayer(), IntRect())); 513 EXPECT_RECT_EQ(IntRect(5600, 0, 4400, 1000), groupedMapping->computeInterest Rect(groupedMapping->squashingLayer(), IntRect()));
513 } 514 }
514 515
515 TEST_F(CompositedLayerMappingTest, InterestRectOfScrolledIframe) 516 TEST_F(CompositedLayerMappingTest, InterestRectOfIframeInScrolledDiv)
516 { 517 {
517 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); 518 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com"));
518 setBodyInnerHTML( 519 setBodyInnerHTML(
519 "<style>body { margin: 0; }</style>" 520 "<style>body { margin: 0; }</style>"
520 "<div style='width: 200; height: 8000px'></div>" 521 "<div style='width: 200; height: 8000px'></div>"
521 "<iframe id=frame src='http://test.com' width='500' height='500' frameBo rder='0'>" 522 "<iframe id=frame src='http://test.com' width='500' height='500' frameBo rder='0'>"
522 "</iframe>"); 523 "</iframe>");
523 524
524 HTMLIFrameElement& iframe = *toHTMLIFrameElement(document().getElementById(" frame")); 525 Document& frameDocument = setupChildIframe("frame", "<style>body { margin: 0 ; } #target { width: 200px; height: 200px; will-change: transform}</style><div i d=target></div>");
525 OwnPtrWillBeRawPtr<FrameLoaderClient> frameLoaderClient = FrameLoaderClientW ithParent::create(document().frame());
526 RefPtrWillBePersistent<LocalFrame> subframe = LocalFrame::create(frameLoader Client.get(), document().frame()->host(), &iframe);
527 subframe->setView(FrameView::create(subframe.get(), IntSize(500, 500)));
528 subframe->init();
529 static_cast<SingleChildFrameLoaderClient*>(document().frame()->client())->se tChild(subframe.get());
530 document().frame()->host()->incrementSubframeCount();
531 Document& frameDocument = *iframe.contentDocument();
532
533 frameDocument.setBaseURLOverride(KURL(ParsedURLString, "http://test.com"));
534 frameDocument.body()->setInnerHTML("<style>body { margin: 0; } #target { wid th: 200px; height: 200px; will-change: transform}</style><div id=target></div>",
535 ASSERT_NO_EXCEPTION);
536 526
537 // Scroll 8000 pixels down to move the iframe into view. 527 // Scroll 8000 pixels down to move the iframe into view.
538 document().view()->setScrollPosition(DoublePoint(0.0, 8000.0), ProgrammaticS croll); 528 document().view()->setScrollPosition(DoublePoint(0.0, 8000.0), ProgrammaticS croll);
539 document().view()->updateAllLifecyclePhases(); 529 document().view()->updateAllLifecyclePhases();
540 530
541 Element* target = frameDocument.getElementById("target"); 531 Element* target = frameDocument.getElementById("target");
542 ASSERT_TRUE(target); 532 ASSERT_TRUE(target);
543 533
544 EXPECT_RECT_EQ(IntRect(0, 0, 200, 200), recomputeInterestRect(target->layout Object()->enclosingLayer()->graphicsLayerBacking())); 534 EXPECT_RECT_EQ(IntRect(0, 0, 200, 200), recomputeInterestRect(target->layout Object()->enclosingLayer()->graphicsLayerBacking()));
535 }
545 536
546 subframe->detach(FrameDetachType::Remove); 537 TEST_F(CompositedLayerMappingTest, InterestRectOfScrolledIframe)
547 static_cast<SingleChildFrameLoaderClient*>(document().frame()->client())->se tChild(nullptr); 538 {
548 document().frame()->host()->decrementSubframeCount(); 539 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com"));
540 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true);
541 setBodyInnerHTML(
542 "<style>body { margin: 0; } ::-webkit-scrollbar { display: none; }</styl e>"
543 "<iframe id=frame src='http://test.com' width='500' height='500' frameBo rder='0'>"
544 "</iframe>");
545
546 Document& frameDocument = setupChildIframe("frame", "<style>body { margin: 0 ; } #target { width: 200px; height: 8000px;}</style><div id=target></div>");
547
548 document().view()->updateAllLifecyclePhases();
549
550 // Scroll 7500 pixels down to bring the scrollable area to the bottom.
551 frameDocument.view()->setScrollPosition(DoublePoint(0.0, 7500.0), Programmat icScroll);
552 document().view()->updateAllLifecyclePhases();
553
554 ASSERT_TRUE(frameDocument.view()->layoutView()->hasLayer());
555 EXPECT_RECT_EQ(IntRect(0, 3500, 500, 4500), recomputeInterestRect(frameDocum ent.view()->layoutView()->enclosingLayer()->graphicsLayerBacking()));
556 }
557
558 TEST_F(CompositedLayerMappingTest, InterestRectOfIframeWithContentBoxOffset)
559 {
560 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com"));
561 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true);
562 // Set a 10px border in order to have a contentBoxOffset for the iframe elem ent.
563 setBodyInnerHTML(
564 "<style>body { margin: 0; } #frame { border: 10px solid black; } ::-webk it-scrollbar { display: none; }</style>"
565 "<iframe id=frame src='http://test.com' width='500' height='500' frameBo rder='0'>"
566 "</iframe>");
567
568 Document& frameDocument = setupChildIframe("frame", "<style>body { margin: 0 ; } #target { width: 200px; height: 8000px;}</style> <div id=target></div>");
569
570 document().view()->updateAllLifecyclePhases();
571
572 // Scroll 3000 pixels down to bring the scrollable area to somewhere in the middle.
573 frameDocument.view()->setScrollPosition(DoublePoint(0.0, 3000.0), Programmat icScroll);
574 document().view()->updateAllLifecyclePhases();
575
576 ASSERT_TRUE(frameDocument.view()->layoutView()->hasLayer());
577 // The width is 485 pixels due to the size of the scrollbar.
578 EXPECT_RECT_EQ(IntRect(0, 0, 500, 7500), recomputeInterestRect(frameDocument .view()->layoutView()->enclosingLayer()->graphicsLayerBacking()));
549 } 579 }
550 580
551 } // namespace blink 581 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutView.cpp ('k') | third_party/WebKit/Source/core/page/PrintContextTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698