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;
|
||||
}
|
||||
|
||||
if (setAttrs) {
|
||||
nsCOMPtr<nsILoadInfo> loadInfo = channel->LoadInfo();
|
||||
if (setAttrs) {
|
||||
// The function simply returns NS_OK, so we ignore the return value.
|
||||
Unused << loadInfo->SetOriginAttributes(
|
||||
triggeringPrincipal->OriginAttributesRef());
|
||||
}
|
||||
loadInfo->SetIsMediaRequest(true);
|
||||
loadInfo->SetIsMediaInitialRequest(true);
|
||||
|
||||
nsCOMPtr<nsIClassOfService> cos(do_QueryInterface(channel));
|
||||
if (cos) {
|
||||
|
||||
@@ -750,13 +750,15 @@ nsresult ChannelMediaResource::RecreateChannel() {
|
||||
loadFlags);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (setAttrs) {
|
||||
nsCOMPtr<nsILoadInfo> loadInfo = mChannel->LoadInfo();
|
||||
if (setAttrs) {
|
||||
// The function simply returns NS_OK, so we ignore the return value.
|
||||
Unused << loadInfo->SetOriginAttributes(
|
||||
triggeringPrincipal->OriginAttributesRef());
|
||||
}
|
||||
|
||||
Unused << loadInfo->SetIsMediaRequest(true);
|
||||
|
||||
nsCOMPtr<nsIClassOfService> cos(do_QueryInterface(mChannel));
|
||||
if (cos) {
|
||||
// Unconditionally disable throttling since we want the media to fluently
|
||||
|
||||
@@ -540,10 +540,11 @@ nsresult LoadInfoToLoadInfoArgs(nsILoadInfo* aLoadInfo,
|
||||
aLoadInfo->GetHasValidUserGestureActivation(),
|
||||
aLoadInfo->GetAllowDeprecatedSystemRequests(),
|
||||
aLoadInfo->GetIsInDevToolsContext(), aLoadInfo->GetParserCreatedScript(),
|
||||
aLoadInfo->GetIsFromProcessingFrameAttributes(), cookieJarSettingsArgs,
|
||||
aLoadInfo->GetRequestBlockingReason(), maybeCspToInheritInfo,
|
||||
aLoadInfo->GetHasStoragePermission(), aLoadInfo->GetIsMetaRefresh(),
|
||||
aLoadInfo->GetLoadingEmbedderPolicy()));
|
||||
aLoadInfo->GetIsFromProcessingFrameAttributes(),
|
||||
aLoadInfo->GetIsMediaRequest(), aLoadInfo->GetIsMediaInitialRequest(),
|
||||
cookieJarSettingsArgs, aLoadInfo->GetRequestBlockingReason(),
|
||||
maybeCspToInheritInfo, aLoadInfo->GetHasStoragePermission(),
|
||||
aLoadInfo->GetIsMetaRefresh(), aLoadInfo->GetLoadingEmbedderPolicy()));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@@ -807,6 +808,14 @@ nsresult LoadInfoArgsToLoadInfo(
|
||||
loadInfo->SetIsFromProcessingFrameAttributes();
|
||||
}
|
||||
|
||||
if (loadInfoArgs.isMediaRequest()) {
|
||||
loadInfo->SetIsMediaRequest(true);
|
||||
|
||||
if (loadInfoArgs.isMediaInitialRequest()) {
|
||||
loadInfo->SetIsMediaInitialRequest(true);
|
||||
}
|
||||
}
|
||||
|
||||
loadInfo.forget(outLoadInfo);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -594,6 +594,8 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
|
||||
mHasStoragePermission(rhs.mHasStoragePermission),
|
||||
mIsMetaRefresh(rhs.mIsMetaRefresh),
|
||||
mIsFromProcessingFrameAttributes(rhs.mIsFromProcessingFrameAttributes),
|
||||
mIsMediaRequest(rhs.mIsMediaRequest),
|
||||
mIsMediaInitialRequest(rhs.mIsMediaInitialRequest),
|
||||
mLoadingEmbedderPolicy(rhs.mLoadingEmbedderPolicy) {}
|
||||
|
||||
LoadInfo::LoadInfo(
|
||||
@@ -701,6 +703,8 @@ LoadInfo::LoadInfo(
|
||||
mHasStoragePermission(aHasStoragePermission),
|
||||
mIsMetaRefresh(aIsMetaRefresh),
|
||||
mIsFromProcessingFrameAttributes(false),
|
||||
mIsMediaRequest(false),
|
||||
mIsMediaInitialRequest(false),
|
||||
mLoadingEmbedderPolicy(aLoadingEmbedderPolicy) {
|
||||
// Only top level TYPE_DOCUMENT loads can have a null loadingPrincipal
|
||||
MOZ_ASSERT(mLoadingPrincipal ||
|
||||
@@ -1678,6 +1682,32 @@ LoadInfo::GetIsFromProcessingFrameAttributes(
|
||||
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
|
||||
LoadInfo::GetResultPrincipalURI(nsIURI** aURI) {
|
||||
NS_IF_ADDREF(*aURI = mResultPrincipalURI);
|
||||
|
||||
@@ -331,6 +331,10 @@ class LoadInfo final : public nsILoadInfo {
|
||||
// See nsILoadInfo.isFromProcessingFrameAttributes
|
||||
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.
|
||||
// If the value is nsILoadInfo::EMBEDDER_POLICY_REQUIRE_CORP, CORP checking
|
||||
// must be performed for the loading.
|
||||
|
||||
@@ -540,6 +540,26 @@ TRRLoadInfo::GetIsFromProcessingFrameAttributes(
|
||||
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
|
||||
TRRLoadInfo::GetResultPrincipalURI(nsIURI** aURI) {
|
||||
nsCOMPtr<nsIURI> uri = mResultPrincipalURI;
|
||||
|
||||
@@ -1359,4 +1359,16 @@ interface nsILoadInfo : nsISupports
|
||||
*/
|
||||
[infallible] attribute nsILoadInfo_CrossOriginEmbedderPolicy
|
||||
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 parserCreatedScript;
|
||||
bool isFromProcessingFrameAttributes;
|
||||
bool isMediaRequest;
|
||||
bool isMediaInitialRequest;
|
||||
CookieJarSettingsArgs cookieJarSettings;
|
||||
uint32_t requestBlockingReason;
|
||||
CSPInfo? cspToInheritInfo;
|
||||
|
||||
Reference in New Issue
Block a user