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

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

Issue 2403553002: reflow comments in core/layout/[M-Z]*.{cpp,h} (Closed)
Patch Set: Created 4 years, 2 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "core/layout/LayoutTestHelper.h" 5 #include "core/layout/LayoutTestHelper.h"
6 #include "core/layout/LayoutView.h" 6 #include "core/layout/LayoutView.h"
7 #include "core/layout/PaintInvalidationState.h" 7 #include "core/layout/PaintInvalidationState.h"
8 #include "core/paint/PaintLayer.h" 8 #include "core/paint/PaintLayer.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 "frame", 132 "frame",
133 "<style>body { margin: 0; }</style><span><img style='width: 20px; " 133 "<style>body { margin: 0; }</style><span><img style='width: 20px; "
134 "height: 100px'></span>text text text"); 134 "height: 100px'></span>text text text");
135 document().view()->updateAllLifecyclePhases(); 135 document().view()->updateAllLifecyclePhases();
136 136
137 LayoutBlock* frameContainer = 137 LayoutBlock* frameContainer =
138 toLayoutBlock(getLayoutObjectByElementId("frameContainer")); 138 toLayoutBlock(getLayoutObjectByElementId("frameContainer"));
139 LayoutBlock* frameBody = toLayoutBlock(frameDocument.body()->layoutObject()); 139 LayoutBlock* frameBody = toLayoutBlock(frameDocument.body()->layoutObject());
140 LayoutText* frameText = toLayoutText(frameBody->lastChild()); 140 LayoutText* frameText = toLayoutText(frameBody->lastChild());
141 141
142 // This case involves clipping: frame height is 50, y-coordinate of result rec t is 13, 142 // This case involves clipping: frame height is 50, y-coordinate of result
143 // so height should be clipped to (50 - 13) == 37. 143 // rect is 13, so height should be clipped to (50 - 13) == 37.
144 frameDocument.view()->setScrollOffset(ScrollOffset(0, 47), 144 frameDocument.view()->setScrollOffset(ScrollOffset(0, 47),
145 ProgrammaticScroll); 145 ProgrammaticScroll);
146 LayoutRect originalRect(4, 60, 20, 80); 146 LayoutRect originalRect(4, 60, 20, 80);
147 LayoutRect rect = originalRect; 147 LayoutRect rect = originalRect;
148 EXPECT_TRUE(frameText->mapToVisualRectInAncestorSpace(frameContainer, rect)); 148 EXPECT_TRUE(frameText->mapToVisualRectInAncestorSpace(frameContainer, rect));
149 EXPECT_EQ(rect, LayoutRect(4, 13, 20, 37)); 149 EXPECT_EQ(rect, LayoutRect(4, 13, 20, 37));
150 150
151 rect = originalRect; 151 rect = originalRect;
152 EXPECT_TRUE(frameText->mapToVisualRectInAncestorSpace(&layoutView(), rect)); 152 EXPECT_TRUE(frameText->mapToVisualRectInAncestorSpace(&layoutView(), rect));
153 EXPECT_EQ(rect, LayoutRect(4, 13, 20, 37)); 153 EXPECT_EQ(rect, LayoutRect(4, 13, 20, 37));
(...skipping 19 matching lines...) Expand all
173 "frame", 173 "frame",
174 "<style>body { margin: 0; }</style><div id='target' style='position: " 174 "<style>body { margin: 0; }</style><div id='target' style='position: "
175 "relative; width: 100px; height: 100px; left: 0.5px'>"); 175 "relative; width: 100px; height: 100px; left: 0.5px'>");
176 document().view()->updateAllLifecyclePhases(); 176 document().view()->updateAllLifecyclePhases();
177 177
178 LayoutBlock* frameContainer = 178 LayoutBlock* frameContainer =
179 toLayoutBlock(getLayoutObjectByElementId("frameContainer")); 179 toLayoutBlock(getLayoutObjectByElementId("frameContainer"));
180 LayoutObject* target = frameDocument.getElementById("target")->layoutObject(); 180 LayoutObject* target = frameDocument.getElementById("target")->layoutObject();
181 LayoutRect rect(0, 0, 100, 100); 181 LayoutRect rect(0, 0, 100, 100);
182 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(frameContainer, rect)); 182 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(frameContainer, rect));
183 // When passing from the iframe to the parent frame, the rect of (0.5, 0, 100, 100) is expanded to (0, 0, 100, 100), and then offset by 183 // When passing from the iframe to the parent frame, the rect of (0.5, 0, 100,
184 // the 0.5 offset of frameContainer. 184 // 100) is expanded to (0, 0, 100, 100), and then offset by the 0.5 offset of
185 // frameContainer.
185 EXPECT_EQ(LayoutRect(LayoutPoint(DoublePoint(0.5, 0)), LayoutSize(101, 100)), 186 EXPECT_EQ(LayoutRect(LayoutPoint(DoublePoint(0.5, 0)), LayoutSize(101, 100)),
186 rect); 187 rect);
187 } 188 }
188 189
189 TEST_F(VisualRectMappingTest, LayoutViewDisplayNone) { 190 TEST_F(VisualRectMappingTest, LayoutViewDisplayNone) {
190 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com")); 191 document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com"));
191 setBodyInnerHTML( 192 setBodyInnerHTML(
192 "<style>body { margin: 0; }</style>" 193 "<style>body { margin: 0; }</style>"
193 "<div id=frameContainer>" 194 "<div id=frameContainer>"
194 " <iframe id=frame src='http://test.com' width='50' height='50' " 195 " <iframe id=frame src='http://test.com' width='50' height='50' "
195 "frameBorder='0'></iframe>" 196 "frameBorder='0'></iframe>"
196 "</div>"); 197 "</div>");
197 198
198 Document& frameDocument = 199 Document& frameDocument =
199 setupChildIframe("frame", 200 setupChildIframe("frame",
200 "<style>body { margin: 0; }</style><div " 201 "<style>body { margin: 0; }</style><div "
201 "style='width:100px;height:100px;'></div>"); 202 "style='width:100px;height:100px;'></div>");
202 document().view()->updateAllLifecyclePhases(); 203 document().view()->updateAllLifecyclePhases();
203 204
204 LayoutBlock* frameContainer = 205 LayoutBlock* frameContainer =
205 toLayoutBlock(getLayoutObjectByElementId("frameContainer")); 206 toLayoutBlock(getLayoutObjectByElementId("frameContainer"));
206 LayoutBlock* frameBody = toLayoutBlock(frameDocument.body()->layoutObject()); 207 LayoutBlock* frameBody = toLayoutBlock(frameDocument.body()->layoutObject());
207 LayoutBlock* frameDiv = toLayoutBlock(frameBody->lastChild()); 208 LayoutBlock* frameDiv = toLayoutBlock(frameBody->lastChild());
208 209
209 // This part is copied from the LayoutView test, just to ensure that the mappe d 210 // This part is copied from the LayoutView test, just to ensure that the
210 // rect is valid before display:none is set on the iframe. 211 // mapped rect is valid before display:none is set on the iframe.
211 frameDocument.view()->setScrollOffset(ScrollOffset(0, 47), 212 frameDocument.view()->setScrollOffset(ScrollOffset(0, 47),
212 ProgrammaticScroll); 213 ProgrammaticScroll);
213 LayoutRect originalRect(4, 60, 20, 80); 214 LayoutRect originalRect(4, 60, 20, 80);
214 LayoutRect rect = originalRect; 215 LayoutRect rect = originalRect;
215 EXPECT_TRUE(frameDiv->mapToVisualRectInAncestorSpace(frameContainer, rect)); 216 EXPECT_TRUE(frameDiv->mapToVisualRectInAncestorSpace(frameContainer, rect));
216 EXPECT_EQ(rect, LayoutRect(4, 13, 20, 37)); 217 EXPECT_EQ(rect, LayoutRect(4, 13, 20, 37));
217 218
218 Element* frameElement = document().getElementById("frame"); 219 Element* frameElement = document().getElementById("frame");
219 frameElement->setInlineStyleProperty(CSSPropertyDisplay, "none"); 220 frameElement->setInlineStyleProperty(CSSPropertyDisplay, "none");
220 document().view()->updateAllLifecyclePhases(); 221 document().view()->updateAllLifecyclePhases();
221 222
222 rect = originalRect; 223 rect = originalRect;
223 EXPECT_FALSE(frameDiv->mapToVisualRectInAncestorSpace(&layoutView(), rect)); 224 EXPECT_FALSE(frameDiv->mapToVisualRectInAncestorSpace(&layoutView(), rect));
224 EXPECT_EQ(rect, LayoutRect()); 225 EXPECT_EQ(rect, LayoutRect());
225 } 226 }
226 227
227 TEST_F(VisualRectMappingTest, SelfFlippedWritingMode) { 228 TEST_F(VisualRectMappingTest, SelfFlippedWritingMode) {
228 setBodyInnerHTML( 229 setBodyInnerHTML(
229 "<div id='target' style='writing-mode: vertical-rl; box-shadow: 40px " 230 "<div id='target' style='writing-mode: vertical-rl; box-shadow: 40px "
230 "20px black;" 231 "20px black;"
231 " width: 100px; height: 50px; position: absolute; top: 111px; left: " 232 " width: 100px; height: 50px; position: absolute; top: 111px; left: "
232 "222px'>" 233 "222px'>"
233 "</div>"); 234 "</div>");
234 235
235 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target")); 236 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target"));
236 LayoutRect overflowRect = target->localOverflowRectForPaintInvalidation(); 237 LayoutRect overflowRect = target->localOverflowRectForPaintInvalidation();
237 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the origi n) 238 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the
239 // origin)
238 // 140 = width(100) + box_shadow_offset_x(40) 240 // 140 = width(100) + box_shadow_offset_x(40)
239 // 70 = height(50) + box_shadow_offset_y(20) 241 // 70 = height(50) + box_shadow_offset_y(20)
240 EXPECT_EQ(LayoutRect(-40, 0, 140, 70), overflowRect); 242 EXPECT_EQ(LayoutRect(-40, 0, 140, 70), overflowRect);
241 243
242 LayoutRect rect = overflowRect; 244 LayoutRect rect = overflowRect;
243 // TODO(wkorman): The calls to flipForWritingMode() here and in other test 245 // TODO(wkorman): The calls to flipForWritingMode() here and in other test
244 // cases below are necessary because mapToVisualRectInAncestorSpace() 246 // cases below are necessary because mapToVisualRectInAncestorSpace()
245 // currently expects the input rect to be in "physical coordinates" (*not* 247 // currently expects the input rect to be in "physical coordinates" (*not*
246 // "physical coordinates with flipped block-flow direction"), see 248 // "physical coordinates with flipped block-flow direction"), see
247 // LayoutBoxModelObject.h. 249 // LayoutBoxModelObject.h.
(...skipping 15 matching lines...) Expand all
263 "<div id='container' style='writing-mode: vertical-rl; position: " 265 "<div id='container' style='writing-mode: vertical-rl; position: "
264 "absolute; top: 111px; left: 222px'>" 266 "absolute; top: 111px; left: 222px'>"
265 " <div id='target' style='box-shadow: 40px 20px black; width: 100px; " 267 " <div id='target' style='box-shadow: 40px 20px black; width: 100px; "
266 "height: 90px'></div>" 268 "height: 90px'></div>"
267 " <div style='width: 100px; height: 100px'></div>" 269 " <div style='width: 100px; height: 100px'></div>"
268 "</div>"); 270 "</div>");
269 271
270 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target")); 272 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target"));
271 LayoutRect targetOverflowRect = 273 LayoutRect targetOverflowRect =
272 target->localOverflowRectForPaintInvalidation(); 274 target->localOverflowRectForPaintInvalidation();
273 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the origi n) 275 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the
276 // origin)
274 // 140 = width(100) + box_shadow_offset_x(40) 277 // 140 = width(100) + box_shadow_offset_x(40)
275 // 110 = height(90) + box_shadow_offset_y(20) 278 // 110 = height(90) + box_shadow_offset_y(20)
276 EXPECT_EQ(LayoutRect(-40, 0, 140, 110), targetOverflowRect); 279 EXPECT_EQ(LayoutRect(-40, 0, 140, 110), targetOverflowRect);
277 280
278 LayoutRect rect = targetOverflowRect; 281 LayoutRect rect = targetOverflowRect;
279 target->flipForWritingMode(rect); 282 target->flipForWritingMode(rect);
280 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect)); 283 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect));
281 // This rect is in physical coordinates of target. 284 // This rect is in physical coordinates of target.
282 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect); 285 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect);
283 286
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 EXPECT_EQ(LayoutRect(0, 0, 140, 110), targetOverflowRect); 338 EXPECT_EQ(LayoutRect(0, 0, 140, 110), targetOverflowRect);
336 LayoutRect rect = targetOverflowRect; 339 LayoutRect rect = targetOverflowRect;
337 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect)); 340 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect));
338 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect); 341 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect);
339 342
340 rect = targetOverflowRect; 343 rect = targetOverflowRect;
341 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect)); 344 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect));
342 rect.move(-container->scrolledContentOffset()); 345 rect.move(-container->scrolledContentOffset());
343 // 2 = target_x(0) + container_border_left(10) - scroll_left(8) 346 // 2 = target_x(0) + container_border_left(10) - scroll_left(8)
344 // 3 = target_y(0) + container_border_top(10) - scroll_top(7) 347 // 3 = target_y(0) + container_border_top(10) - scroll_top(7)
345 // Rect is not clipped by container's overflow clip because of overflow:scroll . 348 // Rect is not clipped by container's overflow clip because of
349 // overflow:scroll.
346 EXPECT_EQ(LayoutRect(2, 3, 140, 110), rect); 350 EXPECT_EQ(LayoutRect(2, 3, 140, 110), rect);
347 351
348 rect = targetOverflowRect; 352 rect = targetOverflowRect;
349 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(&layoutView(), rect)); 353 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(&layoutView(), rect));
350 // (2, 3, 140, 100) is first clipped by container's overflow clip, to (10, 10, 50, 80), 354 // (2, 3, 140, 100) is first clipped by container's overflow clip, to
351 // then is by added container's offset in LayoutView (111, 222). 355 // (10, 10, 50, 80), then is by added container's offset in LayoutView
356 // (111, 222).
352 EXPECT_EQ(LayoutRect(232, 121, 50, 80), rect); 357 EXPECT_EQ(LayoutRect(232, 121, 50, 80), rect);
353 checkPaintInvalidationStateRectMapping(rect, targetOverflowRect, *target, 358 checkPaintInvalidationStateRectMapping(rect, targetOverflowRect, *target,
354 layoutView(), layoutView()); 359 layoutView(), layoutView());
355 360
356 LayoutRect containerOverflowRect = 361 LayoutRect containerOverflowRect =
357 container->localOverflowRectForPaintInvalidation(); 362 container->localOverflowRectForPaintInvalidation();
358 // Because container has overflow clip, its visual overflow doesn't include ov erflow from children. 363 // Because container has overflow clip, its visual overflow doesn't include
364 // overflow from children.
359 // 70 = width(50) + border_left_width(10) + border_right_width(10) 365 // 70 = width(50) + border_left_width(10) + border_right_width(10)
360 // 100 = height(80) + border_top_width(10) + border_bottom_width(10) 366 // 100 = height(80) + border_top_width(10) + border_bottom_width(10)
361 EXPECT_EQ(LayoutRect(0, 0, 70, 100), containerOverflowRect); 367 EXPECT_EQ(LayoutRect(0, 0, 70, 100), containerOverflowRect);
362 rect = containerOverflowRect; 368 rect = containerOverflowRect;
363 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(container, rect)); 369 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(container, rect));
364 // Container should not apply overflow clip on its own overflow rect. 370 // Container should not apply overflow clip on its own overflow rect.
365 EXPECT_EQ(LayoutRect(0, 0, 70, 100), rect); 371 EXPECT_EQ(LayoutRect(0, 0, 70, 100), rect);
366 372
367 rect = containerOverflowRect; 373 rect = containerOverflowRect;
368 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(&layoutView(), rect)); 374 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(&layoutView(), rect));
369 EXPECT_EQ(LayoutRect(222, 111, 70, 100), rect); 375 EXPECT_EQ(LayoutRect(222, 111, 70, 100), rect);
370 checkPaintInvalidationStateRectMapping( 376 checkPaintInvalidationStateRectMapping(
371 rect, containerOverflowRect, *container, layoutView(), layoutView()); 377 rect, containerOverflowRect, *container, layoutView(), layoutView());
372 } 378 }
373 379
374 TEST_F(VisualRectMappingTest, ContainerFlippedWritingModeAndOverflowScroll) { 380 TEST_F(VisualRectMappingTest, ContainerFlippedWritingModeAndOverflowScroll) {
375 setBodyInnerHTML( 381 setBodyInnerHTML(
376 "<div id='container' style='writing-mode: vertical-rl; position: " 382 "<div id='container' style='writing-mode: vertical-rl; position: "
377 "absolute; top: 111px; left: 222px;" 383 "absolute; top: 111px; left: 222px;"
378 " border: solid red; border-width: 10px 20px 30px 40px;" 384 " border: solid red; border-width: 10px 20px 30px 40px;"
379 " overflow: scroll; width: 50px; height: 80px'>" 385 " overflow: scroll; width: 50px; height: 80px'>"
380 " <div id='target' style='box-shadow: 40px 20px black; width: 100px; " 386 " <div id='target' style='box-shadow: 40px 20px black; width: 100px; "
381 "height: 90px'></div>" 387 "height: 90px'></div>"
382 " <div style='width: 100px; height: 100px'></div>" 388 " <div style='width: 100px; height: 100px'></div>"
383 "</div>"); 389 "</div>");
384 390
385 LayoutBlock* container = 391 LayoutBlock* container =
386 toLayoutBlock(getLayoutObjectByElementId("container")); 392 toLayoutBlock(getLayoutObjectByElementId("container"));
387 EXPECT_EQ(LayoutUnit(), container->scrollTop()); 393 EXPECT_EQ(LayoutUnit(), container->scrollTop());
388 // The initial scroll offset is to the left-most because of flipped blocks wri ting mode. 394 // The initial scroll offset is to the left-most because of flipped blocks
395 // writing mode.
389 // 150 = total_layout_overflow(100 + 100) - width(50) 396 // 150 = total_layout_overflow(100 + 100) - width(50)
390 EXPECT_EQ(LayoutUnit(150), container->scrollLeft()); 397 EXPECT_EQ(LayoutUnit(150), container->scrollLeft());
391 container->setScrollTop(LayoutUnit(7)); 398 container->setScrollTop(LayoutUnit(7));
392 container->setScrollLeft( 399 container->setScrollLeft(
393 LayoutUnit(142)); // Scroll to the right by 8 pixels. 400 LayoutUnit(142)); // Scroll to the right by 8 pixels.
394 document().view()->updateAllLifecyclePhases(); 401 document().view()->updateAllLifecyclePhases();
395 402
396 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target")); 403 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target"));
397 LayoutRect targetOverflowRect = 404 LayoutRect targetOverflowRect =
398 target->localOverflowRectForPaintInvalidation(); 405 target->localOverflowRectForPaintInvalidation();
399 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the origi n) 406 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the
407 // origin)
400 // 140 = width(100) + box_shadow_offset_x(40) 408 // 140 = width(100) + box_shadow_offset_x(40)
401 // 110 = height(90) + box_shadow_offset_y(20) 409 // 110 = height(90) + box_shadow_offset_y(20)
402 EXPECT_EQ(LayoutRect(-40, 0, 140, 110), targetOverflowRect); 410 EXPECT_EQ(LayoutRect(-40, 0, 140, 110), targetOverflowRect);
403 411
404 LayoutRect rect = targetOverflowRect; 412 LayoutRect rect = targetOverflowRect;
405 target->flipForWritingMode(rect); 413 target->flipForWritingMode(rect);
406 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect)); 414 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect));
407 // This rect is in physical coordinates of target. 415 // This rect is in physical coordinates of target.
408 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect); 416 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect);
409 417
410 rect = targetOverflowRect; 418 rect = targetOverflowRect;
411 target->flipForWritingMode(rect); 419 target->flipForWritingMode(rect);
412 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect)); 420 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect));
413 rect.move(-container->scrolledContentOffset()); 421 rect.move(-container->scrolledContentOffset());
414 // -2 = target_physical_x(100) + container_border_left(40) - scroll_left(142) 422 // -2 = target_physical_x(100) + container_border_left(40) - scroll_left(142)
415 // 3 = target_y(0) + container_border_top(10) - scroll_top(7) 423 // 3 = target_y(0) + container_border_top(10) - scroll_top(7)
416 // Rect is clipped by container's overflow clip because of overflow:scroll. 424 // Rect is clipped by container's overflow clip because of overflow:scroll.
417 EXPECT_EQ(LayoutRect(-2, 3, 140, 110), rect); 425 EXPECT_EQ(LayoutRect(-2, 3, 140, 110), rect);
418 426
419 rect = targetOverflowRect; 427 rect = targetOverflowRect;
420 target->flipForWritingMode(rect); 428 target->flipForWritingMode(rect);
421 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(&layoutView(), rect)); 429 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(&layoutView(), rect));
422 // (-2, 3, 140, 100) is first clipped by container's overflow clip, to (40, 10 , 50, 80), 430 // (-2, 3, 140, 100) is first clipped by container's overflow clip, to
423 // then is added by container's offset in LayoutView (111, 222). 431 // (40, 10, 50, 80), then is added by container's offset in LayoutView
424 // TODO(crbug.com/600039): rect.x() should be 262 (left + border-left), but is offset 432 // (111, 222).
433 // TODO(crbug.com/600039): rect.x() should be 262 (left + border-left), but is
434 // offset
425 // by extra horizontal border-widths because of layout error. 435 // by extra horizontal border-widths because of layout error.
426 EXPECT_EQ(LayoutRect(322, 121, 50, 80), rect); 436 EXPECT_EQ(LayoutRect(322, 121, 50, 80), rect);
427 checkPaintInvalidationStateRectMapping(rect, targetOverflowRect, *target, 437 checkPaintInvalidationStateRectMapping(rect, targetOverflowRect, *target,
428 layoutView(), layoutView()); 438 layoutView(), layoutView());
429 439
430 LayoutRect containerOverflowRect = 440 LayoutRect containerOverflowRect =
431 container->localOverflowRectForPaintInvalidation(); 441 container->localOverflowRectForPaintInvalidation();
432 // Because container has overflow clip, its visual overflow doesn't include ov erflow from children. 442 // Because container has overflow clip, its visual overflow doesn't include
443 // overflow from children.
433 // 110 = width(50) + border_left_width(40) + border_right_width(20) 444 // 110 = width(50) + border_left_width(40) + border_right_width(20)
434 // 120 = height(80) + border_top_width(10) + border_bottom_width(30) 445 // 120 = height(80) + border_top_width(10) + border_bottom_width(30)
435 EXPECT_EQ(LayoutRect(0, 0, 110, 120), containerOverflowRect); 446 EXPECT_EQ(LayoutRect(0, 0, 110, 120), containerOverflowRect);
436 447
437 rect = containerOverflowRect; 448 rect = containerOverflowRect;
438 container->flipForWritingMode(rect); 449 container->flipForWritingMode(rect);
439 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(container, rect)); 450 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(container, rect));
440 EXPECT_EQ(LayoutRect(0, 0, 110, 120), rect); 451 EXPECT_EQ(LayoutRect(0, 0, 110, 120), rect);
441 452
442 rect = containerOverflowRect; 453 rect = containerOverflowRect;
443 container->flipForWritingMode(rect); 454 container->flipForWritingMode(rect);
444 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(&layoutView(), rect)); 455 EXPECT_TRUE(container->mapToVisualRectInAncestorSpace(&layoutView(), rect));
445 // TODO(crbug.com/600039): rect.x() should be 222 (left), but is offset by ext ra horizontal 456 // TODO(crbug.com/600039): rect.x() should be 222 (left), but is offset by
457 // extra horizontal
446 // border-widths because of layout error. 458 // border-widths because of layout error.
447 EXPECT_EQ(LayoutRect(282, 111, 110, 120), rect); 459 EXPECT_EQ(LayoutRect(282, 111, 110, 120), rect);
448 checkPaintInvalidationStateRectMapping( 460 checkPaintInvalidationStateRectMapping(
449 rect, containerOverflowRect, *container, layoutView(), layoutView()); 461 rect, containerOverflowRect, *container, layoutView(), layoutView());
450 } 462 }
451 463
452 TEST_F(VisualRectMappingTest, ContainerOverflowHidden) { 464 TEST_F(VisualRectMappingTest, ContainerOverflowHidden) {
453 setBodyInnerHTML( 465 setBodyInnerHTML(
454 "<div id='container' style='position: absolute; top: 111px; left: 222px;" 466 "<div id='container' style='position: absolute; top: 111px; left: 222px;"
455 " border: 10px solid red; overflow: hidden; width: 50px; height: " 467 " border: 10px solid red; overflow: hidden; width: 50px; height: "
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 " border: solid red; border-width: 10px 20px 30px 40px;" 501 " border: solid red; border-width: 10px 20px 30px 40px;"
490 " overflow: hidden; width: 50px; height: 80px'>" 502 " overflow: hidden; width: 50px; height: 80px'>"
491 " <div id='target' style='box-shadow: 40px 20px black; width: 100px; " 503 " <div id='target' style='box-shadow: 40px 20px black; width: 100px; "
492 "height: 90px'></div>" 504 "height: 90px'></div>"
493 " <div style='width: 100px; height: 100px'></div>" 505 " <div style='width: 100px; height: 100px'></div>"
494 "</div>"); 506 "</div>");
495 507
496 LayoutBlock* container = 508 LayoutBlock* container =
497 toLayoutBlock(getLayoutObjectByElementId("container")); 509 toLayoutBlock(getLayoutObjectByElementId("container"));
498 EXPECT_EQ(LayoutUnit(), container->scrollTop()); 510 EXPECT_EQ(LayoutUnit(), container->scrollTop());
499 // The initial scroll offset is to the left-most because of flipped blocks wri ting mode. 511 // The initial scroll offset is to the left-most because of flipped blocks
512 // writing mode.
500 // 150 = total_layout_overflow(100 + 100) - width(50) 513 // 150 = total_layout_overflow(100 + 100) - width(50)
501 EXPECT_EQ(LayoutUnit(150), container->scrollLeft()); 514 EXPECT_EQ(LayoutUnit(150), container->scrollLeft());
502 container->setScrollTop(LayoutUnit(7)); 515 container->setScrollTop(LayoutUnit(7));
503 container->setScrollLeft(LayoutUnit(82)); // Scroll to the right by 8 pixels. 516 container->setScrollLeft(LayoutUnit(82)); // Scroll to the right by 8 pixels.
504 document().view()->updateAllLifecyclePhases(); 517 document().view()->updateAllLifecyclePhases();
505 518
506 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target")); 519 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target"));
507 LayoutRect targetOverflowRect = 520 LayoutRect targetOverflowRect =
508 target->localOverflowRectForPaintInvalidation(); 521 target->localOverflowRectForPaintInvalidation();
509 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the origi n) 522 // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the
523 // origin)
510 // 140 = width(100) + box_shadow_offset_x(40) 524 // 140 = width(100) + box_shadow_offset_x(40)
511 // 110 = height(90) + box_shadow_offset_y(20) 525 // 110 = height(90) + box_shadow_offset_y(20)
512 EXPECT_EQ(LayoutRect(-40, 0, 140, 110), targetOverflowRect); 526 EXPECT_EQ(LayoutRect(-40, 0, 140, 110), targetOverflowRect);
513 527
514 LayoutRect rect = targetOverflowRect; 528 LayoutRect rect = targetOverflowRect;
515 target->flipForWritingMode(rect); 529 target->flipForWritingMode(rect);
516 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect)); 530 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect));
517 // This rect is in physical coordinates of target. 531 // This rect is in physical coordinates of target.
518 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect); 532 EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect);
519 533
(...skipping 11 matching lines...) Expand all
531 " border: solid red; border-width: 10px 20px 30px 40px;" 545 " border: solid red; border-width: 10px 20px 30px 40px;"
532 " overflow: scroll; width: 50px; height: 80px'>" 546 " overflow: scroll; width: 50px; height: 80px'>"
533 " <div id='target' style='writing-mode: vertical-lr; box-shadow: 40px " 547 " <div id='target' style='writing-mode: vertical-lr; box-shadow: 40px "
534 "20px black; width: 100px; height: 90px'></div>" 548 "20px black; width: 100px; height: 90px'></div>"
535 " <div style='width: 100px; height: 100px'></div>" 549 " <div style='width: 100px; height: 100px'></div>"
536 "</div>"); 550 "</div>");
537 551
538 LayoutBlock* container = 552 LayoutBlock* container =
539 toLayoutBlock(getLayoutObjectByElementId("container")); 553 toLayoutBlock(getLayoutObjectByElementId("container"));
540 EXPECT_EQ(LayoutUnit(), container->scrollTop()); 554 EXPECT_EQ(LayoutUnit(), container->scrollTop());
541 // The initial scroll offset is to the left-most because of flipped blocks wri ting mode. 555 // The initial scroll offset is to the left-most because of flipped blocks
556 // writing mode.
542 // 150 = total_layout_overflow(100 + 100) - width(50) 557 // 150 = total_layout_overflow(100 + 100) - width(50)
543 EXPECT_EQ(LayoutUnit(150), container->scrollLeft()); 558 EXPECT_EQ(LayoutUnit(150), container->scrollLeft());
544 container->setScrollTop(LayoutUnit(7)); 559 container->setScrollTop(LayoutUnit(7));
545 container->setScrollLeft( 560 container->setScrollLeft(
546 LayoutUnit(142)); // Scroll to the right by 8 pixels. 561 LayoutUnit(142)); // Scroll to the right by 8 pixels.
547 document().view()->updateAllLifecyclePhases(); 562 document().view()->updateAllLifecyclePhases();
548 563
549 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target")); 564 LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target"));
550 LayoutRect targetOverflowRect = 565 LayoutRect targetOverflowRect =
551 target->localOverflowRectForPaintInvalidation(); 566 target->localOverflowRectForPaintInvalidation();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 ContainerOfAbsoluteAbovePaintInvalidationContainer) { 637 ContainerOfAbsoluteAbovePaintInvalidationContainer) {
623 enableCompositing(); 638 enableCompositing();
624 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); 639 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true);
625 640
626 setBodyInnerHTML( 641 setBodyInnerHTML(
627 "<div id='container' style='position: absolute; top: 88px; left: 99px'>" 642 "<div id='container' style='position: absolute; top: 88px; left: 99px'>"
628 " <div style='height: 222px'></div>" 643 " <div style='height: 222px'></div>"
629 // This div makes stacking-context composited. 644 // This div makes stacking-context composited.
630 " <div style='position: absolute; width: 1px; height: 1px; " 645 " <div style='position: absolute; width: 1px; height: 1px; "
631 "background:yellow; will-change: transform'></div>" 646 "background:yellow; will-change: transform'></div>"
632 // This stacking context is paintInvalidationContainer of the absolute chi ld, but not a container of it. 647 // This stacking context is paintInvalidationContainer of the absolute
648 // child, but not a container of it.
633 " <div id='stacking-context' style='opacity: 0.9'>" 649 " <div id='stacking-context' style='opacity: 0.9'>"
634 " <div id='absolute' style='position: absolute; top: 50px; left: " 650 " <div id='absolute' style='position: absolute; top: 50px; left: "
635 "50px; width: 50px; height: 50px; background: green'></div>" 651 "50px; width: 50px; height: 50px; background: green'></div>"
636 " </div>" 652 " </div>"
637 "</div>"); 653 "</div>");
638 654
639 LayoutBlock* stackingContext = 655 LayoutBlock* stackingContext =
640 toLayoutBlock(getLayoutObjectByElementId("stacking-context")); 656 toLayoutBlock(getLayoutObjectByElementId("stacking-context"));
641 LayoutBlock* absolute = toLayoutBlock(getLayoutObjectByElementId("absolute")); 657 LayoutBlock* absolute = toLayoutBlock(getLayoutObjectByElementId("absolute"));
642 LayoutBlock* container = 658 LayoutBlock* container =
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 target->localOverflowRectForPaintInvalidation(); 705 target->localOverflowRectForPaintInvalidation();
690 EXPECT_EQ(LayoutRect(0, 0, 400, 400), targetOverflowRect); 706 EXPECT_EQ(LayoutRect(0, 0, 400, 400), targetOverflowRect);
691 LayoutRect rect = targetOverflowRect; 707 LayoutRect rect = targetOverflowRect;
692 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(&layoutView(), rect)); 708 EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(&layoutView(), rect));
693 EXPECT_EQ(LayoutRect(0, 0, 200, 200), rect); 709 EXPECT_EQ(LayoutRect(0, 0, 200, 200), rect);
694 checkPaintInvalidationStateRectMapping(rect, targetOverflowRect, *target, 710 checkPaintInvalidationStateRectMapping(rect, targetOverflowRect, *target,
695 layoutView(), layoutView()); 711 layoutView(), layoutView());
696 } 712 }
697 713
698 } // namespace blink 714 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698