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

Side by Side Diff: Source/WebCore/rendering/RenderBlock.cpp

Issue 9693006: Merge 110324 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1025/
Patch Set: Created 8 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
« no previous file with comments | « LayoutTests/fast/multicol/anonymous-block-split-crash-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2007 David Smith (catfish.man@gmail.com) 4 * (C) 2007 David Smith (catfish.man@gmail.com)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 514
515 // Hook |clone| up as the continuation of the middle block. 515 // Hook |clone| up as the continuation of the middle block.
516 if (!cloneBlock->isAnonymousBlock()) 516 if (!cloneBlock->isAnonymousBlock())
517 middleBlock->setContinuation(cloneBlock); 517 middleBlock->setContinuation(cloneBlock);
518 518
519 // We have been reparented and are now under the fromBlock. We need 519 // We have been reparented and are now under the fromBlock. We need
520 // to walk up our block parent chain until we hit the containing anonymous c olumns block. 520 // to walk up our block parent chain until we hit the containing anonymous c olumns block.
521 // Once we hit the anonymous columns block we're done. 521 // Once we hit the anonymous columns block we're done.
522 RenderBoxModelObject* curr = toRenderBoxModelObject(parent()); 522 RenderBoxModelObject* curr = toRenderBoxModelObject(parent());
523 RenderBoxModelObject* currChild = this; 523 RenderBoxModelObject* currChild = this;
524 RenderObject* currChildNextSibling = currChild->nextSibling();
524 525
525 while (curr && curr != fromBlock) { 526 while (curr && curr != fromBlock) {
526 ASSERT(curr->isRenderBlock()); 527 ASSERT(curr->isRenderBlock());
527 528
528 RenderBlock* blockCurr = toRenderBlock(curr); 529 RenderBlock* blockCurr = toRenderBlock(curr);
529 530
530 // Create a new clone. 531 // Create a new clone.
531 RenderBlock* cloneChild = cloneBlock; 532 RenderBlock* cloneChild = cloneBlock;
532 cloneBlock = blockCurr->clone(); 533 cloneBlock = blockCurr->clone();
533 534
534 // Insert our child clone as the first child. 535 // Insert our child clone as the first child.
535 cloneBlock->addChildIgnoringContinuation(cloneChild, 0); 536 cloneBlock->addChildIgnoringContinuation(cloneChild, 0);
536 537
537 // Hook the clone up as a continuation of |curr|. Note we do encounter 538 // Hook the clone up as a continuation of |curr|. Note we do encounter
538 // anonymous blocks possibly as we walk up the block chain. When we spl it an 539 // anonymous blocks possibly as we walk up the block chain. When we spl it an
539 // anonymous block, there's no need to do any continuation hookup, since we haven't 540 // anonymous block, there's no need to do any continuation hookup, since we haven't
540 // actually split a real element. 541 // actually split a real element.
541 if (!blockCurr->isAnonymousBlock()) { 542 if (!blockCurr->isAnonymousBlock()) {
542 oldCont = blockCurr->continuation(); 543 oldCont = blockCurr->continuation();
543 blockCurr->setContinuation(cloneBlock); 544 blockCurr->setContinuation(cloneBlock);
544 cloneBlock->setContinuation(oldCont); 545 cloneBlock->setContinuation(oldCont);
545 } 546 }
546 547
547 // Someone may have indirectly caused a <q> to split. When this happens , the :after content 548 // Someone may have indirectly caused a <q> to split. When this happens , the :after content
548 // has to move into the inline continuation. Call updateBeforeAfterCont ent to ensure that the inline's :after 549 // has to move into the inline continuation. Call updateBeforeAfterCont ent to ensure that the inline's :after
549 // content gets properly destroyed. 550 // content gets properly destroyed.
551 bool isLastChild = (currChildNextSibling == blockCurr->lastChild());
550 if (document()->usesBeforeAfterRules()) 552 if (document()->usesBeforeAfterRules())
551 blockCurr->children()->updateBeforeAfterContent(blockCurr, AFTER); 553 blockCurr->children()->updateBeforeAfterContent(blockCurr, AFTER);
554 if (isLastChild && currChildNextSibling != blockCurr->lastChild())
555 currChildNextSibling = 0; // We destroyed the last child, so now we need to update
556 // the value of currChildNextSibling.
552 557
553 // Now we need to take all of the children starting from the first child 558 // Now we need to take all of the children starting from the first child
554 // *after* currChild and append them all to the clone. 559 // *after* currChild and append them all to the clone.
555 blockCurr->moveChildrenTo(cloneBlock, currChild->nextSibling(), 0, true) ; 560 blockCurr->moveChildrenTo(cloneBlock, currChildNextSibling, 0, true);
556 561
557 // Keep walking up the chain. 562 // Keep walking up the chain.
558 currChild = curr; 563 currChild = curr;
564 currChildNextSibling = currChild->nextSibling();
559 curr = toRenderBoxModelObject(curr->parent()); 565 curr = toRenderBoxModelObject(curr->parent());
560 } 566 }
561 567
562 // Now we are at the columns block level. We need to put the clone into the toBlock. 568 // Now we are at the columns block level. We need to put the clone into the toBlock.
563 toBlock->children()->appendChildNode(toBlock, cloneBlock); 569 toBlock->children()->appendChildNode(toBlock, cloneBlock);
564 570
565 // Now take all the children after currChild and remove them from the fromBl ock 571 // Now take all the children after currChild and remove them from the fromBl ock
566 // and put them in the toBlock. 572 // and put them in the toBlock.
567 fromBlock->moveChildrenTo(toBlock, currChild->nextSibling(), 0, true); 573 fromBlock->moveChildrenTo(toBlock, currChildNextSibling, 0, true);
568 } 574 }
569 575
570 void RenderBlock::splitFlow(RenderObject* beforeChild, RenderBlock* newBlockBox, 576 void RenderBlock::splitFlow(RenderObject* beforeChild, RenderBlock* newBlockBox,
571 RenderObject* newChild, RenderBoxModelObject* oldCon t) 577 RenderObject* newChild, RenderBoxModelObject* oldCon t)
572 { 578 {
573 RenderBlock* pre = 0; 579 RenderBlock* pre = 0;
574 RenderBlock* block = containingColumnsBlock(); 580 RenderBlock* block = containingColumnsBlock();
575 581
576 // Delete our line boxes before we do the inline split into continuations. 582 // Delete our line boxes before we do the inline split into continuations.
577 block->deleteLineBoxTree(); 583 block->deleteLineBoxTree();
(...skipping 6652 matching lines...) Expand 10 before | Expand all | Expand 10 after
7230 } 7236 }
7231 7237
7232 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject) 7238 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject)
7233 { 7239 {
7234 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY()); 7240 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY());
7235 } 7241 }
7236 7242
7237 #endif 7243 #endif
7238 7244
7239 } // namespace WebCore 7245 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/fast/multicol/anonymous-block-split-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698