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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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