Backed out 12 changesets (bug 1247056) for windows bc7 test failures

Backed out changeset 13434fa439d1 (bug 1247056)
Backed out changeset e1e5be2fc586 (bug 1247056)
Backed out changeset f48fd90bf839 (bug 1247056)
Backed out changeset 8e164f6d6c5c (bug 1247056)
Backed out changeset 024d7295b6f4 (bug 1247056)
Backed out changeset 32fc8121ca20 (bug 1247056)
Backed out changeset 49558f78782a (bug 1247056)
Backed out changeset 2b3dce1c98f6 (bug 1247056)
Backed out changeset be036a725d3a (bug 1247056)
Backed out changeset 344a41f87a23 (bug 1247056)
Backed out changeset 0ce3c5cb6e6a (bug 1247056)
Backed out changeset 01aa7f5bde71 (bug 1247056)
This commit is contained in:
Carsten "Tomcat" Book 2016-09-23 16:02:54 +02:00
parent d1b6997af7
commit 70d30f62af
14 changed files with 57 additions and 198 deletions

View File

@ -201,6 +201,10 @@ const TELEMETRY_DDSTAT_CLICKED_FIRST = 3;
const TELEMETRY_DDSTAT_SOLVED = 4;
let gDecoderDoctorHandler = {
shouldShowLearnMoreButton() {
return AppConstants.platform == "win";
},
getLabelForNotificationBox(type) {
if (type == "adobe-cdm-not-found" &&
AppConstants.platform == "win") {
@ -231,22 +235,6 @@ let gDecoderDoctorHandler = {
return gNavigatorBundle.getString("decoder.noCodecsLinux.message");
}
}
if (type == "cannot-initialize-pulseaudio") {
return gNavigatorBundle.getString("decoder.noPulseAudio.message");
}
return "";
},
getSumoForLearnHowButton(type) {
if (AppConstants.isPlatformAndVersionAtLeast("win", "6")) {
if (type == "adobe-cdm-not-activated" ||
type == "platform-decoder-not-found") {
return "fix-video-audio-problems-firefox-windows";
}
}
if (type == "cannot-initialize-pulseaudio") {
return "fix-common-audio-and-video-issues";
}
return "";
},
@ -318,8 +306,7 @@ let gDecoderDoctorHandler = {
histogram.add(decoderDoctorReportId, TELEMETRY_DDSTAT_SHOWN);
let buttons = [];
let sumo = gDecoderDoctorHandler.getSumoForLearnHowButton(type);
if (sumo) {
if (gDecoderDoctorHandler.shouldShowLearnMoreButton()) {
buttons.push({
label: gNavigatorBundle.getString("decoder.noCodecs.button"),
accessKey: gNavigatorBundle.getString("decoder.noCodecs.accesskey"),
@ -333,7 +320,7 @@ let gDecoderDoctorHandler = {
histogram.add(decoderDoctorReportId, TELEMETRY_DDSTAT_CLICKED);
let baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL");
openUILinkIn(baseURL + sumo, "tab");
openUILinkIn(baseURL + "fix-video-audio-problems-firefox-windows", "tab");
}
});
}

View File

@ -734,7 +734,6 @@ decoder.noCodecsXP.message = To play video, you may need to enable Adobes Pri
decoder.noCodecsLinux.message = To play video, you may need to install the required video codecs.
decoder.noHWAcceleration.message = To improve video quality, you may need to install Microsofts Media Feature Pack.
decoder.noHWAccelerationVista.message = To improve video quality, you may need to install Microsofts Platform Update Supplement for Windows Vista.
decoder.noPulseAudio.message = To play audio, you may need to install the required PulseAudio software.
permissions.remove.tooltip = Clear this permission and ask again

View File

@ -134,7 +134,6 @@ MediaPlatformDecoderNotFound=The video on this page cant be played. Your syst
MediaCannotPlayNoDecoders=Cannot play media. No decoders for requested formats: %S
# LOCALIZATION NOTE: %S is a comma-separated list of codecs (e.g. 'video/mp4, video/webm')
MediaNoDecoders=No decoders for some of the requested formats: %S
MediaCannotInitializePulseAudio=Unable to use PulseAudio
# LOCALIZATION NOTE: Do not translate "MediaRecorder".
MediaRecorderMultiTracksNotSupported=MediaRecorder does not support recording multiple tracks of the same type at this time.
# LOCALIZATION NOTE: %S is the ID of the MediaStreamTrack passed to MediaStream.addTrack(). Do not translate "MediaStreamTrack" and "AudioChannel".

View File

@ -351,7 +351,7 @@ AudioStream::Init(uint32_t aNumChannels, uint32_t aRate,
if (!cubebContext) {
NS_WARNING("Can't get cubeb context!");
CubebUtils::ReportCubebStreamInitFailure(true);
return NS_ERROR_DOM_MEDIA_CUBEB_INITIALIZATION_ERR;
return NS_ERROR_FAILURE;
}
return OpenCubeb(cubebContext, params, startTime, CubebUtils::GetFirstStream());

View File

@ -17,7 +17,6 @@
#include "nsITimer.h"
#include "nsIWeakReference.h"
#include "nsPluginHost.h"
#include "nsPrintfCString.h"
#include "VideoUtils.h"
#if defined(XP_WIN)
@ -81,6 +80,10 @@ private:
static const uint32_t sAnalysisPeriod_ms = 1000;
void EnsureTimerIsStarted();
void ReportAnalysis(const NotificationAndReportStringId& aNotification,
bool aIsSolved,
const nsAString& aFormats);
void SynthesizeAnalysis();
// Raw pointer to an nsIDocument.
@ -264,9 +267,6 @@ static const NotificationAndReportStringId sMediaCannotPlayNoDecoders =
static const NotificationAndReportStringId sMediaNoDecoders =
{ dom::DecoderDoctorNotificationType::Can_play_but_some_missing_decoders,
"MediaNoDecoders" };
static const NotificationAndReportStringId sCannotInitializePulseAudio =
{ dom::DecoderDoctorNotificationType::Cannot_initialize_pulseaudio,
"MediaCannotInitializePulseAudio" };
static const NotificationAndReportStringId*
sAllNotificationsAndReportStringIds[] =
@ -276,8 +276,7 @@ sAllNotificationsAndReportStringIds[] =
&sMediaUnsupportedBeforeWindowsVista,
&sMediaPlatformDecoderNotFound,
&sMediaCannotPlayNoDecoders,
&sMediaNoDecoders,
&sCannotInitializePulseAudio
&sMediaNoDecoders
};
static void
@ -312,43 +311,32 @@ DispatchNotification(nsISupports* aSubject,
}
}
static void
ReportToConsole(nsIDocument* aDocument,
const char* aConsoleStringId,
const nsAString& aParams)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aDocument);
// 'params' will only be forwarded for non-empty strings.
const char16_t* params[1] = { aParams.Data() };
DD_DEBUG("DecoderDoctorDiagnostics.cpp:ReportToConsole(doc=%p) ReportToConsole - aMsg='%s' params[0]='%s'",
aDocument, aConsoleStringId,
aParams.IsEmpty() ? "<no params>" : NS_ConvertUTF16toUTF8(params[0]).get());
nsContentUtils::ReportToConsole(nsIScriptError::warningFlag,
NS_LITERAL_CSTRING("Media"),
aDocument,
nsContentUtils::eDOM_PROPERTIES,
aConsoleStringId,
aParams.IsEmpty() ? nullptr : params,
aParams.IsEmpty() ? 0 : 1);
}
static void
ReportAnalysis(nsIDocument* aDocument,
const NotificationAndReportStringId& aNotification,
bool aIsSolved,
const nsAString& aParams)
void
DecoderDoctorDocumentWatcher::ReportAnalysis(
const NotificationAndReportStringId& aNotification,
bool aIsSolved,
const nsAString& aParams)
{
MOZ_ASSERT(NS_IsMainThread());
if (!aDocument) {
if (!mDocument) {
return;
}
// Report non-solved issues to console.
if (!aIsSolved) {
ReportToConsole(aDocument, aNotification.mReportStringId, aParams);
// 'params' will only be forwarded for non-empty strings.
const char16_t* params[1] = { aParams.Data() };
DD_DEBUG("DecoderDoctorDocumentWatcher[%p, doc=%p]::ReportAnalysis() ReportToConsole - aMsg='%s' params[0]='%s'",
this, mDocument, aNotification.mReportStringId,
aParams.IsEmpty() ? "<no params>" : NS_ConvertUTF16toUTF8(params[0]).get());
nsContentUtils::ReportToConsole(nsIScriptError::warningFlag,
NS_LITERAL_CSTRING("Media"),
mDocument,
nsContentUtils::eDOM_PROPERTIES,
aNotification.mReportStringId,
aParams.IsEmpty() ? nullptr : params,
aParams.IsEmpty() ? 0 : 1);
}
// "media.decoder-doctor.notifications-allowed" controls which notifications
@ -363,7 +351,7 @@ ReportAnalysis(nsIDocument* aDocument,
if (filter.EqualsLiteral("*")
|| StringListContains(filter, aNotification.mReportStringId)) {
DispatchNotification(
aDocument->GetInnerWindow(), aNotification, aIsSolved, aParams);
mDocument->GetInnerWindow(), aNotification, aIsSolved, aParams);
}
}
@ -477,10 +465,6 @@ DecoderDoctorDocumentWatcher::SynthesizeAnalysis()
}
}
break;
case DecoderDoctorDiagnostics::eEvent:
// Events shouldn't be stored for processing.
MOZ_ASSERT(false);
break;
default:
MOZ_ASSERT(diag.mDecoderDoctorDiagnostics.Type()
== DecoderDoctorDiagnostics::eFormatSupportCheck
@ -523,7 +507,7 @@ DecoderDoctorDocumentWatcher::SynthesizeAnalysis()
NS_ConvertUTF16toUTF8(workingFormat).get(),
formatsPref.Data(),
NS_ConvertUTF16toUTF8(formatsWithIssues).get());
ReportAnalysis(mDocument, *id, true, workingFormat);
ReportAnalysis(*id, true, workingFormat);
// This particular Notification&ReportId has been solved, no need
// to keep looking at other keysys/formats that might solve it too.
solved = true;
@ -550,8 +534,8 @@ DecoderDoctorDocumentWatcher::SynthesizeAnalysis()
if (CheckSilverlight() != eSilverlightEnabled) {
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::SynthesizeAnalysis() - unsupported key systems: %s, widevine without WMF nor Silverlight",
this, mDocument, NS_ConvertUTF16toUTF8(unsupportedKeySystems).get());
ReportAnalysis(mDocument, sMediaWidevineNoWMFNoSilverlight,
false, unsupportedKeySystems);
ReportAnalysis(
sMediaWidevineNoWMFNoSilverlight, false, unsupportedKeySystems);
return;
}
break;
@ -571,12 +555,11 @@ DecoderDoctorDocumentWatcher::SynthesizeAnalysis()
if (IsVistaOrLater()) {
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::SynthesizeAnalysis() - unplayable formats: %s -> Cannot play media because WMF was not found",
this, mDocument, NS_ConvertUTF16toUTF8(formatsRequiringWMF).get());
ReportAnalysis(mDocument, sMediaWMFNeeded, false, formatsRequiringWMF);
ReportAnalysis(sMediaWMFNeeded, false, formatsRequiringWMF);
} else {
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::SynthesizeAnalysis() - unplayable formats: %s -> Cannot play media before Windows Vista",
this, mDocument, NS_ConvertUTF16toUTF8(formatsRequiringWMF).get());
ReportAnalysis(mDocument, sMediaUnsupportedBeforeWindowsVista,
false, formatsRequiringWMF);
ReportAnalysis(sMediaUnsupportedBeforeWindowsVista, false, formatsRequiringWMF);
}
return;
}
@ -585,22 +568,21 @@ DecoderDoctorDocumentWatcher::SynthesizeAnalysis()
if (!formatsRequiringFFMpeg.IsEmpty()) {
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::SynthesizeAnalysis() - unplayable formats: %s -> Cannot play media because platform decoder was not found",
this, mDocument, NS_ConvertUTF16toUTF8(formatsRequiringFFMpeg).get());
ReportAnalysis(mDocument, sMediaPlatformDecoderNotFound,
ReportAnalysis(sMediaPlatformDecoderNotFound,
false, formatsRequiringFFMpeg);
return;
}
#endif
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::SynthesizeAnalysis() - Cannot play media, unplayable formats: %s",
this, mDocument, NS_ConvertUTF16toUTF8(unplayableFormats).get());
ReportAnalysis(mDocument, sMediaCannotPlayNoDecoders,
false, unplayableFormats);
ReportAnalysis(sMediaCannotPlayNoDecoders, false, unplayableFormats);
return;
}
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::SynthesizeAnalysis() - Can play media, but no decoders for some requested formats: %s",
this, mDocument, NS_ConvertUTF16toUTF8(unplayableFormats).get());
if (Preferences::GetBool("media.decoder-doctor.verbose", false)) {
ReportAnalysis(mDocument, sMediaNoDecoders, false, unplayableFormats);
ReportAnalysis(sMediaNoDecoders, false, unplayableFormats);
}
return;
}
@ -613,7 +595,6 @@ DecoderDoctorDocumentWatcher::AddDiagnostics(DecoderDoctorDiagnostics&& aDiagnos
const char* aCallSite)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aDiagnostics.Type() != DecoderDoctorDiagnostics::eEvent);
if (!mDocument) {
return;
@ -621,7 +602,8 @@ DecoderDoctorDocumentWatcher::AddDiagnostics(DecoderDoctorDiagnostics&& aDiagnos
DD_DEBUG("DecoderDoctorDocumentWatcher[%p, doc=%p]::AddDiagnostics(DecoderDoctorDiagnostics{%s}, call site '%s')",
this, mDocument, aDiagnostics.GetDescription().Data(), aCallSite);
mDiagnosticsSequence.AppendElement(Diagnostics(Move(aDiagnostics), aCallSite));
mDiagnosticsSequence.AppendElement(
Diagnostics(Move(aDiagnostics), aCallSite));
EnsureTimerIsStarted();
}
@ -729,71 +711,26 @@ DecoderDoctorDiagnostics::StoreMediaKeySystemAccess(nsIDocument* aDocument,
if (NS_WARN_IF(!watcher)) {
DD_WARN("DecoderDoctorDiagnostics[%p]::StoreMediaKeySystemAccess(nsIDocument* aDocument=%p, keysystem='%s', supported=%d, call site '%s') - Could not create document watcher",
this, aDocument, NS_ConvertUTF16toUTF8(aKeySystem).get(), aIsSupported, aCallSite);
this, NS_ConvertUTF16toUTF8(aKeySystem).get(), aIsSupported, aCallSite);
return;
}
mKeySystem = aKeySystem;
mIsKeySystemSupported = aIsSupported;
// StoreMediaKeySystemAccess should only be called once, after all data is
// available, so it is safe to Move() from this object.
// StoreDiagnostics should only be called once, after all data is available,
// so it is safe to Move() from this object.
watcher->AddDiagnostics(Move(*this), aCallSite);
// Even though it's moved-from, the type should stay set
// (Only used to ensure that we do store only once.)
MOZ_ASSERT(mDiagnosticsType == eMediaKeySystemAccessRequest);
}
void
DecoderDoctorDiagnostics::StoreEvent(nsIDocument* aDocument,
const DecoderDoctorEvent& aEvent,
const char* aCallSite)
{
MOZ_ASSERT(NS_IsMainThread());
// Make sure we only store once.
MOZ_ASSERT(mDiagnosticsType == eUnsaved);
mDiagnosticsType = eEvent;
mEvent = aEvent;
if (NS_WARN_IF(!aDocument)) {
DD_WARN("DecoderDoctorDiagnostics[%p]::StoreEvent(nsIDocument* aDocument=nullptr, aEvent=%s, call site '%s')",
this, GetDescription().get(), aCallSite);
return;
}
// Don't keep events for later processing, just handle them now.
#ifdef MOZ_PULSEAUDIO
switch (aEvent.mDomain) {
case DecoderDoctorEvent::eAudioSinkStartup:
if (aEvent.mResult == NS_ERROR_DOM_MEDIA_CUBEB_INITIALIZATION_ERR) {
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::AddDiagnostics() - unable to initialize PulseAudio",
this, aDocument);
ReportAnalysis(aDocument, sCannotInitializePulseAudio,
false, NS_LITERAL_STRING("*"));
} else if (aEvent.mResult == NS_OK) {
DD_INFO("DecoderDoctorDocumentWatcher[%p, doc=%p]::AddDiagnostics() - now able to initialize PulseAudio",
this, aDocument);
ReportAnalysis(aDocument, sCannotInitializePulseAudio,
true, NS_LITERAL_STRING("*"));
}
break;
}
#endif // MOZ_PULSEAUDIO
}
static const char*
EventDomainString(DecoderDoctorEvent::Domain aDomain)
{
switch (aDomain) {
case DecoderDoctorEvent::eAudioSinkStartup:
return "audio-sink-startup";
}
return "?";
}
nsCString
DecoderDoctorDiagnostics::GetDescription() const
{
MOZ_ASSERT(mDiagnosticsType == eFormatSupportCheck
|| mDiagnosticsType == eMediaKeySystemAccessRequest);
nsCString s;
switch (mDiagnosticsType) {
case eUnsaved:
@ -835,12 +772,7 @@ DecoderDoctorDiagnostics::GetDescription() const
break;
}
break;
case eEvent:
s = nsPrintfCString("event domain %s result=%u",
EventDomainString(mEvent.mDomain), mEvent.mResult);
break;
default:
MOZ_ASSERT_UNREACHABLE("Unexpected DiagnosticsType");
s = "?";
break;
}

