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
This commit is contained in:
Emilio Cobos Álvarez 2022-09-28 03:56:58 +00:00
Родитель 2eb1b8240a
Коммит 4ec1be44bb
4 изменённых файлов: 31 добавлений и 9 удалений

Просмотреть файл

@ -1134,8 +1134,9 @@ already_AddRefed<imgRequestProxy> imgRequestProxy::GetStaticRequest(
GetImagePrincipal(getter_AddRefs(currentPrincipal));
bool hadCrossOriginRedirects = true;
GetHadCrossOriginRedirects(&hadCrossOriginRedirects);
nsCOMPtr<nsIPrincipal> triggeringPrincipal = GetTriggeringPrincipal();
RefPtr<imgRequestProxy> 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<StaticBehaviour>(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<nsIPrincipal> currentPrincipal;
GetImagePrincipal(getter_AddRefs(currentPrincipal));
nsCOMPtr<nsIPrincipal> triggeringPrincipal;
GetTriggeringPrincipal(getter_AddRefs(triggeringPrincipal));
bool hadCrossOriginRedirects = true;
GetHadCrossOriginRedirects(&hadCrossOriginRedirects);
RefPtr<mozilla::image::Image> image = GetImage();
return new imgRequestProxyStatic(image, currentPrincipal,
return new imgRequestProxyStatic(image, currentPrincipal, triggeringPrincipal,
hadCrossOriginRedirects);
}

Просмотреть файл

@ -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<nsIPrincipal> mPrincipal;
const nsCOMPtr<nsIPrincipal> mImagePrincipal;
const nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
const bool mHadCrossOriginRedirects;
};

Просмотреть файл

@ -0,0 +1,5 @@
<!doctype html>
<title>Printing animated image</title>
<link rel="help" href="https://html.spec.whatwg.org/#the-img-element">
<link rel="mismatch" href="/css/reference/blank.html">
<img style="image-orientation: none" src="/images/anim-gr.gif">

Просмотреть файл

@ -0,0 +1,5 @@
<!doctype html>
<title>Printing animated image</title>
<link rel="help" href="https://html.spec.whatwg.org/#the-img-element">
<link rel="mismatch" href="/css/reference/blank.html">
<img src="/images/anim-gr.gif">