|
|
Created:
3 years, 7 months ago by ikilpatrick Modified:
3 years, 6 months ago Reviewers:
cbiesinger CC:
chromium-reviews, ojan+watch_chromium.org, szager+layoutwatch_chromium.org, glebl+reviews_chromium.org, dgrogan+ng_chromium.org, atotic+reviews_chromium.org, blink-reviews-layout_chromium.org, pdr+renderingwatchlist_chromium.org, eae+blinkwatch, leviw+renderwatch, zoltan1, jchaffraix+rendering, blink-reviews Target Ref:
refs/heads/master Project:
chromium Visibility:
Public. |
Description[LayoutNG] Fixes small crash inside preferred widths.
We were previously trying to perform perferred width calculation on a
non-LayoutNG layout object.
BUG=635619
Review-Url: https://codereview.chromium.org/2880993004
Cr-Commit-Position: refs/heads/master@{#480172}
Committed: https://chromium.googlesource.com/chromium/src/+/e47fe16501daea54a8926f47a3c9afe778887094
Patch Set 1 #Patch Set 2 : rebase. #
Total comments: 2
Patch Set 3 : ng-bot expectations. #Patch Set 4 : ng-bot #Patch Set 5 : ng-bot2 #
Messages
Total messages: 48 (30 generated)
Description was changed from ========== [LayoutNG] Fixes small crash inside preferred widths. We were previously trying to perform perferred width calculation on a non-LayoutNG layout object. BUG=635619 ========== to ========== [LayoutNG] Fixes small crash inside preferred widths. We were previously trying to perform perferred width calculation on a non-LayoutNG layout object. BUG=635619 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_layout_ng ==========
The CQ bit was checked by ikilpatrick@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
ianjkilpatrick@gmail.com changed reviewers: + cbiesinger@chromium.org, ianjkilpatrick@gmail.com
ikilpatrick@chromium.org changed reviewers: - ianjkilpatrick@gmail.com
I'm confused, how do we get to this codepath without NG enabled?
On 2017/05/15 16:51:51, cbiesinger wrote: > I'm confused, how do we get to this codepath without NG enabled? Without NG enabled we can't get to this codepath as the actual switch is here. https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/layout/La... With NG enabled we hit this: [86544:775:0515/101447.354238:153813504559104:FATAL:layout_ng_block_flow.h(36)] Security DCHECK failed: !object || (object->IsLayoutNGBlockFlow()). 0 libbase.dylib 0x000000010dd0775e base::debug::StackTrace::StackTrace(unsigned long) + 174 1 libbase.dylib 0x000000010dd077fd base::debug::StackTrace::StackTrace(unsigned long) + 29 2 libbase.dylib 0x000000010dd05c8c base::debug::StackTrace::StackTrace() + 28 3 libbase.dylib 0x000000010dda4aef logging::LogMessage::~LogMessage() + 479 4 libbase.dylib 0x000000010dda2465 logging::LogMessage::~LogMessage() + 21 5 libblink_core.dylib 0x0000000127022864 blink::ToLayoutNGBlockFlow(blink::LayoutObject*) + 228 6 libblink_core.dylib 0x000000012702298f blink::NGBlockNode::FirstChild() + 143 7 libblink_core.dylib 0x000000012701a883 blink::NGBlockLayoutAlgorithm::ComputeMinMaxContentSize() const + 163 8 libblink_core.dylib 0x0000000127022167 blink::NGBlockNode::ComputeMinMaxContentSize() + 631 9 libblink_core.dylib 0x000000012701a916 blink::NGBlockLayoutAlgorithm::ComputeMinMaxContentSize() const + 310 10 libblink_core.dylib 0x000000012701afc6 blink::NGBlockLayoutAlgorithm::Layout() + 166 11 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 12 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 13 libblink_core.dylib 0x0000000126ff6d54 blink::NGInlineLayoutAlgorithm::LayoutItem(blink::NGInlineItem const&) + 788 14 libblink_core.dylib 0x0000000126ff68a9 blink::NGInlineLayoutAlgorithm::InlineSizeFromLayout(blink::NGInlineItem const&) + 73 15 libblink_core.dylib 0x0000000126ff618a blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&) + 58 16 libblink_core.dylib 0x0000000126ff6122 blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&, unsigned int, unsigned int) + 82 17 libblink_core.dylib 0x0000000126ff5bf4 blink::NGInlineLayoutAlgorithm::SetEnd(unsigned int) + 980 18 libblink_core.dylib 0x0000000127010ab0 blink::NGLineBreaker::BreakLines(blink::NGInlineLayoutAlgorithm*, WTF::String const&, unsigned int) + 688 19 libblink_core.dylib 0x0000000126ff9dc4 blink::NGInlineLayoutAlgorithm::Layout() + 196 Layout tree dump: LayoutNGBlockFlow (relative positioned) 0x768a7514990 DIV class="widget-form__group" LayoutInline 0x768a74a15d0 LABEL class="widget-form__label" LayoutText 0x768a7503148 #text "Depart" LayoutTextControl 0x768a74cc4d0 INPUT id="datepicker-input-departureDate" class="qfa1-input date-picker__input" * LayoutBlockFlow 0x768a74dc700 DIV id="inner-editor" (editable) LayoutText 0x768a7503210 #text "Mon 15 May 2017" Which I think is being created by: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/layout/La... There are a bunch of layout objects which are inherit from LayoutBlockFlow which we'll probably have to templetize, e.g. LayoutTableCell<Type> : Type { } LayoutTableCell<LayoutNGBlockFlow> LayoutTableCell<LayoutBlockFlow> or something.
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_layout_tests_layout_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_layout_te...)
Can you paste the rest of the stack trace? Basically, I am wondering what calls NGLinlineLayoutAlgorithm in that stack, because as you point out LayoutNGBlockFlow should only be created if layoutNGEnabled() is true.
On 2017/05/15 19:48:06, cbiesinger wrote: > Can you paste the rest of the stack trace? Basically, I am wondering what calls > NGLinlineLayoutAlgorithm in that stack, because as you point out > LayoutNGBlockFlow should only be created if layoutNGEnabled() is true. Yeah sure: [86544:775:0515/101447.354238:153813504559104:FATAL:layout_ng_block_flow.h(36)] Security DCHECK failed: !object || (object->IsLayoutNGBlockFlow()). 0 libbase.dylib 0x000000010dd0775e base::debug::StackTrace::StackTrace(unsigned long) + 174 1 libbase.dylib 0x000000010dd077fd base::debug::StackTrace::StackTrace(unsigned long) + 29 2 libbase.dylib 0x000000010dd05c8c base::debug::StackTrace::StackTrace() + 28 3 libbase.dylib 0x000000010dda4aef logging::LogMessage::~LogMessage() + 479 4 libbase.dylib 0x000000010dda2465 logging::LogMessage::~LogMessage() + 21 5 libblink_core.dylib 0x0000000127022864 blink::ToLayoutNGBlockFlow(blink::LayoutObject*) + 228 6 libblink_core.dylib 0x000000012702298f blink::NGBlockNode::FirstChild() + 143 7 libblink_core.dylib 0x000000012701a883 blink::NGBlockLayoutAlgorithm::ComputeMinMaxContentSize() const + 163 8 libblink_core.dylib 0x0000000127022167 blink::NGBlockNode::ComputeMinMaxContentSize() + 631 9 libblink_core.dylib 0x000000012701a916 blink::NGBlockLayoutAlgorithm::ComputeMinMaxContentSize() const + 310 10 libblink_core.dylib 0x000000012701afc6 blink::NGBlockLayoutAlgorithm::Layout() + 166 11 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 12 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 13 libblink_core.dylib 0x0000000126ff6d54 blink::NGInlineLayoutAlgorithm::LayoutItem(blink::NGInlineItem const&) + 788 14 libblink_core.dylib 0x0000000126ff68a9 blink::NGInlineLayoutAlgorithm::InlineSizeFromLayout(blink::NGInlineItem const&) + 73 15 libblink_core.dylib 0x0000000126ff618a blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&) + 58 16 libblink_core.dylib 0x0000000126ff6122 blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&, unsigned int, unsigned int) + 82 17 libblink_core.dylib 0x0000000126ff5bf4 blink::NGInlineLayoutAlgorithm::SetEnd(unsigned int) + 980 18 libblink_core.dylib 0x0000000127010ab0 blink::NGLineBreaker::BreakLines(blink::NGInlineLayoutAlgorithm*, WTF::String const&, unsigned int) + 688 19 libblink_core.dylib 0x0000000126ff9dc4 blink::NGInlineLayoutAlgorithm::Layout() + 196 20 libblink_core.dylib 0x00000001270083a2 blink::NGInlineNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 178 21 libblink_core.dylib 0x000000012701b95e blink::NGBlockLayoutAlgorithm::Layout() + 2622 22 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 23 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 24 libblink_core.dylib 0x000000012701b95e blink::NGBlockLayoutAlgorithm::Layout() + 2622 25 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 26 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 27 libblink_core.dylib 0x000000012701b95e blink::NGBlockLayoutAlgorithm::Layout() + 2622 28 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 29 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 30 libblink_core.dylib 0x0000000126ff6d54 blink::NGInlineLayoutAlgorithm::LayoutItem(blink::NGInlineItem const&) + 788 31 libblink_core.dylib 0x0000000126ff68a9 blink::NGInlineLayoutAlgorithm::InlineSizeFromLayout(blink::NGInlineItem const&) + 73 32 libblink_core.dylib 0x0000000126ff618a blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&) + 58 33 libblink_core.dylib 0x0000000126ff6122 blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&, unsigned int, unsigned int) + 82 34 libblink_core.dylib 0x0000000126ff5bf4 blink::NGInlineLayoutAlgorithm::SetEnd(unsigned int) + 980 35 libblink_core.dylib 0x0000000127010ab0 blink::NGLineBreaker::BreakLines(blink::NGInlineLayoutAlgorithm*, WTF::String const&, unsigned int) + 688 36 libblink_core.dylib 0x0000000126ffa19a blink::NGInlineLayoutAlgorithm::ComputeMinMaxContentSizeByLayout() + 634 37 libblink_core.dylib 0x0000000127009257 blink::NGInlineNode::ComputeMinMaxContentSize() + 343 38 libblink_core.dylib 0x000000012701a8ca blink::NGBlockLayoutAlgorithm::ComputeMinMaxContentSize() const + 234 39 libblink_core.dylib 0x0000000127022167 blink::NGBlockNode::ComputeMinMaxContentSize() + 631 40 libblink_core.dylib 0x000000012701a916 blink::NGBlockLayoutAlgorithm::ComputeMinMaxContentSize() const + 310 41 libblink_core.dylib 0x000000012701afc6 blink::NGBlockLayoutAlgorithm::Layout() + 166 42 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 43 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 44 libblink_core.dylib 0x0000000126ff6d54 blink::NGInlineLayoutAlgorithm::LayoutItem(blink::NGInlineItem const&) + 788 45 libblink_core.dylib 0x0000000126ff68a9 blink::NGInlineLayoutAlgorithm::InlineSizeFromLayout(blink::NGInlineItem const&) + 73 46 libblink_core.dylib 0x0000000126ff618a blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&) + 58 47 libblink_core.dylib 0x0000000126ff6122 blink::NGInlineLayoutAlgorithm::InlineSize(blink::NGInlineItem const&, unsigned int, unsigned int) + 82 48 libblink_core.dylib 0x0000000126ff5bf4 blink::NGInlineLayoutAlgorithm::SetEnd(unsigned int) + 980 49 libblink_core.dylib 0x0000000127010ab0 blink::NGLineBreaker::BreakLines(blink::NGInlineLayoutAlgorithm*, WTF::String const&, unsigned int) + 688 50 libblink_core.dylib 0x0000000126ff9dc4 blink::NGInlineLayoutAlgorithm::Layout() + 196 51 libblink_core.dylib 0x00000001270083a2 blink::NGInlineNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 178 52 libblink_core.dylib 0x000000012701b95e blink::NGBlockLayoutAlgorithm::Layout() + 2622 53 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 54 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 55 libblink_core.dylib 0x000000012701b95e blink::NGBlockLayoutAlgorithm::Layout() + 2622 56 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 57 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 58 libblink_core.dylib 0x000000012701b95e blink::NGBlockLayoutAlgorithm::Layout() + 2622 59 libblink_core.dylib 0x0000000127021953 blink::(anonymous namespace)::LayoutWithAlgorithm(blink::ComputedStyle const&, blink::NGBlockNode*, blink::NGConstraintSpace*, blink::NGBreakToken*) + 291 60 libblink_core.dylib 0x000000012702128c blink::NGBlockNode::Layout(blink::NGConstraintSpace*, blink::NGBreakToken*) + 124 61 libblink_core.dylib 0x000000012701b95e blink::NGBlockLayoutAlgorithm::Layout() + 2622
Hmm that still ends at NGBlockLayoutAlgorithm... maybe run in a debugger and see where this gets called? Also what's your testcase for this?
On 2017/05/15 20:50:08, cbiesinger wrote: > Hmm that still ends at NGBlockLayoutAlgorithm... maybe run in a debugger and see > where this gets called? > > Also what's your testcase for this? PTAL - So this is happening when we have a derived class (e.g. LayoutListItem : public LayoutBlockFlow) which doesn't inherit from LayoutNGBlockFlow yet. E.g. <div> // LayoutNGBlockFlow <li></li> // LayoutBlockFlow </div> The list item isn't hosted on LayoutNG yet, but IsLayoutBlockFlow (inside CanUseNewLayout) tells it that we should try and perform layout - which it does, but fails later when performing layout object casting. E.g. (https://abc.xyz - after clicking "more" link) https://gist.github.com/bfgeek/e44bde7091e0a4e471f46cd7a40e7421
lgtm, thanks for the explanation! https://codereview.chromium.org/2880993004/diff/20001/third_party/WebKit/Sour... File third_party/WebKit/Source/core/layout/ng/ng_block_node.cc (right): https://codereview.chromium.org/2880993004/diff/20001/third_party/WebKit/Sour... third_party/WebKit/Source/core/layout/ng/ng_block_node.cc:234: return RuntimeEnabledFeatures::LayoutNGEnabled(); Do we need this or can it be return true;?
Also, can we remove some [Crash] expectations now?
On 2017/06/15 17:38:23, cbiesinger wrote: > Also, can we remove some [Crash] expectations now? oh probably, i'll do a dry run then see how many it fixes...
The CQ bit was checked by ikilpatrick@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
On 2017/06/15 at 17:40:12, ikilpatrick wrote: > On 2017/06/15 17:38:23, cbiesinger wrote: > > Also, can we remove some [Crash] expectations now? > > oh probably, i'll do a dry run then see how many it fixes... This is awesome, I think this is a top crasher.
https://codereview.chromium.org/2880993004/diff/20001/third_party/WebKit/Sour... File third_party/WebKit/Source/core/layout/ng/ng_block_node.cc (right): https://codereview.chromium.org/2880993004/diff/20001/third_party/WebKit/Sour... third_party/WebKit/Source/core/layout/ng/ng_block_node.cc:234: return RuntimeEnabledFeatures::LayoutNGEnabled(); On 2017/06/15 17:37:57, cbiesinger wrote: > Do we need this or can it be return true;? It can be true at the moment, but want to leave this in as we'll need to for if we do: LayoutListItem : public LayoutNGBlockFlow { } (and LayoutNGBlockFlow has a bunch of: LayoutNGBlockFlow::Foo() { if (!RuntimeEnabledFeatures::LayoutNGEnabled()) LayoutBlockFlow::Foo(); }
On 2017/06/15 18:05:33, ikilpatrick wrote: > https://codereview.chromium.org/2880993004/diff/20001/third_party/WebKit/Sour... > File third_party/WebKit/Source/core/layout/ng/ng_block_node.cc (right): > > https://codereview.chromium.org/2880993004/diff/20001/third_party/WebKit/Sour... > third_party/WebKit/Source/core/layout/ng/ng_block_node.cc:234: return > RuntimeEnabledFeatures::LayoutNGEnabled(); > On 2017/06/15 17:37:57, cbiesinger wrote: > > Do we need this or can it be return true;? > > It can be true at the moment, but want to leave this in as we'll need to for if > we do: > > LayoutListItem : public LayoutNGBlockFlow { } > > (and LayoutNGBlockFlow has a bunch of: > LayoutNGBlockFlow::Foo() { > if (!RuntimeEnabledFeatures::LayoutNGEnabled()) > LayoutBlockFlow::Foo(); > } Good point, thanks
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_layout_tests_layout_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_layout_te...)
I guess that's good news and bad news from the bots... * Passed: 35417 (33812 expected, 1605 unexpected) but * Failed: 24386 (24279 expected, >>>107 unexpected<<<) (per https://build.chromium.org/p/tryserver.chromium.linux/builders/linux_layout_t...)
On 2017/06/15 at 19:52:09, cbiesinger wrote: > I guess that's good news and bad news from the bots... > > * Passed: 35417 (33812 expected, 1605 unexpected) > but > * Failed: 24386 (24279 expected, >>>107 unexpected<<<) About 50 of the unexpected failures are actually an upgrade. Instead of CRASH, we are FAILURE.
The CQ bit was checked by ikilpatrick@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by ikilpatrick@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was checked by ikilpatrick@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by ikilpatrick@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
Description was changed from ========== [LayoutNG] Fixes small crash inside preferred widths. We were previously trying to perform perferred width calculation on a non-LayoutNG layout object. BUG=635619 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_layout_ng ========== to ========== [LayoutNG] Fixes small crash inside preferred widths. We were previously trying to perform perferred width calculation on a non-LayoutNG layout object. BUG=635619 ==========
The CQ bit was checked by ikilpatrick@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from cbiesinger@chromium.org Link to the patchset: https://codereview.chromium.org/2880993004/#ps80001 (title: "ng-bot2")
CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
CQ is committing da patch. Bot data: {"patchset_id": 80001, "attempt_start_ts": 1497642818940340, "parent_rev": "622b6164229bea82e61b916f5d9d41bc02b3488a", "commit_rev": "e47fe16501daea54a8926f47a3c9afe778887094"}
Message was sent while issue was closed.
Description was changed from ========== [LayoutNG] Fixes small crash inside preferred widths. We were previously trying to perform perferred width calculation on a non-LayoutNG layout object. BUG=635619 ========== to ========== [LayoutNG] Fixes small crash inside preferred widths. We were previously trying to perform perferred width calculation on a non-LayoutNG layout object. BUG=635619 Review-Url: https://codereview.chromium.org/2880993004 Cr-Commit-Position: refs/heads/master@{#480172} Committed: https://chromium.googlesource.com/chromium/src/+/e47fe16501daea54a8926f47a3c9... ==========
Message was sent while issue was closed.
Committed patchset #5 (id:80001) as https://chromium.googlesource.com/chromium/src/+/e47fe16501daea54a8926f47a3c9... |