Initial OpenECOMP Portal commit
[portal.git] / ecomp-portal-BE / war / static / fusion / webrtc / getSourceId.html
diff --git a/ecomp-portal-BE/war/static/fusion/webrtc/getSourceId.html b/ecomp-portal-BE/war/static/fusion/webrtc/getSourceId.html
new file mode 100644 (file)
index 0000000..6f66002
--- /dev/null
@@ -0,0 +1,78 @@
+
+<script>
+
+var DetectRTC = {};
+
+var screenCallback;
+
+DetectRTC.screen = {
+    chromeMediaSource: 'screen',
+    getSourceId: function (callback) {
+        screenCallback = callback;
+        window.postMessage('get-sourceId', '*');
+    },
+    onMessageCallback: function (data) {
+        // "cancel" button is clicked
+        if (data == 'PermissionDeniedError') {
+            DetectRTC.screen.chromeMediaSource = 'PermissionDeniedError';
+            if (screenCallback) return screenCallback('PermissionDeniedError');
+            else throw new Error('PermissionDeniedError');
+        }
+
+        // extension notified his presence
+        if (data == 'rtcmulticonnection-extension-loaded') {
+            DetectRTC.screen.chromeMediaSource = 'desktop';
+        }
+
+        // extension shared temp sourceId
+        if (data.sourceId) {
+            DetectRTC.screen.sourceId = data.sourceId;
+            if (screenCallback) screenCallback(DetectRTC.screen.sourceId);
+        }
+    },
+    getChromeExtensionStatus: function (callback) {
+        // https://chrome.google.com/webstore/detail/screen-capturing-private/icgmlogfeajbfdffajhoebcfbibfhaen
+        var extensionid = 'icgmlogfeajbfdffajhoebcfbibfhaen';
+
+        var image = document.createElement('img');
+        image.src = 'chrome-extension://' + extensionid + '/icon.png';
+        image.onload = function () {
+            DetectRTC.screen.chromeMediaSource = 'screen';
+            window.postMessage('are-you-there', '*');
+            setTimeout(function () {
+                if (DetectRTC.screen.chromeMediaSource == 'screen') {
+                    callback('installed-disabled');
+                } else callback('installed-enabled');
+            }, 2000);
+        };
+        image.onerror = function () {
+            callback('not-installed');
+        };
+    }
+};
+
+window.addEventListener('message', function (event) {
+    if (!event.data || !(typeof event.data == 'string' || event.data.sourceId || event.data.captureSourceId)) return;
+    if (event.data.captureSourceId) captureSourceId();
+
+    DetectRTC.screen.onMessageCallback(event.data);
+});
+
+function captureSourceId() {
+    // check if desktop-capture extension installed.
+    DetectRTC.screen.getChromeExtensionStatus(function (status) {
+        if (status != 'installed-enabled') {
+            window.parent.postMessage({
+                chromeExtensionStatus: status
+            }, '*');
+            return;
+        }
+
+        DetectRTC.screen.getSourceId(function (sourceId) {
+            window.parent.postMessage({
+                chromeMediaSourceId: sourceId
+            }, '*');
+        });
+    });
+}
+</script>