summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/webrtc/get_user_media_content_script.js
diff options
context:
space:
mode:
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.js85
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});
+});