summary refs log tree commit diff
path: root/webclient
diff options
context:
space:
mode:
authorEmmanuel ROHEE <erohee@amdocs.com>2014-09-19 17:20:27 +0200
committerEmmanuel ROHEE <erohee@amdocs.com>2014-09-19 17:20:33 +0200
commit709b8ac2b7a82a047edca7fbc5f3bc92b0f55c60 (patch)
tree6dfd0477994e7d6694113e8964e01ab979c4f70a /webclient
parentSYWEB-13: disabled "Send image" button if the browser does not support HTML5 ... (diff)
downloadsynapse-709b8ac2b7a82a047edca7fbc5f3bc92b0f55c60.tar.xz
SYWEB-13 SYWEB-14: disabled "Call" button if the browser does not support all required WebRTC features
Diffstat (limited to 'webclient')
-rw-r--r--webclient/components/matrix/matrix-call.js5
-rw-r--r--webclient/room/room-controller.js3
-rw-r--r--webclient/room/room.html8
3 files changed, 14 insertions, 2 deletions
diff --git a/webclient/components/matrix/matrix-call.js b/webclient/components/matrix/matrix-call.js
index 2ecb8b05ff..1d377d6601 100644
--- a/webclient/components/matrix/matrix-call.js
+++ b/webclient/components/matrix/matrix-call.js
@@ -40,6 +40,11 @@ window.RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConne
 window.RTCSessionDescription = window.RTCSessionDescription || window.webkitRTCSessionDescription || window.mozRTCSessionDescription;
 window.RTCIceCandidate = window.RTCIceCandidate || window.webkitRTCIceCandidate || window.mozRTCIceCandidate;
 
+// Returns true if the browser supports all required features to make WebRTC call
+var isWebRTCSupported = function () {
+    return (navigator.getUserMedia || window.RTCPeerConnection || window.RTCSessionDescription || window.RTCIceCandidate);
+};
+
 angular.module('MatrixCall', [])
 .factory('MatrixCall', ['matrixService', 'matrixPhoneService', '$rootScope', '$timeout', function MatrixCallFactory(matrixService, matrixPhoneService, $rootScope, $timeout) {
     var MatrixCall = function(room_id) {
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index ac8f767d16..f8dcec2b42 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -33,7 +33,8 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
         paginating: false, // used to avoid concurrent pagination requests pulling in dup contents
         stream_failure: undefined, // the response when the stream fails
         waiting_for_joined_event: false,  // true when the join request is pending. Back to false once the corresponding m.room.member event is received
-        messages_visibility: "hidden" // In order to avoid flickering when scrolling down the message table at the page opening, delay the message table display
+        messages_visibility: "hidden", // In order to avoid flickering when scrolling down the message table at the page opening, delay the message table display
+        webRTCSupported: isWebRTCSupported() // true if the browser does not support WebRTC
     };
     $scope.members = {};
     $scope.autoCompleting = false;
diff --git a/webclient/room/room.html b/webclient/room/room.html
index 44a0e34d9f..1fe83c03ea 100644
--- a/webclient/room/room.html
+++ b/webclient/room/room.html
@@ -176,7 +176,13 @@
                         <button ng-click="inviteUser()" ng-disabled="state.permission_denied">Invite</button>
                 </span>
                 <button ng-click="leaveRoom()" ng-disabled="state.permission_denied">Leave</button>
-                <button ng-click="startVoiceCall()" ng-show="(currentCall == undefined || currentCall.state == 'ended') && memberCount() == 2" ng-disabled="state.permission_denied">Voice Call</button>
+                <button ng-click="startVoiceCall()"
+                        ng-show="(currentCall == undefined || currentCall.state == 'ended') && memberCount() == 2"
+                        ng-disabled="state.permission_denied || !state.webRTCSupported"
+                        title ="{{ state.webRTCNotSupported ? '' : 'VoIP requires webRTC but your browser does not support it.'}}"
+                        >
+                    Voice Call
+                </button>
             </div>
         
             {{ feedback }}