WebKit Bugzilla
Attachment 361607 Details for
Bug 194473
: [LFC][IFC] Add intrinsic width support for basic inline containers
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194473-20190209084816.patch (text/plain), 23.30 KB, created by
zalan
on 2019-02-09 08:48:17 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2019-02-09 08:48:17 PST
Size:
23.30 KB
patch
obsolete
>Subversion Revision: 241195 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 62ee2e861694c0b62453009c08cf968052c35423..2edc0ba0aba9a4dff7285fa51b1564b06c150e71 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2019-02-09 Zalan Bujtas <zalan@apple.com> >+ >+ [LFC][IFC] Add intrinsic width support for basic inline containers >+ https://bugs.webkit.org/show_bug.cgi?id=194473 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Preferred width computation logic is very similar to normal layout. >+ One of the main difference is that the preferred width codepath does not provide valid containing block width. >+ This patch implement basic inline container support by passing nullopt containing block width in UsedHorizontalValues. >+ >+ * layout/inlineformatting/InlineFormattingContext.cpp: >+ (WebCore::Layout::InlineFormattingContext::layout const): >+ (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const): >+ (WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const): >+ (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const): >+ (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const): >+ (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const): >+ (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const): >+ * layout/inlineformatting/InlineFormattingContext.h: >+ > 2019-02-08 Zalan Bujtas <zalan@apple.com> > > [LFC] The used containing block width value is optional >diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp >index 0280838710845efebcc6721493f5bbae1b320137..d26201ea8d49505c133e1933c051567aaf576dbd 100644 >--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp >+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp >@@ -71,15 +71,16 @@ void InlineFormattingContext::layout() const > > LOG_WITH_STREAM(FormattingContextLayout, stream << "[Start] -> inline formatting context -> formatting root(" << &root() << ")"); > auto& root = downcast<Container>(this->root()); >+ auto usedValues = UsedHorizontalValues { layoutState().displayBoxForLayoutBox(root).contentBoxWidth(), { }, { } }; > auto* layoutBox = root.firstInFlowOrFloatingChild(); > // Compute width/height for non-text content and margin/border/padding for inline containers. > while (layoutBox) { > if (layoutBox->establishesFormattingContext()) >- layoutFormattingContextRoot(*layoutBox); >+ layoutFormattingContextRoot(*layoutBox, usedValues); > else if (is<Container>(*layoutBox)) >- computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox)); >+ computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues); > else if (layoutBox->isReplaced()) >- computeWidthAndHeightForReplacedInlineBox(*layoutBox); >+ computeWidthAndHeightForReplacedInlineBox(*layoutBox, usedValues); > layoutBox = nextInPreOrder(*layoutBox, root); > } > >@@ -89,27 +90,70 @@ void InlineFormattingContext::layout() const > LOG_WITH_STREAM(FormattingContextLayout, stream << "[End] -> inline formatting context -> formatting root(" << &root << ")"); > } > >-void InlineFormattingContext::computeMarginBorderAndPadding(const InlineContainer& inlineContainer) const >+FormattingContext::InstrinsicWidthConstraints InlineFormattingContext::instrinsicWidthConstraints() const >+{ >+ ASSERT(!layoutState().formattingStateForBox(root()).instrinsicWidthConstraints(root())); >+ ASSERT(is<Container>(root())); >+ >+ auto& layoutState = this->layoutState(); >+ auto& root = downcast<Container>(this->root()); >+ >+ auto usedValues = UsedHorizontalValues { { }, { }, { } }; >+ auto* layoutBox = root.firstInFlowOrFloatingChild(); >+ while (layoutBox) { >+ if (layoutBox->establishesFormattingContext() || layoutBox->isReplaced()) >+ ASSERT_NOT_IMPLEMENTED_YET(); >+ else if (is<Container>(*layoutBox)) >+ computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues); >+ layoutBox = nextInPreOrder(*layoutBox, root); >+ } >+ >+ InlineRunProvider inlineRunProvider; >+ collectInlineContent(inlineRunProvider); >+ >+ auto maximumLineWidth = [&](auto availableWidth) { >+ LayoutUnit maxContentLogicalRight; >+ auto lineBreaker = InlineLineBreaker { layoutState, formattingState().inlineContent(), inlineRunProvider.runs() }; >+ LayoutUnit lineLogicalRight; >+ while (auto run = lineBreaker.nextRun(lineLogicalRight, availableWidth, !lineLogicalRight)) { >+ if (run->position == InlineLineBreaker::Run::Position::LineBegin) >+ lineLogicalRight = 0; >+ lineLogicalRight += run->width; >+ >+ maxContentLogicalRight = std::max(maxContentLogicalRight, lineLogicalRight); >+ } >+ return maxContentLogicalRight; >+ }; >+ >+ auto instrinsicWidthConstraints = FormattingContext::InstrinsicWidthConstraints { maximumLineWidth(0), maximumLineWidth(LayoutUnit::max()) }; >+ layoutState.formattingStateForBox(root).setInstrinsicWidthConstraints(root, instrinsicWidthConstraints); >+ return instrinsicWidthConstraints; >+} >+ >+void InlineFormattingContext::computeBorderAndPadding(const Box& layoutBox, UsedHorizontalValues usedValues) const >+{ >+ auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox); >+ displayBox.setBorder(Geometry::computedBorder(layoutBox)); >+ displayBox.setPadding(Geometry::computedPadding(layoutBox, usedValues)); >+} >+ >+void InlineFormattingContext::computeMarginBorderAndPadding(const InlineContainer& inlineContainer, UsedHorizontalValues usedValues) const > { > // Non-replaced, non-formatting root containers (<span></span>) don't have width property -> non width computation. > ASSERT(!inlineContainer.replaced()); > ASSERT(!inlineContainer.establishesFormattingContext()); > >- computeBorderAndPadding(inlineContainer); >+ computeBorderAndPadding(inlineContainer, usedValues); > auto& displayBox = layoutState().displayBoxForLayoutBox(inlineContainer); >- auto containingBlockWidth = layoutState().displayBoxForLayoutBox(*inlineContainer.containingBlock()).contentBoxWidth(); >- auto computedHorizontalMargin = Geometry::computedHorizontalMargin(inlineContainer, UsedHorizontalValues { containingBlockWidth, { }, { } }); >+ auto computedHorizontalMargin = Geometry::computedHorizontalMargin(inlineContainer, usedValues); > displayBox.setHorizontalComputedMargin(computedHorizontalMargin); > displayBox.setHorizontalMargin({ computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) }); > } > >-void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox) const >+void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues) const > { > auto& layoutState = this->layoutState(); >- auto containingBlockWidth = layoutState.displayBoxForLayoutBox(*layoutBox.containingBlock()).contentBoxWidth(); >- > WidthAndMargin widthAndMargin; >- auto usedValues = UsedHorizontalValues { containingBlockWidth, { }, { } }; > if (layoutBox.isFloatingPositioned()) > widthAndMargin = Geometry::floatingWidthAndMargin(layoutState, layoutBox, usedValues); > else if (layoutBox.isInlineBlockBox()) >@@ -144,12 +188,12 @@ void InlineFormattingContext::computeHeightAndMargin(const Box& layoutBox) const > displayBox.setVerticalMargin({ heightAndMargin.nonCollapsedMargin, { } }); > } > >-void InlineFormattingContext::layoutFormattingContextRoot(const Box& root) const >+void InlineFormattingContext::layoutFormattingContextRoot(const Box& root, UsedHorizontalValues usedValues) const > { > ASSERT(root.isFloatingPositioned() || root.isInlineBlockBox()); > >- computeBorderAndPadding(root); >- computeWidthAndMargin(root); >+ computeBorderAndPadding(root, usedValues); >+ computeWidthAndMargin(root, usedValues); > // Swich over to the new formatting context (the one that the root creates). > auto formattingContext = layoutState().createFormattingContext(root); > formattingContext->layout(); >@@ -159,14 +203,14 @@ void InlineFormattingContext::layoutFormattingContextRoot(const Box& root) const > formattingContext->layoutOutOfFlowDescendants(root); > } > >-void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox) const >+void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox, UsedHorizontalValues usedValues) const > { > ASSERT(!layoutBox.isContainer()); > ASSERT(!layoutBox.establishesFormattingContext()); > ASSERT(layoutBox.replaced()); > >- computeBorderAndPadding(layoutBox); >- computeWidthAndMargin(layoutBox); >+ computeBorderAndPadding(layoutBox, usedValues); >+ computeWidthAndMargin(layoutBox, usedValues); > computeHeightAndMargin(layoutBox); > } > >@@ -292,41 +336,6 @@ void InlineFormattingContext::collectInlineContent(InlineRunProvider& inlineRunP > } > } > >-FormattingContext::InstrinsicWidthConstraints InlineFormattingContext::instrinsicWidthConstraints() const >-{ >- auto& formattingStateForRoot = layoutState().formattingStateForBox(root()); >- if (auto instrinsicWidthConstraints = formattingStateForRoot.instrinsicWidthConstraints(root())) >- return *instrinsicWidthConstraints; >- >- auto& inlineFormattingState = formattingState(); >- InlineRunProvider inlineRunProvider; >- collectInlineContent(inlineRunProvider); >- >- // Compute width for non-text content. >- for (auto& inlineRun : inlineRunProvider.runs()) { >- if (inlineRun.isText()) >- continue; >- >- computeWidthAndMargin(inlineRun.inlineItem().layoutBox()); >- } >- >- auto maximumLineWidth = [&](auto availableWidth) { >- LayoutUnit maxContentLogicalRight; >- InlineLineBreaker lineBreaker(layoutState(), inlineFormattingState.inlineContent(), inlineRunProvider.runs()); >- LayoutUnit lineLogicalRight; >- while (auto run = lineBreaker.nextRun(lineLogicalRight, availableWidth, !lineLogicalRight)) { >- if (run->position == InlineLineBreaker::Run::Position::LineBegin) >- lineLogicalRight = 0; >- lineLogicalRight += run->width; >- >- maxContentLogicalRight = std::max(maxContentLogicalRight, lineLogicalRight); >- } >- return maxContentLogicalRight; >- }; >- >- return FormattingContext::InstrinsicWidthConstraints { maximumLineWidth(0), maximumLineWidth(LayoutUnit::max()) }; >-} >- > } > } > >diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h >index 1df58602fe2fc4fd5063a5d5143c19cad4eaab24..0cbb96d2f4f4fbbe722fffcfc475011a27c9ae70 100644 >--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h >+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h >@@ -85,11 +85,12 @@ private: > static WidthAndMargin inlineBlockWidthAndMargin(LayoutState&, const Box&, UsedHorizontalValues); > }; > >- void layoutFormattingContextRoot(const Box&) const; >- void computeWidthAndHeightForReplacedInlineBox(const Box&) const; >- void computeMarginBorderAndPadding(const InlineContainer&) const; >+ void layoutFormattingContextRoot(const Box&, UsedHorizontalValues) const; >+ void computeWidthAndHeightForReplacedInlineBox(const Box&, UsedHorizontalValues) const; >+ void computeBorderAndPadding(const Box&, UsedHorizontalValues) const; >+ void computeMarginBorderAndPadding(const InlineContainer&, UsedHorizontalValues) const; > void computeHeightAndMargin(const Box&) const; >- void computeWidthAndMargin(const Box&) const; >+ void computeWidthAndMargin(const Box&, UsedHorizontalValues) const; > > void collectInlineContent(InlineRunProvider&) const; > InstrinsicWidthConstraints instrinsicWidthConstraints() const override; >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 7afbe313dadaf62d9b152e75785ed213cb999bf3..de4a4742ef0961989b201d7f8ca37cae8328304f 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,14 @@ >+2019-02-09 Zalan Bujtas <zalan@apple.com> >+ >+ [LFC][IFC] Add intrinsic width support for basic inline containers >+ https://bugs.webkit.org/show_bug.cgi?id=194473 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Expand tests coverage (11 new tests -> 798) >+ >+ * LayoutReloaded/misc/LFC-passing-tests.txt: not sure why run-singly keeps producing different ordering. >+ > 2019-02-08 Benjamin Poulain <benjamin@webkit.org> > > clampTo(): do not convert the input to double when dealing with integers >diff --git a/Tools/LayoutReloaded/misc/LFC-passing-tests.txt b/Tools/LayoutReloaded/misc/LFC-passing-tests.txt >index ee63e0b7688a3903d9ca0c3d4e77eb5c0d7bf5c7..a8d7ab37d504682e6d1267e637cbb70394732fe4 100644 >--- a/Tools/LayoutReloaded/misc/LFC-passing-tests.txt >+++ b/Tools/LayoutReloaded/misc/LFC-passing-tests.txt >@@ -403,12 +403,12 @@ css2.1/20110323/absolute-non-replaced-height-011.htm > css2.1/20110323/absolute-non-replaced-height-012.htm > css2.1/20110323/absolute-non-replaced-max-height-001.htm > css2.1/20110323/absolute-non-replaced-max-height-002.htm >-css2.1/t0402-c71-fwd-parsing-00-f.html > css2.1/20110323/absolute-non-replaced-max-height-003.htm > css2.1/20110323/absolute-non-replaced-max-height-004.htm >-css2.1/t0402-c71-fwd-parsing-01-f.html > css2.1/20110323/absolute-non-replaced-max-height-005.htm >+css2.1/t0402-c71-fwd-parsing-00-f.html > css2.1/20110323/absolute-non-replaced-max-height-006.htm >+css2.1/t0402-c71-fwd-parsing-01-f.html > css2.1/20110323/absolute-non-replaced-max-height-007.htm > css2.1/20110323/absolute-non-replaced-max-height-008.htm > css2.1/20110323/absolute-non-replaced-max-height-009.htm >@@ -421,12 +421,12 @@ css2.1/20110323/absolute-non-replaced-width-003.htm > css2.1/20110323/absolute-non-replaced-width-004.htm > css2.1/20110323/absolute-non-replaced-width-005.htm > css2.1/20110323/absolute-non-replaced-width-006.htm >-css2.1/t0402-c71-fwd-parsing-03-f.html > css2.1/20110323/absolute-non-replaced-width-007.htm > css2.1/20110323/absolute-non-replaced-width-008.htm > css2.1/20110323/absolute-non-replaced-width-009.htm > css2.1/20110323/absolute-non-replaced-width-010.htm > css2.1/20110323/absolute-non-replaced-width-011.htm >+css2.1/t0402-c71-fwd-parsing-03-f.html > css2.1/20110323/absolute-non-replaced-width-012.htm > css2.1/20110323/absolute-non-replaced-width-013.htm > css2.1/20110323/absolute-non-replaced-width-014.htm >@@ -474,13 +474,13 @@ css2.1/20110323/absolute-replaced-height-025.htm > css2.1/20110323/absolute-replaced-height-026.htm > css2.1/20110323/absolute-replaced-height-028.htm > css2.1/20110323/absolute-replaced-height-029.htm >-css2.1/t0803-c5502-imrgn-r-00-b-ag.html > css2.1/20110323/absolute-replaced-height-030.htm > css2.1/20110323/absolute-replaced-height-031.htm > css2.1/20110323/absolute-replaced-height-032.htm > css2.1/20110323/absolute-replaced-height-033.htm > css2.1/20110323/absolute-replaced-height-035.htm > css2.1/20110323/absolute-replaced-height-036.htm >+css2.1/t0803-c5502-imrgn-r-00-b-ag.html > css2.1/20110323/absolute-replaced-width-001.htm > css2.1/20110323/absolute-replaced-width-006.htm > css2.1/20110323/absolute-replaced-width-008.htm >@@ -496,11 +496,11 @@ css2.1/20110323/absolute-replaced-width-050.htm > css2.1/20110323/absolute-replaced-width-055.htm > css2.1/20110323/absolute-replaced-width-064.htm > css2.1/20110323/absolute-replaced-width-069.htm >-css2.1/t0803-c5502-mrgn-r-02-c.html >-css2.1/t0803-c5502-mrgn-r-03-c.html > css2.1/20110323/abspos-containing-block-initial-001.htm > css2.1/20110323/abspos-containing-block-initial-004a.htm >+css2.1/t0803-c5502-mrgn-r-02-c.html > css2.1/20110323/abspos-containing-block-initial-004b.htm >+css2.1/t0803-c5502-mrgn-r-03-c.html > css2.1/t0803-c5504-imrgn-l-00-b-ag.html > css2.1/20110323/abspos-containing-block-initial-005a.htm > css2.1/20110323/abspos-containing-block-initial-005c.htm >@@ -510,9 +510,6 @@ css2.1/20110323/abspos-containing-block-initial-009b.htm > css2.1/20110323/abspos-containing-block-initial-009e.htm > css2.1/20110323/abspos-containing-block-initial-009f.htm > css2.1/t0803-c5504-mrgn-l-00-c-ag.html >-css2.1/t0803-c5504-mrgn-l-02-c.html >-css2.1/t0803-c5504-mrgn-l-03-c.html >-css2.1/t0803-c5505-mrgn-00-b-ag.html > css2.1/20110323/at-import-001.htm > css2.1/20110323/at-import-002.htm > css2.1/20110323/at-import-003.htm >@@ -522,36 +519,37 @@ css2.1/20110323/at-import-006.htm > css2.1/20110323/at-import-007.htm > css2.1/20110323/at-import-009.htm > css2.1/20110323/at-import-010.htm >+css2.1/t0803-c5504-mrgn-l-02-c.html > css2.1/20110323/at-import-011.htm >+css2.1/t0803-c5504-mrgn-l-03-c.html >+css2.1/20110323/background-intrinsic-001.htm >+css2.1/20110323/background-intrinsic-002.htm >+css2.1/20110323/background-intrinsic-003.htm >+css2.1/20110323/background-intrinsic-004.htm >+css2.1/20110323/background-intrinsic-005.htm >+css2.1/t0803-c5505-mrgn-00-b-ag.html >+css2.1/20110323/background-intrinsic-007.htm >+css2.1/20110323/background-intrinsic-008.htm >+css2.1/20110323/background-intrinsic-009.htm >+css2.1/20110323/block-non-replaced-height-001.htm >+css2.1/20110323/block-non-replaced-height-003.htm > css2.1/t0803-c5505-mrgn-03-c-ag.html > css2.1/t0804-c5506-ipadn-t-00-b-a.html > css2.1/t0804-c5506-ipadn-t-01-b-a.html > css2.1/t0804-c5506-ipadn-t-02-b-a.html > css2.1/t0804-c5507-ipadn-r-00-b-ag.html >-css2.1/20110323/background-intrinsic-003.htm >+css2.1/20110323/block-non-replaced-height-007.htm >+css2.1/20110323/block-non-replaced-height-009.htm >+css2.1/20110323/block-non-replaced-height-011.htm > css2.1/t0804-c5507-padn-r-00-c-ag.html >-css2.1/20110323/background-intrinsic-008.htm >-css2.1/20110323/background-intrinsic-009.htm >-css2.1/20110323/block-non-replaced-height-001.htm >+css2.1/20110323/block-non-replaced-height-013.htm > css2.1/t0804-c5507-padn-r-02-f.html > css2.1/t0804-c5507-padn-r-03-f.html > css2.1/t0804-c5508-ipadn-b-00-b-a.html > css2.1/t0804-c5508-ipadn-b-01-f-a.html > css2.1/t0804-c5508-ipadn-b-02-b-a.html >-css2.1/20110323/block-non-replaced-height-003.htm >-css2.1/t0804-c5509-ipadn-l-00-b-ag.html >-css2.1/20110323/block-non-replaced-height-007.htm >-css2.1/20110323/block-non-replaced-height-009.htm >-css2.1/t0804-c5509-padn-l-00-b-ag.html >-css2.1/20110323/block-non-replaced-height-011.htm >-css2.1/t0804-c5509-padn-l-02-f.html >-css2.1/20110323/block-non-replaced-height-013.htm > css2.1/20110323/block-non-replaced-height-015.htm >-css2.1/t0804-c5510-padn-00-b-ag.html >-css2.1/t0804-c5510-padn-02-f.html >-css2.1/t0805-c5511-brdr-tw-01-b-g.html >-css2.1/t0805-c5511-brdr-tw-02-b.html >-css2.1/t0805-c5511-brdr-tw-03-b.html >+css2.1/t0804-c5509-ipadn-l-00-b-ag.html > css2.1/20110323/block-non-replaced-width-003.htm > css2.1/20110323/block-non-replaced-width-004.htm > css2.1/20110323/block-non-replaced-width-005.htm >@@ -559,16 +557,23 @@ css2.1/20110323/block-non-replaced-width-006.htm > css2.1/20110323/block-non-replaced-width-007.htm > css2.1/20110323/block-non-replaced-width-008.htm > css2.1/20110323/block-replaced-height-001.htm >-css2.1/t0805-c5512-brdr-rw-00-b.html >-css2.1/t0805-c5512-brdr-rw-01-b-g.html >-css2.1/t0805-c5512-brdr-rw-02-b.html >-css2.1/t0805-c5512-brdr-rw-03-b.html > css2.1/20110323/block-replaced-height-003.htm > css2.1/20110323/block-replaced-height-004.htm > css2.1/20110323/block-replaced-height-005.htm > css2.1/20110323/block-replaced-height-007.htm > css2.1/20110323/block-replaced-width-001.htm > css2.1/20110323/block-replaced-width-006.htm >+css2.1/t0804-c5509-padn-l-00-b-ag.html >+css2.1/t0804-c5509-padn-l-02-f.html >+css2.1/t0804-c5510-padn-00-b-ag.html >+css2.1/t0804-c5510-padn-02-f.html >+css2.1/t0805-c5511-brdr-tw-01-b-g.html >+css2.1/t0805-c5511-brdr-tw-02-b.html >+css2.1/t0805-c5511-brdr-tw-03-b.html >+css2.1/t0805-c5512-brdr-rw-00-b.html >+css2.1/t0805-c5512-brdr-rw-01-b-g.html >+css2.1/t0805-c5512-brdr-rw-02-b.html >+css2.1/t0805-c5512-brdr-rw-03-b.html > css2.1/t0805-c5513-brdr-bw-01-b-g.html > css2.1/t0805-c5513-brdr-bw-02-b.html > css2.1/t0805-c5513-brdr-bw-03-b.html >@@ -597,6 +602,8 @@ css2.1/t1001-abs-pos-cb-01-b.html > css2.1/t1001-abs-pos-cb-02-b.html > css2.1/t1001-abs-pos-cb-03-b.html > css2.1/t1001-abs-pos-cb-04-b.html >+css2.1/t1001-abs-pos-cb-05-b.html >+css2.1/t1001-abs-pos-cb-06-b.html > css2.1/t1001-abs-pos-cb-07-b.html > css2.1/t1001-abs-pos-cb-08-b.html > css2.1/t1001-abs-pos-cb-09-b.html >@@ -643,6 +650,7 @@ css2.1/20110323/clip-001.html > css2.1/20110323/dynamic-top-change-001.htm > css2.1/20110323/dynamic-top-change-004.htm > css2.1/t1604-c542-letter-sp-00-b-a.html >+css2.1/20110323/empty-inline-001.htm > css2.1/t1605-c545-txttrans-00-b-ag.html > css2.1/t010403-shand-border-00-c.html > css2.1/t010403-shand-font-00-b.html >@@ -661,13 +669,20 @@ css2.1/t040103-escapes-04-b.html > css2.1/t040103-escapes-05-c.html > css2.1/t040103-escapes-06-b.html > css2.1/t040103-escapes-07-b.html >+css2.1/20110323/eof-001.htm > css2.1/t040103-escapes-08-b.html >+css2.1/20110323/eof-002.htm > css2.1/t040103-ident-00-c.html >+css2.1/20110323/eof-003.htm > css2.1/t040103-ident-01-c.html >+css2.1/20110323/eof-004.htm > css2.1/t040103-ident-02-c.html >+css2.1/20110323/eof-005.htm > css2.1/t040103-ident-03-c.html > css2.1/t040103-ident-04-c.html >+css2.1/20110323/eof-006.htm > css2.1/t040103-ident-05-c.html >+css2.1/20110323/eof-007.htm > css2.1/t040103-ident-06-c.html > css2.1/t040103-ident-07-c.html > css2.1/t040103-ident-08-c.html >@@ -689,29 +704,18 @@ css2.1/t040105-import-01-b.html > css2.1/t040105-import-10-b.html > css2.1/t040109-c17-comments-00-b.html > css2.1/t040109-c17-comments-01-b.html >-css2.1/20110323/empty-inline-001.htm > css2.1/t040302-c61-phys-len-00-b.html > css2.1/t040302-c61-rel-len-00-b-ag.html > css2.1/t040303-c62-percent-00-b-ag.html > css2.1/t040304-c64-uri-00-a-g.html >-css2.1/20110323/eof-001.htm > css2.1/t040306-syntax-01-f.html >-css2.1/20110323/eof-002.htm > css2.1/t040307-syntax-01-b.html >-css2.1/20110323/eof-003.htm > css2.1/t050201-c12-grouping-00-b.html >-css2.1/20110323/eof-004.htm >-css2.1/20110323/eof-005.htm >-css2.1/20110323/eof-006.htm >-css2.1/20110323/eof-007.htm > css2.1/t051103-c21-activ-ln-00-e-i.html > css2.1/t051103-c21-focus-ln-00-e-i.html > css2.1/t051103-c21-hover-ln-00-e-i.html > css2.1/t051103-dom-hover-01-c-io.html > css2.1/t051103-dom-hover-02-c-io.html >-css2.1/t060402-c31-important-00-b.html >-css2.1/t060403-c21-pseu-cls-00-e-i.html >-css2.1/t060403-c21-pseu-id-00-e-i.html > css2.1/20110323/float-non-replaced-height-001.htm > css2.1/20110323/float-non-replaced-width-001.htm > css2.1/20110323/float-non-replaced-width-002.htm >@@ -719,11 +723,13 @@ css2.1/20110323/float-non-replaced-width-003.htm > css2.1/20110323/float-non-replaced-width-004.htm > css2.1/20110323/float-non-replaced-width-005.htm > css2.1/20110323/float-non-replaced-width-006.htm >-css2.1/t090501-c414-flt-00-d.html >-css2.1/t090501-c414-flt-02-d-g.html >+css2.1/t060402-c31-important-00-b.html >+css2.1/t060403-c21-pseu-cls-00-e-i.html >+css2.1/t060403-c21-pseu-id-00-e-i.html > css2.1/20110323/float-non-replaced-width-010.htm > css2.1/20110323/float-non-replaced-width-012.htm > css2.1/20110323/float-replaced-height-001.htm >+css2.1/t090501-c414-flt-00-d.html > css2.1/20110323/float-replaced-height-004.htm > css2.1/20110323/float-replaced-height-005.htm > css2.1/20110323/float-replaced-height-007.htm >@@ -734,6 +740,7 @@ css2.1/20110323/float-replaced-width-004.htm > css2.1/20110323/float-replaced-width-005.htm > css2.1/20110323/float-replaced-width-006.htm > css2.1/20110323/float-replaced-width-011.htm >+css2.1/t090501-c414-flt-02-d-g.html > css2.1/20110323/floats-001.html > css2.1/t100303-c412-blockw-00-d-ag.html > css2.1/t100801-c544-valgn-04-d-agi.html
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194473
: 361607