View File

@ -13,13 +13,6 @@ class nsIDocument;
namespace mozilla {
struct DecoderDoctorEvent {
enum Domain {
eAudioSinkStartup,
} mDomain;
nsresult mResult;
};
// DecoderDoctorDiagnostics class, used to gather data from PDMs/DecoderTraits,
// and then notify the user about issues preventing (or worsening) playback.
//
@ -53,15 +46,10 @@ public:
bool aIsSupported,
const char* aCallSite);
void StoreEvent(nsIDocument* aDocument,
const DecoderDoctorEvent& aEvent,
const char* aCallSite);
enum DiagnosticsType {
eUnsaved,
eFormatSupportCheck,
eMediaKeySystemAccessRequest,
eEvent
eMediaKeySystemAccessRequest
};
DiagnosticsType Type() const { return mDiagnosticsType; }
@ -103,11 +91,6 @@ public:
return mKeySystemIssue;
}
DecoderDoctorEvent event() const
{
return mEvent;
}
private:
// Currently-known type of diagnostics. Set from one of the 'Store...' methods.
// This helps ensure diagnostics are only stored once,
@ -128,8 +111,6 @@ private:
nsString mKeySystem;
bool mIsKeySystemSupported = false;
KeySystemIssue mKeySystemIssue = eUnset;
DecoderDoctorEvent mEvent;
};
} // namespace mozilla

