Bug 1423515 - register callback while creating the real backend. r?pehrsons
MozReview-Commit-ID: 2uVZ9VBAut0
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -1714,18 +1714,16 @@ MediaManager::EnumerateRawDevices(uint64
RefPtr<MediaEngine> fakeBackend, realBackend;
if (fakeCams || fakeMics) {
fakeBackend = new MediaEngineDefault();
}
if ((!fakeCams && hasVideo) || (!fakeMics && hasAudio)) {
MediaManager* manager = MediaManager::GetIfExists();
MOZ_RELEASE_ASSERT(manager); // Must exist while media thread is alive
realBackend = manager->GetBackend(aWindowId);
- // We need to listen to this event even JS didn't listen to it.
- realBackend->AddDeviceChangeCallback(manager);
}
auto result = MakeUnique<SourceSet>();
if (hasVideo) {
nsTArray<RefPtr<VideoDevice>> videos;
GetSources(fakeCams? fakeBackend : realBackend, aVideoType,
&MediaEngine::EnumerateVideoDevices, videos,
@@ -2020,16 +2018,19 @@ MediaManager::NotifyRecordingStatusChang
}
int MediaManager::AddDeviceChangeCallback(DeviceChangeCallback* aCallback)
{
bool fakeDeviceChangeEventOn = mPrefs.mFakeDeviceChangeEventOn;
MediaManager::PostTask(NewTaskFrom([fakeDeviceChangeEventOn]() {
MediaManager* manager = MediaManager::GetIfExists();
MOZ_RELEASE_ASSERT(manager); // Must exist while media thread is alive
+ // this is needed in case persistent permission is given but no gUM()
+ // or enumeration() has created the real backend yet
+ manager->GetBackend(0);
if (fakeDeviceChangeEventOn)
manager->GetBackend(0)->SetFakeDeviceChangeEvents();
}));
return DeviceChangeCallback::AddDeviceChangeCallback(aCallback);
}
static void
@@ -2905,16 +2906,17 @@ MediaManager::GetBackend(uint64_t aWindo
// This IS called off main-thread.
if (!mBackend) {
MOZ_RELEASE_ASSERT(!sHasShutdown); // we should never create a new backend in shutdown
#if defined(MOZ_WEBRTC)
mBackend = new MediaEngineWebRTC(mPrefs);
#else
mBackend = new MediaEngineDefault();
#endif
+ mBackend->AddDeviceChangeCallback(this);
}
return mBackend;
}
static void
StopSharingCallback(MediaManager *aThis,
uint64_t aWindowID,
GetUserMediaWindowListener *aListener,