Bug 1363253 - Ignore events specific to preview window also when decrementing. r?florian draft
authorAndreas Pehrson <pehrsons@gmail.com>
Thu, 11 May 2017 15:07:17 +0200
changeset 578682 8c4cc539cc5dc9cd37a8fd44edcc54f245277984
parent 578175 3e166b6838931b3933ca274331f9e0e115af5cc0
child 628795 36480604cc493fc7548de969755002fc046100a3
push id59016
push userbmo:pehrson@telenordigital.com
push dateTue, 16 May 2017 09:44:21 +0000
reviewersflorian
bugs1363253
milestone55.0a1
Bug 1363253 - Ignore events specific to preview window also when decrementing. r?florian MozReview-Commit-ID: 8pjSBUI7ZkZ
browser/base/content/test/webrtc/get_user_media_content_script.js
--- a/browser/base/content/test/webrtc/get_user_media_content_script.js
+++ b/browser/base/content/test/webrtc/get_user_media_content_script.js
@@ -13,29 +13,37 @@ const kObservedTopics = [
   "getUserMedia:revoke",
   "getUserMedia:response:deny",
   "getUserMedia:request",
   "recording-device-events",
   "recording-window-ended"
 ];
 
 var gObservedTopics = {};
-function observer(aSubject, aTopic, aData) {
+
+function ignoreEvent(aSubject, aTopic, aData) {
   // With e10s disabled, our content script receives notifications for the
   // preview displayed in our screen sharing permission prompt; ignore them.
   const kBrowserURL = "chrome://browser/content/browser.xul";
   const nsIPropertyBag = Components.interfaces.nsIPropertyBag;
   if (aTopic == "recording-device-events" &&
       aSubject.QueryInterface(nsIPropertyBag).getProperty("requestURL") == kBrowserURL) {
-    return;
+    return true;
   }
   if (aTopic == "recording-window-ended") {
     let win = Services.wm.getOuterWindowWithId(aData).top;
     if (win.document.documentURI == kBrowserURL)
-      return;
+      return true;
+  }
+  return false;
+}
+
+function observer(aSubject, aTopic, aData) {
+  if (ignoreEvent(aSubject, aTopic, aData)) {
+    return;
   }
 
   if (!(aTopic in gObservedTopics))
     gObservedTopics[aTopic] = 1;
   else
     ++gObservedTopics[aTopic];
 }
 
@@ -85,17 +93,26 @@ function _getMediaCaptureState() {
 }
 
 addMessageListener("Test:GetMediaCaptureState", data => {
   sendAsyncMessage("Test:MediaCaptureState", _getMediaCaptureState());
 });
 
 addMessageListener("Test:WaitForObserverCall", ({data}) => {
   let topic = data;
-  Services.obs.addObserver(function obs() {
+  Services.obs.addObserver(function obs(aSubject, aTopic, aData) {
+    if (aTopic != topic) {
+      is(aTopic, topic, "Wrong topic observed");
+      return;
+    }
+
+    if (ignoreEvent(aSubject, aTopic, aData)) {
+      return;
+    }
+
     sendAsyncMessage("Test:ObserverCalled", topic);
     Services.obs.removeObserver(obs, topic);
 
     if (kObservedTopics.indexOf(topic) != -1) {
       if (!(topic in gObservedTopics))
         gObservedTopics[topic] = -1;
       else
         --gObservedTopics[topic];