Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / tools / rtcbot / bot / browser / bot.js
1 // Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
2 //
3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the LICENSE file in the root of the source
5 // tree. An additional intellectual property rights grant can be found
6 // in the file PATENTS.  All contributing project authors may
7 // be found in the AUTHORS file in the root of the source tree.
8 //
9 var localStreams = [];
10 var remoteStreams = [];
11
12 function ping(callback) {
13   callback("pong");
14 }
15
16 function getUserMedia(constraints, onSuccessCallback, onFailCallback){
17   console.log("Getting user media.");
18   navigator.webkitGetUserMedia(constraints,
19       onSuccessCallbackWraper, onFailCallback);
20
21   function onSuccessCallbackWraper(stream) {
22     console.log("GetUserMedia success.");
23     localStreams[stream.id] = stream;
24     onSuccessCallback(stream);
25   }
26 }
27
28 function createPeerConnection(config, doneCallback, failCallback) {
29   console.log("Creating peer connection");
30   var obj = {};
31   var pc = new webkitRTCPeerConnection(config);
32
33   expose(obj, pc, "close");
34   expose(obj, pc, "createOffer");
35   expose(obj, pc, "createAnswer");
36   expose(obj, pc, "addEventListener");
37   expose(obj, pc, "addIceCandidate", { 0: RTCIceCandidate});
38   expose(obj, pc, "setRemoteDescription", { 0: RTCSessionDescription });
39   expose(obj, pc, "setLocalDescription", { 0: RTCSessionDescription });
40
41   obj.addStream = function(stream) {
42     console.log("Adding local stream.");
43     var tempStream = localStreams[stream.id];
44     if (!tempStream) {
45       console.log("Undefined stream!");
46       return;
47     }
48     pc.addStream(tempStream);
49   };
50
51   // Return an array of Objects, each Object is a copy of RTCStateReport
52   // and has the following attributes (id, type, names, and stats).
53   // names: array originaly returned by calling RTCStateReport.names().
54   // stats: dictionary of stat name as key and stat value as dictionary
55   // value.
56   obj.getStats = function(callback, mediaTrack) {
57     pc.getStats(onStatsReady, mediaTrack);
58
59     function onStatsReady(stateResponse) {
60       var outputReports = [];
61       var reports = stateResponse.result();
62       for (index in reports) {
63         var report = {};
64         report.id = reports[index].id;
65         report.type = reports[index].type;
66         report.names = reports[index].names();
67         report.stats = [];
68         populateStats(reports[index], report.stats);
69
70         outputReports.push(report);
71       }
72
73       callback(outputReports);
74     }
75
76     function populateStats(report, stats) {
77       var names = report.names();
78       for (index in names) {
79         stats.push({
80            name: names[index],
81            stat: report.stat(names[index]),
82           });
83       }
84
85     }
86   };
87
88   pc.addEventListener('addstream', function(event) {
89     remoteStreams[event.stream.id] = event.stream;
90   });
91
92   doneCallback(obj);
93 };
94
95 function showStream(streamId, autoplay, muted) {
96   var stream = getStreamFromIdentifier_(streamId);
97   var video = document.createElement('video');
98   video.autoplay = autoplay;
99   video.muted = muted;
100   document.body.appendChild(video);
101   video.src = URL.createObjectURL(stream);
102   console.log("Stream " + stream.id + " attached to video element");
103 };
104
105 function getStreamFromIdentifier_(id) {
106   var tempStream = localStreams[id];
107   if (tempStream)
108     return tempStream;
109   tempStream = remoteStreams[id];
110   if (tempStream)
111     return tempStream;
112   console.log(id + " is not id for stream.");
113   return null;
114 };
115
116 function downloadFile(path, onSuccess, onError) {
117   var xhr = new XMLHttpRequest();
118   function onResult() {
119     if (xhr.readyState != 4)
120       return;
121
122     if (xhr.status != 200) {
123       onError("Download request failed!");
124       return;
125     }
126     onSuccess(xhr.responseText);
127   }
128
129   xhr.onreadystatechange = onResult;
130   xhr.open('GET', path, true);
131   xhr.send();
132 };
133
134 connectToServer({
135   ping: ping,
136   getUserMedia: getUserMedia,
137   createPeerConnection: createPeerConnection,
138   showStream: showStream,
139   downloadFile: downloadFile,
140 });