From ad10ef248f61c39b043c5f43ce9032876430602c Mon Sep 17 00:00:00 2001 From: Jan-Ivar Bruaroey Date: Thu, 9 Jul 2015 23:07:42 -0400 Subject: [PATCH] Bug 1181428 - Move code to reuse test for active gum or persistent permission. r=mt --- dom/media/MediaDevices.cpp | 35 +---------------------------------- dom/media/MediaManager.cpp | 36 ++++++++++++++++++++++++++++++++++-- dom/media/MediaManager.h | 2 +- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/dom/media/MediaDevices.cpp b/dom/media/MediaDevices.cpp index 1ec98d49d61..fd5649dd1ed 100644 --- a/dom/media/MediaDevices.cpp +++ b/dom/media/MediaDevices.cpp @@ -42,38 +42,6 @@ private: class MediaDevices::EnumDevResolver : public nsIGetUserMediaDevicesSuccessCallback { - static bool HasAPersistentPermission(uint64_t aWindowId) - { - nsPIDOMWindow *window = static_cast - (nsGlobalWindow::GetInnerWindowWithId(aWindowId)); - if (NS_WARN_IF(!window)) { - return false; - } - // Check if this site has persistent permissions. - nsresult rv; - nsCOMPtr mgr = - do_GetService(NS_PERMISSIONMANAGER_CONTRACTID, &rv); - if (NS_WARN_IF(NS_FAILED(rv))) { - return false; // no permission manager no permissions! - } - - uint32_t audio = nsIPermissionManager::UNKNOWN_ACTION; - uint32_t video = nsIPermissionManager::UNKNOWN_ACTION; - { - auto* principal = window->GetExtantDoc()->NodePrincipal(); - rv = mgr->TestExactPermissionFromPrincipal(principal, "microphone", &audio); - if (NS_WARN_IF(NS_FAILED(rv))) { - return false; - } - rv = mgr->TestExactPermissionFromPrincipal(principal, "camera", &video); - if (NS_WARN_IF(NS_FAILED(rv))) { - return false; - } - } - return audio == nsIPermissionManager::ALLOW_ACTION || - video == nsIPermissionManager::ALLOW_ACTION; - } - public: NS_DECL_ISUPPORTS @@ -124,8 +92,7 @@ public: device->GetId(id); // Include name only if page currently has a gUM stream active or // persistent permissions (audio or video) have been granted - if (MediaManager::Get()->IsWindowActivelyCapturing(mWindowId) || - HasAPersistentPermission(mWindowId) || + if (MediaManager::Get()->IsActivelyCapturingOrHasAPermission(mWindowId) || Preferences::GetBool("media.navigator.permission.disabled", false)) { device->GetName(name); } diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp index 9da8b1ef516..42083c9dbc5 100644 --- a/dom/media/MediaManager.cpp +++ b/dom/media/MediaManager.cpp @@ -2631,8 +2631,10 @@ MediaManager::StopMediaStreams() } bool -MediaManager::IsWindowActivelyCapturing(uint64_t aWindowId) +MediaManager::IsActivelyCapturingOrHasAPermission(uint64_t aWindowId) { + // Does page currently have a gUM stream active? + nsCOMPtr array; GetActiveMediaCaptureWindows(getter_AddRefs(array)); uint32_t len; @@ -2645,7 +2647,37 @@ MediaManager::IsWindowActivelyCapturing(uint64_t aWindowId) return true; } } - return false; + + // Or are persistent permissions (audio or video) granted? + + nsPIDOMWindow *window = static_cast + (nsGlobalWindow::GetInnerWindowWithId(aWindowId)); + if (NS_WARN_IF(!window)) { + return false; + } + // Check if this site has persistent permissions. + nsresult rv; + nsCOMPtr mgr = + do_GetService(NS_PERMISSIONMANAGER_CONTRACTID, &rv); + if (NS_WARN_IF(NS_FAILED(rv))) { + return false; // no permission manager no permissions! + } + + uint32_t audio = nsIPermissionManager::UNKNOWN_ACTION; + uint32_t video = nsIPermissionManager::UNKNOWN_ACTION; + { + auto* principal = window->GetExtantDoc()->NodePrincipal(); + rv = mgr->TestExactPermissionFromPrincipal(principal, "microphone", &audio); + if (NS_WARN_IF(NS_FAILED(rv))) { + return false; + } + rv = mgr->TestExactPermissionFromPrincipal(principal, "camera", &video); + if (NS_WARN_IF(NS_FAILED(rv))) { + return false; + } + } + return audio == nsIPermissionManager::ALLOW_ACTION || + video == nsIPermissionManager::ALLOW_ACTION; } void diff --git a/dom/media/MediaManager.h b/dom/media/MediaManager.h index 722f7189819..24bc6e4239f 100644 --- a/dom/media/MediaManager.h +++ b/dom/media/MediaManager.h @@ -579,7 +579,7 @@ public: nsresult EnumerateDevices(nsPIDOMWindow* aWindow, dom::Promise& aPromise); void OnNavigation(uint64_t aWindowID); - bool IsWindowActivelyCapturing(uint64_t aWindowId); + bool IsActivelyCapturingOrHasAPermission(uint64_t aWindowId); MediaEnginePrefs mPrefs;