Closed Bug 1301245 Opened 8 years ago Closed 7 years ago

stop trying to load SVG mask references as images

Categories

(Core :: CSS Parsing and Computation, defect, P3)

defect

Tracking

()

RESOLVED FIXED
mozilla56
Tracking Status
firefox56 --- fixed

People

(Reporter: heycam, Assigned: u459114)

References

Details

Attachments

(3 files, 8 obsolete files)

(deleted), text/x-review-board-request
heycam
: review+
Details
(deleted), text/x-review-board-request
heycam
: review+
Details
(deleted), text/x-review-board-request
heycam
: review+
Details
We compute the mask-image property into two separate fields on the nsStyleImageLayers::Layer: nsStyleImage mImage; FragmentOrURL mSourceURI; We set mImage regardless of whether the url() value has a fragment. This means we end up starting an image load for values like |mask-image: url(external.svg#mask)|. We should just set mImage for fragment-less url() values and mSourceURI for those with a fragment.
mask-image:url(xxx.svg#viewBoxID) In this case, we still need to start image download
(In reply to C.J. Ku[:cjku](UTC+8) from comment #2) > mask-image:url(xxx.svg#viewBoxID) > > In this case, we still need to start image download Oh, that is kind of annoying. We don't know whether we will use it as an image or as a <mask> element reference until after loading it as an image already.
Is this still a valid bug to fix ?
Flags: needinfo?(cam)
Status: NEW → ASSIGNED
Priority: -- → P3
Attachment #8844387 - Flags: review?(cam)
Attachment #8844387 - Flags: review?(cam)
hm.. the patch is not really work. we still can not prevent image download
Attachment #8844387 - Attachment is obsolete: true
Attachment #8852922 - Attachment is obsolete: true
Attachment #8852923 - Attachment is obsolete: true
Attachment #8887999 - Attachment is obsolete: true
Attachment #8888635 - Attachment is obsolete: true
Attachment #8888001 - Attachment is obsolete: true
Attachment #8888636 - Attachment is obsolete: true
Attachment #8888000 - Flags: review?(cam)
Attachment #8890180 - Flags: review?(cam)
Attachment #8890181 - Flags: review?(cam)
Attachment #8890182 - Flags: review?(cam)
Attachment #8890182 - Attachment is obsolete: true
Attachment #8890182 - Flags: review?(cam)
Comment on attachment 8888000 [details] Bug 1301245 - Part 1. Implement nsStyleImage::IsResolved. https://reviewboard.mozilla.org/r/158874/#review166666 ::: layout/style/nsStyleStruct.h:467 (Diff revision 3) > nsStyleGradient* GetGradientData() const { > NS_ASSERTION(mType == eStyleImageType_Gradient, "Data is not a gradient!"); > return mGradient; > } > + bool IsResolved() const { > + return (mType == eStyleImageType_Image) ? GetImageRequest()->IsResolved() Or, if you like: return mType == eStyleImageType_Image && GetImageRequest()->IsResolved();
Attachment #8888000 - Flags: review?(cam) → review+
Comment on attachment 8888000 [details] Bug 1301245 - Part 1. Implement nsStyleImage::IsResolved. https://reviewboard.mozilla.org/r/158874/#review166666 > Or, if you like: > > return mType == eStyleImageType_Image && GetImageRequest()->IsResolved(); Or, more correctly! return mType != eStyleImageType_Image || GetImageRequest()->IsResolved(); but that is less clear, so feel free to leave what you have.
Comment on attachment 8890180 [details] Bug 1301245 - Part 2. Do not resolve a style image if the given url has a fragment. https://reviewboard.mozilla.org/r/161246/#review166670 ::: layout/svg/nsSVGIntegrationUtils.cpp:504 (Diff revision 3) > > aParams.imgParams.result &= > nsCSSRendering::PaintStyleImageLayerWithSC(params, *maskContext, aSC, > *aParams.frame->StyleBorder()); > + } else { > + MOZ_ASSERT(!svgReset->mMask.mLayers[i].mImage.IsResolved()); I guess we don't need this assertion really since it's exactly what we just checked in the "else if" above. ::: layout/svg/nsSVGIntegrationUtils.cpp:505 (Diff revision 3) > aParams.imgParams.result &= > nsCSSRendering::PaintStyleImageLayerWithSC(params, *maskContext, aSC, > *aParams.frame->StyleBorder()); > + } else { > + MOZ_ASSERT(!svgReset->mMask.mLayers[i].mImage.IsResolved()); > + aParams.imgParams.result &= DrawResult::NOT_READY; I'm not really familiar with DrawResult stuff, but should this be "|=" instead of "&="?
Attachment #8890180 - Flags: review?(cam) → review+
Comment on attachment 8890181 [details] Bug 1301245 - Part 3. Resolve a style image if nsSVGPaintingProperty can not handle it. https://reviewboard.mozilla.org/r/161248/#review166678 Please re-request review if you need to make that nsSVGFrameReferenceFromProperty change. ::: layout/svg/nsSVGEffects.h:363 (Diff revision 3) > + void ResolveImage(uint32_t aIndex); > + > private: > virtual ~nsSVGMaskProperty() {} > nsTArray<RefPtr<nsSVGPaintingProperty>> mProperties; > + nsIFrame* mFrame; I see that nsSVGFilterProperty uses an nsSVGFrameReferenceFromProperty to hold on to its frame. Do we need the same? I am not sure. Please check. ::: layout/svg/nsSVGEffects.cpp:423 (Diff revision 3) > } > > +void > +nsSVGMaskProperty::ResolveImage(uint32_t aIndex) > +{ > + const nsStyleSVGReset *svgReset = mFrame->StyleSVGReset(); Nit: "*" next to type. ::: layout/svg/nsSVGEffects.cpp:424 (Diff revision 3) > > +void > +nsSVGMaskProperty::ResolveImage(uint32_t aIndex) > +{ > + const nsStyleSVGReset *svgReset = mFrame->StyleSVGReset(); > + MOZ_ASSERT(aIndex <= svgReset->mMask.mImageCount); Should that be "<"? ::: layout/svg/nsSVGEffects.cpp:436 (Diff revision 3) > + image.ResolveImage(mFrame->PresContext()); > + > + mozilla::css::ImageLoader* imageLoader = > + mFrame->PresContext()->Document()->StyleImageLoader(); > + if (imgRequestProxy* req = image.GetImageData()) { > + imageLoader->AssociateRequestToFrame(req, mFrame); Nit: indent wrong.
Attachment #8890181 - Flags: review?(cam) → review+
Comment on attachment 8890180 [details] Bug 1301245 - Part 2. Do not resolve a style image if the given url has a fragment. https://reviewboard.mozilla.org/r/161246/#review166670 > I'm not really familiar with DrawResult stuff, but should this be "|=" instead of "&="? http://searchfox.org/mozilla-central/source/image/DrawResult.h#81 Looks odd but it actually should be "&="
Pushed by cku@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/76ec2bd0f251 Part 1. Implement nsStyleImage::IsResolved. r=heycam https://hg.mozilla.org/integration/autoland/rev/ebe4713f3fba Part 2. Do not resolve a style image if the given url has a fragment. r=heycam https://hg.mozilla.org/integration/autoland/rev/319bc66e5d3a Part 3. Resolve a style image if nsSVGPaintingProperty can not handle it. r=heycam
Depends on: 1402157
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: