diff --git a/accessible/html/HTMLListAccessible.cpp b/accessible/html/HTMLListAccessible.cpp index ad403ab55ac6..f3ffd876aa70 100644 --- a/accessible/html/HTMLListAccessible.cpp +++ b/accessible/html/HTMLListAccessible.cpp @@ -42,7 +42,8 @@ HTMLLIAccessible::HTMLLIAccessible(nsIContent* aContent, DocAccessible* aDoc) if (nsBulletFrame* bulletFrame = do_QueryFrame(nsLayoutUtils::GetMarkerFrame(aContent))) { const nsStyleList* styleList = bulletFrame->StyleList(); - if (styleList->GetListStyleImage() || !styleList->mCounterStyle.IsNone()) { + if (!styleList->mListStyleImage.IsNone() || + !styleList->mCounterStyle.IsNone()) { mBullet = new HTMLListBulletAccessible(mContent, mDoc); Document()->BindToDocument(mBullet, nullptr); AppendChild(mBullet); @@ -142,7 +143,7 @@ ENameValueFlag HTMLListBulletAccessible::Name(nsString& aName) const { return eNameOK; } - if (frame->StyleList()->GetListStyleImage()) { + if (!frame->StyleList()->mListStyleImage.IsNone()) { // Bullet is an image, so use default bullet character. const char16_t kDiscCharacter = 0x2022; aName.Assign(kDiscCharacter); diff --git a/devtools/shared/css/generated/properties-db.js b/devtools/shared/css/generated/properties-db.js index 88d8b44449ef..c1d94966fcaa 100644 --- a/devtools/shared/css/generated/properties-db.js +++ b/devtools/shared/css/generated/properties-db.js @@ -7418,8 +7418,21 @@ exports.CSS_PROPERTIES = { "list-style-image", "list-style-type" ], - "supports": [], + "supports": [ + "gradient" + ], "values": [ + "-moz-element", + "-moz-image-rect", + "-moz-linear-gradient", + "-moz-radial-gradient", + "-moz-repeating-linear-gradient", + "-moz-repeating-radial-gradient", + "-webkit-gradient", + "-webkit-linear-gradient", + "-webkit-radial-gradient", + "-webkit-repeating-linear-gradient", + "-webkit-repeating-radial-gradient", "arabic-indic", "armenian", "bengali", @@ -7429,6 +7442,7 @@ exports.CSS_PROPERTIES = { "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", + "conic-gradient", "decimal", "decimal-leading-zero", "devanagari", @@ -7455,6 +7469,7 @@ exports.CSS_PROPERTIES = { "korean-hanja-formal", "korean-hanja-informal", "lao", + "linear-gradient", "lower-alpha", "lower-armenian", "lower-greek", @@ -7467,6 +7482,10 @@ exports.CSS_PROPERTIES = { "oriya", "outside", "persian", + "radial-gradient", + "repeating-conic-gradient", + "repeating-linear-gradient", + "repeating-radial-gradient", "revert", "simp-chinese-formal", "simp-chinese-informal", @@ -7491,11 +7510,30 @@ exports.CSS_PROPERTIES = { "subproperties": [ "list-style-image" ], - "supports": [], + "supports": [ + "gradient" + ], "values": [ + "-moz-element", + "-moz-image-rect", + "-moz-linear-gradient", + "-moz-radial-gradient", + "-moz-repeating-linear-gradient", + "-moz-repeating-radial-gradient", + "-webkit-gradient", + "-webkit-linear-gradient", + "-webkit-radial-gradient", + "-webkit-repeating-linear-gradient", + "-webkit-repeating-radial-gradient", + "conic-gradient", "inherit", "initial", + "linear-gradient", "none", + "radial-gradient", + "repeating-conic-gradient", + "repeating-linear-gradient", + "repeating-radial-gradient", "revert", "unset", "url" diff --git a/layout/generic/nsBlockFrame.cpp b/layout/generic/nsBlockFrame.cpp index 36ca75327343..460747e507f3 100644 --- a/layout/generic/nsBlockFrame.cpp +++ b/layout/generic/nsBlockFrame.cpp @@ -7394,7 +7394,7 @@ bool nsBlockFrame::MarkerIsEmpty() const { "should only care when we have an outside ::marker"); nsIFrame* marker = GetMarker(); const nsStyleList* list = marker->StyleList(); - return list->mCounterStyle.IsNone() && !list->GetListStyleImage() && + return list->mCounterStyle.IsNone() && list->mListStyleImage.IsNone() && marker->StyleContent()->ContentCount() == 0; } diff --git a/layout/generic/nsBulletFrame.cpp b/layout/generic/nsBulletFrame.cpp index 525dc5a18687..da5df79bf060 100644 --- a/layout/generic/nsBulletFrame.cpp +++ b/layout/generic/nsBulletFrame.cpp @@ -23,6 +23,7 @@ #include "mozilla/MathAlgorithms.h" #include "mozilla/PresShell.h" #include "mozilla/SVGImageContext.h" +#include "mozilla/css/ImageLoader.h" #include "mozilla/dom/Document.h" #include "mozilla/gfx/2D.h" #include "mozilla/gfx/PathHelpers.h" @@ -41,6 +42,7 @@ #include "nsGenericHTMLElement.h" #include "nsGkAtoms.h" #include "nsIURI.h" +#include "nsLayoutUtils.h" #include "nsPresContext.h" #ifdef ACCESSIBILITY @@ -51,7 +53,6 @@ using namespace mozilla; using namespace mozilla::gfx; using namespace mozilla::image; using namespace mozilla::layout; -using mozilla::dom::Document; nsIFrame* NS_NewBulletFrame(PresShell* aPresShell, ComputedStyle* aStyle) { return new (aPresShell) nsBulletFrame(aStyle, aPresShell->GetPresContext()); @@ -74,19 +75,6 @@ CounterStyle* nsBulletFrame::ResolveCounterStyle() { StyleList()->mCounterStyle); } -void nsBulletFrame::DestroyFrom(nsIFrame* aDestructRoot, - PostDestroyData& aPostDestroyData) { - // Stop image loading first. - DeregisterAndCancelImageRequest(); - - if (mListener) { - mListener->SetFrame(nullptr); - } - - // Let base class do the rest - nsIFrame::DestroyFrom(aDestructRoot, aPostDestroyData); -} - #ifdef DEBUG_FRAME_DUMP nsresult nsBulletFrame::GetFrameName(nsAString& aResult) const { return MakeFrameName(u"Bullet"_ns, aResult); @@ -100,69 +88,36 @@ bool nsBulletFrame::IsSelfEmpty() { } /* virtual */ -void nsBulletFrame::DidSetComputedStyle(ComputedStyle* aOldComputedStyle) { - nsIFrame::DidSetComputedStyle(aOldComputedStyle); +void nsBulletFrame::DidSetComputedStyle(ComputedStyle* aOldStyle) { + nsIFrame::DidSetComputedStyle(aOldStyle); - imgRequestProxy* newRequest = StyleList()->GetListStyleImage(); - - if (newRequest) { - if (!mListener) { - mListener = new nsBulletListener(); - mListener->SetFrame(this); + css::ImageLoader* loader = PresContext()->Document()->StyleImageLoader(); + imgIRequest* oldListImage = + aOldStyle ? aOldStyle->StyleList()->mListStyleImage.GetImageRequest() + : nullptr; + imgIRequest* newListImage = StyleList()->mListStyleImage.GetImageRequest(); + if (oldListImage != newListImage) { + if (oldListImage && HasImageRequest()) { + loader->DisassociateRequestFromFrame(oldListImage, this); } - - bool needNewRequest = true; - - if (mImageRequest) { - // Reload the image, maybe... - nsCOMPtr oldURI; - mImageRequest->GetURI(getter_AddRefs(oldURI)); - nsCOMPtr newURI; - newRequest->GetURI(getter_AddRefs(newURI)); - if (oldURI && newURI) { - bool same; - newURI->Equals(oldURI, &same); - if (same) { - needNewRequest = false; - } - } + if (newListImage) { + loader->AssociateRequestToFrame( + newListImage, this, css::ImageLoader::REQUEST_REQUIRES_REFLOW); } - - if (needNewRequest) { - RefPtr newRequestClone; - newRequest->SyncClone(mListener, PresContext()->Document(), - getter_AddRefs(newRequestClone)); - - // Deregister the old request. We wait until after Clone is done in case - // the old request and the new request are the same underlying image - // accessed via different URLs. - DeregisterAndCancelImageRequest(); - - // Register the new request. - mImageRequest = std::move(newRequestClone); - RegisterImageRequest(/* aKnownToBeAnimated = */ false); - - // Image bullets can affect the layout of the page, so boost the image - // load priority. - mImageRequest->BoostPriority(imgIRequest::CATEGORY_SIZE_QUERY); - } - } else { - // No image request on the new ComputedStyle. - DeregisterAndCancelImageRequest(); } #ifdef ACCESSIBILITY // Update the list bullet accessible. If old style list isn't available then // no need to update the accessible tree because it's not created yet. - if (aOldComputedStyle) { + if (aOldStyle) { if (nsAccessibilityService* accService = PresShell::GetAccessibilityService()) { - const nsStyleList* oldStyleList = aOldComputedStyle->StyleList(); - bool hadBullet = oldStyleList->GetListStyleImage() || + const nsStyleList* oldStyleList = aOldStyle->StyleList(); + bool hadBullet = !oldStyleList->mListStyleImage.IsNone() || !oldStyleList->mCounterStyle.IsNone(); const nsStyleList* newStyleList = StyleList(); - bool hasBullet = newStyleList->GetListStyleImage() || + bool hasBullet = !newStyleList->mListStyleImage.IsNone() || !newStyleList->mCounterStyle.IsNone(); if (hadBullet != hasBullet) { @@ -195,11 +150,13 @@ class nsDisplayBulletGeometry class BulletRenderer final { public: - BulletRenderer(imgIContainer* image, const nsRect& dest) - : mImage(image), - mDest(dest), + BulletRenderer(nsIFrame* aFrame, const StyleImage& aImage, + const nsRect& aDest) + : mDest(aDest), mColor(NS_RGBA(0, 0, 0, 0)), mListStyleType(NS_STYLE_LIST_STYLE_NONE) { + mImageRenderer.emplace(aFrame, &aImage, 0); + mImageRenderer->SetPreferredSize({}, aDest.Size()); MOZ_ASSERT(IsImageType()); } @@ -235,8 +192,16 @@ class BulletRenderer final { const nsRect& aDirtyRect, uint32_t aFlags, bool aDisableSubpixelAA, nsIFrame* aFrame); - bool IsImageType() const { - return mListStyleType == NS_STYLE_LIST_STYLE_NONE && mImage; + bool IsImageType() const { return !!mImageRenderer; } + + bool PrepareImage() { + MOZ_ASSERT(IsImageType()); + return mImageRenderer->PrepareImage(); + } + + ImgDrawResult PrepareResult() const { + MOZ_ASSERT(IsImageType()); + return mImageRenderer->PrepareResult(); } bool IsPathType() const { @@ -260,9 +225,6 @@ class BulletRenderer final { void PaintTextToContext(nsIFrame* aFrame, gfxContext* aCtx, bool aDisableSubpixelAA); - bool IsImageContainerAvailable(layers::LayerManager* aManager, - uint32_t aFlags); - private: ImgDrawResult CreateWebRenderCommandsForImage( nsDisplayItem* aItem, wr::DisplayListBuilder& aBuilder, @@ -286,9 +248,9 @@ class BulletRenderer final { nsDisplayListBuilder* aDisplayListBuilder); private: - // mImage and mDest are the properties for list-style-image. - // mImage is the image content and mDest is the image position. - RefPtr mImage; + Maybe mImageRenderer; + + // The position and size of the image bullet. nsRect mDest; // Some bullet types are stored as a rect (in device pixels) instead of a Path @@ -347,11 +309,10 @@ ImgDrawResult BulletRenderer::Paint(gfxContext& aRenderingContext, nsPoint aPt, const nsRect& aDirtyRect, uint32_t aFlags, bool aDisableSubpixelAA, nsIFrame* aFrame) { if (IsImageType()) { - SamplingFilter filter = nsLayoutUtils::GetSamplingFilterForFrame(aFrame); - return nsLayoutUtils::DrawSingleImage( - aRenderingContext, aFrame->PresContext(), mImage, filter, mDest, - aDirtyRect, - /* no SVGImageContext */ Nothing(), aFlags); + return mImageRenderer->DrawLayer(aFrame->PresContext(), aRenderingContext, + mDest, mDest, nsPoint(), aDirtyRect, + mDest.Size(), + /* aOpacity = */ 1.0f); } if (IsPathType()) { @@ -414,13 +375,6 @@ void BulletRenderer::PaintTextToContext(nsIFrame* aFrame, gfxContext* aCtx, mText.Length(), mPoint); } -bool BulletRenderer::IsImageContainerAvailable(layers::LayerManager* aManager, - uint32_t aFlags) { - MOZ_ASSERT(IsImageType()); - - return mImage->IsImageContainerAvailable(aManager, aFlags); -} - ImgDrawResult BulletRenderer::CreateWebRenderCommandsForImage( nsDisplayItem* aItem, wr::DisplayListBuilder& aBuilder, wr::IpcResourceUpdateQueue& aResources, @@ -428,43 +382,10 @@ ImgDrawResult BulletRenderer::CreateWebRenderCommandsForImage( mozilla::layers::RenderRootStateManager* aManager, nsDisplayListBuilder* aDisplayListBuilder) { MOZ_RELEASE_ASSERT(IsImageType()); - MOZ_RELEASE_ASSERT(mImage); - - uint32_t flags = aDisplayListBuilder->GetImageDecodeFlags(); - - const int32_t appUnitsPerDevPixel = - aItem->Frame()->PresContext()->AppUnitsPerDevPixel(); - LayoutDeviceRect destRect = - LayoutDeviceRect::FromAppUnits(mDest, appUnitsPerDevPixel); - - Maybe svgContext; - gfx::IntSize decodeSize = - nsLayoutUtils::ComputeImageContainerDrawingParameters( - mImage, aItem->Frame(), destRect, aSc, flags, svgContext); - - RefPtr container; - ImgDrawResult drawResult = mImage->GetImageContainerAtSize( - aManager->LayerManager(), decodeSize, svgContext, flags, - getter_AddRefs(container)); - if (!container) { - return drawResult; - } - - mozilla::wr::ImageRendering rendering = wr::ToImageRendering( - nsLayoutUtils::GetSamplingFilterForFrame(aItem->Frame())); - gfx::IntSize size; - Maybe key = aManager->CommandBuilder().CreateImageKey( - aItem, container, aBuilder, aResources, rendering, aSc, size, Nothing()); - if (key.isNothing()) { - return drawResult; - } - - wr::LayoutRect dest = wr::ToLayoutRect(destRect); - - aBuilder.PushImage(dest, dest, !aItem->BackfaceIsHidden(), rendering, - key.value()); - - return drawResult; + return mImageRenderer->BuildWebRenderDisplayItemsForLayer( + aItem->Frame()->PresContext(), aBuilder, aResources, aSc, aManager, aItem, + mDest, mDest, nsPoint(), mDest, mDest.Size(), + /* aOpacity = */ 1.0f); } bool BulletRenderer::CreateWebRenderCommandsForPath( @@ -608,18 +529,20 @@ bool nsDisplayBullet::CreateWebRenderCommands( // (non-trivial refactor of all this code) RefPtr screenRefCtx = gfxContext::CreateOrNull( gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget().get()); + + ImgDrawResult drawResult; Maybe br = static_cast(mFrame)->CreateBulletRenderer( - *screenRefCtx, ToReferenceFrame()); + *screenRefCtx, ToReferenceFrame(), &drawResult); - if (!br) { - return false; - } + if (br) { + ImgDrawResult commandBuilderResult = br->CreateWebRenderCommands( + this, aBuilder, aResources, aSc, aManager, aDisplayListBuilder); + if (commandBuilderResult == ImgDrawResult::NOT_SUPPORTED) { + return false; + } - ImgDrawResult drawResult = br->CreateWebRenderCommands( - this, aBuilder, aResources, aSc, aManager, aDisplayListBuilder); - if (drawResult == ImgDrawResult::NOT_SUPPORTED) { - return false; + drawResult &= commandBuilderResult; } nsDisplayBulletGeometry::UpdateDrawResult(this, drawResult); @@ -648,37 +571,26 @@ void nsBulletFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, } Maybe nsBulletFrame::CreateBulletRenderer( - gfxContext& aRenderingContext, nsPoint aPt) { - const nsStyleList* myList = StyleList(); + gfxContext& aRenderingContext, nsPoint aPt, ImgDrawResult* aDrawResult) { + *aDrawResult = ImgDrawResult::SUCCESS; + CounterStyle* listStyleType = ResolveCounterStyle(); nsMargin padding = mPadding.GetPhysicalMargin(GetWritingMode()); - - if (myList->GetListStyleImage() && mImageRequest) { - uint32_t status; - mImageRequest->GetImageStatus(&status); - if (!(status & imgIRequest::STATUS_ERROR)) { - if (status & imgIRequest::STATUS_LOAD_COMPLETE) { - nsCOMPtr imageCon; - mImageRequest->GetImage(getter_AddRefs(imageCon)); - if (imageCon) { - imageCon = nsLayoutUtils::OrientImage( - imageCon, StyleVisibility()->mImageOrientation); - nsRect dest(padding.left, padding.top, - mRect.width - (padding.left + padding.right), - mRect.height - (padding.top + padding.bottom)); - BulletRenderer br(imageCon, dest + aPt); - return Some(br); - } - } else { - // Boost the load priority further now that we know we want to display - // the bullet image. - mImageRequest->BoostPriority(imgIRequest::CATEGORY_DISPLAY); - } + if (!StyleList()->mListStyleImage.IsNone()) { + nsRect dest(padding.left, padding.top, + mRect.width - (padding.left + padding.right), + mRect.height - (padding.top + padding.bottom)); + BulletRenderer br(this, StyleList()->mListStyleImage, dest + aPt); + if (br.PrepareImage()) { + return Some(br); + } + *aDrawResult = br.PrepareResult(); + if (auto* request = StyleList()->mListStyleImage.GetImageRequest()) { + request->BoostPriority(imgIRequest::CATEGORY_DISPLAY); } } nscolor color = nsLayoutUtils::GetColor(this, &nsStyleText::mColor); - DrawTarget* drawTarget = aRenderingContext.GetDrawTarget(); int32_t appUnitsPerDevPixel = PresContext()->AppUnitsPerDevPixel(); @@ -802,14 +714,16 @@ ImgDrawResult nsBulletFrame::PaintBullet(gfxContext& aRenderingContext, nsPoint aPt, const nsRect& aDirtyRect, uint32_t aFlags, bool aDisableSubpixelAA) { - Maybe br = CreateBulletRenderer(aRenderingContext, aPt); + ImgDrawResult drawResult; + Maybe br = + CreateBulletRenderer(aRenderingContext, aPt, &drawResult); if (!br) { - return ImgDrawResult::SUCCESS; + return drawResult; } - return br->Paint(aRenderingContext, aPt, aDirtyRect, aFlags, - aDisableSubpixelAA, this); + return drawResult & br->Paint(aRenderingContext, aPt, aDirtyRect, aFlags, + aDisableSubpixelAA, this); } void nsBulletFrame::GetListItemText(CounterStyle* aStyle, @@ -861,40 +775,30 @@ void nsBulletFrame::GetDesiredSize(nsPresContext* aCX, aPadding->SizeTo(wm, 0, 0, 0, 0); LogicalSize finalSize(wm); - const nsStyleList* myList = StyleList(); nscoord ascent; RefPtr fm = nsLayoutUtils::GetFontMetricsForFrame(this, aFontSizeInflation); RemoveStateBits(BULLET_FRAME_IMAGE_LOADING); - if (myList->GetListStyleImage() && mImageRequest) { - uint32_t status; - mImageRequest->GetImageStatus(&status); - if (status & imgIRequest::STATUS_SIZE_AVAILABLE && - !(status & imgIRequest::STATUS_ERROR)) { - // auto size the image - finalSize.ISize(wm) = mIntrinsicSize.ISize(wm); - aMetrics.SetBlockStartAscent(finalSize.BSize(wm) = - mIntrinsicSize.BSize(wm)); - aMetrics.SetSize(wm, finalSize); + if (RefPtr image = GetImage()) { + int32_t w = 0; + int32_t h = 0; + image->GetWidth(&w); + image->GetHeight(&h); + LogicalSize size(GetWritingMode(), CSSPixel::ToAppUnits(CSSIntSize(w, h))); + // auto size the image + finalSize.ISize(wm) = size.ISize(wm); + finalSize.BSize(wm) = size.BSize(wm); + aMetrics.SetBlockStartAscent(size.BSize(wm)); + aMetrics.SetSize(wm, finalSize); - AppendSpacingToPadding(fm, aPadding); + AppendSpacingToPadding(fm, aPadding); - AddStateBits(BULLET_FRAME_IMAGE_LOADING); - - return; - } + AddStateBits(BULLET_FRAME_IMAGE_LOADING); + return; } - // If we're getting our desired size and don't have an image, reset - // mIntrinsicSize to (0,0). Otherwise, if we used to have an image, it - // changed, and the new one is coming in, but we're reflowing before it's - // fully there, we'll end up with mIntrinsicSize not matching our size, but - // won't trigger a reflow in OnStartContainer (because mIntrinsicSize will - // match the image size). - mIntrinsicSize.SizeTo(wm, 0, 0); - nscoord bulletSize; nsAutoString text; @@ -904,7 +808,6 @@ void nsBulletFrame::GetDesiredSize(nsPresContext* aCX, finalSize.ISize(wm) = finalSize.BSize(wm) = 0; aMetrics.SetBlockStartAscent(0); break; - case NS_STYLE_LIST_STYLE_DISC: case NS_STYLE_LIST_STYLE_CIRCLE: case NS_STYLE_LIST_STYLE_SQUARE: { @@ -1014,7 +917,8 @@ static inline bool IsIgnoreable(const nsIFrame* aFrame, nscoord aISize) { return false; } auto listStyle = aFrame->StyleList(); - return listStyle->mCounterStyle.IsNone() && !listStyle->GetListStyleImage(); + return listStyle->mCounterStyle.IsNone() && + listStyle->mListStyleImage.IsNone(); } /* virtual */ @@ -1037,126 +941,6 @@ void nsBulletFrame::AddInlinePrefISize(gfxContext* aRenderingContext, } } -void nsBulletFrame::Notify(imgIRequest* aRequest, int32_t aType, - const nsIntRect* aData) { - if (aType == imgINotificationObserver::SIZE_AVAILABLE) { - nsCOMPtr image; - aRequest->GetImage(getter_AddRefs(image)); - return OnSizeAvailable(aRequest, image); - } - - if (aType == imgINotificationObserver::FRAME_UPDATE) { - // The image has changed. - // Invalidate the entire content area. Maybe it's not optimal but it's - // simple and always correct, and I'll be a stunned mullet if it ever - // matters for performance - InvalidateFrame(); - } - - if (aType == imgINotificationObserver::IS_ANIMATED) { - // Register the image request with the refresh driver now that we know it's - // animated. - if (aRequest == mImageRequest) { - RegisterImageRequest(/* aKnownToBeAnimated = */ true); - } - } - - if (aType == imgINotificationObserver::LOAD_COMPLETE) { - // Unconditionally start decoding for now. - // XXX(seth): We eventually want to decide whether to do this based on - // visibility. We should get that for free from bug 1091236. - nsCOMPtr container; - aRequest->GetImage(getter_AddRefs(container)); - if (container) { - // Retrieve the intrinsic size of the image. - int32_t width = 0; - int32_t height = 0; - container->GetWidth(&width); - container->GetHeight(&height); - - // Request a decode at that size. - container->RequestDecodeForSize( - IntSize(width, height), imgIContainer::DECODE_FLAGS_DEFAULT | - imgIContainer::FLAG_HIGH_QUALITY_SCALING); - } - - InvalidateFrame(); - } - - if (aType == imgINotificationObserver::DECODE_COMPLETE) { - if (Document* parent = GetOurCurrentDoc()) { - nsCOMPtr container; - aRequest->GetImage(getter_AddRefs(container)); - if (container) { - container->PropagateUseCounters(parent); - } - } - } -} - -Document* nsBulletFrame::GetOurCurrentDoc() const { - nsIContent* parentContent = GetParent()->GetContent(); - return parentContent ? parentContent->GetComposedDoc() : nullptr; -} - -void nsBulletFrame::OnSizeAvailable(imgIRequest* aRequest, - imgIContainer* aImage) { - if (!aImage) return; - if (!aRequest) return; - - uint32_t status; - aRequest->GetImageStatus(&status); - if (status & imgIRequest::STATUS_ERROR) { - return; - } - - nscoord w, h; - aImage->GetWidth(&w); - aImage->GetHeight(&h); - - nsPresContext* presContext = PresContext(); - - LogicalSize newsize(GetWritingMode(), - nsSize(nsPresContext::CSSPixelsToAppUnits(w), - nsPresContext::CSSPixelsToAppUnits(h))); - - if (mIntrinsicSize != newsize) { - mIntrinsicSize = newsize; - - // Now that the size is available (or an error occurred), trigger - // a reflow of the bullet frame. - mozilla::PresShell* presShell = presContext->GetPresShell(); - if (presShell) { - presShell->FrameNeedsReflow(this, IntrinsicDirty::StyleChange, - NS_FRAME_IS_DIRTY); - } - } - - // Handle animations - aImage->SetAnimationMode(presContext->ImageAnimationMode()); - // Ensure the animation (if any) is started. Note: There is no - // corresponding call to Decrement for this. This Increment will be - // 'cleaned up' by the Request when it is destroyed, but only then. - aRequest->IncrementAnimationConsumers(); -} - -void nsBulletFrame::GetLoadGroup(nsPresContext* aPresContext, - nsILoadGroup** aLoadGroup) { - if (!aPresContext) return; - - MOZ_ASSERT(nullptr != aLoadGroup, "null OUT parameter pointer"); - - mozilla::PresShell* presShell = aPresContext->GetPresShell(); - if (!presShell) { - return; - } - - Document* doc = presShell->GetDocument(); - if (!doc) return; - - *aLoadGroup = doc->GetDocumentLoadGroup().take(); -} - float nsBulletFrame::GetFontSizeInflation() const { if (!HasFontSizeInflation()) { return 1.0f; @@ -1178,12 +962,11 @@ void nsBulletFrame::SetFontSizeInflation(float aInflation) { } already_AddRefed nsBulletFrame::GetImage() const { - if (mImageRequest && StyleList()->GetListStyleImage()) { + if (auto* request = StyleList()->mListStyleImage.GetImageRequest()) { nsCOMPtr imageCon; - mImageRequest->GetImage(getter_AddRefs(imageCon)); + request->GetImage(getter_AddRefs(imageCon)); return imageCon.forget(); } - return nullptr; } @@ -1264,42 +1047,6 @@ void nsBulletFrame::GetSpokenText(nsAString& aText) { } #endif -void nsBulletFrame::RegisterImageRequest(bool aKnownToBeAnimated) { - if (mImageRequest) { - // mRequestRegistered is a bitfield; unpack it temporarily so we can take - // the address. - bool isRequestRegistered = mRequestRegistered; - - if (aKnownToBeAnimated) { - nsLayoutUtils::RegisterImageRequest(PresContext(), mImageRequest, - &isRequestRegistered); - } else { - nsLayoutUtils::RegisterImageRequestIfAnimated( - PresContext(), mImageRequest, &isRequestRegistered); - } - - mRequestRegistered = isRequestRegistered; - } -} - -void nsBulletFrame::DeregisterAndCancelImageRequest() { - if (mImageRequest) { - // mRequestRegistered is a bitfield; unpack it temporarily so we can take - // the address. - bool isRequestRegistered = mRequestRegistered; - - // Deregister our image request from the refresh driver. - nsLayoutUtils::DeregisterImageRequest(PresContext(), mImageRequest, - &isRequestRegistered); - - mRequestRegistered = isRequestRegistered; - - // Cancel the image request and forget about it. - mImageRequest->CancelAndForgetObserver(NS_ERROR_FAILURE); - mImageRequest = nullptr; - } -} - void nsBulletFrame::SetOrdinal(int32_t aOrdinal, bool aNotify) { if (mOrdinal == aOrdinal) { return; @@ -1310,17 +1057,3 @@ void nsBulletFrame::SetOrdinal(int32_t aOrdinal, bool aNotify) { NS_FRAME_IS_DIRTY); } } - -NS_IMPL_ISUPPORTS(nsBulletListener, imgINotificationObserver) - -nsBulletListener::nsBulletListener() : mFrame(nullptr) {} - -nsBulletListener::~nsBulletListener() = default; - -void nsBulletListener::Notify(imgIRequest* aRequest, int32_t aType, - const nsIntRect* aData) { - if (!mFrame) { - return; - } - return mFrame->Notify(aRequest, aType, aData); -} diff --git a/layout/generic/nsBulletFrame.h b/layout/generic/nsBulletFrame.h index 4f9078948af1..63f287b1159d 100644 --- a/layout/generic/nsBulletFrame.h +++ b/layout/generic/nsBulletFrame.h @@ -12,32 +12,11 @@ #include "mozilla/Attributes.h" #include "nsIFrame.h" -#include "imgIContainer.h" -#include "imgINotificationObserver.h" - class imgIContainer; -class imgRequestProxy; - class nsBulletFrame; class BulletRenderer; - class nsFontMetrics; -class nsBulletListener final : public imgINotificationObserver { - public: - nsBulletListener(); - - NS_DECL_ISUPPORTS - NS_DECL_IMGINOTIFICATIONOBSERVER - - void SetFrame(nsBulletFrame* frame) { mFrame = frame; } - - private: - virtual ~nsBulletListener(); - - nsBulletFrame* mFrame; -}; - /** * A simple class that manages the layout and rendering of html bullets. * This class also supports the CSS list-style properties. @@ -52,36 +31,26 @@ class nsBulletFrame final : public nsIFrame { #endif explicit nsBulletFrame(ComputedStyle* aStyle, nsPresContext* aPresContext) - : nsIFrame(aStyle, aPresContext, kClassID), - mPadding(GetWritingMode()), - mIntrinsicSize(GetWritingMode()), - mRequestRegistered(false) {} + : nsIFrame(aStyle, aPresContext, kClassID), mPadding(GetWritingMode()) {} virtual ~nsBulletFrame(); - void Notify(imgIRequest* aRequest, int32_t aType, const nsIntRect* aData); - // nsIFrame - virtual void DestroyFrom(nsIFrame* aDestructRoot, - PostDestroyData& aPostDestroyData) override; - virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, - const nsDisplayListSet& aLists) override; - virtual void DidSetComputedStyle(ComputedStyle* aOldComputedStyle) override; + void BuildDisplayList(nsDisplayListBuilder*, + const nsDisplayListSet&) override; + void DidSetComputedStyle(ComputedStyle* aOldStyle) override; #ifdef DEBUG_FRAME_DUMP - virtual nsresult GetFrameName(nsAString& aResult) const override; + nsresult GetFrameName(nsAString& aResult) const override; #endif - virtual void Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics, - const ReflowInput& aReflowInput, - nsReflowStatus& aStatus) override; - virtual nscoord GetMinISize(gfxContext* aRenderingContext) override; - virtual nscoord GetPrefISize(gfxContext* aRenderingContext) override; - void AddInlineMinISize(gfxContext* aRenderingContext, - nsIFrame::InlineMinISizeData* aData) override; - void AddInlinePrefISize(gfxContext* aRenderingContext, - nsIFrame::InlinePrefISizeData* aData) override; + void Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics, + const ReflowInput&, nsReflowStatus&) override; + nscoord GetMinISize(gfxContext*) override; + nscoord GetPrefISize(gfxContext*) override; + void AddInlineMinISize(gfxContext*, nsIFrame::InlineMinISizeData*) override; + void AddInlinePrefISize(gfxContext*, nsIFrame::InlinePrefISizeData*) override; - virtual bool IsFrameOfType(uint32_t aFlags) const override { + bool IsFrameOfType(uint32_t aFlags) const override { if (aFlags & (eSupportsCSSTransforms | eSupportsContainLayoutAndPaint)) { return false; } @@ -99,20 +68,20 @@ class nsBulletFrame final : public nsIFrame { #endif Maybe CreateBulletRenderer(gfxContext& aRenderingContext, - nsPoint aPt); + nsPoint aPt, + ImgDrawResult* aOutDrawResult); ImgDrawResult PaintBullet(gfxContext& aRenderingContext, nsPoint aPt, const nsRect& aDirtyRect, uint32_t aFlags, bool aDisableSubpixelAA); - virtual bool IsEmpty() override; - virtual bool IsSelfEmpty() override; + bool IsEmpty() override; + bool IsSelfEmpty() override; // XXXmats note that this method returns a non-standard baseline that includes // the ::marker block-start margin. New code should probably use // GetNaturalBaselineBOffset instead, which returns a normal baseline offset // as documented in nsIFrame.h. - virtual nscoord GetLogicalBaseline( - mozilla::WritingMode aWritingMode) const override; + nscoord GetLogicalBaseline(mozilla::WritingMode aWritingMode) const override; bool GetNaturalBaselineBOffset(mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup, @@ -130,8 +99,6 @@ class nsBulletFrame final : public nsIFrame { already_AddRefed GetImage() const; protected: - void OnSizeAvailable(imgIRequest* aRequest, imgIContainer* aImage); - void AppendSpacingToPadding(nsFontMetrics* aFontMetrics, mozilla::LogicalMargin* aPadding); void GetDesiredSize(nsPresContext* aPresContext, @@ -139,27 +106,14 @@ class nsBulletFrame final : public nsIFrame { float aFontSizeInflation, mozilla::LogicalMargin* aPadding); - void GetLoadGroup(nsPresContext* aPresContext, nsILoadGroup** aLoadGroup); - mozilla::dom::Document* GetOurCurrentDoc() const; - mozilla::LogicalMargin mPadding; - RefPtr mImageRequest; - RefPtr mListener; - - mozilla::LogicalSize mIntrinsicSize; private: mozilla::CounterStyle* ResolveCounterStyle(); nscoord GetListStyleAscent() const; - void RegisterImageRequest(bool aKnownToBeAnimated); - void DeregisterAndCancelImageRequest(); // Requires being set via SetOrdinal. int32_t mOrdinal = 0; - - // This is a boolean flag indicating whether or not the current image request - // has been registered with the refresh driver. - bool mRequestRegistered : 1; }; #endif /* nsBulletFrame_h___ */ diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp index 29a36a04d205..96bbf6bc5e36 100644 --- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -603,7 +603,7 @@ nsChangeHint nsStyleOutline::CalcDifference( nsStyleList::nsStyleList(const Document& aDocument) : mListStylePosition(NS_STYLE_LIST_STYLE_POSITION_OUTSIDE), mQuotes(StyleQuotes::Auto()), - mListStyleImage(StyleImageUrlOrNone::None()), + mListStyleImage(StyleImage::None()), mImageRegion(StyleClipRectOrAuto::Auto()), mMozListReversed(StyleMozListReversed::False) { MOZ_COUNT_CTOR(nsStyleList); @@ -627,14 +627,8 @@ nsStyleList::nsStyleList(const nsStyleList& aSource) void nsStyleList::TriggerImageLoads(Document& aDocument, const nsStyleList* aOldStyle) { MOZ_ASSERT(NS_IsMainThread()); - - if (mListStyleImage.IsUrl() && !mListStyleImage.AsUrl().IsImageResolved()) { - auto* oldUrl = aOldStyle && aOldStyle->mListStyleImage.IsUrl() - ? &aOldStyle->mListStyleImage.AsUrl() - : nullptr; - const_cast(mListStyleImage.AsUrl()) - .ResolveImage(aDocument, oldUrl); - } + mListStyleImage.ResolveImage( + aDocument, aOldStyle ? &aOldStyle->mListStyleImage : nullptr); } nsChangeHint nsStyleList::CalcDifference( diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h index 88b88e7312f7..3ac40a4309b0 100644 --- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h @@ -672,11 +672,6 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleList { nsChangeHint CalcDifference(const nsStyleList& aNewData, const nsStyleDisplay& aOldDisplay) const; - imgRequestProxy* GetListStyleImage() const { - return mListStyleImage.IsUrl() ? mListStyleImage.AsUrl().GetImage() - : nullptr; - } - nsRect GetImageRegion() const { if (!mImageRegion.IsRect()) { return nsRect(); @@ -690,7 +685,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleList { mozilla::CounterStylePtr mCounterStyle; mozilla::StyleQuotes mQuotes; - mozilla::StyleImageUrlOrNone mListStyleImage; + mozilla::StyleImage mListStyleImage; // the rect to use within an image. mozilla::StyleClipRectOrAuto mImageRegion; diff --git a/layout/style/test/property_database.js b/layout/style/test/property_database.js index 8c360f86f58f..2397ef058bd6 100644 --- a/layout/style/test/property_database.js +++ b/layout/style/test/property_database.js @@ -6413,8 +6413,11 @@ var gCSSProperties = { "url('data:text/plain,\\\"')", 'url("data:text/plain,\\\'")', "url(data:text/plain,\\\\)", - ], - invalid_values: [], + ].concat(validNonUrlImageValues), + invalid_values: ["url('border.png') url('border.png')"].concat( + invalidNonUrlImageValues + ), + unbalanced_values: [].concat(unbalancedGradientAndElementValues), }, "list-style-position": { domProp: "listStylePosition", diff --git a/layout/xul/nsImageBoxFrame.cpp b/layout/xul/nsImageBoxFrame.cpp index a794b089695f..17d1b357c336 100644 --- a/layout/xul/nsImageBoxFrame.cpp +++ b/layout/xul/nsImageBoxFrame.cpp @@ -612,8 +612,7 @@ imgRequestProxy* nsImageBoxFrame::GetRequestFromStyle() { return nullptr; } } - - return StyleList()->GetListStyleImage(); + return StyleList()->mListStyleImage.GetImageRequest(); } /* virtual */ diff --git a/layout/xul/tree/nsTreeBodyFrame.cpp b/layout/xul/tree/nsTreeBodyFrame.cpp index 2656d865ffa3..0a9ea6cca312 100644 --- a/layout/xul/tree/nsTreeBodyFrame.cpp +++ b/layout/xul/tree/nsTreeBodyFrame.cpp @@ -1862,7 +1862,8 @@ nsresult nsTreeBodyFrame::GetImage(int32_t aRowIndex, nsTreeColumn* aCol, } else { // Obtain the URL from the ComputedStyle. aAllowImageRegions = true; - styleRequest = aComputedStyle->StyleList()->GetListStyleImage(); + styleRequest = + aComputedStyle->StyleList()->mListStyleImage.GetImageRequest(); if (!styleRequest) return NS_OK; nsCOMPtr uri; styleRequest->GetURI(getter_AddRefs(uri)); diff --git a/servo/components/style/properties/longhands/list.mako.rs b/servo/components/style/properties/longhands/list.mako.rs index 202c7839d695..9a8b39328f16 100644 --- a/servo/components/style/properties/longhands/list.mako.rs +++ b/servo/components/style/properties/longhands/list.mako.rs @@ -52,10 +52,10 @@ ${helpers.single_keyword( ${helpers.predefined_type( "list-style-image", - "url::ImageUrlOrNone", + "Image", engines="gecko servo-2013", - initial_value="computed::url::ImageUrlOrNone::none()", - initial_specified_value="specified::url::ImageUrlOrNone::none()", + initial_value="computed::Image::None", + initial_specified_value="specified::Image::None", animation_value_type="discrete", spec="https://drafts.csswg.org/css-lists/#propdef-list-style-image", servo_restyle_damage="rebuild_and_reflow", diff --git a/servo/components/style/properties/shorthands/list.mako.rs b/servo/components/style/properties/shorthands/list.mako.rs index 0b5a24df98fe..99c00bbd58a9 100644 --- a/servo/components/style/properties/shorthands/list.mako.rs +++ b/servo/components/style/properties/shorthands/list.mako.rs @@ -10,7 +10,7 @@ derive_serialize="True" spec="https://drafts.csswg.org/css-lists/#propdef-list-style"> use crate::properties::longhands::{list_style_image, list_style_position, list_style_type}; - use crate::values::specified::url::ImageUrlOrNone; + use crate::values::specified::Image; pub fn parse_value<'i, 't>( context: &ParserContext, @@ -69,7 +69,7 @@ (true, 2, None, None) => { Ok(expanded! { list_style_position: position, - list_style_image: ImageUrlOrNone::none(), + list_style_image: Image::None, list_style_type: ListStyleType::None, }) } @@ -83,14 +83,14 @@ (true, 1, Some(list_style_type), None) => { Ok(expanded! { list_style_position: position, - list_style_image: ImageUrlOrNone::none(), + list_style_image: Image::None, list_style_type: list_style_type, }) } (true, 1, None, None) => { Ok(expanded! { list_style_position: position, - list_style_image: ImageUrlOrNone::none(), + list_style_image: Image::None, list_style_type: ListStyleType::None, }) } diff --git a/servo/components/style/values/computed/url.rs b/servo/components/style/values/computed/url.rs index 4815281a3bf8..9f0d8f5bb3e0 100644 --- a/servo/components/style/values/computed/url.rs +++ b/servo/components/style/values/computed/url.rs @@ -13,6 +13,3 @@ pub use crate::servo::url::{ComputedImageUrl, ComputedUrl}; /// Computed | pub type UrlOrNone = GenericUrlOrNone; - -/// Computed image | -pub type ImageUrlOrNone = GenericUrlOrNone; diff --git a/servo/components/style/values/specified/url.rs b/servo/components/style/values/specified/url.rs index b0a69b362d8d..17ecbe0d5e84 100644 --- a/servo/components/style/values/specified/url.rs +++ b/servo/components/style/values/specified/url.rs @@ -13,6 +13,3 @@ pub use crate::servo::url::{SpecifiedImageUrl, SpecifiedUrl}; /// Specified | pub type UrlOrNone = GenericUrlOrNone; - -/// Specified image | -pub type ImageUrlOrNone = GenericUrlOrNone; diff --git a/servo/ports/geckolib/cbindgen.toml b/servo/ports/geckolib/cbindgen.toml index b8ae8c9778a6..0a8de9372302 100644 --- a/servo/ports/geckolib/cbindgen.toml +++ b/servo/ports/geckolib/cbindgen.toml @@ -177,7 +177,6 @@ include = [ "ComputedUrl", "ComputedImageUrl", "UrlOrNone", - "ImageUrlOrNone", "Filter", "Gradient", "GridTemplateAreas", diff --git a/servo/tests/unit/style/properties/serialization.rs b/servo/tests/unit/style/properties/serialization.rs index c9730b80c41b..fe1d15815394 100644 --- a/servo/tests/unit/style/properties/serialization.rs +++ b/servo/tests/unit/style/properties/serialization.rs @@ -459,34 +459,6 @@ mod shorthand_serialization { } } - mod list_style { - use style::properties::longhands::list_style_position::SpecifiedValue as ListStylePosition; - use style::properties::longhands::list_style_type::SpecifiedValue as ListStyleType; - use style::values::generics::url::UrlOrNone as ImageUrlOrNone; - use super::*; - - #[test] - fn list_style_should_show_all_properties_when_values_are_set() { - let mut properties = Vec::new(); - - let position = ListStylePosition::Inside; - let image = ImageUrlOrNone::Url(SpecifiedUrl::new_for_testing("http://servo/test.png")); - let style_type = ListStyleType::Disc; - - properties.push(PropertyDeclaration::ListStylePosition(position)); - - #[cfg(feature = "gecko")] - properties.push(PropertyDeclaration::ListStyleImage(Box::new(image))); - #[cfg(not(feature = "gecko"))] - properties.push(PropertyDeclaration::ListStyleImage(image)); - - properties.push(PropertyDeclaration::ListStyleType(style_type)); - - let serialization = shorthand_properties_to_string(properties); - assert_eq!(serialization, "list-style: inside url(\"http://servo/test.png\") disc;"); - } - } - mod background { use super::*; diff --git a/testing/web-platform/meta/css/css-lists/animations/list-style-image-interpolation.html.ini b/testing/web-platform/meta/css/css-lists/animations/list-style-image-interpolation.html.ini index abaf54fa8ec8..e85914aed2b0 100644 --- a/testing/web-platform/meta/css/css-lists/animations/list-style-image-interpolation.html.ini +++ b/testing/web-platform/meta/css/css-lists/animations/list-style-image-interpolation.html.ini @@ -2,16 +2,6 @@ [CSS Transitions: property from [inherit\] to [url(../resources/stripes-20.png)\] at (0) should be [url(../resources/blue-20.png)\]] expected: FAIL - [CSS Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0) should be [url(../resources/green-20.png)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Web Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (-0.3) should be [url(../resources/green-20.png)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from neutral to [url(../resources/stripes-20.png)\] at (0.3) should be [url(../resources/green-20.png)\]] expected: FAIL @@ -21,90 +11,29 @@ [CSS Transitions with transition: all: property from [url(../resources/green-20.png)\] to [url(../resources/stripes-20.png)\] at (-0.3) should be [url(../resources/green-20.png)\]] expected: FAIL - [CSS Transitions with transition: all: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [inherit\] to [url(../resources/stripes-20.png)\] at (0.3) should be [url(../resources/blue-20.png)\]] expected: FAIL - - [CSS Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.3) should be [url(../resources/green-20.png)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [initial\] to [url(../resources/stripes-20.png)\] at (-0.3) should be [none\]] expected: FAIL [CSS Transitions: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.3) should be [url(../resources/green-20.png)\]] expected: FAIL - [CSS Transitions with transition: all: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Transitions: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [url(../resources/green-20.png)\] to [url(../resources/stripes-20.png)\] at (0) should be [url(../resources/green-20.png)\]] expected: FAIL - [CSS Transitions: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Web Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0) should be [url(../resources/green-20.png)\]] expected: FAIL - [CSS Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Web Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0) should be [linear-gradient(-45deg, red, yellow)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [none\] to [url(../resources/stripes-20.png)\] at (0.3) should be [none\]] expected: FAIL - [Web Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [initial\] to [url(../resources/stripes-20.png)\] at (0) should be [none\]] expected: FAIL [CSS Transitions: property from [initial\] to [url(../resources/stripes-20.png)\] at (0.3) should be [none\]] expected: FAIL - [Web Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0) should be [linear-gradient(-45deg, red, yellow)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0) should be [linear-gradient(-45deg, red, yellow)\]] expected: FAIL @@ -117,42 +46,12 @@ [CSS Transitions: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0.3) should be [linear-gradient(-45deg, red, yellow)\]] expected: FAIL - [Web Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0.3) should be [linear-gradient(-45deg, red, yellow)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from neutral to [url(../resources/stripes-20.png)\] at (0.3) should be [url(../resources/green-20.png)\]] expected: FAIL [CSS Transitions with transition: all: property from neutral to [url(../resources/stripes-20.png)\] at (-0.3) should be [url(../resources/green-20.png)\]] expected: FAIL - [CSS Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (-0.3) should be [url(../resources/green-20.png)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Web Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (-0.3) should be [linear-gradient(-45deg, red, yellow)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (-0.3) should be [linear-gradient(-45deg, red, yellow)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Transitions with transition: all: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [inherit\] to [url(../resources/stripes-20.png)\] at (0) should be [url(../resources/blue-20.png)\]] expected: FAIL @@ -168,29 +67,8 @@ [CSS Transitions with transition: all: property from [initial\] to [url(../resources/stripes-20.png)\] at (0.3) should be [none\]] expected: FAIL - [CSS Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [unset\] to [url(../resources/stripes-20.png)\] at (0) should be [url(../resources/blue-20.png)\]] expected: FAIL - - [CSS Transitions: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Web Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [unset\] to [url(../resources/stripes-20.png)\] at (0.3) should be [url(../resources/blue-20.png)\]] expected: FAIL @@ -212,22 +90,12 @@ [CSS Transitions with transition: all: property from [url(../resources/green-20.png)\] to [url(../resources/stripes-20.png)\] at (0.3) should be [url(../resources/green-20.png)\]] expected: FAIL - [Web Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0) should be [url(../resources/green-20.png)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [inherit\] to [url(../resources/stripes-20.png)\] at (-0.3) should be [url(../resources/blue-20.png)\]] expected: FAIL [CSS Transitions: property from [url(../resources/green-20.png)\] to [url(../resources/stripes-20.png)\] at (0) should be [url(../resources/green-20.png)\]] expected: FAIL - [Web Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [unset\] to [url(../resources/stripes-20.png)\] at (-0.3) should be [url(../resources/blue-20.png)\]] expected: FAIL @@ -240,24 +108,8 @@ [CSS Transitions: property from neutral to [url(../resources/stripes-20.png)\] at (0) should be [url(../resources/green-20.png)\]] expected: FAIL - [Web Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Transitions: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [none\] to [url(../resources/stripes-20.png)\] at (-0.3) should be [none\]] expected: FAIL - - [CSS Transitions: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [url(../resources/green-20.png)\] to [url(../resources/stripes-20.png)\] at (0.3) should be [url(../resources/green-20.png)\]] expected: FAIL @@ -270,29 +122,9 @@ [CSS Transitions: property from [url(../resources/green-20.png)\] to [url(../resources/stripes-20.png)\] at (-0.3) should be [url(../resources/green-20.png)\]] expected: FAIL - [CSS Transitions with transition: all: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions with transition: all: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.3) should be [url(../resources/green-20.png)\]] expected: FAIL - [CSS Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Transitions with transition: all: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (1) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Transitions with transition: all: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0.6) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - [CSS Transitions: property from [unset\] to [url(../resources/stripes-20.png)\] at (-0.3) should be [url(../resources/blue-20.png)\]] expected: FAIL @@ -308,18 +140,3 @@ [CSS Transitions: property from [none\] to [url(../resources/stripes-20.png)\] at (0) should be [none\]] expected: FAIL - [CSS Animations: property from [linear-gradient(-45deg, red, yellow)\] to [linear-gradient(45deg, blue, orange)\] at (0.3) should be [linear-gradient(-45deg, red, yellow)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [CSS Transitions: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (1.5) should be [linear-gradient(45deg, blue, orange)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Web Animations: property from [url(../resources/green-20.png)\] to [linear-gradient(45deg, blue, orange)\] at (0.3) should be [url(../resources/green-20.png)\]] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - diff --git a/testing/web-platform/meta/css/css-lists/parsing/list-style-image-computed.sub.html.ini b/testing/web-platform/meta/css/css-lists/parsing/list-style-image-computed.sub.html.ini deleted file mode 100644 index 38c7fcda4d86..000000000000 --- a/testing/web-platform/meta/css/css-lists/parsing/list-style-image-computed.sub.html.ini +++ /dev/null @@ -1,26 +0,0 @@ -[list-style-image-computed.sub.html] - [Property list-style-image value 'linear-gradient(to left bottom, red , blue )'] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Property list-style-image value 'radial-gradient(ellipse calc(-0.5em + 10px) calc(0.5em + 10px) at 20px 30px, rgb(255, 0, 0), rgb(0, 0, 255))'] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Property list-style-image value 'radial-gradient(10px at 20px 30px, rgb(255, 0, 0), rgb(0, 0, 255))'] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Property list-style-image value 'radial-gradient(circle calc(-0.5em + 10px) at calc(-1em + 10px) calc(-2em + 10px), rgb(255, 0, 0), rgb(0, 0, 255))'] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - - [Property list-style-image value 'radial-gradient(ellipse calc(0.5em + 10px) calc(-0.5em + 10px) at 20px 30px, rgb(255, 0, 0), rgb(0, 0, 255))'] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL - diff --git a/testing/web-platform/meta/css/css-lists/parsing/list-style-image-valid.html.ini b/testing/web-platform/meta/css/css-lists/parsing/list-style-image-valid.html.ini deleted file mode 100644 index b9e85f2d2485..000000000000 --- a/testing/web-platform/meta/css/css-lists/parsing/list-style-image-valid.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[list-style-image-valid.html] - [e.style['list-style-image'\] = "linear-gradient(to left bottom, red, blue)" should set the property value] - expected: - if (os == "linux") and not webrender and not debug: ["FAIL", "PASS"] - FAIL -