Bug 1696111 - Make LoadInfo know if the request is triggered from a media element and if it's an initial request. r=necko-reviewers,alwu,dragana
Differential Revision: https://phabricator.services.mozilla.com/D106890
This commit is contained in:
@@ -1717,12 +1717,14 @@ class HTMLMediaElement::ChannelLoader final {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setAttrs) {
|
|
||||||
nsCOMPtr<nsILoadInfo> loadInfo = channel->LoadInfo();
|
nsCOMPtr<nsILoadInfo> loadInfo = channel->LoadInfo();
|
||||||
|
if (setAttrs) {
|
||||||
// The function simply returns NS_OK, so we ignore the return value.
|
// The function simply returns NS_OK, so we ignore the return value.
|
||||||
Unused << loadInfo->SetOriginAttributes(
|
Unused << loadInfo->SetOriginAttributes(
|
||||||
triggeringPrincipal->OriginAttributesRef());
|
triggeringPrincipal->OriginAttributesRef());
|
||||||
}
|
}
|
||||||
|
loadInfo->SetIsMediaRequest(true);
|
||||||
|
loadInfo->SetIsMediaInitialRequest(true);
|
||||||
|
|
||||||
nsCOMPtr<nsIClassOfService> cos(do_QueryInterface(channel));
|
nsCOMPtr<nsIClassOfService> cos(do_QueryInterface(channel));
|
||||||
if (cos) {
|
if (cos) {
|
||||||
|
|||||||
@@ -750,13 +750,15 @@ nsresult ChannelMediaResource::RecreateChannel() {
|
|||||||
loadFlags);
|
loadFlags);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
if (setAttrs) {
|
|
||||||
nsCOMPtr<nsILoadInfo> loadInfo = mChannel->LoadInfo();
|
nsCOMPtr<nsILoadInfo> loadInfo = mChannel->LoadInfo();
|
||||||
|
if (setAttrs) {
|
||||||
// The function simply returns NS_OK, so we ignore the return value.
|
// The function simply returns NS_OK, so we ignore the return value.
|
||||||
Unused << loadInfo->SetOriginAttributes(
|
Unused << loadInfo->SetOriginAttributes(
|
||||||
triggeringPrincipal->OriginAttributesRef());
|
triggeringPrincipal->OriginAttributesRef());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Unused << loadInfo->SetIsMediaRequest(true);
|
||||||
|
|
||||||
nsCOMPtr<nsIClassOfService> cos(do_QueryInterface(mChannel));
|
nsCOMPtr<nsIClassOfService> cos(do_QueryInterface(mChannel));
|
||||||
if (cos) {
|
if (cos) {
|
||||||
// Unconditionally disable throttling since we want the media to fluently
|
// Unconditionally disable throttling since we want the media to fluently
|
||||||
|
|||||||
@@ -540,10 +540,11 @@ nsresult LoadInfoToLoadInfoArgs(nsILoadInfo* aLoadInfo,
|
|||||||
aLoadInfo->GetHasValidUserGestureActivation(),
|
aLoadInfo->GetHasValidUserGestureActivation(),
|
||||||
aLoadInfo->GetAllowDeprecatedSystemRequests(),
|
aLoadInfo->GetAllowDeprecatedSystemRequests(),
|
||||||
aLoadInfo->GetIsInDevToolsContext(), aLoadInfo->GetParserCreatedScript(),
|
aLoadInfo->GetIsInDevToolsContext(), aLoadInfo->GetParserCreatedScript(),
|
||||||
aLoadInfo->GetIsFromProcessingFrameAttributes(), cookieJarSettingsArgs,
|
aLoadInfo->GetIsFromProcessingFrameAttributes(),
|
||||||
aLoadInfo->GetRequestBlockingReason(), maybeCspToInheritInfo,
|
aLoadInfo->GetIsMediaRequest(), aLoadInfo->GetIsMediaInitialRequest(),
|
||||||
aLoadInfo->GetHasStoragePermission(), aLoadInfo->GetIsMetaRefresh(),
|
cookieJarSettingsArgs, aLoadInfo->GetRequestBlockingReason(),
|
||||||
aLoadInfo->GetLoadingEmbedderPolicy()));
|
maybeCspToInheritInfo, aLoadInfo->GetHasStoragePermission(),
|
||||||
|
aLoadInfo->GetIsMetaRefresh(), aLoadInfo->GetLoadingEmbedderPolicy()));
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
@@ -807,6 +808,14 @@ nsresult LoadInfoArgsToLoadInfo(
|
|||||||
loadInfo->SetIsFromProcessingFrameAttributes();
|
loadInfo->SetIsFromProcessingFrameAttributes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (loadInfoArgs.isMediaRequest()) {
|
||||||
|
loadInfo->SetIsMediaRequest(true);
|
||||||
|
|
||||||
|
if (loadInfoArgs.isMediaInitialRequest()) {
|
||||||
|
loadInfo->SetIsMediaInitialRequest(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loadInfo.forget(outLoadInfo);
|
loadInfo.forget(outLoadInfo);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -594,6 +594,8 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
|
|||||||
mHasStoragePermission(rhs.mHasStoragePermission),
|
mHasStoragePermission(rhs.mHasStoragePermission),
|
||||||
mIsMetaRefresh(rhs.mIsMetaRefresh),
|
mIsMetaRefresh(rhs.mIsMetaRefresh),
|
||||||
mIsFromProcessingFrameAttributes(rhs.mIsFromProcessingFrameAttributes),
|
mIsFromProcessingFrameAttributes(rhs.mIsFromProcessingFrameAttributes),
|
||||||
|
mIsMediaRequest(rhs.mIsMediaRequest),
|
||||||
|
mIsMediaInitialRequest(rhs.mIsMediaInitialRequest),
|
||||||
mLoadingEmbedderPolicy(rhs.mLoadingEmbedderPolicy) {}
|
mLoadingEmbedderPolicy(rhs.mLoadingEmbedderPolicy) {}
|
||||||
|
|
||||||
LoadInfo::LoadInfo(
|
LoadInfo::LoadInfo(
|
||||||
@@ -701,6 +703,8 @@ LoadInfo::LoadInfo(
|
|||||||
mHasStoragePermission(aHasStoragePermission),
|
mHasStoragePermission(aHasStoragePermission),
|
||||||
mIsMetaRefresh(aIsMetaRefresh),
|
mIsMetaRefresh(aIsMetaRefresh),
|
||||||
mIsFromProcessingFrameAttributes(false),
|
mIsFromProcessingFrameAttributes(false),
|
||||||
|
mIsMediaRequest(false),
|
||||||
|
mIsMediaInitialRequest(false),
|
||||||
mLoadingEmbedderPolicy(aLoadingEmbedderPolicy) {
|
mLoadingEmbedderPolicy(aLoadingEmbedderPolicy) {
|
||||||
// Only top level TYPE_DOCUMENT loads can have a null loadingPrincipal
|
// Only top level TYPE_DOCUMENT loads can have a null loadingPrincipal
|
||||||
MOZ_ASSERT(mLoadingPrincipal ||
|
MOZ_ASSERT(mLoadingPrincipal ||
|
||||||
@@ -1678,6 +1682,32 @@ LoadInfo::GetIsFromProcessingFrameAttributes(
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
LoadInfo::SetIsMediaRequest(bool aIsMediaRequest) {
|
||||||
|
mIsMediaRequest = aIsMediaRequest;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
LoadInfo::GetIsMediaRequest(bool* aIsMediaRequest) {
|
||||||
|
MOZ_ASSERT(aIsMediaRequest);
|
||||||
|
*aIsMediaRequest = mIsMediaRequest;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
LoadInfo::SetIsMediaInitialRequest(bool aIsMediaInitialRequest) {
|
||||||
|
mIsMediaInitialRequest = aIsMediaInitialRequest;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
LoadInfo::GetIsMediaInitialRequest(bool* aIsMediaInitialRequest) {
|
||||||
|
MOZ_ASSERT(aIsMediaInitialRequest);
|
||||||
|
*aIsMediaInitialRequest = mIsMediaInitialRequest;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
LoadInfo::GetResultPrincipalURI(nsIURI** aURI) {
|
LoadInfo::GetResultPrincipalURI(nsIURI** aURI) {
|
||||||
NS_IF_ADDREF(*aURI = mResultPrincipalURI);
|
NS_IF_ADDREF(*aURI = mResultPrincipalURI);
|
||||||
|
|||||||
@@ -331,6 +331,10 @@ class LoadInfo final : public nsILoadInfo {
|
|||||||
// See nsILoadInfo.isFromProcessingFrameAttributes
|
// See nsILoadInfo.isFromProcessingFrameAttributes
|
||||||
bool mIsFromProcessingFrameAttributes = false;
|
bool mIsFromProcessingFrameAttributes = false;
|
||||||
|
|
||||||
|
// See nsILoadInfo.isMediaRequest and nsILoadInfo.isMediaInitialRequest.
|
||||||
|
bool mIsMediaRequest = false;
|
||||||
|
bool mIsMediaInitialRequest = false;
|
||||||
|
|
||||||
// The cross origin embedder policy that the loading need to respect.
|
// The cross origin embedder policy that the loading need to respect.
|
||||||
// If the value is nsILoadInfo::EMBEDDER_POLICY_REQUIRE_CORP, CORP checking
|
// If the value is nsILoadInfo::EMBEDDER_POLICY_REQUIRE_CORP, CORP checking
|
||||||
// must be performed for the loading.
|
// must be performed for the loading.
|
||||||
|
|||||||
@@ -540,6 +540,26 @@ TRRLoadInfo::GetIsFromProcessingFrameAttributes(
|
|||||||
return NS_ERROR_NOT_IMPLEMENTED;
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
TRRLoadInfo::SetIsMediaRequest(bool aIsMediaRequest) {
|
||||||
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
TRRLoadInfo::GetIsMediaRequest(bool* aIsMediaRequest) {
|
||||||
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
TRRLoadInfo::SetIsMediaInitialRequest(bool aIsMediaInitialRequest) {
|
||||||
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
TRRLoadInfo::GetIsMediaInitialRequest(bool* aIsMediaInitialRequest) {
|
||||||
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
TRRLoadInfo::GetResultPrincipalURI(nsIURI** aURI) {
|
TRRLoadInfo::GetResultPrincipalURI(nsIURI** aURI) {
|
||||||
nsCOMPtr<nsIURI> uri = mResultPrincipalURI;
|
nsCOMPtr<nsIURI> uri = mResultPrincipalURI;
|
||||||
|
|||||||
@@ -1359,4 +1359,16 @@ interface nsILoadInfo : nsISupports
|
|||||||
*/
|
*/
|
||||||
[infallible] attribute nsILoadInfo_CrossOriginEmbedderPolicy
|
[infallible] attribute nsILoadInfo_CrossOriginEmbedderPolicy
|
||||||
loadingEmbedderPolicy;
|
loadingEmbedderPolicy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This attribute will be true if this is a load triggered by a media
|
||||||
|
* element.
|
||||||
|
*/
|
||||||
|
[infallible] attribute boolean isMediaRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This attribute will be true if this is a load triggered by a media
|
||||||
|
* element and it's an initial request.
|
||||||
|
*/
|
||||||
|
[infallible] attribute boolean isMediaInitialRequest;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -153,6 +153,8 @@ struct LoadInfoArgs
|
|||||||
bool isInDevToolsContext;
|
bool isInDevToolsContext;
|
||||||
bool parserCreatedScript;
|
bool parserCreatedScript;
|
||||||
bool isFromProcessingFrameAttributes;
|
bool isFromProcessingFrameAttributes;
|
||||||
|
bool isMediaRequest;
|
||||||
|
bool isMediaInitialRequest;
|
||||||
CookieJarSettingsArgs cookieJarSettings;
|
CookieJarSettingsArgs cookieJarSettings;
|
||||||
uint32_t requestBlockingReason;
|
uint32_t requestBlockingReason;
|
||||||
CSPInfo? cspToInheritInfo;
|
CSPInfo? cspToInheritInfo;
|
||||||
|
|||||||
Reference in New Issue
Block a user