Skip to content
This repository has been archived by the owner on Aug 4, 2022. It is now read-only.

Commit

Permalink
Backed out changeset be04f96bf78b (bug 1347791)
Browse files Browse the repository at this point in the history
  • Loading branch information
BavarianTomcat committed May 17, 2017
1 parent f03c7cb commit 19536bf
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 2 deletions.
3 changes: 3 additions & 0 deletions dom/audiochannel/AudioChannelAgent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,9 @@ AudioChannelAgent::InitInternal(nsPIDOMWindowInner* aWindow,
mCallback = aCallback;
}

RefPtr<AudioChannelService> service = AudioChannelService::GetOrCreate();
service->NotifyCreatedNewAgent(this);

MOZ_LOG(AudioChannelService::GetAudioChannelLog(), LogLevel::Debug,
("AudioChannelAgent, InitInternal, this = %p, type = %d, "
"owner = %p, hasCallback = %d\n", this, mAudioChannelType,
Expand Down
13 changes: 13 additions & 0 deletions dom/audiochannel/AudioChannelService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,19 @@ AudioChannelService::~AudioChannelService()
{
}

void
AudioChannelService::NotifyCreatedNewAgent(AudioChannelAgent* aAgent)
{
MOZ_ASSERT(aAgent);

nsCOMPtr<nsPIDOMWindowOuter> window = aAgent->Window();
if (!window) {
return;
}

window->NotifyCreatedNewMediaComponent();
}

void
AudioChannelService::RegisterAudioChannelAgent(AudioChannelAgent* aAgent,
AudibleState aAudible)
Expand Down
2 changes: 2 additions & 0 deletions dom/audiochannel/AudioChannelService.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ class AudioChannelService final : public nsIAudioChannelService
void ChildStatusReceived(uint64_t aChildID, bool aTelephonyChannel,
bool aContentOrNormalChannel, bool aAnyChannel);

void NotifyCreatedNewAgent(AudioChannelAgent* aAgent);

void NotifyMediaResumedFromBlock(nsPIDOMWindowOuter* aWindow);

private:
Expand Down
33 changes: 31 additions & 2 deletions dom/base/nsGlobalWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1007,7 +1007,8 @@ nsPIDOMWindow<T>::nsPIDOMWindow(nsPIDOMWindowOuter *aOuterWindow)
// Make sure no actual window ends up with mWindowID == 0
mWindowID(NextWindowID()), mHasNotifiedGlobalCreated(false),
mMarkedCCGeneration(0), mServiceWorkersTestingEnabled(false),
mLargeAllocStatus(LargeAllocStatus::NONE)
mLargeAllocStatus(LargeAllocStatus::NONE),
mShouldResumeOnFirstActiveMediaComponent(false)
{
if (aOuterWindow) {
mTimeoutManager =
Expand Down Expand Up @@ -4416,14 +4417,42 @@ nsPIDOMWindowInner::IsRunningTimeout()
return TimeoutManager().IsRunningTimeout();
}

void
nsPIDOMWindowOuter::NotifyCreatedNewMediaComponent()
{
// We would only active media component when there is any alive one.
mShouldResumeOnFirstActiveMediaComponent = true;

// If the document is already on the foreground but the suspend state is still
// suspend-block, that means the media component was created after calling
// MaybeActiveMediaComponents, so the window's suspend state doesn't be
// changed yet. Therefore, we need to call it again, because the state is only
// changed after there exists alive media within the window.
MaybeActiveMediaComponents();
}

void
nsPIDOMWindowOuter::MaybeActiveMediaComponents()
{
if (IsInnerWindow()) {
return mOuterWindow->MaybeActiveMediaComponents();
}

if (mMediaSuspend != nsISuspendedTypes::SUSPENDED_BLOCK) {
// Resume the media when the tab was blocked and the tab already has
// alive media components.
if (!mShouldResumeOnFirstActiveMediaComponent ||
mMediaSuspend != nsISuspendedTypes::SUSPENDED_BLOCK) {
return;
}

nsCOMPtr<nsPIDOMWindowInner> inner = GetCurrentInnerWindow();
if (!inner) {
return;
}

// If the document is not visible, don't need to resume it.
nsCOMPtr<nsIDocument> doc = inner->GetExtantDoc();
if (!doc || doc->Hidden()) {
return;
}

Expand Down
5 changes: 5 additions & 0 deletions dom/base/nsPIDOMWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,10 @@ class nsPIDOMWindow : public T
bool mServiceWorkersTestingEnabled;

mozilla::dom::LargeAllocStatus mLargeAllocStatus; // Outer window only

// When there is any created alive media component, we can consider to resume
// the media content in the window.
bool mShouldResumeOnFirstActiveMediaComponent;
};

#define NS_PIDOMWINDOWINNER_IID \
Expand Down Expand Up @@ -994,6 +998,7 @@ class nsPIDOMWindowOuter : public nsPIDOMWindow<mozIDOMWindowProxy>
float GetAudioVolume() const;
nsresult SetAudioVolume(float aVolume);

void NotifyCreatedNewMediaComponent();
void MaybeActiveMediaComponents();

void SetServiceWorkersTestingEnabled(bool aEnabled);
Expand Down

0 comments on commit 19536bf

Please sign in to comment.