Bug 13598

Summary: <td> tag can cause Webkit to generate empty space
Product: WebKit Reporter: Joshua Lippai <Discerptor>
Component: TablesAssignee: Nobody <webkit-unassigned>
Status: NEW    
Severity: Major CC: ahmad.saleem792, ap, arpitabahuguna, buildbot, dglazkov, eric, jchaffraix, mitz, rniwa, robert, simon.fraser, webkit-bug-importer, webkit.review.bot, zalan
Priority: P2 Keywords: HasReduction, InRadar
Version: 420+   
Hardware: Mac   
OS: OS X 10.4   
URL: http://ctrlaltdel-online.com
Attachments:
Description Flags
Screenshot of issue
none
Reduction
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch
none
Examples for explanation of width distribution.
none
Patch
none
Patch
none
Patch
buildbot: commit-queue-
Safari 15.5 differs from other browsers none

Joshua Lippai
Reported 2007-05-05 11:05:50 PDT
Webkit generates empty space between two <td> elements in a couple of the tables on this page, and I can't immediately tell why from Web Inspector. I tagged this as major because it looks like it could be a general compatibility issue, the frequency of which we're striving to reduce. Then again, this may have been fixed in 522+ already, so it would be good if someone could verify whether this is the case (I'll actually try that tonight).
Attachments
Screenshot of issue (17.72 KB, image/png)
2007-05-05 12:03 PDT, David Kilzer (:ddkilzer)
no flags
Reduction (531 bytes, text/html)
2007-05-05 23:50 PDT, mitz
no flags
Patch (28.11 KB, patch)
2012-08-31 07:27 PDT, Arpita Bahuguna
no flags
Patch (28.09 KB, patch)
2012-09-05 03:22 PDT, Arpita Bahuguna
no flags
Patch (60.89 KB, patch)
2012-09-07 07:23 PDT, Arpita Bahuguna
no flags
Patch (57.61 KB, patch)
2012-09-08 02:01 PDT, Arpita Bahuguna
no flags
Patch (84.99 KB, patch)
2012-09-08 03:53 PDT, Arpita Bahuguna
no flags
Patch (89.42 KB, patch)
2012-09-15 07:30 PDT, Arpita Bahuguna
no flags
Examples for explanation of width distribution. (7.60 KB, text/html)
2012-09-15 07:37 PDT, Arpita Bahuguna
no flags
Patch (217.21 KB, patch)
2012-09-17 06:16 PDT, Arpita Bahuguna
no flags
Patch (335.14 KB, patch)
2012-10-01 06:08 PDT, Arpita Bahuguna
no flags
Patch (356.65 KB, patch)
2012-10-10 03:57 PDT, Arpita Bahuguna
buildbot: commit-queue-
Safari 15.5 differs from other browsers (394.25 KB, image/png)
2022-06-19 15:36 PDT, Ahmad Saleem
no flags
David Kilzer (:ddkilzer)
Comment 1 2007-05-05 12:00:58 PDT
Confirmed with a local debug build of WebKit r21253 with Safari 2.0.4 (419.3) on Mac OS X 10.4.9 (8P135).
David Kilzer (:ddkilzer)
Comment 2 2007-05-05 12:03:14 PDT
Created attachment 14362 [details] Screenshot of issue In this case, the <td> has its width attribute set to 77px, but it's rendered at 101px.
David Kilzer (:ddkilzer)
Comment 3 2007-05-05 12:07:30 PDT
No gap using Opera 9.10 or Firefox 2.0.0.3. Mac IE 5.2.3 has the same bug as WebKit.
mitz
Comment 4 2007-05-05 23:50:39 PDT
Created attachment 14372 [details] Reduction
Arpita Bahuguna
Comment 5 2012-08-31 07:27:20 PDT
WebKit Review Bot
Comment 6 2012-08-31 08:04:26 PDT
Comment on attachment 161693 [details] Patch Attachment 161693 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13728106 New failing tests: fast/table/003.html fast/table/table-colspan-cell-widths.html
Arpita Bahuguna
Comment 7 2012-09-05 03:22:08 PDT
Arpita Bahuguna
Comment 8 2012-09-05 06:14:03 PDT
Uploaded another patch to get the archive of the failing tests which was missing in the first patch.
WebKit Review Bot
Comment 9 2012-09-05 06:51:35 PDT
Comment on attachment 162205 [details] Patch Attachment 162205 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13739991 New failing tests: fast/table/003.html fast/table/table-colspan-cell-widths.html
Julien Chaffraix
Comment 10 2012-09-05 10:04:09 PDT
Comment on attachment 162205 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=162205&action=review > Source/WebCore/rendering/AutoTableLayout.cpp:436 > + if (!((m_layoutStruct[pos].logicalWidth.isPercent() || m_layoutStruct[pos].logicalWidth.isFixed())) && totalPercent > 0 && fixedWidth <= cellMinLogicalWidth) I don't think that's right. How about calc() / viewport relative logical width(s)? How about the future if we support other values? If you want to handle only 'auto' wdith, you should probably check it explicitly and not check anything non-auto. > LayoutTests/fast/table/table-colspan-cell-widths.html:6 > + cellspacing: 0; > + cellpadding: 0; This is wrong and you can see that in the TEXT dump as your cells are wider than your absolute width. |cellspacing| and |cellpadding| are HTML attributes not CSS properties. The CSS equivalent are resp. border-spacing and padding. AFAICT you don't need the padding rule as we use the cells' border boxes to compute our widths but could be wrong. > LayoutTests/fast/table/table-colspan-cell-widths.html:19 > + <td width="100%"> > + <div style="width: 50px; background-color: green;">&nbsp;</div> > + </td> This doesn't make much sense to not set a background-color on your cell as you don't see that it's properly sized.
Arpita Bahuguna
Comment 11 2012-09-07 06:28:39 PDT
(In reply to comment #10) > (From update of attachment 162205 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=162205&action=review Hi Julien, thanks for the review. > > > Source/WebCore/rendering/AutoTableLayout.cpp:436 > > + if (!((m_layoutStruct[pos].logicalWidth.isPercent() || m_layoutStruct[pos].logicalWidth.isFixed())) && totalPercent > 0 && fixedWidth <= cellMinLogicalWidth) > > I don't think that's right. How about calc() / viewport relative logical width(s)? How about the future if we support other values? If you want to handle only 'auto' wdith, you should probably check it explicitly and not check anything non-auto. > The reason why such a check is required is because am trying to follow the width distribution algorithm in AutoTableLayout::layout(), wherein fixed width columns are given the highest priority followed by percent and then followed by relative and auto width types. For this particular change, we have already distributed the width over fixed columns and next I want to prioritize percent width columns. For that I wish to get the cumulative of the remaining columns i.e. of auto and relative type (or other types, if any). So since fixed is allocated and percent shall be allocated next, anything remaining should be accounted for by that loop and hence the check for !fixed || !percent. Probably the variable name autoMinLogicalWidth is misleading to this extent. > > LayoutTests/fast/table/table-colspan-cell-widths.html:6 > > + cellspacing: 0; > > + cellpadding: 0; > > This is wrong and you can see that in the TEXT dump as your cells are wider than your absolute width. > > |cellspacing| and |cellpadding| are HTML attributes not CSS properties. The CSS equivalent are resp. border-spacing and padding. > > AFAICT you don't need the padding rule as we use the cells' border boxes to compute our widths but could be wrong. > > > LayoutTests/fast/table/table-colspan-cell-widths.html:19 > > + <td width="100%"> > > + <div style="width: 50px; background-color: green;">&nbsp;</div> > > + </td> > > This doesn't make much sense to not set a background-color on your cell as you don't see that it's properly sized. Have made the aforementioned changes. You were right, the padding rule was not required. Shall be uploading a patch with the suggested changes shortly.
Arpita Bahuguna
Comment 12 2012-09-07 07:23:46 PDT
WebKit Review Bot
Comment 13 2012-09-07 16:09:03 PDT
Comment on attachment 162765 [details] Patch Attachment 162765 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13768970 New failing tests: fast/table/003.html
Arpita Bahuguna
Comment 14 2012-09-08 02:01:20 PDT
WebKit Review Bot
Comment 15 2012-09-08 03:11:41 PDT
Comment on attachment 162953 [details] Patch Attachment 162953 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13795237 New failing tests: fast/table/003.html
Arpita Bahuguna
Comment 16 2012-09-08 03:53:08 PDT
WebKit Review Bot
Comment 17 2012-09-08 08:44:01 PDT
Comment on attachment 162956 [details] Patch Attachment 162956 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13785970 New failing tests: fast/table/003.html
Julien Chaffraix
Comment 18 2012-09-08 11:26:41 PDT
Comment on attachment 162956 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=162956&action=review > Source/WebCore/ChangeLog:10 > + For tables with colspan, the algorithm for distribution of width between > + the spanned columns is improper in case spanned cells with percent widths are > + specified. This is a pattern I have seen in your ChangeLogs: I can't figure out what is wrong just by reading them. "improper" is *not* a useful word as it could mean *anything*. Please use technically relevant details and explain the 'why' as much as you can. I would have given a try at this description but there is too many holes for me to fill at the moment. > Source/WebCore/ChangeLog:21 > + After allocating the extra width over the columns with fixed width, the remaining > + extra width should then be distributed amongst percent width columns (if any) before > + prioritizing the auto or relative width columns. I don't think I agree with your algorithm for spreading the extra logical width here. It would make way more sense to do the prioritization differently: 'auto' width first as they have no constrain on them, then 'percent' to try to keep the requested ratio and finally fixed widths ('fixed', viewport relative, calc). How does other browsers handle that? > Source/WebCore/ChangeLog:24 > + For this, we need to first take the minimum logical width consumed by the auto or relative > + width columns if any, and the extra width after taking out this value should be relative width has a meaning in CSS that is likely not the one you are thinking of. 'em', 'ex' are relative units as they depends on your font. > Source/WebCore/rendering/AutoTableLayout.cpp:420 > + int autoMinLogicalWidth = 0; > + int widthForPercentAllocation = 0; WebKit style is to move variable definitions to where they are needed. > Source/WebCore/rendering/AutoTableLayout.cpp:422 > // Give min to variable first, to fixed second, and to others third. This comment should be updated to outline the new spreading algorithm. > Source/WebCore/rendering/AutoTableLayout.cpp:434 > + // Take into account the minimum width for auto cells. This comment is a 'what' comment and not super useful. On top of that, it's wrong as you recognized yourself as you bundle other non-handled length type together under the 'auto' umbrella. > Source/WebCore/rendering/AutoTableLayout.cpp:437 > + autoMinLogicalWidth += m_layoutStruct[pos].effectiveMinLogicalWidth; > For that I wish to get the cumulative of the remaining columns i.e. of auto and relative type (or other types, if any). I don't think it's correct to say 'or other types, if any' without thinking about those cases. Using explicitly checking for what you want is more correct and future proof. Again maybe it's right but the absence of good justification makes it hard to see. > Source/WebCore/rendering/AutoTableLayout.cpp:440 > + // Next, allocate for the percent cells. Another mostly useless 'what' comment. We prefer 'why' comments. > LayoutTests/ChangeLog:17 > + The existing test case result needs modification as it is affected by the change. Another example of a useless sentence. How can anybody evaluate if your rebaselining is correct? Helper the maintainers (and the reviewers) by stating what is the difference and why it is correct.
Arpita Bahuguna
Comment 19 2012-09-15 07:30:14 PDT
Arpita Bahuguna
Comment 20 2012-09-15 07:37:04 PDT
Created attachment 164288 [details] Examples for explanation of width distribution.
Arpita Bahuguna
Comment 21 2012-09-15 09:23:28 PDT
(In reply to comment #18) > (From update of attachment 162956 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=162956&action=review > Hi Julien, thanks for the review. Have tried to ammend the fixed width distribution as well along with this patch (in addition to the previous fix). We now follow FF and Opera (Opera behaves slightly differently for a particular case but FF seems to make more sense) for this width distribution logic. I have attached a file with examples to explain the behavior in other browsers. Earlier, we used to just allocate the logical width for fixed width columns and distribute the remaining width amongst the remaining columns. Currently (trying to follow FF/Opera) I first allocate for percent width columns in the specified ratio. Next, we allocate for the fixed (fixed, rel, viewport) width cols (but only if we have at least one auto width col), upto a maximum of the effective max logical width. Finally, we take care of the remaining columns (which are not covered by the previous two loops) using the existing logic. Have also made the other changes as suggested by you. > > Source/WebCore/ChangeLog:10 > > + For tables with colspan, the algorithm for distribution of width between > > + the spanned columns is improper in case spanned cells with percent widths are > > + specified. > > This is a pattern I have seen in your ChangeLogs: I can't figure out what is wrong just by reading them. "improper" is *not* a useful word as it could mean *anything*. Please use technically relevant details and explain the 'why' as much as you can. I would have given a try at this description but there is too many holes for me to fill at the moment. > > > Source/WebCore/ChangeLog:21 > > + After allocating the extra width over the columns with fixed width, the remaining > > + extra width should then be distributed amongst percent width columns (if any) before > > + prioritizing the auto or relative width columns. > > I don't think I agree with your algorithm for spreading the extra logical width here. It would make way more sense to do the prioritization differently: 'auto' width first as they have no constrain on them, then 'percent' to try to keep the requested ratio and finally fixed widths ('fixed', viewport relative, calc). How does other browsers handle that? > > > Source/WebCore/ChangeLog:24 > > + For this, we need to first take the minimum logical width consumed by the auto or relative > > + width columns if any, and the extra width after taking out this value should be > > relative width has a meaning in CSS that is likely not the one you are thinking of. 'em', 'ex' are relative units as they depends on your font. > > > Source/WebCore/rendering/AutoTableLayout.cpp:420 > > + int autoMinLogicalWidth = 0; > > + int widthForPercentAllocation = 0; > > WebKit style is to move variable definitions to where they are needed. > > > Source/WebCore/rendering/AutoTableLayout.cpp:422 > > // Give min to variable first, to fixed second, and to others third. > > This comment should be updated to outline the new spreading algorithm. > > > Source/WebCore/rendering/AutoTableLayout.cpp:434 > > + // Take into account the minimum width for auto cells. > > This comment is a 'what' comment and not super useful. On top of that, it's wrong as you recognized yourself as you bundle other non-handled length type together under the 'auto' umbrella. > > > Source/WebCore/rendering/AutoTableLayout.cpp:437 > > + autoMinLogicalWidth += m_layoutStruct[pos].effectiveMinLogicalWidth; > > > For that I wish to get the cumulative of the remaining columns i.e. of auto and relative type (or other types, if any). > > I don't think it's correct to say 'or other types, if any' without thinking about those cases. Using explicitly checking for what you want is more correct and future proof. Again maybe it's right but the absence of good justification makes it hard to see. > > > Source/WebCore/rendering/AutoTableLayout.cpp:440 > > + // Next, allocate for the percent cells. > > Another mostly useless 'what' comment. We prefer 'why' comments. > > > LayoutTests/ChangeLog:17 > > + The existing test case result needs modification as it is affected by the change. > > Another example of a useless sentence. How can anybody evaluate if your rebaselining is correct? Helper the maintainers (and the reviewers) by stating what is the difference and why it is correct.
WebKit Review Bot
Comment 22 2012-09-15 13:16:19 PDT
Comment on attachment 164287 [details] Patch Attachment 164287 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13859582 New failing tests: fast/table/003.html tables/mozilla_expected_failures/bugs/bug80762-2.html
Arpita Bahuguna
Comment 23 2012-09-17 06:16:52 PDT
Arpita Bahuguna
Comment 24 2012-09-17 06:29:23 PDT
Uploaded another patch for handling the newly failing test cases.
WebKit Review Bot
Comment 25 2012-09-17 08:14:38 PDT
Comment on attachment 164377 [details] Patch Attachment 164377 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13861967 New failing tests: fast/table/003.html fast/table/colspanMinWidth-vertical.html fast/table/colspanMinWidth.html tables/mozilla/core/misc.html tables/mozilla_expected_failures/bugs/bug80762-2.html tables/mozilla_expected_failures/bugs/bug1647.html
Arpita Bahuguna
Comment 26 2012-09-17 22:52:50 PDT
Hi Julien, the last patch has fix for the following things: 1. percent width handling for colspan. 2. fixed width handling for colspan. 3. handling when colspan count is more than the number of spanning <td>s in the other row, introducing empty cells. The fix for 1. percent width handling for colspan, and 2. fixed width handling for colspan cause the following two tests to fail but it is expected and we behave as per FF and Opera after the patch. fast/table/003.html tables/mozilla_expected_failures/bugs/bug80762-2.html (this is the last but one patch) The fix for 3. handling when colspan count is more than the number of spanning <td>s in the other row, introducing empty cells. cause the following tests to fail which is again expected as we now follow similar to FF and Opera: tables/mozilla/core/misc.html tables/mozilla_expected_failures/bugs/bug1647.html fast/table/colspanMinWidth-vertical.html fast/table/colspanMinWidth.html (this is the last patch) Do you think I should first patch 1. & 2. (as mentioned above) and 3. as a separate patch? Also. not only for this bug but for others as well, I am unable to patch the new expected results properly causing the cr-linux bot to always go red. This seems to happen only for the tests that have the expected image in the cr-linux path as well as its fallback cr-win path whereas the .txt is only available in the cr-win fallback path. I understand that I might be doing something wrong, but can you please tell me where I am going wrong as I have tried various combinations to get the patch right but have been unsuccessful so far.
Arpita Bahuguna
Comment 27 2012-10-01 06:08:41 PDT
Build Bot
Comment 28 2012-10-01 07:52:41 PDT
Comment on attachment 166461 [details] Patch Attachment 166461 [details] did not pass mac-ews (mac): Output: http://queues.webkit.org/results/14086807 New failing tests: fast/table/table-colspan-cell-widths.html
Arpita Bahuguna
Comment 29 2012-10-10 03:57:59 PDT
Build Bot
Comment 30 2013-01-16 12:14:23 PST
Comment on attachment 167973 [details] Patch Attachment 167973 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://queues.webkit.org/results/15906498 New failing tests: tables/mozilla_expected_failures/bugs/bug1647.html
Andreas Kling
Comment 31 2014-02-05 10:59:56 PST
Comment on attachment 167973 [details] Patch Clearing review flag on patches from before 2014. If this patch is still relevant, please reset the r? flag.
Ahmad Saleem
Comment 32 2022-06-19 15:36:30 PDT
Created attachment 460340 [details] Safari 15.5 differs from other browsers I am able to reproduce this bug in Safari 15.5 on macOS 12.4 based on attached reduction test case. All other browser render same as shown in the picture. Look into (1) block [lime green] not filling up to table cell width. Thanks!
Radar WebKit Bug Importer
Comment 33 2022-06-19 15:36:56 PDT
Note You need to log in before you can comment on or make changes to this bug.