Bug 1250540 - have media.navigator.permission.disabled no longer bypass media.getusermedia.screensharing.allowed_domains. draft
authorJan-Ivar Bruaroey <jib@mozilla.com>
Tue, 23 Feb 2016 15:54:00 -0500
changeset 333924 4320434c04ac48e0604bffb9233a513bab4e543d
parent 333384 d1e729587d560b86f63afe228567ee217326e887
child 333925 58793a8827ae8ab94dd7829d203c4fecf272f0bc
child 333926 e4fed76ab11c27774ef7bdd1c54226e619baa8f0
push id11389
push userjbruaroey@mozilla.com
push dateTue, 23 Feb 2016 21:14:16 +0000
bugs1250540
milestone47.0a1
Bug 1250540 - have media.navigator.permission.disabled no longer bypass media.getusermedia.screensharing.allowed_domains. MozReview-Commit-ID: JTxeco3WGVr
dom/media/MediaManager.cpp
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -174,40 +174,41 @@ HostInDomain(const nsCString &aHost, con
     }
   }
 
   nsDependentCString hostRoot(aHost, hostOffset);
   return hostRoot.EqualsIgnoreCase(aPattern.BeginReading() + patternOffset);
 }
 
 static bool
-HostHasPermission(nsIURI &docURI)
+HostIsHttps(nsIURI &docURI)
 {
-  nsresult rv;
-
   bool isHttps;
-  rv = docURI.SchemeIs("https",&isHttps);
+  nsresult rv = docURI.SchemeIs("https", &isHttps);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return false;
   }
-  if (!isHttps) {
-    return false;
-  }
-
+  return isHttps;
+}
+
+static bool
+HostHasPermission(nsIURI &docURI)
+{
   nsAdoptingCString hostName;
   docURI.GetAsciiHost(hostName); //normalize UTF8 to ASCII equivalent
   nsAdoptingCString domainWhiteList =
     Preferences::GetCString("media.getusermedia.screensharing.allowed_domains");
   domainWhiteList.StripWhitespace();
 
   if (domainWhiteList.IsEmpty() || hostName.IsEmpty()) {
     return false;
   }
 
   // Get UTF8 to ASCII domain name normalization service
+  nsresult rv;
   nsCOMPtr<nsIIDNService> idnService =
     do_GetService("@mozilla.org/network/idn-service;1", &rv);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return false;
   }
 
   uint32_t begin = 0;
   uint32_t end = 0;
@@ -1895,17 +1896,18 @@ MediaManager::GetUserMedia(nsPIDOMWindow
 #if defined(XP_MACOSX)
               !nsCocoaFeatures::OnLionOrLater()
 #endif
 #if defined (XP_WIN)
               !IsVistaOrLater()
 #endif
               ) ||
 #endif
-            (!privileged && !HostHasPermission(*docURI))) {
+            (!privileged && !HostIsHttps(*docURI)) ||
+            !(loop || HostHasPermission(*docURI))) {
           RefPtr<MediaStreamError> error =
               new MediaStreamError(aWindow,
                                    NS_LITERAL_STRING("SecurityError"));
           onFailure->OnError(error);
           return NS_OK;
         }
         break;