Diff
Deleted: branches/chromium/963/LayoutTests/fast/regions/region-range-for-box-crash-expected.txt (105816 => 105817)
--- branches/chromium/963/LayoutTests/fast/regions/region-range-for-box-crash-expected.txt 2012-01-24 22:54:31 UTC (rev 105816)
+++ branches/chromium/963/LayoutTests/fast/regions/region-range-for-box-crash-expected.txt 2012-01-24 23:00:43 UTC (rev 105817)
@@ -1,5 +0,0 @@
-Bug 74781: Crash in RenderFlowThread::getRegionRangeForBox
-
-This test PASSES if it does not CRASH or ASSERT.
-
-A
Deleted: branches/chromium/963/LayoutTests/fast/regions/region-range-for-box-crash.html (105816 => 105817)
--- branches/chromium/963/LayoutTests/fast/regions/region-range-for-box-crash.html 2012-01-24 22:54:31 UTC (rev 105816)
+++ branches/chromium/963/LayoutTests/fast/regions/region-range-for-box-crash.html 2012-01-24 23:00:43 UTC (rev 105817)
@@ -1,42 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <style>
- #el0 {
- -webkit-flow-from: a;
- content: counter(c);
- }
- #el2 {
- -webkit-flow-into: a;
- }
- </style>
- <script>
- if (window.layoutTestController)
- layoutTestController.dumpAsText();
-
- function crash() {
- el0 = document.createElement('div');
- el0.setAttribute('id', 'el0');
- document.body.appendChild(el0);
- el1 = document.createElement('div');
- document.body.appendChild(el1);
- el2 = document.createElement('div');
- el2.setAttribute('id', 'el2');
- el1.appendChild(el2);
- el2.appendChild(document.createTextNode('A'));
- el3 = document.createElement('input');
- el3.setAttribute('id', 'el3');
- el2.appendChild(el3);
- document.body.style.zoom=2;
- document.execCommand('selectall');
- el2.style.display='table-header-group';
- document.body.style.zoom=1;
- }
- window._onload_=crash
- </script>
- </head>
- <body>
- <p> Bug <a href="" Crash in RenderFlowThread::getRegionRangeForBox</p>
- <p> This test PASSES if it does not CRASH or ASSERT.</p>
- </body>
-</html>
Modified: branches/chromium/963/Source/WebCore/rendering/RenderBlock.cpp (105816 => 105817)
--- branches/chromium/963/Source/WebCore/rendering/RenderBlock.cpp 2012-01-24 22:54:31 UTC (rev 105816)
+++ branches/chromium/963/Source/WebCore/rendering/RenderBlock.cpp 2012-01-24 23:00:43 UTC (rev 105817)
@@ -6618,7 +6618,7 @@
return 0;
RenderFlowThread* flowThread = enclosingRenderFlowThread();
- if (!flowThread || !flowThread->hasValidRegionInfo())
+ if (!flowThread || !flowThread->hasValidRegions())
return 0;
return flowThread->renderRegionForLine(offsetFromLogicalTopOfFirstPage() + blockOffset, true);
@@ -6639,7 +6639,7 @@
return false;
RenderFlowThread* flowThread = enclosingRenderFlowThread();
- if (!flowThread || !flowThread->hasValidRegionInfo())
+ if (!flowThread || !flowThread->hasValidRegions())
return 0;
return flowThread->logicalWidthChangedInRegions(this, offsetFromLogicalTopOfFirstPage());
Modified: branches/chromium/963/Source/WebCore/rendering/RenderBox.cpp (105816 => 105817)
--- branches/chromium/963/Source/WebCore/rendering/RenderBox.cpp 2012-01-24 22:54:31 UTC (rev 105816)
+++ branches/chromium/963/Source/WebCore/rendering/RenderBox.cpp 2012-01-24 23:00:43 UTC (rev 105817)
@@ -241,6 +241,9 @@
return;
RenderFlowThread* flowThread = enclosingRenderFlowThread();
+ if (!flowThread->hasValidRegions())
+ return;
+
flowThread->removeRenderBoxRegionInfo(this);
}
Modified: branches/chromium/963/Source/WebCore/rendering/RenderFlowThread.cpp (105816 => 105817)
--- branches/chromium/963/Source/WebCore/rendering/RenderFlowThread.cpp 2012-01-24 22:54:31 UTC (rev 105816)
+++ branches/chromium/963/Source/WebCore/rendering/RenderFlowThread.cpp 2012-01-24 23:00:43 UTC (rev 105817)
@@ -209,9 +209,7 @@
void RenderFlowThread::removeRegionFromThread(RenderRegion* renderRegion)
{
ASSERT(renderRegion);
- clearRenderRegionRangeMap();
m_regionList.remove(renderRegion);
-
if (renderRegion->parentFlowThread()) {
if (!renderRegion->isValid()) {
renderRegion->parentFlowThread()->m_observerThreadsSet.remove(this);
@@ -501,7 +499,7 @@
void RenderFlowThread::repaintRectangleInRegions(const LayoutRect& repaintRect, bool immediate)
{
- if (!shouldRepaint(repaintRect) || !hasValidRegionInfo())
+ if (!shouldRepaint(repaintRect))
return;
for (RenderRegionList::iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) {
@@ -595,7 +593,7 @@
RenderRegion* RenderFlowThread::mapFromFlowToRegion(TransformState& transformState) const
{
- if (!hasValidRegionInfo())
+ if (!hasValidRegions())
return 0;
LayoutRect boxRect = transformState.mappedQuad().enclosingBoundingBox();
@@ -676,7 +674,7 @@
LayoutUnit RenderFlowThread::contentLogicalWidthOfFirstRegion() const
{
- if (!hasValidRegionInfo())
+ if (!hasValidRegions())
return 0;
for (RenderRegionList::const_iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) {
RenderRegion* region = *iter;
@@ -690,7 +688,7 @@
LayoutUnit RenderFlowThread::contentLogicalHeightOfFirstRegion() const
{
- if (!hasValidRegionInfo())
+ if (!hasValidRegions())
return 0;
for (RenderRegionList::const_iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) {
RenderRegion* region = *iter;
@@ -704,7 +702,7 @@
LayoutUnit RenderFlowThread::contentLogicalLeftOfFirstRegion() const
{
- if (!hasValidRegionInfo())
+ if (!hasValidRegions())
return 0;
for (RenderRegionList::const_iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) {
RenderRegion* region = *iter;
@@ -718,7 +716,7 @@
RenderRegion* RenderFlowThread::firstRegion() const
{
- if (!hasValidRegionInfo())
+ if (!hasValidRegions())
return 0;
for (RenderRegionList::const_iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) {
RenderRegion* region = *iter;
@@ -731,7 +729,7 @@
RenderRegion* RenderFlowThread::lastRegion() const
{
- if (!hasValidRegionInfo())
+ if (!hasValidRegions())
return 0;
for (RenderRegionList::const_reverse_iterator iter = m_regionList.rbegin(); iter != m_regionList.rend(); ++iter) {
RenderRegion* region = *iter;
@@ -781,10 +779,8 @@
RenderRegionRange* range = m_regionRangeMap.get(box);
if (!range)
return;
-
startRegion = range->startRegion();
endRegion = range->endRegion();
- ASSERT(m_regionList.contains(startRegion) && m_regionList.contains(endRegion));
}
} // namespace WebCore
Modified: branches/chromium/963/Source/WebCore/rendering/RenderFlowThread.h (105816 => 105817)
--- branches/chromium/963/Source/WebCore/rendering/RenderFlowThread.h 2012-01-24 22:54:31 UTC (rev 105816)
+++ branches/chromium/963/Source/WebCore/rendering/RenderFlowThread.h 2012-01-24 23:00:43 UTC (rev 105817)
@@ -89,7 +89,6 @@
bool hasValidRegions() const { ASSERT(!m_regionsInvalidated); return m_hasValidRegions; }
void invalidateRegions() { m_regionsInvalidated = true; setNeedsLayout(true); }
- bool hasValidRegionInfo() const { return !m_regionsInvalidated && hasValidRegions(); }
static PassRefPtr<RenderStyle> createFlowThreadStyle(RenderStyle* parentStyle);