diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index e440763..9040d80 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,5 +1,23 @@
 2019-10-15  Zalan Bujtas  <zalan@apple.com>
 
+        [LFC][TFC] Add <col> element's width attribute value to Layout::Box rare data
+        https://bugs.webkit.org/show_bug.cgi?id=202988
+        <rdar://problem/56291048>
+
+        Reviewed by Antti Koivisto.
+
+        Sadly RenderStyle does not have this value.
+
+        * layout/layouttree/LayoutBox.cpp:
+        (WebCore::Layout::Box::setColumnWidth):
+        (WebCore::Layout::Box::columnWidth const):
+        * layout/layouttree/LayoutBox.h:
+        * layout/layouttree/LayoutTreeBuilder.cpp:
+        (WebCore::Layout::TreeBuilder::createLayoutBox):
+        (WebCore::Layout::outputLayoutBox):
+
+2019-10-15  Zalan Bujtas  <zalan@apple.com>
+
         [LFC] Adjust computed height value when box sizing is border-box
         https://bugs.webkit.org/show_bug.cgi?id=202965
         <rdar://problem/56276771>
diff --git a/Source/WebCore/layout/layouttree/LayoutBox.cpp b/Source/WebCore/layout/layouttree/LayoutBox.cpp
index 4d2bc97..4a28b18 100644
--- a/Source/WebCore/layout/layouttree/LayoutBox.cpp
+++ b/Source/WebCore/layout/layouttree/LayoutBox.cpp
@@ -439,6 +439,18 @@
     return rareData().columnSpan;
 }
 
+void Box::setColumnWidth(LayoutUnit columnWidth)
+{
+    ensureRareData().columnWidth = columnWidth;
+}
+
+Optional<LayoutUnit> Box::columnWidth() const
+{
+    if (!hasRareData())
+        return { };
+    return rareData().columnWidth;
+}
+
 Box::RareDataMap& Box::rareDataMap()
 {
     static NeverDestroyed<RareDataMap> map;
diff --git a/Source/WebCore/layout/layouttree/LayoutBox.h b/Source/WebCore/layout/layouttree/LayoutBox.h
index 6ea2502..793785c 100644
--- a/Source/WebCore/layout/layouttree/LayoutBox.h
+++ b/Source/WebCore/layout/layouttree/LayoutBox.h
@@ -146,10 +146,14 @@
 
     // FIXME: Find a better place for random DOM things.
     void setRowSpan(unsigned);
-    void setColumnSpan(unsigned);
     unsigned rowSpan() const;
+
+    void setColumnSpan(unsigned);
     unsigned columnSpan() const;
 
+    void setColumnWidth(LayoutUnit);
+    Optional<LayoutUnit> columnWidth() const;
+
     void setParent(Container& parent) { m_parent = &parent; }
     void setNextSibling(Box& nextSibling) { m_nextSibling = &nextSibling; }
     void setPreviousSibling(Box& previousSibling) { m_previousSibling = &previousSibling; }
@@ -171,6 +175,7 @@
         std::unique_ptr<Replaced> replaced;
         unsigned rowSpan { 1 };
         unsigned columnSpan { 1 };
+        Optional<LayoutUnit> columnWidth;
     };
 
     bool hasRareData() const { return m_hasRareData; }
diff --git a/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp b/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
index 49e6f78..dd91cad 100644
--- a/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
+++ b/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
@@ -31,6 +31,7 @@
 #include "DisplayBox.h"
 #include "DisplayRun.h"
 #include "HTMLTableCellElement.h"
+#include "HTMLTableColElement.h"
 #include "InlineFormattingState.h"
 #include "LayoutBox.h"
 #include "LayoutChildIterator.h"
@@ -182,8 +183,13 @@
         else if (displayType == DisplayType::TableCaption || displayType == DisplayType::TableCell) {
             childLayoutBox = makeUnique<Container>(elementAttributes(renderer), RenderStyle::clone(renderer.style()));
         } else if (displayType == DisplayType::TableRowGroup || displayType == DisplayType::TableHeaderGroup || displayType == DisplayType::TableFooterGroup
-            || displayType == DisplayType::TableRow || displayType == DisplayType::TableColumnGroup || displayType == DisplayType::TableColumn) {
+            || displayType == DisplayType::TableRow || displayType == DisplayType::TableColumnGroup) {
             childLayoutBox = makeUnique<Container>(elementAttributes(renderer), RenderStyle::clone(renderer.style()));
+        } else if (displayType == DisplayType::TableColumn) {
+            childLayoutBox = makeUnique<Container>(elementAttributes(renderer), RenderStyle::clone(renderer.style()));
+            auto columnWidth = static_cast<HTMLTableColElement&>(*renderer.element()).width();
+            if (!columnWidth.isEmpty())
+                childLayoutBox->setColumnWidth(columnWidth.toInt());
         } else {
             ASSERT_NOT_IMPLEMENTED_YET();
             return { };
@@ -311,6 +317,10 @@
         stream << "TBODY";
     else if (layoutBox.isTableFooter())
         stream << "TFOOT";
+    else if (layoutBox.isTableColumnGroup())
+        stream << "COL GROUP";
+    else if (layoutBox.isTableColumn())
+        stream << "COL";
     else if (layoutBox.isTableCell())
         stream << "TD";
     else if (layoutBox.isTableRow())