View File

@ -608,7 +608,6 @@ MediaDecoder::Shutdown()
mFirstFrameLoadedListener.Disconnect();
mOnPlaybackEvent.Disconnect();
mOnPlaybackErrorEvent.Disconnect();
mOnDecoderDoctorEvent.Disconnect();
mOnMediaNotSeekable.Disconnect();
mDecoderStateMachine->BeginShutdown()
@ -681,24 +680,6 @@ MediaDecoder::OnPlaybackErrorEvent(const MediaResult& aError)
DecodeError(aError);
}
void
MediaDecoder::OnDecoderDoctorEvent(DecoderDoctorEvent aEvent)
{
MOZ_ASSERT(NS_IsMainThread());
// OnDecoderDoctorEvent is disconnected at shutdown time.
MOZ_ASSERT(!IsShutdown());
HTMLMediaElement* element = mOwner->GetMediaElement();
if (!element) {
return;
}
nsIDocument* doc = element->OwnerDoc();
if (!doc) {
return;
}
DecoderDoctorDiagnostics diags;
diags.StoreEvent(doc, aEvent, __func__);
}
void
MediaDecoder::FinishShutdown()
{
@ -774,8 +755,6 @@ MediaDecoder::SetStateMachineParameters()
AbstractThread::MainThread(), this, &MediaDecoder::OnPlaybackEvent);
mOnPlaybackErrorEvent = mDecoderStateMachine->OnPlaybackErrorEvent().Connect(
AbstractThread::MainThread(), this, &MediaDecoder::OnPlaybackErrorEvent);
mOnDecoderDoctorEvent = mDecoderStateMachine->OnDecoderDoctorEvent().Connect(
AbstractThread::MainThread(), this, &MediaDecoder::OnDecoderDoctorEvent);
mOnMediaNotSeekable = mDecoderStateMachine->OnMediaNotSeekable().Connect(
AbstractThread::MainThread(), this, &MediaDecoder::OnMediaNotSeekable);
}

