Bug 1120222 - Set AudioSink name to title of MediaElement's parent r=padenot
Differential Revision: https://phabricator.services.mozilla.com/D93462
This commit is contained in:
@@ -4119,6 +4119,49 @@ class HTMLMediaElement::ShutdownObserver : public nsIObserver {
|
||||
|
||||
NS_IMPL_ISUPPORTS(HTMLMediaElement::ShutdownObserver, nsIObserver)
|
||||
|
||||
class HTMLMediaElement::TitleChangeObserver final : public nsIObserver {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
explicit TitleChangeObserver(HTMLMediaElement* aElement)
|
||||
: mElement(aElement) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aElement);
|
||||
}
|
||||
|
||||
NS_IMETHOD Observe(nsISupports*, const char* aTopic,
|
||||
const char16_t*) override {
|
||||
if (mElement) {
|
||||
mElement->UpdateStreamName();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void Subscribe() {
|
||||
nsCOMPtr<nsIObserverService> observerService =
|
||||
mozilla::services::GetObserverService();
|
||||
if (observerService) {
|
||||
observerService->AddObserver(this, "document-title-changed", false);
|
||||
}
|
||||
}
|
||||
|
||||
void Unsubscribe() {
|
||||
nsCOMPtr<nsIObserverService> observerService =
|
||||
mozilla::services::GetObserverService();
|
||||
if (observerService) {
|
||||
observerService->RemoveObserver(this, "document-title-changed");
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
~TitleChangeObserver() = default;
|
||||
|
||||
WeakPtr<HTMLMediaElement> mElement;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(HTMLMediaElement::TitleChangeObserver, nsIObserver)
|
||||
|
||||
HTMLMediaElement::HTMLMediaElement(
|
||||
already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
|
||||
: nsGenericHTMLElement(std::move(aNodeInfo)),
|
||||
@@ -4128,6 +4171,7 @@ HTMLMediaElement::HTMLMediaElement(
|
||||
mAbstractMainThread(
|
||||
OwnerDoc()->AbstractMainThreadFor(TaskCategory::Other)),
|
||||
mShutdownObserver(new ShutdownObserver),
|
||||
mTitleChangeObserver(new TitleChangeObserver(this)),
|
||||
mEventBlocker(new EventBlocker(this)),
|
||||
mPlayed(new TimeRanges(ToSupports(OwnerDoc()))),
|
||||
mTracksCaptured(nullptr, "HTMLMediaElement::mTracksCaptured"),
|
||||
@@ -4209,6 +4253,8 @@ HTMLMediaElement::~HTMLMediaElement() {
|
||||
|
||||
mShutdownObserver->Unsubscribe();
|
||||
|
||||
mTitleChangeObserver->Unsubscribe();
|
||||
|
||||
if (mVideoFrameContainer) {
|
||||
mVideoFrameContainer->ForgetElement();
|
||||
}
|
||||
@@ -7134,6 +7180,13 @@ void HTMLMediaElement::SetMediaInfo(const MediaInfo& aInfo) {
|
||||
if ((aInfo.HasAudio() != oldHasAudio) && mResumeDelayedPlaybackAgent) {
|
||||
mResumeDelayedPlaybackAgent->UpdateAudibleState(this, IsAudible());
|
||||
}
|
||||
nsILoadContext* loadContext = OwnerDoc()->GetLoadContext();
|
||||
if (HasAudio() && loadContext && !loadContext->UsePrivateBrowsing()) {
|
||||
mTitleChangeObserver->Subscribe();
|
||||
UpdateStreamName();
|
||||
} else {
|
||||
mTitleChangeObserver->Unsubscribe();
|
||||
}
|
||||
if (mAudioChannelWrapper) {
|
||||
mAudioChannelWrapper->AudioCaptureTrackChangeIfNeeded();
|
||||
}
|
||||
@@ -7622,6 +7675,17 @@ void HTMLMediaElement::StartMediaControlKeyListenerIfNeeded() {
|
||||
mMediaControlKeyListener->Start();
|
||||
}
|
||||
|
||||
void HTMLMediaElement::UpdateStreamName() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
nsAutoString aTitle;
|
||||
OwnerDoc()->GetTitle(aTitle);
|
||||
|
||||
if (mDecoder) {
|
||||
mDecoder->SetStreamName(aTitle);
|
||||
}
|
||||
}
|
||||
|
||||
void HTMLMediaElement::SetSecondaryMediaStreamRenderer(
|
||||
VideoFrameContainer* aContainer,
|
||||
FirstFrameVideoOutput* aFirstFrameOutput /* = nullptr */) {
|
||||
|
||||
Reference in New Issue
Block a user