зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1450762 - Don't prompt for device permissions on Android in MediaDevices.enumerateDevices() r=achronop
Differential Revision: https://phabricator.services.mozilla.com/D14575 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
5eccb3a447
Коммит
d72a96de1f
|
@ -1772,7 +1772,7 @@ RefPtr<MediaManager::MgrPromise> MediaManager::EnumerateRawDevices(
|
|||
uint64_t aWindowId, MediaSourceEnum aVideoInputType,
|
||||
MediaSourceEnum aAudioInputType, MediaSinkEnum aAudioOutputType,
|
||||
DeviceEnumerationType aVideoInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType, bool aForceNoPermRequest,
|
||||
const RefPtr<MediaDeviceSetRefCnt>& aOutDevices) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aVideoInputType != MediaSourceEnum::Other ||
|
||||
|
@ -1879,7 +1879,7 @@ RefPtr<MediaManager::MgrPromise> MediaManager::EnumerateRawDevices(
|
|||
holder->Resolve(false, __func__);
|
||||
});
|
||||
|
||||
if (realDeviceRequested &&
|
||||
if (realDeviceRequested && aForceNoPermRequest &&
|
||||
Preferences::GetBool("media.navigator.permission.device", false)) {
|
||||
// Need to ask permission to retrieve list of all devices;
|
||||
// notify frontend observer and wait for callback notification to post task.
|
||||
|
@ -2198,7 +2198,7 @@ void MediaManager::OnDeviceChange() {
|
|||
self->EnumerateRawDevices(
|
||||
0, MediaSourceEnum::Camera, MediaSourceEnum::Microphone,
|
||||
MediaSinkEnum::Speaker, DeviceEnumerationType::Normal,
|
||||
DeviceEnumerationType::Normal, devices)
|
||||
DeviceEnumerationType::Normal, false, devices)
|
||||
->Then(GetCurrentThreadSerialEventTarget(), __func__,
|
||||
[self, devices](bool) {
|
||||
if (!MediaManager::GetIfExists()) {
|
||||
|
@ -2741,7 +2741,7 @@ RefPtr<MediaManager::StreamPromise> MediaManager::GetUserMedia(
|
|||
auto devices = MakeRefPtr<MediaDeviceSetRefCnt>();
|
||||
return EnumerateDevicesImpl(windowID, videoType, audioType,
|
||||
MediaSinkEnum::Other, videoEnumerationType,
|
||||
audioEnumerationType, devices)
|
||||
audioEnumerationType, true, devices)
|
||||
->Then(
|
||||
GetCurrentThreadSerialEventTarget(), __func__,
|
||||
[self, windowID, c, windowListener, isChrome, devices](bool) {
|
||||
|
@ -3059,7 +3059,7 @@ RefPtr<MediaManager::MgrPromise> MediaManager::EnumerateDevicesImpl(
|
|||
uint64_t aWindowId, MediaSourceEnum aVideoInputType,
|
||||
MediaSourceEnum aAudioInputType, MediaSinkEnum aAudioOutputType,
|
||||
DeviceEnumerationType aVideoInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType, bool aForceNoPermRequest,
|
||||
const RefPtr<MediaDeviceSetRefCnt>& aOutDevices) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
|
@ -3101,8 +3101,8 @@ RefPtr<MediaManager::MgrPromise> MediaManager::EnumerateDevicesImpl(
|
|||
->Then(
|
||||
GetMainThreadSerialEventTarget(), __func__,
|
||||
[aWindowId, aVideoInputType, aAudioInputType, aAudioOutputType,
|
||||
aVideoInputEnumType, aAudioInputEnumType, aOutDevices,
|
||||
originKey](const nsCString& aOriginKey) {
|
||||
aVideoInputEnumType, aAudioInputEnumType, aForceNoPermRequest,
|
||||
aOutDevices, originKey](const nsCString& aOriginKey) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
originKey->Assign(aOriginKey);
|
||||
MediaManager* mgr = MediaManager::GetIfExists();
|
||||
|
@ -3114,7 +3114,8 @@ RefPtr<MediaManager::MgrPromise> MediaManager::EnumerateDevicesImpl(
|
|||
}
|
||||
return mgr->EnumerateRawDevices(
|
||||
aWindowId, aVideoInputType, aAudioInputType, aAudioOutputType,
|
||||
aVideoInputEnumType, aAudioInputEnumType, aOutDevices);
|
||||
aVideoInputEnumType, aAudioInputEnumType, aForceNoPermRequest,
|
||||
aOutDevices);
|
||||
},
|
||||
[](nsresult rs) {
|
||||
NS_WARNING(
|
||||
|
@ -3232,7 +3233,7 @@ RefPtr<MediaManager::DevicesPromise> MediaManager::EnumerateDevices(
|
|||
auto devices = MakeRefPtr<MediaDeviceSetRefCnt>();
|
||||
return EnumerateDevicesImpl(windowId, MediaSourceEnum::Camera,
|
||||
MediaSourceEnum::Microphone, audioOutputType,
|
||||
videoEnumerationType, audioEnumerationType,
|
||||
videoEnumerationType, audioEnumerationType, false,
|
||||
devices)
|
||||
->Then(GetCurrentThreadSerialEventTarget(), __func__,
|
||||
[windowListener, sourceListener, devices](bool) {
|
||||
|
@ -3281,7 +3282,7 @@ RefPtr<SinkInfoPromise> MediaManager::GetSinkDevice(nsPIDOMWindowInner* aWindow,
|
|||
return EnumerateDevicesImpl(aWindow->WindowID(), MediaSourceEnum::Other,
|
||||
MediaSourceEnum::Other, MediaSinkEnum::Speaker,
|
||||
DeviceEnumerationType::Normal,
|
||||
DeviceEnumerationType::Normal, devices)
|
||||
DeviceEnumerationType::Normal, true, devices)
|
||||
->Then(GetCurrentThreadSerialEventTarget(), __func__,
|
||||
[aDeviceId, isSecure, devices](bool) {
|
||||
for (RefPtr<MediaDevice>& device : *devices) {
|
||||
|
|
|
@ -291,14 +291,14 @@ class MediaManager final : public nsIMediaManagerService,
|
|||
uint64_t aWindowId, dom::MediaSourceEnum aVideoInputType,
|
||||
dom::MediaSourceEnum aAudioInputType, MediaSinkEnum aAudioOutputType,
|
||||
DeviceEnumerationType aVideoInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType, bool aForceNoPermRequest,
|
||||
const RefPtr<MediaDeviceSetRefCnt>& aOutDevices);
|
||||
|
||||
RefPtr<MgrPromise> EnumerateDevicesImpl(
|
||||
uint64_t aWindowId, dom::MediaSourceEnum aVideoInputType,
|
||||
dom::MediaSourceEnum aAudioInputType, MediaSinkEnum aAudioOutputType,
|
||||
DeviceEnumerationType aVideoInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType,
|
||||
DeviceEnumerationType aAudioInputEnumType, bool aForceNoPermRequest,
|
||||
const RefPtr<MediaDeviceSetRefCnt>& aOutDevices);
|
||||
|
||||
RefPtr<BadConstraintsPromise> SelectSettings(
|
||||
|
|
|
@ -50,19 +50,6 @@ class PermissionDelegateTest : BaseSessionTest() {
|
|||
mainSession.loadTestPath(HELLO_HTML_PATH)
|
||||
mainSession.waitForPageStop()
|
||||
|
||||
|
||||
mainSession.delegateDuringNextWait(object : Callbacks.PermissionDelegate {
|
||||
@AssertCalled(count = 1)
|
||||
override fun onAndroidPermissionsRequest(
|
||||
session: GeckoSession, permissions: Array<out String>?,
|
||||
callback: GeckoSession.PermissionDelegate.Callback) {
|
||||
assertThat("Permissions list should be correct",
|
||||
listOf(*permissions!!), hasItems(Manifest.permission.CAMERA,
|
||||
Manifest.permission.RECORD_AUDIO))
|
||||
callback.grant()
|
||||
}
|
||||
})
|
||||
|
||||
val devices = mainSession.waitForJS(
|
||||
"window.navigator.mediaDevices.enumerateDevices()")
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче