Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / perf / page_sets / third_party / webrtc / samples / js / base / adapter.js
1 var RTCPeerConnection = null;
2 var getUserMedia = null;
3 var attachMediaStream = null;
4 var reattachMediaStream = null;
5 var webrtcDetectedBrowser = null;
6 var webrtcDetectedVersion = null;
7
8 function trace(text) {
9   // This function is used for logging.
10   if (text[text.length - 1] == '\n') {
11     text = text.substring(0, text.length - 1);
12   }
13   console.log((performance.now() / 1000).toFixed(3) + ": " + text);
14 }
15 function maybeFixConfiguration(pcConfig) {
16   if (pcConfig == null) {
17     return;
18   }
19   for (var i = 0; i < pcConfig.iceServers.length; i++) {
20     if (pcConfig.iceServers[i].hasOwnProperty('urls')){
21       pcConfig.iceServers[i]['url'] = pcConfig.iceServers[i]['urls'];
22       delete pcConfig.iceServers[i]['urls'];
23     }
24   }
25 }
26
27 if (navigator.mozGetUserMedia) {
28   console.log("This appears to be Firefox");
29
30   webrtcDetectedBrowser = "firefox";
31
32   webrtcDetectedVersion =
33            parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1], 10);
34
35   // The RTCPeerConnection object.
36   var RTCPeerConnection = function(pcConfig, pcConstraints) {
37     // .urls is not supported in FF yet.
38     maybeFixConfiguration(pcConfig);
39     return new mozRTCPeerConnection(pcConfig, pcConstraints);
40   }
41
42   // The RTCSessionDescription object.
43   RTCSessionDescription = mozRTCSessionDescription;
44
45   // The RTCIceCandidate object.
46   RTCIceCandidate = mozRTCIceCandidate;
47
48   // Get UserMedia (only difference is the prefix).
49   // Code from Adam Barth.
50   getUserMedia = navigator.mozGetUserMedia.bind(navigator);
51   navigator.getUserMedia = getUserMedia;
52
53   // Creates iceServer from the url for FF.
54   createIceServer = function(url, username, password) {
55     var iceServer = null;
56     var url_parts = url.split(':');
57     if (url_parts[0].indexOf('stun') === 0) {
58       // Create iceServer with stun url.
59       iceServer = { 'url': url };
60     } else if (url_parts[0].indexOf('turn') === 0) {
61       if (webrtcDetectedVersion < 27) {
62         // Create iceServer with turn url.
63         // Ignore the transport parameter from TURN url for FF version <=27.
64         var turn_url_parts = url.split("?");
65         // Return null for createIceServer if transport=tcp.
66         if (turn_url_parts.length === 1 ||
67             turn_url_parts[1].indexOf('transport=udp') === 0) {
68           iceServer = {'url': turn_url_parts[0],
69                        'credential': password,
70                        'username': username};
71         }
72       } else {
73         // FF 27 and above supports transport parameters in TURN url,
74         // So passing in the full url to create iceServer.
75         iceServer = {'url': url,
76                      'credential': password,
77                      'username': username};
78       }
79     }
80     return iceServer;
81   };
82
83   createIceServers = function(urls, username, password) {
84     var iceServers = [];
85     // Use .url for FireFox.
86     for (i = 0; i < urls.length; i++) {
87       var iceServer = createIceServer(urls[i],
88                                       username,
89                                       password);
90       if (iceServer !== null) {
91         iceServers.push(iceServer);
92       }
93     }
94     return iceServers;
95   }
96
97   // Attach a media stream to an element.
98   attachMediaStream = function(element, stream) {
99     console.log("Attaching media stream");
100     element.mozSrcObject = stream;
101     element.play();
102   };
103
104   reattachMediaStream = function(to, from) {
105     console.log("Reattaching media stream");
106     to.mozSrcObject = from.mozSrcObject;
107     to.play();
108   };
109
110   // Fake get{Video,Audio}Tracks
111   if (!MediaStream.prototype.getVideoTracks) {
112     MediaStream.prototype.getVideoTracks = function() {
113       return [];
114     };
115   }
116
117   if (!MediaStream.prototype.getAudioTracks) {
118     MediaStream.prototype.getAudioTracks = function() {
119       return [];
120     };
121   }
122 } else if (navigator.webkitGetUserMedia) {
123   console.log("This appears to be Chrome");
124
125   webrtcDetectedBrowser = "chrome";
126   webrtcDetectedVersion =
127          parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2], 10);
128
129   // Creates iceServer from the url for Chrome M33 and earlier.
130   createIceServer = function(url, username, password) {
131     var iceServer = null;
132     var url_parts = url.split(':');
133     if (url_parts[0].indexOf('stun') === 0) {
134       // Create iceServer with stun url.
135       iceServer = { 'url': url };
136     } else if (url_parts[0].indexOf('turn') === 0) {
137       // Chrome M28 & above uses below TURN format.
138       iceServer = {'url': url,
139                    'credential': password,
140                    'username': username};
141     }
142     return iceServer;
143   };
144
145   // Creates iceServers from the urls for Chrome M34 and above.
146   createIceServers = function(urls, username, password) {
147     var iceServers = [];
148     if (webrtcDetectedVersion >= 34) {
149       // .urls is supported since Chrome M34.
150       iceServers = {'urls': urls,
151                     'credential': password,
152                     'username': username };
153     } else {
154       for (i = 0; i < urls.length; i++) {
155         var iceServer = createIceServer(urls[i],
156                                         username,
157                                         password);
158         if (iceServer !== null) {
159           iceServers.push(iceServer);
160         }
161       }
162     }
163     return iceServers;
164   };
165
166   // The RTCPeerConnection object.
167   var RTCPeerConnection = function(pcConfig, pcConstraints) {
168     // .urls is supported since Chrome M34.
169     if (webrtcDetectedVersion < 34) {
170       maybeFixConfiguration(pcConfig);
171     }
172     return new webkitRTCPeerConnection(pcConfig, pcConstraints);
173   }
174
175   // Get UserMedia (only difference is the prefix).
176   // Code from Adam Barth.
177   getUserMedia = navigator.webkitGetUserMedia.bind(navigator);
178   navigator.getUserMedia = getUserMedia;
179
180   // Attach a media stream to an element.
181   attachMediaStream = function(element, stream) {
182     if (typeof element.srcObject !== 'undefined') {
183       element.srcObject = stream;
184     } else if (typeof element.mozSrcObject !== 'undefined') {
185       element.mozSrcObject = stream;
186     } else if (typeof element.src !== 'undefined') {
187       element.src = URL.createObjectURL(stream);
188     } else {
189       console.log('Error attaching stream to element.');
190     }
191   };
192
193   reattachMediaStream = function(to, from) {
194     to.src = from.src;
195   };
196 } else {
197   console.log("Browser does not appear to be WebRTC-capable");
198 }