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:
Eden Chuang
2021-03-30 00:52:31 +00:00
parent 2e4e65ad4d
commit fde79b287b
8 changed files with 87 additions and 6 deletions

View File

@@ -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) {

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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.

View File

@@ -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;

View File

@@ -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;
};

View File

@@ -153,6 +153,8 @@ struct LoadInfoArgs
bool isInDevToolsContext;
bool parserCreatedScript;
bool isFromProcessingFrameAttributes;
bool isMediaRequest;
bool isMediaInitialRequest;
CookieJarSettingsArgs cookieJarSettings;
uint32_t requestBlockingReason;
CSPInfo? cspToInheritInfo;