mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-02 06:22:20 +00:00
Bug 1554847 - Improve cross-origin checks in canvas API - imgIRequest.hadCrossOriginRedirects, r=aosmond
Differential Revision: https://phabricator.services.mozilla.com/D32791 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
8a32278bc9
commit
1fa1039026
@ -112,6 +112,11 @@ interface imgIRequest : nsIRequest
|
||||
*/
|
||||
readonly attribute nsIPrincipal imagePrincipal;
|
||||
|
||||
/**
|
||||
* true if the loading of the image required cross-origin redirects.
|
||||
*/
|
||||
readonly attribute bool hadCrossOriginRedirects;
|
||||
|
||||
/**
|
||||
* Whether the request is multipart (ie, multipart/x-mixed-replace)
|
||||
*/
|
||||
|
@ -888,6 +888,22 @@ imgRequestProxy::GetImagePrincipal(nsIPrincipal** aPrincipal) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
imgRequestProxy::GetHadCrossOriginRedirects(bool* aHadCrossOriginRedirects) {
|
||||
*aHadCrossOriginRedirects = false;
|
||||
|
||||
nsCOMPtr<nsITimedChannel> timedChannel = TimedChannel();
|
||||
if (timedChannel) {
|
||||
bool allRedirectsSameOrigin = false;
|
||||
*aHadCrossOriginRedirects =
|
||||
NS_SUCCEEDED(
|
||||
timedChannel->GetAllRedirectsSameOrigin(&allRedirectsSameOrigin)) &&
|
||||
!allRedirectsSameOrigin;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
imgRequestProxy::GetMultipart(bool* aMultipart) {
|
||||
if (!GetOwner()) {
|
||||
@ -1102,8 +1118,10 @@ nsresult imgRequestProxy::GetStaticRequest(Document* aLoadingDocument,
|
||||
// Create a static imgRequestProxy with our new extracted frame.
|
||||
nsCOMPtr<nsIPrincipal> currentPrincipal;
|
||||
GetImagePrincipal(getter_AddRefs(currentPrincipal));
|
||||
RefPtr<imgRequestProxy> req =
|
||||
new imgRequestProxyStatic(frozenImage, currentPrincipal);
|
||||
bool hadCrossOriginRedirects = true;
|
||||
GetHadCrossOriginRedirects(&hadCrossOriginRedirects);
|
||||
RefPtr<imgRequestProxy> req = new imgRequestProxyStatic(
|
||||
frozenImage, currentPrincipal, hadCrossOriginRedirects);
|
||||
req->Init(nullptr, nullptr, aLoadingDocument, mURI, nullptr);
|
||||
|
||||
NS_ADDREF(*aReturn = req);
|
||||
@ -1219,8 +1237,10 @@ class StaticBehaviour : public ProxyBehaviour {
|
||||
};
|
||||
|
||||
imgRequestProxyStatic::imgRequestProxyStatic(mozilla::image::Image* aImage,
|
||||
nsIPrincipal* aPrincipal)
|
||||
: mPrincipal(aPrincipal) {
|
||||
nsIPrincipal* aPrincipal,
|
||||
bool aHadCrossOriginRedirects)
|
||||
: mPrincipal(aPrincipal),
|
||||
mHadCrossOriginRedirects(aHadCrossOriginRedirects) {
|
||||
mBehaviour = mozilla::MakeUnique<StaticBehaviour>(aImage);
|
||||
}
|
||||
|
||||
@ -1235,9 +1255,19 @@ imgRequestProxyStatic::GetImagePrincipal(nsIPrincipal** aPrincipal) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
imgRequestProxyStatic::GetHadCrossOriginRedirects(
|
||||
bool* aHadCrossOriginRedirects) {
|
||||
*aHadCrossOriginRedirects = mHadCrossOriginRedirects;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
imgRequestProxy* imgRequestProxyStatic::NewClonedProxy() {
|
||||
nsCOMPtr<nsIPrincipal> currentPrincipal;
|
||||
GetImagePrincipal(getter_AddRefs(currentPrincipal));
|
||||
bool hadCrossOriginRedirects = true;
|
||||
GetHadCrossOriginRedirects(&hadCrossOriginRedirects);
|
||||
RefPtr<mozilla::image::Image> image = GetImage();
|
||||
return new imgRequestProxyStatic(image, currentPrincipal);
|
||||
return new imgRequestProxyStatic(image, currentPrincipal,
|
||||
hadCrossOriginRedirects);
|
||||
}
|
||||
|
@ -237,16 +237,21 @@ class imgRequestProxy : public imgIRequest,
|
||||
// certain behaviours must be overridden to compensate.
|
||||
class imgRequestProxyStatic : public imgRequestProxy {
|
||||
public:
|
||||
imgRequestProxyStatic(Image* aImage, nsIPrincipal* aPrincipal);
|
||||
imgRequestProxyStatic(Image* aImage, nsIPrincipal* aPrincipal,
|
||||
bool hadCrossOriginRedirects);
|
||||
|
||||
NS_IMETHOD GetImagePrincipal(nsIPrincipal** aPrincipal) override;
|
||||
|
||||
NS_IMETHOD GetHadCrossOriginRedirects(
|
||||
bool* aHadCrossOriginRedirects) override;
|
||||
|
||||
protected:
|
||||
imgRequestProxy* NewClonedProxy() override;
|
||||
|
||||
// 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 bool mHadCrossOriginRedirects;
|
||||
};
|
||||
|
||||
#endif // mozilla_image_imgRequestProxy_h
|
||||
|
Loading…
x
Reference in New Issue
Block a user