OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/renderer/extensions/webrtc_native_handler.h" | 5 #include "chrome/renderer/extensions/webrtc_native_handler.h" |
6 | 6 |
7 #include <functional> | 7 #include <functional> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "chrome/common/extensions/api/webrtc_cast_send_transport.h" | 10 #include "chrome/common/extensions/api/webrtc_cast_send_transport.h" |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
140 ext_payload_params.get()); | 140 ext_payload_params.get()); |
141 ext_params->payloads.push_back(ext_payload_params); | 141 ext_params->payloads.push_back(ext_payload_params); |
142 } | 142 } |
143 } | 143 } |
144 | 144 |
145 } // namespace | 145 } // namespace |
146 | 146 |
147 WebRtcNativeHandler::WebRtcNativeHandler(ChromeV8Context* context) | 147 WebRtcNativeHandler::WebRtcNativeHandler(ChromeV8Context* context) |
148 : ObjectBackedNativeHandler(context), | 148 : ObjectBackedNativeHandler(context), |
149 last_transport_id_(0) { | 149 last_transport_id_(0) { |
150 RouteFunction("CreateCastSendTransport", | 150 RouteFunction("CreateSession", |
151 base::Bind(&WebRtcNativeHandler::CreateCastSendTransport, | 151 base::Bind(&WebRtcNativeHandler::CreateCastSession, |
152 base::Unretained(this))); | 152 base::Unretained(this))); |
153 RouteFunction("DestroyCastSendTransport", | 153 RouteFunction("DestroyCastSendTransport", |
154 base::Bind(&WebRtcNativeHandler::DestroyCastSendTransport, | 154 base::Bind(&WebRtcNativeHandler::DestroyCastSendTransport, |
155 base::Unretained(this))); | 155 base::Unretained(this))); |
156 RouteFunction("GetCapsCastSendTransport", | 156 RouteFunction("GetCapsCastSendTransport", |
157 base::Bind(&WebRtcNativeHandler::GetCapsCastSendTransport, | 157 base::Bind(&WebRtcNativeHandler::GetCapsCastSendTransport, |
158 base::Unretained(this))); | 158 base::Unretained(this))); |
159 RouteFunction("StartCastSendTransport", | 159 RouteFunction("StartCastSendTransport", |
160 base::Bind(&WebRtcNativeHandler::StartCastSendTransport, | 160 base::Bind(&WebRtcNativeHandler::StartCastSendTransport, |
161 base::Unretained(this))); | 161 base::Unretained(this))); |
162 RouteFunction("StopCastSendTransport", | 162 RouteFunction("StopCastSendTransport", |
163 base::Bind(&WebRtcNativeHandler::StopCastSendTransport, | 163 base::Bind(&WebRtcNativeHandler::StopCastSendTransport, |
164 base::Unretained(this))); | 164 base::Unretained(this))); |
165 RouteFunction("CreateCastUdpTransport", | |
166 base::Bind(&WebRtcNativeHandler::CreateCastUdpTransport, | |
167 base::Unretained(this))); | |
168 RouteFunction("DestroyCastUdpTransport", | 165 RouteFunction("DestroyCastUdpTransport", |
169 base::Bind(&WebRtcNativeHandler::DestroyCastUdpTransport, | 166 base::Bind(&WebRtcNativeHandler::DestroyCastUdpTransport, |
170 base::Unretained(this))); | 167 base::Unretained(this))); |
171 RouteFunction("StartCastUdpTransport", | 168 RouteFunction("StartCastUdpTransport", |
172 base::Bind(&WebRtcNativeHandler::StartCastUdpTransport, | 169 base::Bind(&WebRtcNativeHandler::StartCastUdpTransport, |
173 base::Unretained(this))); | 170 base::Unretained(this))); |
174 } | 171 } |
175 | 172 |
176 WebRtcNativeHandler::~WebRtcNativeHandler() { | 173 WebRtcNativeHandler::~WebRtcNativeHandler() { |
177 } | 174 } |
178 | 175 |
179 void WebRtcNativeHandler::CreateCastSendTransport( | 176 void WebRtcNativeHandler::CreateCastSession( |
180 const v8::FunctionCallbackInfo<v8::Value>& args) { | 177 const v8::FunctionCallbackInfo<v8::Value>& args) { |
181 CHECK_EQ(3, args.Length()); | 178 CHECK_EQ(3, args.Length()); |
182 CHECK(args[0]->IsInt32()); | 179 CHECK(args[0]->IsObject()); |
183 CHECK(args[1]->IsObject()); | 180 CHECK(args[1]->IsObject()); |
184 CHECK(args[2]->IsFunction()); | 181 CHECK(args[2]->IsFunction()); |
185 | 182 |
186 const int inner_transport_id = args[0]->ToInt32()->Value(); | 183 blink::WebDOMMediaStreamTrack track1 = |
187 CastUdpTransport* inner_transport = GetUdpTransportOrThrow( | 184 blink::WebDOMMediaStreamTrack::fromV8Value(args[0]); |
188 inner_transport_id); | 185 if (track1.isNull()) |
189 if (!inner_transport) | 186 return; |
187 blink::WebDOMMediaStreamTrack track2 = | |
188 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]); | |
189 if (track2.isNull()) | |
190 return; | 190 return; |
191 | 191 |
192 blink::WebDOMMediaStreamTrack track = | 192 scoped_refptr<CastSession> session(new CastSession()); |
193 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]); | 193 |
194 if (track.isNull()) | 194 const int stream1_id = last_transport_id_++; |
195 return; | 195 send_transport_map_[stream1_id] = |
196 const int transport_id = last_transport_id_++; | |
197 send_transport_map_[transport_id] = | |
198 linked_ptr<CastSendTransport>( | 196 linked_ptr<CastSendTransport>( |
199 new CastSendTransport(inner_transport, track.component())); | 197 new CastSendTransport(track1.component(), session)); |
198 const int stream2_id = last_transport_id_++; | |
199 send_transport_map_[stream2_id] = | |
200 linked_ptr<CastSendTransport>( | |
201 new CastSendTransport(track2.component(), session)); | |
202 const int udp_id = last_transport_id_++; | |
203 udp_transport_map_[udp_id] = | |
204 linked_ptr<CastUdpTransport>(new CastUdpTransport(session)); | |
200 | 205 |
201 v8::Handle<v8::Value> transport_id_v8 = v8::Integer::New(transport_id); | 206 v8::Handle<v8::Value> callback_args[3]; |
202 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[2]), 1, | 207 callback_args[0] = v8::Integer::New(stream1_id); |
203 &transport_id_v8); | 208 callback_args[1] = v8::Integer::New(stream2_id); |
209 callback_args[2] = v8::Integer::New(udp_id); | |
210 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[2]), | |
211 3, callback_args); | |
not at google - send to devlin
2013/11/25 19:41:11
so this will definitely be async eventually, right
Alpha Left Google
2013/11/26 04:22:45
Okay done.
| |
204 } | 212 } |
205 | 213 |
206 void WebRtcNativeHandler::DestroyCastSendTransport( | 214 void WebRtcNativeHandler::DestroyCastSendTransport( |
207 const v8::FunctionCallbackInfo<v8::Value>& args) { | 215 const v8::FunctionCallbackInfo<v8::Value>& args) { |
208 CHECK_EQ(1, args.Length()); | 216 CHECK_EQ(1, args.Length()); |
209 CHECK(args[0]->IsInt32()); | 217 CHECK(args[0]->IsInt32()); |
210 | 218 |
211 const int transport_id = args[0]->ToInt32()->Value(); | 219 const int transport_id = args[0]->ToInt32()->Value(); |
212 if (!GetSendTransportOrThrow(transport_id)) | 220 if (!GetSendTransportOrThrow(transport_id)) |
213 return; | 221 return; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
270 CHECK_EQ(1, args.Length()); | 278 CHECK_EQ(1, args.Length()); |
271 CHECK(args[0]->IsInt32()); | 279 CHECK(args[0]->IsInt32()); |
272 | 280 |
273 const int transport_id = args[0]->ToInt32()->Value(); | 281 const int transport_id = args[0]->ToInt32()->Value(); |
274 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); | 282 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); |
275 if (!transport) | 283 if (!transport) |
276 return; | 284 return; |
277 transport->Stop(); | 285 transport->Stop(); |
278 } | 286 } |
279 | 287 |
280 void WebRtcNativeHandler::CreateCastUdpTransport( | |
281 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
282 CHECK_EQ(1, args.Length()); | |
283 CHECK(args[0]->IsFunction()); | |
284 | |
285 const int transport_id = last_transport_id_++; | |
286 udp_transport_map_[transport_id] = | |
287 linked_ptr<CastUdpTransport>(new CastUdpTransport()); | |
288 | |
289 v8::Handle<v8::Value> transport_id_v8 = v8::Integer::New(transport_id); | |
290 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[0]), 1, | |
291 &transport_id_v8); | |
292 } | |
293 | |
294 void WebRtcNativeHandler::DestroyCastUdpTransport( | 288 void WebRtcNativeHandler::DestroyCastUdpTransport( |
295 const v8::FunctionCallbackInfo<v8::Value>& args) { | 289 const v8::FunctionCallbackInfo<v8::Value>& args) { |
296 CHECK_EQ(1, args.Length()); | 290 CHECK_EQ(1, args.Length()); |
297 CHECK(args[0]->IsInt32()); | 291 CHECK(args[0]->IsInt32()); |
298 | 292 |
299 const int transport_id = args[0]->ToInt32()->Value(); | 293 const int transport_id = args[0]->ToInt32()->Value(); |
300 if (!GetUdpTransportOrThrow(transport_id)) | 294 if (!GetUdpTransportOrThrow(transport_id)) |
301 return; | 295 return; |
302 udp_transport_map_.erase(transport_id); | 296 udp_transport_map_.erase(transport_id); |
303 } | 297 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
346 UdpTransportMap::const_iterator iter = udp_transport_map_.find( | 340 UdpTransportMap::const_iterator iter = udp_transport_map_.find( |
347 transport_id); | 341 transport_id); |
348 if (iter != udp_transport_map_.end()) | 342 if (iter != udp_transport_map_.end()) |
349 return iter->second.get(); | 343 return iter->second.get(); |
350 v8::ThrowException(v8::Exception::RangeError(v8::String::New( | 344 v8::ThrowException(v8::Exception::RangeError(v8::String::New( |
351 kUdpTransportNotFound))); | 345 kUdpTransportNotFound))); |
352 return NULL; | 346 return NULL; |
353 } | 347 } |
354 | 348 |
355 } // namespace extensions | 349 } // namespace extensions |
OLD | NEW |