From 4ec1be44bbb0ac83ba24b92732c24f867de37d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Wed, 28 Sep 2022 03:56:58 +0000 Subject: [PATCH] Bug 1792435 - Fix triggering principal set-up for static image requests. r=dlrobertson That is, for printing. Those don't have an owning request, see the comment on the image principal code. Differential Revision: https://phabricator.services.mozilla.com/D158193 --- image/imgRequestProxy.cpp | 23 +++++++++++++------ image/imgRequestProxy.h | 7 ++++-- ...ed-image-print-image-orientation-none.html | 5 ++++ .../css/printing/animated-image-print.html | 5 ++++ 4 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 testing/web-platform/tests/css/printing/animated-image-print-image-orientation-none.html create mode 100644 testing/web-platform/tests/css/printing/animated-image-print.html diff --git a/image/imgRequestProxy.cpp b/image/imgRequestProxy.cpp index 832561fb8899..739c72da6810 100644 --- a/image/imgRequestProxy.cpp +++ b/image/imgRequestProxy.cpp @@ -1134,8 +1134,9 @@ already_AddRefed imgRequestProxy::GetStaticRequest( GetImagePrincipal(getter_AddRefs(currentPrincipal)); bool hadCrossOriginRedirects = true; GetHadCrossOriginRedirects(&hadCrossOriginRedirects); + nsCOMPtr triggeringPrincipal = GetTriggeringPrincipal(); RefPtr req = new imgRequestProxyStatic( - frozenImage, currentPrincipal, hadCrossOriginRedirects); + frozenImage, currentPrincipal, triggeringPrincipal, hadCrossOriginRedirects); req->Init(nullptr, nullptr, aLoadingDocument, mURI, nullptr); return req.forget(); @@ -1256,21 +1257,27 @@ class StaticBehaviour : public ProxyBehaviour { }; imgRequestProxyStatic::imgRequestProxyStatic(mozilla::image::Image* aImage, - nsIPrincipal* aPrincipal, + nsIPrincipal* aImagePrincipal, + nsIPrincipal* aTriggeringPrincipal, bool aHadCrossOriginRedirects) - : mPrincipal(aPrincipal), + : mImagePrincipal(aImagePrincipal), + mTriggeringPrincipal(aTriggeringPrincipal), mHadCrossOriginRedirects(aHadCrossOriginRedirects) { mBehaviour = mozilla::MakeUnique(aImage); } NS_IMETHODIMP imgRequestProxyStatic::GetImagePrincipal(nsIPrincipal** aPrincipal) { - if (!mPrincipal) { + if (!mImagePrincipal) { return NS_ERROR_FAILURE; } + NS_ADDREF(*aPrincipal = mImagePrincipal); + return NS_OK; +} - NS_ADDREF(*aPrincipal = mPrincipal); - +NS_IMETHODIMP +imgRequestProxyStatic::GetTriggeringPrincipal(nsIPrincipal** aPrincipal) { + NS_IF_ADDREF(*aPrincipal = mTriggeringPrincipal); return NS_OK; } @@ -1284,9 +1291,11 @@ imgRequestProxyStatic::GetHadCrossOriginRedirects( imgRequestProxy* imgRequestProxyStatic::NewClonedProxy() { nsCOMPtr currentPrincipal; GetImagePrincipal(getter_AddRefs(currentPrincipal)); + nsCOMPtr triggeringPrincipal; + GetTriggeringPrincipal(getter_AddRefs(triggeringPrincipal)); bool hadCrossOriginRedirects = true; GetHadCrossOriginRedirects(&hadCrossOriginRedirects); RefPtr image = GetImage(); - return new imgRequestProxyStatic(image, currentPrincipal, + return new imgRequestProxyStatic(image, currentPrincipal, triggeringPrincipal, hadCrossOriginRedirects); } diff --git a/image/imgRequestProxy.h b/image/imgRequestProxy.h index 351bdb2b3615..e9977a05af9c 100644 --- a/image/imgRequestProxy.h +++ b/image/imgRequestProxy.h @@ -235,10 +235,12 @@ NS_DEFINE_STATIC_IID_ACCESSOR(imgRequestProxy, NS_IMGREQUESTPROXY_CID) // certain behaviours must be overridden to compensate. class imgRequestProxyStatic : public imgRequestProxy { public: - imgRequestProxyStatic(Image* aImage, nsIPrincipal* aPrincipal, + imgRequestProxyStatic(Image* aImage, nsIPrincipal* aImagePrincipal, + nsIPrincipal* aTriggeringPrincipal, bool hadCrossOriginRedirects); NS_IMETHOD GetImagePrincipal(nsIPrincipal** aPrincipal) override; + NS_IMETHOD GetTriggeringPrincipal(nsIPrincipal** aPrincipal) override; NS_IMETHOD GetHadCrossOriginRedirects( bool* aHadCrossOriginRedirects) override; @@ -248,7 +250,8 @@ class imgRequestProxyStatic : public imgRequestProxy { // Our principal. We have to cache it, rather than accessing the underlying // request on-demand, because static proxies don't have an underlying request. - nsCOMPtr mPrincipal; + const nsCOMPtr mImagePrincipal; + const nsCOMPtr mTriggeringPrincipal; const bool mHadCrossOriginRedirects; }; diff --git a/testing/web-platform/tests/css/printing/animated-image-print-image-orientation-none.html b/testing/web-platform/tests/css/printing/animated-image-print-image-orientation-none.html new file mode 100644 index 000000000000..d5ec1a8e237e --- /dev/null +++ b/testing/web-platform/tests/css/printing/animated-image-print-image-orientation-none.html @@ -0,0 +1,5 @@ + +Printing animated image + + + diff --git a/testing/web-platform/tests/css/printing/animated-image-print.html b/testing/web-platform/tests/css/printing/animated-image-print.html new file mode 100644 index 000000000000..7c7665366d45 --- /dev/null +++ b/testing/web-platform/tests/css/printing/animated-image-print.html @@ -0,0 +1,5 @@ + +Printing animated image + + +