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

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

Issue 2770123003: Replace ASSERT with DCHECK in core/layout/ excluding subdirs (Closed)
Patch Set: Split some DCHECKs and add DCHECK_ops wherever possible Created 3 years, 8 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) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 // The only place where a ruby base can be is in the last position 54 // The only place where a ruby base can be is in the last position
55 // Note: As anonymous blocks, ruby runs do not have ':before' or ':after' 55 // Note: As anonymous blocks, ruby runs do not have ':before' or ':after'
56 // content themselves. 56 // content themselves.
57 return lastChild() && lastChild()->isRubyBase(); 57 return lastChild() && lastChild()->isRubyBase();
58 } 58 }
59 59
60 LayoutRubyText* LayoutRubyRun::rubyText() const { 60 LayoutRubyText* LayoutRubyRun::rubyText() const {
61 LayoutObject* child = firstChild(); 61 LayoutObject* child = firstChild();
62 // If in future it becomes necessary to support floating or positioned ruby 62 // If in future it becomes necessary to support floating or positioned ruby
63 // text, layout will have to be changed to handle them properly. 63 // text, layout will have to be changed to handle them properly.
64 ASSERT(!child || !child->isRubyText() || 64 DCHECK(!child || !child->isRubyText() ||
65 !child->isFloatingOrOutOfFlowPositioned()); 65 !child->isFloatingOrOutOfFlowPositioned());
66 return child && child->isRubyText() ? static_cast<LayoutRubyText*>(child) : 0; 66 return child && child->isRubyText() ? static_cast<LayoutRubyText*>(child) : 0;
67 } 67 }
68 68
69 LayoutRubyBase* LayoutRubyRun::rubyBase() const { 69 LayoutRubyBase* LayoutRubyRun::rubyBase() const {
70 LayoutObject* child = lastChild(); 70 LayoutObject* child = lastChild();
71 return child && child->isRubyBase() ? static_cast<LayoutRubyBase*>(child) : 0; 71 return child && child->isRubyBase() ? static_cast<LayoutRubyBase*>(child) : 0;
72 } 72 }
73 73
74 LayoutRubyBase* LayoutRubyRun::rubyBaseSafe() { 74 LayoutRubyBase* LayoutRubyRun::rubyBaseSafe() {
75 LayoutRubyBase* base = rubyBase(); 75 LayoutRubyBase* base = rubyBase();
76 if (!base) { 76 if (!base) {
77 base = createRubyBase(); 77 base = createRubyBase();
78 LayoutBlockFlow::addChild(base); 78 LayoutBlockFlow::addChild(base);
79 } 79 }
80 return base; 80 return base;
81 } 81 }
82 82
83 bool LayoutRubyRun::isChildAllowed(LayoutObject* child, 83 bool LayoutRubyRun::isChildAllowed(LayoutObject* child,
84 const ComputedStyle&) const { 84 const ComputedStyle&) const {
85 return child->isRubyText() || child->isInline(); 85 return child->isRubyText() || child->isInline();
86 } 86 }
87 87
88 void LayoutRubyRun::addChild(LayoutObject* child, LayoutObject* beforeChild) { 88 void LayoutRubyRun::addChild(LayoutObject* child, LayoutObject* beforeChild) {
89 ASSERT(child); 89 DCHECK(child);
90 90
91 if (child->isRubyText()) { 91 if (child->isRubyText()) {
92 if (!beforeChild) { 92 if (!beforeChild) {
93 // LayoutRuby has already ascertained that we can add the child here. 93 // LayoutRuby has already ascertained that we can add the child here.
94 ASSERT(!hasRubyText()); 94 DCHECK(!hasRubyText());
95 // prepend ruby texts as first child 95 // prepend ruby texts as first child
96 LayoutBlockFlow::addChild(child, firstChild()); 96 LayoutBlockFlow::addChild(child, firstChild());
97 } else if (beforeChild->isRubyText()) { 97 } else if (beforeChild->isRubyText()) {
98 // New text is inserted just before another. 98 // New text is inserted just before another.
99 // In this case the new text takes the place of the old one, and 99 // In this case the new text takes the place of the old one, and
100 // the old text goes into a new run that is inserted as next sibling. 100 // the old text goes into a new run that is inserted as next sibling.
101 ASSERT(beforeChild->parent() == this); 101 DCHECK_EQ(beforeChild->parent(), this);
102 LayoutObject* ruby = parent(); 102 LayoutObject* ruby = parent();
103 ASSERT(ruby->isRuby()); 103 DCHECK(ruby->isRuby());
104 LayoutBlock* newRun = staticCreateRubyRun(ruby); 104 LayoutBlock* newRun = staticCreateRubyRun(ruby);
105 ruby->addChild(newRun, nextSibling()); 105 ruby->addChild(newRun, nextSibling());
106 // Add the new ruby text and move the old one to the new run 106 // Add the new ruby text and move the old one to the new run
107 // Note: Doing it in this order and not using LayoutRubyRun's methods, 107 // Note: Doing it in this order and not using LayoutRubyRun's methods,
108 // in order to avoid automatic removal of the ruby run in case there is no 108 // in order to avoid automatic removal of the ruby run in case there is no
109 // other child besides the old ruby text. 109 // other child besides the old ruby text.
110 LayoutBlockFlow::addChild(child, beforeChild); 110 LayoutBlockFlow::addChild(child, beforeChild);
111 LayoutBlockFlow::removeChild(beforeChild); 111 LayoutBlockFlow::removeChild(beforeChild);
112 newRun->addChild(beforeChild); 112 newRun->addChild(beforeChild);
113 } else if (hasRubyBase()) { 113 } else if (hasRubyBase()) {
(...skipping 12 matching lines...) Expand all
126 rubyBaseSafe()->moveChildren(newRun->rubyBaseSafe(), beforeChild); 126 rubyBaseSafe()->moveChildren(newRun->rubyBaseSafe(), beforeChild);
127 } 127 }
128 } else { 128 } else {
129 // child is not a text -> insert it into the base 129 // child is not a text -> insert it into the base
130 // (append it instead if beforeChild is the ruby text) 130 // (append it instead if beforeChild is the ruby text)
131 LayoutRubyBase* base = rubyBaseSafe(); 131 LayoutRubyBase* base = rubyBaseSafe();
132 if (beforeChild == base) 132 if (beforeChild == base)
133 beforeChild = base->firstChild(); 133 beforeChild = base->firstChild();
134 if (beforeChild && beforeChild->isRubyText()) 134 if (beforeChild && beforeChild->isRubyText())
135 beforeChild = 0; 135 beforeChild = 0;
136 ASSERT(!beforeChild || beforeChild->isDescendantOf(base)); 136 DCHECK(!beforeChild || beforeChild->isDescendantOf(base));
137 base->addChild(child, beforeChild); 137 base->addChild(child, beforeChild);
138 } 138 }
139 } 139 }
140 140
141 void LayoutRubyRun::removeChild(LayoutObject* child) { 141 void LayoutRubyRun::removeChild(LayoutObject* child) {
142 // If the child is a ruby text, then merge the ruby base with the base of 142 // If the child is a ruby text, then merge the ruby base with the base of
143 // the right sibling run, if possible. 143 // the right sibling run, if possible.
144 if (!beingDestroyed() && !documentBeingDestroyed() && child->isRubyText()) { 144 if (!beingDestroyed() && !documentBeingDestroyed() && child->isRubyText()) {
145 LayoutRubyBase* base = rubyBase(); 145 LayoutRubyBase* base = rubyBase();
146 LayoutObject* rightNeighbour = nextSibling(); 146 LayoutObject* rightNeighbour = nextSibling();
147 if (base && rightNeighbour && rightNeighbour->isRubyRun()) { 147 if (base && rightNeighbour && rightNeighbour->isRubyRun()) {
148 // Ruby run without a base can happen only at the first run. 148 // Ruby run without a base can happen only at the first run.
149 LayoutRubyRun* rightRun = toLayoutRubyRun(rightNeighbour); 149 LayoutRubyRun* rightRun = toLayoutRubyRun(rightNeighbour);
150 if (rightRun->hasRubyBase()) { 150 if (rightRun->hasRubyBase()) {
151 LayoutRubyBase* rightBase = rightRun->rubyBaseSafe(); 151 LayoutRubyBase* rightBase = rightRun->rubyBaseSafe();
152 // Collect all children in a single base, then swap the bases. 152 // Collect all children in a single base, then swap the bases.
153 rightBase->moveChildren(base); 153 rightBase->moveChildren(base);
154 moveChildTo(rightRun, base); 154 moveChildTo(rightRun, base);
155 rightRun->moveChildTo(this, rightBase); 155 rightRun->moveChildTo(this, rightBase);
156 // The now empty ruby base will be removed below. 156 // The now empty ruby base will be removed below.
157 ASSERT(!rubyBase()->firstChild()); 157 DCHECK(!rubyBase()->firstChild());
158 } 158 }
159 } 159 }
160 } 160 }
161 161
162 LayoutBlockFlow::removeChild(child); 162 LayoutBlockFlow::removeChild(child);
163 163
164 if (!beingDestroyed() && !documentBeingDestroyed()) { 164 if (!beingDestroyed() && !documentBeingDestroyed()) {
165 // Check if our base (if any) is now empty. If so, destroy it. 165 // Check if our base (if any) is now empty. If so, destroy it.
166 LayoutBlockFlow* base = rubyBase(); 166 LayoutBlockFlow* base = rubyBase();
167 if (base && !base->firstChild()) { 167 if (base && !base->firstChild()) {
(...skipping 15 matching lines...) Expand all
183 RefPtr<ComputedStyle> newStyle = 183 RefPtr<ComputedStyle> newStyle =
184 ComputedStyle::createAnonymousStyleWithDisplay(styleRef(), 184 ComputedStyle::createAnonymousStyleWithDisplay(styleRef(),
185 EDisplay::kBlock); 185 EDisplay::kBlock);
186 newStyle->setTextAlign(ETextAlign::kCenter); // FIXME: use WEBKIT_CENTER? 186 newStyle->setTextAlign(ETextAlign::kCenter); // FIXME: use WEBKIT_CENTER?
187 layoutObject->setStyle(std::move(newStyle)); 187 layoutObject->setStyle(std::move(newStyle));
188 return layoutObject; 188 return layoutObject;
189 } 189 }
190 190
191 LayoutRubyRun* LayoutRubyRun::staticCreateRubyRun( 191 LayoutRubyRun* LayoutRubyRun::staticCreateRubyRun(
192 const LayoutObject* parentRuby) { 192 const LayoutObject* parentRuby) {
193 ASSERT(parentRuby && parentRuby->isRuby()); 193 DCHECK(parentRuby);
194 DCHECK(parentRuby->isRuby());
194 LayoutRubyRun* rr = new LayoutRubyRun(); 195 LayoutRubyRun* rr = new LayoutRubyRun();
195 rr->setDocumentForAnonymous(&parentRuby->document()); 196 rr->setDocumentForAnonymous(&parentRuby->document());
196 RefPtr<ComputedStyle> newStyle = 197 RefPtr<ComputedStyle> newStyle =
197 ComputedStyle::createAnonymousStyleWithDisplay(parentRuby->styleRef(), 198 ComputedStyle::createAnonymousStyleWithDisplay(parentRuby->styleRef(),
198 EDisplay::kInlineBlock); 199 EDisplay::kInlineBlock);
199 rr->setStyle(std::move(newStyle)); 200 rr->setStyle(std::move(newStyle));
200 return rr; 201 return rr;
201 } 202 }
202 203
203 LayoutObject* LayoutRubyRun::layoutSpecialExcludedChild( 204 LayoutObject* LayoutRubyRun::layoutSpecialExcludedChild(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 259
259 // Update our overflow to account for the new LayoutRubyText position. 260 // Update our overflow to account for the new LayoutRubyText position.
260 computeOverflow(clientLogicalBottom()); 261 computeOverflow(clientLogicalBottom());
261 } 262 }
262 263
263 void LayoutRubyRun::getOverhang(bool firstLine, 264 void LayoutRubyRun::getOverhang(bool firstLine,
264 LayoutObject* startLayoutObject, 265 LayoutObject* startLayoutObject,
265 LayoutObject* endLayoutObject, 266 LayoutObject* endLayoutObject,
266 int& startOverhang, 267 int& startOverhang,
267 int& endOverhang) const { 268 int& endOverhang) const {
268 ASSERT(!needsLayout()); 269 DCHECK(!needsLayout());
269 270
270 startOverhang = 0; 271 startOverhang = 0;
271 endOverhang = 0; 272 endOverhang = 0;
272 273
273 LayoutRubyBase* rubyBase = this->rubyBase(); 274 LayoutRubyBase* rubyBase = this->rubyBase();
274 LayoutRubyText* rubyText = this->rubyText(); 275 LayoutRubyText* rubyText = this->rubyText();
275 276
276 if (!rubyBase || !rubyText) 277 if (!rubyBase || !rubyText)
277 return; 278 return;
278 279
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 case U_LB_GLUE: 344 case U_LB_GLUE:
344 case U_LB_OPEN_PUNCTUATION: 345 case U_LB_OPEN_PUNCTUATION:
345 return false; 346 return false;
346 default: 347 default:
347 break; 348 break;
348 } 349 }
349 return true; 350 return true;
350 } 351 }
351 352
352 } // namespace blink 353 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutRubyBase.cpp ('k') | third_party/WebKit/Source/core/layout/LayoutScrollbarPart.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698