diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-05-27 19:19:27 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-05-27 19:19:27 +0200 |
commit | fb1b45e5fcb82e76e303665fbb9d04fb2a800b31 (patch) | |
tree | 97baa867e3534b1bd5153067d2bd853462a4b12b /dom/canvas/CanvasRenderingContext2D.cpp | |
parent | 47c52f2dc2cc4eb4f5582a7ca50b682548b1708c (diff) | |
download | UXP-fb1b45e5fcb82e76e303665fbb9d04fb2a800b31.tar UXP-fb1b45e5fcb82e76e303665fbb9d04fb2a800b31.tar.gz UXP-fb1b45e5fcb82e76e303665fbb9d04fb2a800b31.tar.lz UXP-fb1b45e5fcb82e76e303665fbb9d04fb2a800b31.tar.xz UXP-fb1b45e5fcb82e76e303665fbb9d04fb2a800b31.zip |
Improve origin-clean algorithm
Diffstat (limited to 'dom/canvas/CanvasRenderingContext2D.cpp')
-rw-r--r-- | dom/canvas/CanvasRenderingContext2D.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp index 4849fda57..2bf40732a 100644 --- a/dom/canvas/CanvasRenderingContext2D.cpp +++ b/dom/canvas/CanvasRenderingContext2D.cpp @@ -2406,7 +2406,11 @@ CanvasRenderingContext2D::SetStyleFromUnion(const StringOrCanvasGradientOrCanvas } if (aValue.IsCanvasPattern()) { - SetStyleFromPattern(aValue.GetAsCanvasPattern(), aWhichStyle); + CanvasPattern& pattern = aValue.GetAsCanvasPattern(); + SetStyleFromPattern(pattern, aWhichStyle); + if (pattern.mForceWriteOnly) { + SetWriteOnly(); + } return; } @@ -2581,11 +2585,12 @@ CanvasRenderingContext2D::CreatePattern(const CanvasImageSource& aSource, nsLayoutUtils::SurfaceFromElement(element, nsLayoutUtils::SFE_WANT_FIRST_FRAME, mTarget); - if (!res.GetSourceSurface()) { + RefPtr<SourceSurface> surface = res.GetSourceSurface(); + if (!surface) { return nullptr; } - RefPtr<CanvasPattern> pat = new CanvasPattern(this, res.GetSourceSurface(), repeatMode, + RefPtr<CanvasPattern> pat = new CanvasPattern(this, surface, repeatMode, res.mPrincipal, res.mIsWriteOnly, res.mCORSUsed); return pat.forget(); @@ -4895,8 +4900,8 @@ CanvasRenderingContext2D::CachedSurfaceFromElement(Element* aElement) res.mSize = res.mSourceSurface->GetSize(); res.mPrincipal = principal.forget(); - res.mIsWriteOnly = false; res.mImageRequest = imgRequest.forget(); + res.mIsWriteOnly = CheckWriteOnlySecurity(res.mCORSUsed, res.mPrincipal); return res; } |