From d8bbc7858622b6d9c278469aab701ca0b609cddf Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 15 May 2024 05:35:49 +0200 Subject: Merging upstream version 126.0. Signed-off-by: Daniel Baumann --- dom/media/hls/HLSDecoder.cpp | 46 ++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) (limited to 'dom/media/hls/HLSDecoder.cpp') diff --git a/dom/media/hls/HLSDecoder.cpp b/dom/media/hls/HLSDecoder.cpp index 99bf4c0ff6..dbf2339bef 100644 --- a/dom/media/hls/HLSDecoder.cpp +++ b/dom/media/hls/HLSDecoder.cpp @@ -18,9 +18,11 @@ #include "mozilla/java/GeckoHLSResourceWrapperNatives.h" #include "nsContentUtils.h" #include "nsIChannel.h" +#include "nsIURL.h" #include "nsNetUtil.h" #include "nsThreadUtils.h" #include "mozilla/dom/HTMLMediaElement.h" +#include "mozilla/glean/GleanMetrics.h" #include "mozilla/NullPrincipal.h" #include "mozilla/StaticPrefs_media.h" @@ -169,7 +171,8 @@ nsresult HLSDecoder::Load(nsIChannel* aChannel) { mChannel = aChannel; nsCString spec; Unused << mURI->GetSpec(spec); - ; + mUsageRecorded = false; + HLSResourceCallbacksSupport::Init(); mJavaCallbacks = java::GeckoHLSResourceWrapper::Callbacks::New(); mCallbackSupport = new HLSResourceCallbacksSupport(this); @@ -253,13 +256,36 @@ void HLSDecoder::NotifyDataArrived() { void HLSDecoder::NotifyLoad(nsCString aMediaUrl) { MOZ_ASSERT(NS_IsMainThread()); MOZ_DIAGNOSTIC_ASSERT(!IsShutdown()); - UpdateCurrentPrincipal(aMediaUrl); + + nsCOMPtr uri; + nsresult rv = NS_NewURI(getter_AddRefs(uri), aMediaUrl.Data()); + NS_ENSURE_SUCCESS_VOID(rv); + + RecordMediaUsage(uri); + UpdateCurrentPrincipal(uri); +} + +void HLSDecoder::RecordMediaUsage(nsIURI* aMediaUri) { + if (mUsageRecorded) { + return; + } + + nsresult rv; + nsCOMPtr url = do_QueryInterface(aMediaUri, &rv); + NS_ENSURE_SUCCESS_VOID(rv); + + // TODO: get hostname. See bug 1887053. + nsAutoCString mediaExt; + Unused << url->GetFileExtension(mediaExt); + glean::hls::MediaLoadExtra extra = {.mediaExtension = Some(mediaExt.get())}; + glean::hls::media_load.Record(Some(extra)); + mUsageRecorded = true; } // Should be called when the decoder loads media from a URL to ensure the // principal of the media element is appropriately set for CORS. -void HLSDecoder::UpdateCurrentPrincipal(nsCString aMediaUrl) { - nsCOMPtr principal = GetContentPrincipal(aMediaUrl); +void HLSDecoder::UpdateCurrentPrincipal(nsIURI* aMediaUri) { + nsCOMPtr principal = GetContentPrincipal(aMediaUri); MOZ_DIAGNOSTIC_ASSERT(principal); // Check the subsumption of old and new principals. Should be either @@ -280,12 +306,8 @@ void HLSDecoder::UpdateCurrentPrincipal(nsCString aMediaUrl) { } already_AddRefed HLSDecoder::GetContentPrincipal( - nsCString aMediaUrl) { - nsCOMPtr uri; - nsresult rv = NS_NewURI(getter_AddRefs(uri), aMediaUrl.Data()); - NS_ENSURE_SUCCESS(rv, nullptr); + nsIURI* aMediaUri) { RefPtr element = GetOwner()->GetMediaElement(); - NS_ENSURE_SUCCESS(rv, nullptr); nsSecurityFlags securityFlags = element->ShouldCheckAllowOrigin() ? nsILoadInfo::SEC_REQUIRE_CORS_INHERITS_SEC_CONTEXT @@ -294,9 +316,9 @@ already_AddRefed HLSDecoder::GetContentPrincipal( securityFlags |= nsILoadInfo::SEC_COOKIES_INCLUDE; } nsCOMPtr channel; - rv = NS_NewChannel(getter_AddRefs(channel), uri, - static_cast(element), securityFlags, - nsIContentPolicy::TYPE_INTERNAL_VIDEO); + nsresult rv = NS_NewChannel( + getter_AddRefs(channel), aMediaUri, static_cast(element), + securityFlags, nsIContentPolicy::TYPE_INTERNAL_VIDEO); NS_ENSURE_SUCCESS(rv, nullptr); nsCOMPtr principal; nsIScriptSecurityManager* secMan = nsContentUtils::GetSecurityManager(); -- cgit v1.2.3