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

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

Issue 2748973002: Strictly unbreakable objects need to prevent interaction with the outside. (Closed)
Patch Set: 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. 2 * Copyright (C) 2011 Adobe Systems Incorporated. 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above 8 * 1. Redistributions of source code must retain the above
9 * copyright notice, this list of conditions and the following 9 * copyright notice, this list of conditions and the following
10 * disclaimer. 10 * disclaimer.
(...skipping 22 matching lines...) Expand all
33 #include "core/layout/LayoutMultiColumnSet.h" 33 #include "core/layout/LayoutMultiColumnSet.h"
34 34
35 namespace blink { 35 namespace blink {
36 36
37 LayoutFlowThread::LayoutFlowThread() 37 LayoutFlowThread::LayoutFlowThread()
38 : LayoutBlockFlow(nullptr), 38 : LayoutBlockFlow(nullptr),
39 m_columnSetsInvalidated(false), 39 m_columnSetsInvalidated(false),
40 m_pageLogicalSizeChanged(false) {} 40 m_pageLogicalSizeChanged(false) {}
41 41
42 LayoutFlowThread* LayoutFlowThread::locateFlowThreadContainingBlockOf( 42 LayoutFlowThread* LayoutFlowThread::locateFlowThreadContainingBlockOf(
43 const LayoutObject& descendant) { 43 const LayoutObject& descendant,
44 AncestorSearchConstraint constraint) {
44 ASSERT(descendant.isInsideFlowThread()); 45 ASSERT(descendant.isInsideFlowThread());
45 LayoutObject* curr = const_cast<LayoutObject*>(&descendant); 46 LayoutObject* curr = const_cast<LayoutObject*>(&descendant);
46 while (curr) { 47 while (curr) {
47 if (curr->isSVGChild()) 48 if (curr->isSVGChild())
48 return nullptr; 49 return nullptr;
49 if (curr->isLayoutFlowThread()) 50 if (curr->isLayoutFlowThread())
50 return toLayoutFlowThread(curr); 51 return toLayoutFlowThread(curr);
51 LayoutObject* container = curr->container(); 52 LayoutObject* container = curr->container();
53 // If we're inside something strictly unbreakable (due to having scrollbars
54 // or being writing mode roots, for instance), it's also strictly
55 // unbreakable in any outer fragmentation context. As such, what goes on
56 // inside any fragmentation context on the inside of this is completely
57 // opaque to ancestor fragmentation contexts.
58 if (constraint == IsolateUnbreakableContainers && container &&
59 container->isBox() &&
60 toLayoutBox(container)->getPaginationBreakability() == ForbidBreaks)
61 return nullptr;
52 curr = curr->parent(); 62 curr = curr->parent();
53 while (curr != container) { 63 while (curr != container) {
54 if (curr->isLayoutFlowThread()) { 64 if (curr->isLayoutFlowThread()) {
55 // The nearest ancestor flow thread isn't in our containing block chain. 65 // The nearest ancestor flow thread isn't in our containing block chain.
56 // Then we aren't really part of any flow thread, and we should stop 66 // Then we aren't really part of any flow thread, and we should stop
57 // looking. This happens when there are out-of-flow objects or column 67 // looking. This happens when there are out-of-flow objects or column
58 // spanners. 68 // spanners.
59 return nullptr; 69 return nullptr;
60 } 70 }
61 curr = curr->parent(); 71 curr = curr->parent();
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 242
233 void LayoutFlowThread::MultiColumnSetSearchAdapter::collectIfNeeded( 243 void LayoutFlowThread::MultiColumnSetSearchAdapter::collectIfNeeded(
234 const MultiColumnSetInterval& interval) { 244 const MultiColumnSetInterval& interval) {
235 if (m_result) 245 if (m_result)
236 return; 246 return;
237 if (interval.low() <= m_offset && interval.high() > m_offset) 247 if (interval.low() <= m_offset && interval.high() > m_offset)
238 m_result = interval.data(); 248 m_result = interval.data();
239 } 249 }
240 250
241 } // namespace blink 251 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698