View File

@ -27,7 +27,6 @@
#include "nsITimer.h"
#include "AbstractMediaDecoder.h"
#include "DecoderDoctorDiagnostics.h"
#include "MediaDecoderOwner.h"
#include "MediaEventSource.h"
#include "MediaMetadataManager.h"
@ -595,8 +594,6 @@ private:
void OnPlaybackEvent(MediaEventType aEvent);
void OnPlaybackErrorEvent(const MediaResult& aError);
void OnDecoderDoctorEvent(DecoderDoctorEvent aEvent);
void OnMediaNotSeekable()
{
SetMediaSeekable(false);
@ -736,7 +733,6 @@ protected:
MediaEventListener mOnPlaybackEvent;
MediaEventListener mOnPlaybackErrorEvent;
MediaEventListener mOnDecoderDoctorEvent;
MediaEventListener mOnMediaNotSeekable;
protected:

View File

@ -2875,13 +2875,9 @@ void MediaDecoderStateMachine::OnMediaSinkAudioComplete()
mAudioCompleted = true;
// To notify PlaybackEnded as soon as possible.
ScheduleStateMachine();
// Report OK to Decoder Doctor (to know if issue may have been resolved).
mOnDecoderDoctorEvent.Notify(
DecoderDoctorEvent{DecoderDoctorEvent::eAudioSinkStartup, NS_OK});
}
void MediaDecoderStateMachine::OnMediaSinkAudioError(nsresult aResult)
void MediaDecoderStateMachine::OnMediaSinkAudioError()
{
MOZ_ASSERT(OnTaskQueue());
MOZ_ASSERT(mInfo.HasAudio());
@ -2890,11 +2886,6 @@ void MediaDecoderStateMachine::OnMediaSinkAudioError(nsresult aResult)
mMediaSinkAudioPromise.Complete();
mAudioCompleted = true;
// Result should never be NS_OK in this *error* handler. Report to Dec-Doc.
MOZ_ASSERT(NS_FAILED(aResult));
mOnDecoderDoctorEvent.Notify(
DecoderDoctorEvent{DecoderDoctorEvent::eAudioSinkStartup, aResult});
// Make the best effort to continue playback when there is video.
if (HasVideo()) {
return;

View File

@ -247,9 +247,6 @@ public:
MediaEventSource<MediaResult>&
OnPlaybackErrorEvent() { return mOnPlaybackErrorEvent; }
MediaEventSource<DecoderDoctorEvent>&
OnDecoderDoctorEvent() { return mOnDecoderDoctorEvent; }
size_t SizeOfVideoQueue() const;
size_t SizeOfAudioQueue() const;
@ -556,7 +553,7 @@ private:
void OnMediaSinkVideoComplete();
// Rejected by the MediaSink to signal errors for audio/video.
void OnMediaSinkAudioError(nsresult aResult);
void OnMediaSinkAudioError();
void OnMediaSinkVideoError();
// Return true if the video decoder's decode speed can not catch up the
@ -859,8 +856,6 @@ private:
MediaEventProducer<MediaEventType> mOnPlaybackEvent;
MediaEventProducer<MediaResult> mOnPlaybackErrorEvent;
MediaEventProducer<DecoderDoctorEvent> mOnDecoderDoctorEvent;
// True if audio is offloading.
// Playback will not start when audio is offloading.
bool mAudioOffloading;

View File

@ -7,8 +7,7 @@
enum DecoderDoctorNotificationType {
"cannot-play",
"platform-decoder-not-found",
"can-play-but-some-missing-decoders",
"cannot-initialize-pulseaudio",
"can-play-but-some-missing-decoders"
};
dictionary DecoderDoctorNotification {

View File

@ -391,7 +391,7 @@ pref("media.gmp.storage.version.expected", 1);
// Filter what triggers user notifications.
// See DecoderDoctorDocumentWatcher::ReportAnalysis for details.
pref("media.decoder-doctor.notifications-allowed", "MediaWMFNeeded,MediaWidevineNoWMFNoSilverlight,MediaCannotInitializePulseAudio");
pref("media.decoder-doctor.notifications-allowed", "MediaWMFNeeded,MediaWidevineNoWMFNoSilverlight");
// Whether we report partial failures.
pref("media.decoder-doctor.verbose", false);
// Whether DD should consider WMF-disabled a WMF failure, useful for testing.

View File

@ -3252,8 +3252,13 @@ dnl ==================================
dnl = Check alsa availability on Linux
dnl ==================================
dnl If using Linux, ensure that the alsa library is available
if test "$OS_TARGET" = "Linux"; then
MOZ_ALSA=1
fi
MOZ_ARG_ENABLE_BOOL(alsa,
[ --enable-alsa Enable Alsa support],
[ --enable-alsa Enable Alsa support (default on Linux)],
MOZ_ALSA=1,
MOZ_ALSA=)
@ -3284,7 +3289,6 @@ MOZ_ARG_DISABLE_BOOL(pulseaudio,
MOZ_PULSEAUDIO=1)
if test -n "$MOZ_PULSEAUDIO"; then
AC_DEFINE(MOZ_PULSEAUDIO)
if test -z "$gonkdir"; then
PKG_CHECK_MODULES(MOZ_PULSEAUDIO, libpulse, ,
[echo "$MOZ_PULSEAUDIO_PKG_ERRORS"

View File

@ -988,9 +988,6 @@
ERROR(NS_ERROR_DOM_MEDIA_MEDIASINK_ERR, FAILURE(11)),
ERROR(NS_ERROR_DOM_MEDIA_DEMUXER_ERR, FAILURE(12)),
ERROR(NS_ERROR_DOM_MEDIA_CDM_ERR, FAILURE(13)),
/* Internal platform-related errors */
ERROR(NS_ERROR_DOM_MEDIA_CUBEB_INITIALIZATION_ERR, FAILURE(101)),
#undef MODULE
/* ======================================================================= */