diff options
Diffstat (limited to 'browser/base/content/test/webrtc/get_user_media_content_script.js')
-rw-r--r-- | browser/base/content/test/webrtc/get_user_media_content_script.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/browser/base/content/test/webrtc/get_user_media_content_script.js b/browser/base/content/test/webrtc/get_user_media_content_script.js new file mode 100644 index 000000000..71b68d826 --- /dev/null +++ b/browser/base/content/test/webrtc/get_user_media_content_script.js @@ -0,0 +1,85 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); +XPCOMUtils.defineLazyServiceGetter(this, "MediaManagerService", + "@mozilla.org/mediaManagerService;1", + "nsIMediaManagerService"); + +const kObservedTopics = [ + "getUserMedia:response:allow", + "getUserMedia:revoke", + "getUserMedia:response:deny", + "getUserMedia:request", + "recording-device-events", + "recording-window-ended" +]; + +var gObservedTopics = {}; +function observer(aSubject, aTopic, aData) { + if (!(aTopic in gObservedTopics)) + gObservedTopics[aTopic] = 1; + else + ++gObservedTopics[aTopic]; +} + +kObservedTopics.forEach(topic => { + Services.obs.addObserver(observer, topic, false); +}); + +addMessageListener("Test:ExpectObserverCalled", ({data}) => { + sendAsyncMessage("Test:ExpectObserverCalled:Reply", + {count: gObservedTopics[data]}); + if (data in gObservedTopics) + --gObservedTopics[data]; +}); + +addMessageListener("Test:ExpectNoObserverCalled", data => { + sendAsyncMessage("Test:ExpectNoObserverCalled:Reply", gObservedTopics); + gObservedTopics = {}; +}); + +function _getMediaCaptureState() { + let hasVideo = {}; + let hasAudio = {}; + let hasScreenShare = {}; + let hasWindowShare = {}; + MediaManagerService.mediaCaptureWindowState(content, hasVideo, hasAudio, + hasScreenShare, hasWindowShare); + if (hasVideo.value && hasAudio.value) + return "CameraAndMicrophone"; + if (hasVideo.value) + return "Camera"; + if (hasAudio.value) + return "Microphone"; + if (hasScreenShare.value) + return "Screen"; + if (hasWindowShare.value) + return "Window"; + return "none"; +} + +addMessageListener("Test:GetMediaCaptureState", data => { + sendAsyncMessage("Test:MediaCaptureState", _getMediaCaptureState()); +}); + +addMessageListener("Test:WaitForObserverCall", ({data}) => { + let topic = data; + Services.obs.addObserver(function observer() { + sendAsyncMessage("Test:ObserverCalled", topic); + Services.obs.removeObserver(observer, topic); + + if (kObservedTopics.indexOf(topic) != -1) { + if (!(topic in gObservedTopics)) + gObservedTopics[topic] = -1; + else + --gObservedTopics[topic]; + } + }, topic, false); +}); + +addMessageListener("Test:WaitForMessage", () => { + content.addEventListener("message", ({data}) => { + sendAsyncMessage("Test:MessageReceived", data); + }, {once: true}); +}); |