RESOLVED FIXED 45274
Breaking Float: floated block level element following inline element in floated container breaks to next line
https://bugs.webkit.org/show_bug.cgi?id=45274
Summary Breaking Float: floated block level element following inline element in float...
Stijn de Witt
Reported 2010-09-06 13:17:15 PDT
When a block-level element such as a div is floated to the left and follows an inline element inside a parent container that is also foated to the left, the inner div breaks (wraps) to the next line even though this is not expected. In this sample HTML: <div class="outer"> <span>Breaking</span> <div class="inner">Float</div> </div> If this stylesheet is applied: .outer { float: left; } .inner { float: left; } ...the word 'Float' unexpectedly breaks to the next line in WebKit-based browsers such as Safari and Chrome, but stays on the same line as expected in other browsers such as internet Explorer, Firefox and Opera.
Attachments
Reproduction page (1.67 KB, text/html)
2010-09-06 13:23 PDT, Stijn de Witt
no flags
Simple test case (385 bytes, text/html)
2011-04-12 23:02 PDT, ChangSeok Oh
no flags
Updated version of test page, validates as HTML 4.01 strict (1.69 KB, text/html)
2011-04-13 09:44 PDT, Stijn de Witt
no flags
Screenshot of IE9 results (89.46 KB, image/png)
2011-04-13 09:58 PDT, Stijn de Witt
no flags
Proposed patch (9.38 KB, patch)
2011-04-18 23:46 PDT, ChangSeok Oh
no flags
updated patch using ahem font (440 bytes, text/html)
2011-04-19 00:29 PDT, ChangSeok Oh
no flags
Updated patch to meet Levi's comment (9.74 KB, patch)
2011-04-20 00:26 PDT, ChangSeok Oh
no flags
merged patch with Joseph's test cases (101.50 KB, patch)
2011-04-28 23:06 PDT, ChangSeok Oh
hyatt: review-
hyatt: commit-queue-
updated patch (101.35 KB, patch)
2011-05-22 10:40 PDT, ChangSeok Oh
no flags
Revied patch to meet current version (101.37 KB, patch)
2011-06-20 09:43 PDT, ChangSeok Oh
no flags
Updated patch (101.38 KB, patch)
2011-10-12 00:06 PDT, ChangSeok Oh
webkit.review.bot: commit-queue-
Updated patch (27.20 KB, patch)
2012-06-03 19:37 PDT, ChangSeok Oh
webkit.review.bot: commit-queue-
Archive of layout-test-results from ec2-cr-linux-02 (557.11 KB, application/zip)
2012-06-03 20:18 PDT, WebKit Review Bot
no flags
Updated patch (27.77 KB, patch)
2012-07-05 23:59 PDT, ChangSeok Oh
no flags
Patch (28.37 KB, patch)
2012-07-06 08:13 PDT, ChangSeok Oh
no flags
Patch (37.64 KB, patch)
2012-07-10 07:21 PDT, ChangSeok Oh
no flags
Patch (39.13 KB, patch)
2013-02-08 12:59 PST, ChangSeok Oh
no flags
Patch (39.12 KB, patch)
2013-02-09 19:42 PST, ChangSeok Oh
no flags
Patch (39.12 KB, patch)
2013-02-11 23:46 PST, ChangSeok Oh
no flags
Patch (39.01 KB, patch)
2013-04-16 11:23 PDT, Robert Hogan
no flags
Patch (40.17 KB, patch)
2013-04-16 12:58 PDT, Robert Hogan
no flags
Stijn de Witt
Comment 1 2010-09-06 13:23:35 PDT
Created attachment 66667 [details] Reproduction page Attached the reproduction page for this bug. This is the same page this bug also links to but because that's on my personal webspace I can't guarantee it will stay there forever. I might switch providers in the future etc.
Stijn de Witt
Comment 2 2011-02-14 15:18:15 PST
Still unconfirmed? It has now been over 5 months since I reported this issue. I think the scenario to reproduce is pretty simple and obvious? If there is more information I should add to have someone be able to confirm this issue, please let me know.
Stijn de Witt
Comment 3 2011-04-12 12:41:52 PDT
Wow it is a bit disappointing to see a bug reported not being looked at for months and months, even though Chrome and Safari have major releases in the mean time. Should I report this somewhere else?
ChangSeok Oh
Comment 4 2011-04-12 22:15:40 PDT
(In reply to comment #3) > Wow it is a bit disappointing to see a bug reported not being looked at for months and months, even though Chrome and Safari have major releases in the mean time. Should I report this somewhere else? I'm interested this issue. I'll have a look.
ChangSeok Oh
Comment 5 2011-04-12 23:02:53 PDT
Created attachment 89343 [details] Simple test case
ChangSeok Oh
Comment 6 2011-04-12 23:25:30 PDT
(In reply to comment #2) > Still unconfirmed? It has now been over 5 months since I reported this issue. I think the scenario to reproduce is pretty simple and obvious? If there is more information I should add to have someone be able to confirm this issue, please let me know. Well, I could reproduce this as you mentioned. In my case, Chrome, Safari, & IE8,9 show the tc in two lines. And the others(FF & Opera) show it in one line. I'm not convinced this is a real issue. Could you let me know where you faced this issue? I want to know the real site which is broken on webkit based browser. Or is there any standard spec you refer?
Stijn de Witt
Comment 7 2011-04-13 09:44:59 PDT
Created attachment 89392 [details] Updated version of test page, validates as HTML 4.01 strict My original test page contained a couple of small errors that made it not pass W3C validation, so I fixed those. New file attached. I also updates the version on my local web space and you can validate it here: http://validator.w3.org/check?uri=http%3A%2F%2Fmembers.chello.nl%2F~sgm.jansen%2FWebkitBreakingFloat%2F
Stijn de Witt
Comment 8 2011-04-13 09:58:07 PDT
Created attachment 89393 [details] Screenshot of IE9 results I would have to search for the exact wording in the standard that dictates how these floats should behave but I'm pretty confident that what WebKit is doing is violating the standard. I can only directly test this issue in IE9. There the words Breaking and Float render on one line as expected. See the screenshot I attached. However if I use the NetRenderer tool to check IE7 and 8 ( http://ipinfo.info/netrenderer/index.php ) I can confirm that indeed, the words render on two lines in IE7. IE8 renders them on one line as expected though. So to summarize: IE7 and before behave the same as WebKit: Words render on two lines. IE8, IE9, Firefox 3 and 4 and Opera (latest versions) render as I would expect: On one line. I can't point you to a site that demonstrates this issue in real life as I discovered it during development and changed it to something that does work... as I guess most developers will have done.
Martijn T.
Comment 9 2011-04-13 13:02:00 PDT
I can confirm this issue in the very latest Chrome, Safari and also in IE8 in compatibility mode. The 'normal' IE8 (without compatibility mode) displays just a single line here. @ChangSeok Oh: strange that you are seeing two lines on IE8 and IE9, perhaps you where using compatibility mode by accident? I've experienced this when I was creating a new website where this construction seemed logical. I then immediately submitted this bug to the Webkit bugzilla but without response so far: https://bugs.webkit.org/show_bug.cgi?id=57441 Since submitting the bug, I did several testcases to determine if surrounding objects where causing any problems, and came to this extract of my project: http://jsfiddle.net/gFevt/10/ Stijn then strongly reduced the code to demonstrate the problem: http://jsfiddle.net/gFevt/21/
Stijn de Witt
Comment 10 2011-04-13 14:20:35 PDT
I looked through the W3C specs (mostly CSS2's section of Float: http://www.w3.org/TR/CSS2/visuren.html#floats ) but that basically states that floated boxes: * Stay on the same line * Break to the next line if there is not enough space left for them to fit "A float is a box that is shifted to the left or right on the current line." "If there is not enough horizontal room for the float, it is shifted downward until either it fits or there are no more floats present." The wording there is pretty complicated, but I don't see anything explaining WebKit's behaviour, so given that, plus the fact that all other standards-compliant browsers (when running in standards mode) render them on one line I think it's save to say that WebKit is breaking the standard here. Also given that this issue has now been confirmed by two people already and reproduction scenarios are available it may be time to move this bug to status 'NEW'?
ChangSeok Oh
Comment 11 2011-04-18 23:33:27 PDT
I've spent some time for this and found two strange things which make me confirm an issue. First, if we remove all spaces between "Breaking" and "Float", they are placed on a same line. Second, the width of floating element "Float" is exactrly same with the right empty spaces of first line. With these symptoms, I think empty spaces make inner Floating element is placed at next line.
ChangSeok Oh
Comment 12 2011-04-18 23:46:14 PDT
Created attachment 90155 [details] Proposed patch This patch affects following Layout test cases. fast/multicol/float-truncation.html fast/multicol/vertical-lr/float-truncation.html fast/multicol/vertical-rl/float-truncation.html Because this patch makes inner floating element is placed on a same line with outer floating element. I think expected results of them are needed to change, but I'm not sure. This issue may be related with bug46421.
ChangSeok Oh
Comment 13 2011-04-19 00:29:06 PDT
Created attachment 90159 [details] updated patch using ahem font
Levi Weintraub
Comment 14 2011-04-19 12:04:09 PDT
View in context: https://bugs.webkit.org/attachment.cgi?id=90155&action=review I'm having trouble determining how exactly uncommitedWidth differs from additionalWidth. It seems to me that additionalWidth is really more like uncommittedTextWidth (at least as implemented in this patch), and while I have my theories about why this is the right fix, I'd like a better description as to why in the changelog. > Source/WebCore/rendering/RenderBlockLineLayout.cpp:1779 > + if (floatsFitOnLine && width.fitsOnLine(logicalWidthForFloat(f) - width.additionalWidth())) { Could we instead have a different version of fitsOnLine that wraps this up for us? Perhaps fitsOnLineOverridingText? Or floatFitsOnLine? This change doesn't self-document well. > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2129 > + if (!ignoringSpaces && additionalTmpW) At least the !ignoringSpaces part is redundant since additionalTmpW is only nonzero when !ignoringSpaces.
ChangSeok Oh
Comment 15 2011-04-20 00:23:45 PDT
(In reply to comment #14) > I'm having trouble determining how exactly uncommitedWidth differs from additionalWidth. It seems to me that additionalWidth is really more like uncommittedTextWidth (at least as implemented in this patch), and while I have my theories about why this is the right fix, I'd like a better description as to why in the changelog. If there are more than 2 spaces between "Float" and "Breaking" in TC, uncommittedWidth would be different from additionalWidth. uncommittedWidth and additionalWidth might be same for first empty space, but uncommittedWidth is commited and we set ignoringSpaces=true from second spaces. In this situation, uncommittedWidth would be zero, when checking float fits on line. I've tried to update ChangLog in detail. > > > Source/WebCore/rendering/RenderBlockLineLayout.cpp:1779 > > + if (floatsFitOnLine && width.fitsOnLine(logicalWidthForFloat(f) - width.additionalWidth())) { > > Could we instead have a different version of fitsOnLine that wraps this up for us? Perhaps fitsOnLineOverridingText? Or floatFitsOnLine? This change doesn't self-document well. Yeh. floatFitsOnLine seems proper to me. :) > > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2129 > > + if (!ignoringSpaces && additionalTmpW) > > At least the !ignoringSpaces part is redundant since additionalTmpW is only nonzero when !ignoringSpaces. I was confused. :p My intention is currentCharacterIsSpace. Thanks for your comment! :)
ChangSeok Oh
Comment 16 2011-04-20 00:26:46 PDT
Created attachment 90320 [details] Updated patch to meet Levi's comment
ChangSeok Oh
Comment 17 2011-04-22 08:51:43 PDT
This issue seems to be solved by a patch for bug58806. :|
Joseph Pecoraro
Comment 18 2011-04-22 10:16:27 PDT
(In reply to comment #17) > This issue seems to be solved by a patch for bug58806. :| I'm sorry I didn't find this bug first. This patch is slightly cleaner, and might be the one to go with. Does it pass all of the test cases I had on mine? My only concern with this patch is that it doesn't check if there is a trailing space when it tries to position the float ignoring additional space. I wonder if this could overlap a character or if it works out.
ChangSeok Oh
Comment 19 2011-04-22 20:27:52 PDT
(In reply to comment #18) > (In reply to comment #17) > > This issue seems to be solved by a patch for bug58806. :| > > Does it pass all of the test cases I had on mine? I tested that my patch passed your test cases included in your patch. Yes. it passed all. Of course, it passed all layout tests except three things I mentioned above. :) > My only concern with this patch is that it doesn't > check if there is a trailing space when it tries to position the float > ignoring additional space. In my opinion, no problem without additional checking if there is a trailing space. Because it already verified with following line, > if (currentCharacterIsSpace && additionalTmpW) > width.setAdditionalWidth(additionalTmpW); m_additionalWidth is initialized with 0. And we set only non-zero value when current Character is a "space". This means that if m_additionalWidth isn't zero, there is a trailing space. Otherwise m_additialalWidth doesn't affect anything. > I wonder if this could overlap a character or if it works out. I've tested some kinds of situation like, multiple floats, no space between floats, multiple spaces between float, multiple text strings between float, multiple spaces in float and so on... But I've found nothing special. Thank you for your kind comment, and concern. :)
ChangSeok Oh
Comment 20 2011-04-28 23:06:55 PDT
Created attachment 91643 [details] merged patch with Joseph's test cases This patch is merged with Joseph's test cases. See https://bugs.webkit.org/show_bug.cgi?id=58806.
Joseph Pecoraro
Comment 21 2011-04-29 09:45:32 PDT
*** Bug 58806 has been marked as a duplicate of this bug. ***
Dave Hyatt
Comment 22 2011-05-03 15:01:34 PDT
Comment on attachment 91643 [details] merged patch with Joseph's test cases View in context: https://bugs.webkit.org/attachment.cgi?id=91643&action=review > Source/WebCore/rendering/RenderBlockLineLayout.cpp:1568 > + bool floatFitsOnLine(float extra) const { return currentWidth() - additionalWidth() + extra <= m_availableWidth; } Is it not sufficient to just ignore the uncommitted width here? It seems like you're basically doing committed + uncommitted - uncommitted + extra, which works out to just being committed + extra. > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2119 > + if (currentCharacterIsSpace && additionalTmpW) > + width.setAdditionalWidth(additionalTmpW); It seems wrong not to include inlineLogicalWidth here. You might want to make a test for this case. You should be able to just add it to additionalTmpW I would think.
Dave Hyatt
Comment 23 2011-05-04 09:04:31 PDT
Also, checking currentCharacterIsSpace seems suspicious to me without also checking the whitespace mode.
Ryosuke Niwa
Comment 24 2011-05-04 09:34:39 PDT
Comment on attachment 91643 [details] merged patch with Joseph's test cases View in context: https://bugs.webkit.org/attachment.cgi?id=91643&action=review > Source/WebCore/rendering/RenderBlockLineLayout.cpp:1569 > + bool floatFitsOnLine(float extra) const { return currentWidth() - additionalWidth() + extra <= m_availableWidth; } Nit: I don't see why additional width should be associated with floats.
Joseph Pecoraro
Comment 25 2011-05-12 16:23:33 PDT
ChangSeok, are you going to address the comments? Especially with the recent refactoring going on within this file, getting a patch to land would be great, otherwise it will go stale quickly. > > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2119 > > + if (currentCharacterIsSpace && additionalTmpW) > > + width.setAdditionalWidth(additionalTmpW); > > It seems wrong not to include inlineLogicalWidth here. You might > want to make a test for this case. You should be able to just add > it to additionalTmpW I would think. > Also, checking currentCharacterIsSpace seems suspicious to me > without also checking the whitespace mode. Hyatt, did you have example tests in mind for these?
ChangSeok Oh
Comment 26 2011-05-13 07:34:52 PDT
(In reply to comment #25) > ChangSeok, are you going to address the comments? > > Especially with the recent refactoring going on within this file, getting > a patch to land would be great, otherwise it will go stale quickly. > > > > > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2119 > > > + if (currentCharacterIsSpace && additionalTmpW) > > > + width.setAdditionalWidth(additionalTmpW); > > > > It seems wrong not to include inlineLogicalWidth here. You might > > want to make a test for this case. You should be able to just add > > it to additionalTmpW I would think. > > > Also, checking currentCharacterIsSpace seems suspicious to me > > without also checking the whitespace mode. > > Hyatt, did you have example tests in mind for these? Sorry for late response. I'm a little busy recently. I'll have a look again and give you a proper response as soon as possible. Thank you :)
Dave Hyatt
Comment 27 2011-05-13 10:17:04 PDT
Comment on attachment 91643 [details] merged patch with Joseph's test cases Minusing until comments addressed.
ChangSeok Oh
Comment 28 2011-05-22 10:37:26 PDT
Comment on attachment 91643 [details] merged patch with Joseph's test cases View in context: https://bugs.webkit.org/attachment.cgi?id=91643&action=review Thank for review. And I so sorry for late response. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:1568 >> + bool floatFitsOnLine(float extra) const { return currentWidth() - additionalWidth() + extra <= m_availableWidth; } > > Is it not sufficient to just ignore the uncommitted width here? It seems like you're basically doing committed + uncommitted - uncommitted + extra, which works out to just being committed + extra. No. Actually it could be a little different if there are two more white spaces between blocks. When we encounter first white space, (let's suppose committed = 70, uncommitted = 5.) the final result is 70 + extra (70 + 5 - 5 + extra). But when we encounter second white space, the final result will be 75 + extra. Because ucommitted '5' is submitted & included in committed. (75 + 0 - 0 + extra) After this we can't get what was last additionalWidth(uncommitted), so that I want that m_additionalWidth holds this value. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:1569 >> float currentWidth() const { return m_committedWidth + m_uncommittedWidth; } > > Nit: I don't see why additional width should be associated with floats. Becuase extra space(additional width) cause that float doesn't fit to line. Even though Float width is exactly same with remained line width. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:2119 >> + width.setAdditionalWidth(additionalTmpW); > > It seems wrong not to include inlineLogicalWidth here. You might want to make a test for this case. You should be able to just add it to additionalTmpW I would think. Done. But I haven't found problem case. inlineLogicalWidth is almost 0.
ChangSeok Oh
Comment 29 2011-05-22 10:40:27 PDT
Created attachment 94349 [details] updated patch Addressed dave hyatt's comment and revise patch to latest trunk.
ChangSeok Oh
Comment 30 2011-05-22 10:46:49 PDT
(In reply to comment #23) > Also, checking currentCharacterIsSpace seems suspicious to me without also checking the whitespace mode. Do you mean whitespace mode is to check collapseWhiteSpace? I added it, but it didn't seem to affect anything to me.
ChangSeok Oh
Comment 31 2011-06-12 22:21:19 PDT
Review this please?
Ryosuke Niwa
Comment 32 2011-06-12 22:49:17 PDT
Comment on attachment 94349 [details] updated patch View in context: https://bugs.webkit.org/attachment.cgi?id=94349&action=review > Source/WebCore/rendering/RenderBlockLineLayout.cpp:1677 > + float m_additionalWidth; What does "additional" width mean here? It should be widths of something, right? What are they? I can't tell whether this patch is correct or not but adding this member variable scares me to no end because I can't tell what it is.
ChangSeok Oh
Comment 33 2011-06-14 02:53:45 PDT
(In reply to comment #32) > (From update of attachment 94349 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=94349&action=review > > > Source/WebCore/rendering/RenderBlockLineLayout.cpp:1677 > > + float m_additionalWidth; > > What does "additional" width mean here? It should be widths of something, right? What are they? I can't tell whether this patch is correct or not but adding this member variable scares me to no end because I can't tell what it is. Actually, "additional" means "extra". As you know, if there are 2 more spaces between elements, there are ignored except one. The width of float element which has white space at next includes a width of this "one" white space. So the width of float is bigger than actual one. (This is why fitsOnLine failed.) m_additionalWidth saves the width of an white space, and is used to subtract later when float is checked whether it fits on line.
ChangSeok Oh
Comment 34 2011-06-20 09:43:01 PDT
Created attachment 97813 [details] Revied patch to meet current version
Martijn T.
Comment 35 2011-10-09 02:15:09 PDT
Hey guys, what the status on this? It's been a while since the last update.
Ryosuke Niwa
Comment 36 2011-10-09 11:42:48 PDT
(In reply to comment #33) > Actually, "additional" means "extra". It doesn't explain anything still. additional and extra are synonymous. > As you know, if there are 2 more spaces between elements, there are ignored except one. The width of float element which has white space at next includes a width of this "one" white space. So the width of float is bigger than actual one. > (This is why fitsOnLine failed.) I don't follow. > m_additionalWidth saves the width of an white space, and is used to subtract later when float is checked whether it fits on line. Then it should be named as m_whitespaceWidth. There's no reason we should be using vague adjectives like additional and extra.
ChangSeok Oh
Comment 37 2011-10-12 00:06:47 PDT
Created attachment 110647 [details] Updated patch
ChangSeok Oh
Comment 38 2011-10-12 00:12:14 PDT
(In reply to comment #36) > (In reply to comment #33) > > m_additionalWidth saves the width of an white space, and is used to subtract later when float is checked whether it fits on line. > > Then it should be named as m_whitespaceWidth. There's no reason we should be using vague adjectives like additional and extra. I've updated the patch to reflect your opinion.
WebKit Review Bot
Comment 39 2011-10-12 03:00:14 PDT
Comment on attachment 110647 [details] Updated patch Attachment 110647 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/10031733 New failing tests: fast/block/float/overhanging-float-remove-from-fixed-position-block2.html fast/block/float/overhanging-float-remove-from-fixed-position-block.html
Levi Weintraub
Comment 40 2011-11-02 21:46:07 PDT
Can we try this patch again? I'd love to see this fixed :)
ChangSeok Oh
Comment 41 2011-11-02 23:41:04 PDT
(In reply to comment #40) > Can we try this patch again? I'd love to see this fixed :) Sure. Let me revise it. :)
Robert Hogan
Comment 42 2012-04-28 03:46:18 PDT
(In reply to comment #41) > (In reply to comment #40) > > Can we try this patch again? I'd love to see this fixed :) > > Sure. Let me revise it. :) The problem as I understand is that in: <div class="container"> <div class="first"></div> <div class="second"></div> </div> the spaces before the second div add some width to the line - the width of a single white space. Unless there's actual text we don't want this to happen do we? So isn't the correct solution to back out that width when no text is encountered rather than account for it when trying to fit subsequent floats on the line? Or is there a reason we need to hold on to it?
Robert Hogan
Comment 43 2012-05-21 10:34:11 PDT
ChangSeok, dhyatt on IRC was OK with this approach - so you willing to fix it up for final review?
ChangSeok Oh
Comment 44 2012-05-23 02:42:31 PDT
(In reply to comment #43) > ChangSeok, > > dhyatt on IRC was OK with this approach - so you willing to fix it up for final review? Sure. Thanks :)
ChangSeok Oh
Comment 45 2012-06-03 19:37:52 PDT
Created attachment 145505 [details] Updated patch
WebKit Review Bot
Comment 46 2012-06-03 20:18:26 PDT
Comment on attachment 145505 [details] Updated patch Attachment 145505 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/12890288 New failing tests: fast/block/float/overhanging-float-remove-from-fixed-position-block2.html fast/block/float/overhanging-float-remove-from-fixed-position-block.html
WebKit Review Bot
Comment 47 2012-06-03 20:18:31 PDT
Created attachment 145509 [details] Archive of layout-test-results from ec2-cr-linux-02 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: ec2-cr-linux-02 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.35-28-virtual-x86_64-with-Ubuntu-10.10-maverick
Robert Hogan
Comment 48 2012-06-26 12:29:57 PDT
Comment on attachment 145505 [details] Updated patch View in context: https://bugs.webkit.org/attachment.cgi?id=145505&action=review > LayoutTests/ChangeLog:27 > + * fast/inline-block/multiple-floats-with-whitespace.html: Added. > + This also fixes floats-001.htm and floats-102.htm from the CSS test suite. You'll find them at http://test.csswg.org/suites/css2.1/nightly-unstable/html4/
Robert Hogan
Comment 49 2012-06-26 12:33:39 PDT
(In reply to comment #46) > (From update of attachment 145505 [details]) > Attachment 145505 [details] did not pass chromium-ews (chromium-xvfb): > Output: http://queues.webkit.org/results/12890288 > > New failing tests: > fast/block/float/overhanging-float-remove-from-fixed-position-block2.html > fast/block/float/overhanging-float-remove-from-fixed-position-block.html These look like they could be genuine regressions. Can you see what's going on with them locally?
ChangSeok Oh
Comment 50 2012-06-26 22:13:53 PDT
(In reply to comment #49) > (In reply to comment #46) > > (From update of attachment 145505 [details] [details]) > > Attachment 145505 [details] [details] did not pass chromium-ews (chromium-xvfb): > > Output: http://queues.webkit.org/results/12890288 > > > > New failing tests: > > fast/block/float/overhanging-float-remove-from-fixed-position-block2.html > > fast/block/float/overhanging-float-remove-from-fixed-position-block.html > > These look like they could be genuine regressions. Can you see what's going on with them locally? Yeh. I'm digging it. I think I need to understand more deeply to meet them..
ChangSeok Oh
Comment 51 2012-07-05 23:59:03 PDT
Created attachment 151024 [details] Updated patch
WebKit Review Bot
Comment 52 2012-07-06 00:03:29 PDT
Attachment 151024 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/fast..." exit_code: 1 Source/WebCore/rendering/RenderBlockLineLayout.cpp:2435: Missing space before ( in if( [whitespace/parens] [5] Total errors found: 1 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
ChangSeok Oh
Comment 53 2012-07-06 08:13:31 PDT
Robert Hogan
Comment 54 2012-07-06 12:13:04 PDT
Comment on attachment 151085 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151085&action=review > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2571 > + if (collapseWhiteSpace && currentCharacterIsSpace && additionalTmpW) > + width.setWhitespaceWidth(additionalTmpW + inlineLogicalW); Why don't you care about previousCharacterIsSpace here? I also think what's happening here is sufficiently non-obvious to deserve a comment. Nit: I think the 'W' thing is a bad idea - maybe just call it inlineLogicalWidth. > LayoutTests/ChangeLog:26 > + * fast/inline-block/multiple-floats-with-whitespace.html: Added. Would you mind adding floats-001.htm and floats-102.htm from the CSS test suite - this patch fixes them. See http://test.csswg.org/suites/css2.1/nightly-unstable/html4/
Ryosuke Niwa
Comment 55 2012-07-06 12:21:52 PDT
Comment on attachment 151085 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151085&action=review > Source/WebCore/rendering/RenderBlockLineLayout.cpp:100 > + void setWhitespaceWidth(float w) { m_whitespaceWidth = w; } Please don't abbreviate width as w. > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2567 > + float inlineLogicalW = inlineLogicalWidth(current.m_obj, !appliedStartWidth, includeEndWidth); Ditto.
ChangSeok Oh
Comment 56 2012-07-10 07:21:31 PDT
ChangSeok Oh
Comment 57 2012-07-10 07:30:55 PDT
Comment on attachment 151085 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151085&action=review Thank you for your review! >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:100 >> + void setWhitespaceWidth(float w) { m_whitespaceWidth = w; } > > Please don't abbreviate width as w. O.K. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:2567 >> + float inlineLogicalW = inlineLogicalWidth(current.m_obj, !appliedStartWidth, includeEndWidth); > > Ditto. Done. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:2571 >> + width.setWhitespaceWidth(additionalTmpW + inlineLogicalW); > > Why don't you care about previousCharacterIsSpace here? > > I also think what's happening here is sufficiently non-obvious to deserve a comment. > > Nit: I think the 'W' thing is a bad idea - maybe just call it inlineLogicalWidth. previsousCharacterIsSpace is out of scope here, and it seems no problem though we don't take care of it here. Done. inlineLogicalW -> inlineLogicalTempWidth >> LayoutTests/ChangeLog:26 >> + * fast/inline-block/multiple-floats-with-whitespace.html: Added. > > Would you mind adding floats-001.htm and floats-102.htm from the CSS test suite - this patch fixes them. See http://test.csswg.org/suites/css2.1/nightly-unstable/html4/ Done.
ChangSeok Oh
Comment 58 2012-07-18 09:57:32 PDT
@Ryosuke Could you review this again?
Ryosuke Niwa
Comment 59 2012-07-18 11:29:41 PDT
(In reply to comment #58) > @Ryosuke Could you review this again? I don't think I'm qualified to review this patch. I was just pointing out some nits.
Stijn de Witt
Comment 60 2012-07-19 07:18:59 PDT
Does it pass all tests? Does it fix the issue? Land it! :)
Robert Hogan
Comment 61 2012-07-19 11:53:16 PDT
(In reply to comment #58) > @Ryosuke Could you review this again? You will need to get on IRC and ask dhyatt to review this one.
Dave Hyatt
Comment 62 2012-09-04 14:16:40 PDT
What's the reasoning behind adding exclamation points to the multicol tests?
Robert Hogan
Comment 63 2012-09-04 14:27:48 PDT
Comment on attachment 151457 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151457&action=review > LayoutTests/ChangeLog:39 > + > + Update the following tests so that wrapping happens as it > + did before. With this change the float:left div progressed > + and could fit on an earlier line when we position after > + collapsing whitespace. This moved the float a line earlier > + and changed the results of the test. By adding a character > + to the line, the float won't fit and goes back on to the > + line that it was on before this change. dhyatt: See above!
Robert Hogan
Comment 64 2012-12-15 04:01:30 PST
*** Bug 18090 has been marked as a duplicate of this bug. ***
Levi Weintraub
Comment 65 2012-12-17 15:08:11 PST
Comment on attachment 151457 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151457&action=review > Source/WebCore/ChangeLog:8 > + Fix position issue of floating div element in floating div element. Nit: "div" doesn't actually add any information here. This would apply to any tag :) > Source/WebCore/ChangeLog:10 > + Inner floating div element has placed at next line when outer floating div element has text, > + even though previous line has spaces enough to fit it. I can't follow this sentence.
Dave Hyatt
Comment 66 2013-02-07 12:09:06 PST
Comment on attachment 151457 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151457&action=review r- > Source/WebCore/rendering/RenderBlockLineLayout.cpp:81 > bool fitsOnLine(float extra) const { return currentWidth() + extra <= m_availableWidth; } > + bool floatFitsOnLine(float extra) const { return currentWidth() - whitespaceWidth() + extra <= m_availableWidth; } I think I would prefer this: bool fitsOnLine(float extra, LineFittingCheck includeWhitespace = IncludeTrailingWhitespace) const { return currentWidth() - (includeWhitespace ? trailingWhitespaceWidth() : 0) + extra <= m_availableWidth; } > Source/WebCore/rendering/RenderBlockLineLayout.cpp:88 > + float whitespaceWidth() const { return m_whitespaceWidth; } float trailingWhitespaceWidth() const { return m_trailingWhitespaceWidth; } > Source/WebCore/rendering/RenderBlockLineLayout.cpp:100 > + void setWhitespaceWidth(float width) { m_whitespaceWidth = width; } void setTrailingWhitespaceWidth(float width) { m_trailingWhitespaceWidth = width; } > Source/WebCore/rendering/RenderBlockLineLayout.cpp:113 > + float m_whitespaceWidth; float m_trailingWhitespaceWidth; > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2248 > + if (floatsFitOnLine && width.floatFitsOnLine(m_block->logicalWidthForFloat(f))) { if (floatsFitOnLine && width.floatFitsOnLine(m_block->logicalWidthForFloat(f), ExcludeTrailingWhitespace)) { > Source/WebCore/rendering/RenderBlockLineLayout.cpp:2423 > + width.setWhitespaceWidth(additionalTempWidth); width.setTrailingWhitespaceWidth(additionalTempWidth);
Dave Hyatt
Comment 67 2013-02-07 12:09:59 PST
Oops, my includeTrailingWhitespace check is backwards... anyway you get the idea.
ChangSeok Oh
Comment 68 2013-02-08 12:59:31 PST
ChangSeok Oh
Comment 69 2013-02-08 13:06:31 PST
Comment on attachment 151457 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=151457&action=review Thank you for your kind review! I hope this bug would be fixed in this iteration :) >> Source/WebCore/ChangeLog:8 >> + Fix position issue of floating div element in floating div element. > > Nit: "div" doesn't actually add any information here. This would apply to any tag :) Removed 'div' >> Source/WebCore/ChangeLog:10 >> + even though previous line has spaces enough to fit it. > > I can't follow this sentence. I believe the simple test attached in this bug will help you. :) >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:81 >> + bool floatFitsOnLine(float extra) const { return currentWidth() - whitespaceWidth() + extra <= m_availableWidth; } > > I think I would prefer this: > > bool fitsOnLine(float extra, LineFittingCheck includeWhitespace = IncludeTrailingWhitespace) const { return currentWidth() - (includeWhitespace ? trailingWhitespaceWidth() : 0) + extra <= m_availableWidth; } Done. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:88 >> + float whitespaceWidth() const { return m_whitespaceWidth; } > > float trailingWhitespaceWidth() const { return m_trailingWhitespaceWidth; } Done. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:100 >> + void setWhitespaceWidth(float width) { m_whitespaceWidth = width; } > > void setTrailingWhitespaceWidth(float width) { m_trailingWhitespaceWidth = width; } Done. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:113 >> + float m_whitespaceWidth; > > float m_trailingWhitespaceWidth; Done. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:2248 >> + if (floatsFitOnLine && width.floatFitsOnLine(m_block->logicalWidthForFloat(f))) { > > if (floatsFitOnLine && width.floatFitsOnLine(m_block->logicalWidthForFloat(f), ExcludeTrailingWhitespace)) { Done. >> Source/WebCore/rendering/RenderBlockLineLayout.cpp:2423 >> + width.setWhitespaceWidth(additionalTempWidth); > > width.setTrailingWhitespaceWidth(additionalTempWidth); Done.
WebKit Review Bot
Comment 70 2013-02-09 11:36:54 PST
Comment on attachment 187351 [details] Patch Attachment 187351 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/16474454 New failing tests: css2.1/20110323/floats-001.html css2.1/20110323/floats-102.html
ChangSeok Oh
Comment 71 2013-02-09 19:42:54 PST
WebKit Review Bot
Comment 72 2013-02-09 21:27:20 PST
Comment on attachment 187455 [details] Patch Attachment 187455 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/16466712 New failing tests: css2.1/20110323/floats-001.html css2.1/20110323/floats-102.html
Build Bot
Comment 73 2013-02-09 22:03:09 PST
Comment on attachment 187455 [details] Patch Attachment 187455 [details] did not pass mac-ews (mac): Output: http://queues.webkit.org/results/16467750 New failing tests: css2.1/20110323/floats-001.html css2.1/20110323/floats-102.html
Build Bot
Comment 74 2013-02-09 22:57:56 PST
Comment on attachment 187455 [details] Patch Attachment 187455 [details] did not pass mac-ews (mac): Output: http://queues.webkit.org/results/16468742 New failing tests: css2.1/20110323/floats-001.html css2.1/20110323/floats-102.html
ChangSeok Oh
Comment 75 2013-02-11 23:46:47 PST
WebKit Review Bot
Comment 76 2013-02-12 00:41:19 PST
Comment on attachment 187783 [details] Patch Attachment 187783 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/16483025 New failing tests: css2.1/20110323/floats-001.html css2.1/20110323/floats-102.html
Build Bot
Comment 77 2013-02-12 10:42:02 PST
Comment on attachment 187783 [details] Patch Attachment 187783 [details] did not pass mac-ews (mac): Output: http://queues.webkit.org/results/16519340 New failing tests: css2.1/20110323/floats-001.html css2.1/20110323/floats-102.html
Build Bot
Comment 78 2013-02-12 22:46:43 PST
Comment on attachment 187783 [details] Patch Attachment 187783 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://queues.webkit.org/results/16440648 New failing tests: css2.1/20110323/floats-001.html css2.1/20110323/floats-102.html
Stijn de Witt
Comment 79 2013-04-08 12:09:06 PDT
Seems this one is hard to fix. Not for a lack of work on it though. Many thanks to ChangSeok Oh for his persistence. Still hoping this fundamental rendering issue in a basic HTML construct will continue to receive the attention it deserves and be fixed soon.
Dave Hyatt
Comment 80 2013-04-16 10:12:58 PDT
Just need to figure out the failing tests. The patch seems fine to me now, but nobody has explained the failing tests or rebaselined them.
Robert Hogan
Comment 81 2013-04-16 11:23:39 PDT
Robert Hogan
Comment 82 2013-04-16 12:58:32 PDT
Dave Hyatt
Comment 83 2013-04-17 10:57:44 PDT
Comment on attachment 198391 [details] Patch r=me
WebKit Commit Bot
Comment 84 2013-04-17 11:47:39 PDT
Comment on attachment 198391 [details] Patch Clearing flags on attachment: 198391 Committed r148622: <http://trac.webkit.org/changeset/148622>
WebKit Commit Bot
Comment 85 2013-04-17 11:47:46 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.