mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-04 13:07:52 +00:00
Bug 1320005 - don't show the 'play tab' icon for the media element without audio track. r=baku
MozReview-Commit-ID: K42I0yWaI7N --HG-- extra : rebase_source : 6b2cd50bb327a644f9092c1e018203854d3d899f
This commit is contained in:
parent
dc0394a1d9
commit
ce4c37a7ff
@ -191,7 +191,7 @@ AudioChannelAgent::InitInternal(nsPIDOMWindowInner* aWindow,
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioChannelAgent::NotifyStartedPlaying(AudioPlaybackConfig* aConfig,
|
||||
bool aAudible)
|
||||
uint8_t aAudible)
|
||||
{
|
||||
if (NS_WARN_IF(!aConfig)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
@ -203,8 +203,9 @@ AudioChannelAgent::NotifyStartedPlaying(AudioPlaybackConfig* aConfig,
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(AudioChannelService::AudibleState::eAudible == true &&
|
||||
AudioChannelService::AudibleState::eNotAudible == false);
|
||||
MOZ_ASSERT(AudioChannelService::AudibleState::eNotAudible == 0 &&
|
||||
AudioChannelService::AudibleState::eMaybeAudible == 1 &&
|
||||
AudioChannelService::AudibleState::eAudible == 2);
|
||||
service->RegisterAudioChannelAgent(this,
|
||||
static_cast<AudioChannelService::AudibleState>(aAudible));
|
||||
|
||||
@ -242,7 +243,7 @@ AudioChannelAgent::NotifyStoppedPlaying()
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
AudioChannelAgent::NotifyStartedAudible(bool aAudible, uint32_t aReason)
|
||||
AudioChannelAgent::NotifyStartedAudible(uint8_t aAudible, uint32_t aReason)
|
||||
{
|
||||
MOZ_LOG(AudioChannelService::GetAudioChannelLog(), LogLevel::Debug,
|
||||
("AudioChannelAgent, NotifyStartedAudible, this = %p, "
|
||||
|
@ -1227,14 +1227,14 @@ AudioChannelService::AudioChannelWindow::AppendAgent(AudioChannelAgent* aAgent,
|
||||
RequestAudioFocus(aAgent);
|
||||
AppendAgentAndIncreaseAgentsNum(aAgent);
|
||||
AudioCapturedChanged(aAgent, AudioCaptureState::eCapturing);
|
||||
if (aAudible) {
|
||||
if (aAudible == AudibleState::eAudible) {
|
||||
AudioAudibleChanged(aAgent,
|
||||
AudibleState::eAudible,
|
||||
AudibleChangedReasons::eDataAudibleChanged);
|
||||
} else if (IsEnableAudioCompetingForAllAgents() && !aAudible) {
|
||||
} else if (IsEnableAudioCompetingForAllAgents() &&
|
||||
aAudible != AudibleState::eAudible) {
|
||||
NotifyAudioCompetingChanged(aAgent, true);
|
||||
}
|
||||
MaybeNotifyMediaBlocked(aAgent);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1305,13 +1305,16 @@ AudioChannelService::AudioChannelWindow::AudioAudibleChanged(AudioChannelAgent*
|
||||
{
|
||||
MOZ_ASSERT(aAgent);
|
||||
|
||||
if (aAudible) {
|
||||
if (aAudible == AudibleState::eAudible) {
|
||||
AppendAudibleAgentIfNotContained(aAgent, aReason);
|
||||
} else {
|
||||
RemoveAudibleAgentIfContained(aAgent, aReason);
|
||||
}
|
||||
|
||||
NotifyAudioCompetingChanged(aAgent, aAudible);
|
||||
NotifyAudioCompetingChanged(aAgent, aAudible == AudibleState::eAudible);
|
||||
if (aAudible != AudibleState::eNotAudible) {
|
||||
MaybeNotifyMediaBlocked(aAgent);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -1368,7 +1371,9 @@ AudioChannelService::AudioChannelWindow::NotifyAudioAudibleChanged(nsPIDOMWindow
|
||||
AudibleChangedReasons aReason)
|
||||
{
|
||||
RefPtr<AudioPlaybackRunnable> runnable =
|
||||
new AudioPlaybackRunnable(aWindow, aAudible, aReason);
|
||||
new AudioPlaybackRunnable(aWindow,
|
||||
aAudible == AudibleState::eAudible,
|
||||
aReason);
|
||||
DebugOnly<nsresult> rv = NS_DispatchToCurrentThread(runnable);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "NS_DispatchToCurrentThread failed");
|
||||
}
|
||||
|
@ -65,9 +65,15 @@ public:
|
||||
NS_DECL_NSIOBSERVER
|
||||
NS_DECL_NSIAUDIOCHANNELSERVICE
|
||||
|
||||
enum AudibleState : bool {
|
||||
eAudible = true,
|
||||
eNotAudible = false
|
||||
/**
|
||||
* eNotAudible : agent is not audible
|
||||
* eMaybeAudible : agent is not audible now, but it might be audible later
|
||||
* eAudible : agent is audible now
|
||||
*/
|
||||
enum AudibleState : uint8_t {
|
||||
eNotAudible = 0,
|
||||
eMaybeAudible = 1,
|
||||
eAudible = 2
|
||||
};
|
||||
|
||||
enum AudioCaptureState : bool {
|
||||
|
@ -163,7 +163,7 @@ interface nsIAudioChannelAgent : nsISupports
|
||||
* @param config
|
||||
* It contains the playback related states (volume/mute/suspend)
|
||||
*/
|
||||
void notifyStartedPlaying(in AudioPlaybackConfig config, in bool audible);
|
||||
void notifyStartedPlaying(in AudioPlaybackConfig config, in uint8_t audible);
|
||||
|
||||
/**
|
||||
* Notify the agent we no longer want to play.
|
||||
@ -183,5 +183,5 @@ interface nsIAudioChannelAgent : nsISupports
|
||||
* notify the actually audible state to other services which want to know
|
||||
* about that, ex. tab sound indicator.
|
||||
*/
|
||||
void notifyStartedAudible(in bool audible, in uint32_t reason);
|
||||
void notifyStartedAudible(in uint8_t audible, in uint32_t reason);
|
||||
};
|
||||
|
@ -753,7 +753,7 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
bool newAudibleState = IsOwnerAudible();
|
||||
AudibleState newAudibleState = IsOwnerAudible();
|
||||
if (mIsOwnerAudible == newAudibleState) {
|
||||
return;
|
||||
}
|
||||
@ -976,25 +976,25 @@ private:
|
||||
mSuspended == nsISuspendedTypes::SUSPENDED_BLOCK);
|
||||
}
|
||||
|
||||
bool
|
||||
AudibleState
|
||||
IsOwnerAudible() const
|
||||
{
|
||||
// Muted or the volume should not be ~0
|
||||
if (mOwner->Muted() || (std::fabs(mOwner->Volume()) <= 1e-7)) {
|
||||
return false;
|
||||
return AudioChannelService::AudibleState::eNotAudible;
|
||||
}
|
||||
|
||||
// No sound can be heard during suspending.
|
||||
if (IsSuspended()) {
|
||||
return false;
|
||||
// No audio track.
|
||||
if (!mOwner->HasAudio()) {
|
||||
return AudioChannelService::AudibleState::eNotAudible;
|
||||
}
|
||||
|
||||
// Silent audio track.
|
||||
if (!mOwner->mIsAudioTrackAudible) {
|
||||
return false;
|
||||
// Might be audible but not yet.
|
||||
if (mOwner->HasAudio() && !mOwner->mIsAudioTrackAudible) {
|
||||
return AudioChannelService::AudibleState::eMaybeAudible;
|
||||
}
|
||||
|
||||
return true;
|
||||
return AudioChannelService::AudibleState::eAudible;
|
||||
}
|
||||
|
||||
bool
|
||||
@ -1064,8 +1064,8 @@ private:
|
||||
// and stop the audio channel agent. MediaElement can only be restarted by
|
||||
// play().
|
||||
SuspendTypes mSuspended;
|
||||
// True if media element is audible for users.
|
||||
bool mIsOwnerAudible;
|
||||
// Indicate whether media element is audible for users.
|
||||
AudibleState mIsOwnerAudible;
|
||||
bool mIsShutDown;
|
||||
};
|
||||
|
||||
@ -6976,7 +6976,12 @@ HTMLMediaElement::ShouldElementBePaused()
|
||||
void
|
||||
HTMLMediaElement::SetMediaInfo(const MediaInfo& aInfo)
|
||||
{
|
||||
const bool oldHasAudio = mMediaInfo.HasAudio();
|
||||
mMediaInfo = aInfo;
|
||||
if (aInfo.HasAudio() != oldHasAudio) {
|
||||
NotifyAudioPlaybackChanged(
|
||||
AudioChannelService::AudibleChangedReasons::eDataAudibleChanged);
|
||||
}
|
||||
if (mAudioChannelWrapper) {
|
||||
mAudioChannelWrapper->AudioCaptureStreamChangeIfNeeded();
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ typedef uint16_t nsMediaNetworkState;
|
||||
typedef uint16_t nsMediaReadyState;
|
||||
typedef uint32_t SuspendTypes;
|
||||
typedef uint32_t AudibleChangedReasons;
|
||||
typedef uint8_t AudibleState;
|
||||
|
||||
namespace mozilla {
|
||||
class DecoderDoctorDiagnostics;
|
||||
|
Loading…
x
Reference in New Issue
Block a user