Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: chrome/renderer/extensions/webrtc_native_handler.cc

Issue 83043005: Cast Extensions API: Factory method for creating a cast session (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed scope Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/message_loop/message_loop.h"
10 #include "chrome/common/extensions/api/webrtc_cast_send_transport.h" 11 #include "chrome/common/extensions/api/webrtc_cast_send_transport.h"
11 #include "chrome/common/extensions/api/webrtc_cast_udp_transport.h" 12 #include "chrome/common/extensions/api/webrtc_cast_udp_transport.h"
12 #include "chrome/renderer/extensions/chrome_v8_context.h" 13 #include "chrome/renderer/extensions/chrome_v8_context.h"
13 #include "chrome/renderer/media/cast_send_transport.h" 14 #include "chrome/renderer/media/cast_send_transport.h"
14 #include "chrome/renderer/media/cast_session.h" 15 #include "chrome/renderer/media/cast_session.h"
15 #include "chrome/renderer/media/cast_udp_transport.h" 16 #include "chrome/renderer/media/cast_udp_transport.h"
16 #include "content/public/renderer/v8_value_converter.h" 17 #include "content/public/renderer/v8_value_converter.h"
17 #include "net/base/host_port_pair.h" 18 #include "net/base/host_port_pair.h"
18 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 19 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
19 #include "third_party/WebKit/public/web/WebDOMMediaStreamTrack.h" 20 #include "third_party/WebKit/public/web/WebDOMMediaStreamTrack.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 CastRtpPayloadParams cast_payload_params; 117 CastRtpPayloadParams cast_payload_params;
117 ToCastRtpPayloadParams(*ext_params.payloads[i], &cast_payload_params); 118 ToCastRtpPayloadParams(*ext_params.payloads[i], &cast_payload_params);
118 cast_params->payloads.push_back(cast_payload_params); 119 cast_params->payloads.push_back(cast_payload_params);
119 } 120 }
120 } 121 }
121 122
122 } // namespace 123 } // namespace
123 124
124 WebRtcNativeHandler::WebRtcNativeHandler(ChromeV8Context* context) 125 WebRtcNativeHandler::WebRtcNativeHandler(ChromeV8Context* context)
125 : ObjectBackedNativeHandler(context), 126 : ObjectBackedNativeHandler(context),
126 last_transport_id_(0) { 127 last_transport_id_(0),
127 RouteFunction("CreateCastSendTransport", 128 weak_factory_(this) {
128 base::Bind(&WebRtcNativeHandler::CreateCastSendTransport, 129 RouteFunction("CreateSession",
130 base::Bind(&WebRtcNativeHandler::CreateCastSession,
129 base::Unretained(this))); 131 base::Unretained(this)));
130 RouteFunction("DestroyCastSendTransport", 132 RouteFunction("DestroyCastSendTransport",
131 base::Bind(&WebRtcNativeHandler::DestroyCastSendTransport, 133 base::Bind(&WebRtcNativeHandler::DestroyCastSendTransport,
132 base::Unretained(this))); 134 base::Unretained(this)));
133 RouteFunction("GetCapsCastSendTransport", 135 RouteFunction("GetCapsCastSendTransport",
134 base::Bind(&WebRtcNativeHandler::GetCapsCastSendTransport, 136 base::Bind(&WebRtcNativeHandler::GetCapsCastSendTransport,
135 base::Unretained(this))); 137 base::Unretained(this)));
136 RouteFunction("StartCastSendTransport", 138 RouteFunction("StartCastSendTransport",
137 base::Bind(&WebRtcNativeHandler::StartCastSendTransport, 139 base::Bind(&WebRtcNativeHandler::StartCastSendTransport,
138 base::Unretained(this))); 140 base::Unretained(this)));
139 RouteFunction("StopCastSendTransport", 141 RouteFunction("StopCastSendTransport",
140 base::Bind(&WebRtcNativeHandler::StopCastSendTransport, 142 base::Bind(&WebRtcNativeHandler::StopCastSendTransport,
141 base::Unretained(this))); 143 base::Unretained(this)));
142 RouteFunction("CreateCastUdpTransport",
143 base::Bind(&WebRtcNativeHandler::CreateCastUdpTransport,
144 base::Unretained(this)));
145 RouteFunction("DestroyCastUdpTransport", 144 RouteFunction("DestroyCastUdpTransport",
146 base::Bind(&WebRtcNativeHandler::DestroyCastUdpTransport, 145 base::Bind(&WebRtcNativeHandler::DestroyCastUdpTransport,
147 base::Unretained(this))); 146 base::Unretained(this)));
148 RouteFunction("StartCastUdpTransport", 147 RouteFunction("StartCastUdpTransport",
149 base::Bind(&WebRtcNativeHandler::StartCastUdpTransport, 148 base::Bind(&WebRtcNativeHandler::StartCastUdpTransport,
150 base::Unretained(this))); 149 base::Unretained(this)));
151 } 150 }
152 151
153 WebRtcNativeHandler::~WebRtcNativeHandler() { 152 WebRtcNativeHandler::~WebRtcNativeHandler() {
154 } 153 }
155 154
156 void WebRtcNativeHandler::CreateCastSendTransport( 155 void WebRtcNativeHandler::CreateCastSession(
157 const v8::FunctionCallbackInfo<v8::Value>& args) { 156 const v8::FunctionCallbackInfo<v8::Value>& args) {
158 CHECK_EQ(3, args.Length()); 157 CHECK_EQ(3, args.Length());
159 CHECK(args[0]->IsInt32()); 158 CHECK(args[0]->IsObject());
160 CHECK(args[1]->IsObject()); 159 CHECK(args[1]->IsObject());
161 CHECK(args[2]->IsFunction()); 160 CHECK(args[2]->IsFunction());
162 161
163 const int inner_transport_id = args[0]->ToInt32()->Value(); 162 blink::WebDOMMediaStreamTrack track1 =
164 CastUdpTransport* inner_transport = GetUdpTransportOrThrow( 163 blink::WebDOMMediaStreamTrack::fromV8Value(args[0]);
165 inner_transport_id); 164 if (track1.isNull())
166 if (!inner_transport) 165 return;
166 blink::WebDOMMediaStreamTrack track2 =
167 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]);
168 if (track2.isNull())
167 return; 169 return;
168 170
169 blink::WebDOMMediaStreamTrack track = 171 scoped_refptr<CastSession> session(new CastSession());
170 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]); 172 scoped_ptr<CastSendTransport> stream1(
171 if (track.isNull()) 173 new CastSendTransport(track1.component(), session));
172 return; 174 scoped_ptr<CastSendTransport> stream2(
173 const int transport_id = last_transport_id_++; 175 new CastSendTransport(track2.component(), session));
174 send_transport_map_[transport_id] = 176 scoped_ptr<CastUdpTransport> udp_transport(
175 linked_ptr<CastSendTransport>( 177 new CastUdpTransport(session));
176 new CastSendTransport(inner_transport, track.component()));
177 178
178 v8::Handle<v8::Value> transport_id_v8 = v8::Integer::New(transport_id); 179 create_callback_.reset(args[2].As<v8::Function>());
179 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[2]), 1, 180
180 &transport_id_v8); 181 base::MessageLoop::current()->PostTask(
182 FROM_HERE,
183 base::Bind(
184 &WebRtcNativeHandler::CallCreateCallback,
185 weak_factory_.GetWeakPtr(),
186 base::Passed(&stream1),
187 base::Passed(&stream2),
188 base::Passed(&udp_transport)));
189 }
190
191 void WebRtcNativeHandler::CallCreateCallback(
192 scoped_ptr<CastSendTransport> stream1,
193 scoped_ptr<CastSendTransport> stream2,
194 scoped_ptr<CastUdpTransport> udp_transport) {
195 v8::HandleScope handle_scope(context()->isolate());
196 v8::Context::Scope context_scope(context()->v8_context());
197
198 const int stream1_id = last_transport_id_++;
199 send_transport_map_[stream1_id] =
200 linked_ptr<CastSendTransport>(stream1.release());
201 const int stream2_id = last_transport_id_++;
202 send_transport_map_[stream2_id] =
203 linked_ptr<CastSendTransport>(stream2.release());
204 const int udp_id = last_transport_id_++;
205 udp_transport_map_[udp_id] =
206 linked_ptr<CastUdpTransport>(udp_transport.release());
207
208 v8::Handle<v8::Value> callback_args[3];
209 callback_args[0] = v8::Integer::New(stream1_id);
210 callback_args[1] = v8::Integer::New(stream2_id);
211 callback_args[2] = v8::Integer::New(udp_id);
212 context()->CallFunction(create_callback_.NewHandle(context()->isolate()),
213 3, callback_args);
214 create_callback_.reset();
181 } 215 }
182 216
183 void WebRtcNativeHandler::DestroyCastSendTransport( 217 void WebRtcNativeHandler::DestroyCastSendTransport(
184 const v8::FunctionCallbackInfo<v8::Value>& args) { 218 const v8::FunctionCallbackInfo<v8::Value>& args) {
185 CHECK_EQ(1, args.Length()); 219 CHECK_EQ(1, args.Length());
186 CHECK(args[0]->IsInt32()); 220 CHECK(args[0]->IsInt32());
187 221
188 const int transport_id = args[0]->ToInt32()->Value(); 222 const int transport_id = args[0]->ToInt32()->Value();
189 if (!GetSendTransportOrThrow(transport_id)) 223 if (!GetSendTransportOrThrow(transport_id))
190 return; 224 return;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 CHECK_EQ(1, args.Length()); 281 CHECK_EQ(1, args.Length());
248 CHECK(args[0]->IsInt32()); 282 CHECK(args[0]->IsInt32());
249 283
250 const int transport_id = args[0]->ToInt32()->Value(); 284 const int transport_id = args[0]->ToInt32()->Value();
251 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); 285 CastSendTransport* transport = GetSendTransportOrThrow(transport_id);
252 if (!transport) 286 if (!transport)
253 return; 287 return;
254 transport->Stop(); 288 transport->Stop();
255 } 289 }
256 290
257 void WebRtcNativeHandler::CreateCastUdpTransport(
258 const v8::FunctionCallbackInfo<v8::Value>& args) {
259 CHECK_EQ(1, args.Length());
260 CHECK(args[0]->IsFunction());
261
262 const int transport_id = last_transport_id_++;
263 udp_transport_map_[transport_id] =
264 linked_ptr<CastUdpTransport>(new CastUdpTransport());
265
266 v8::Handle<v8::Value> transport_id_v8 = v8::Integer::New(transport_id);
267 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[0]), 1,
268 &transport_id_v8);
269 }
270
271 void WebRtcNativeHandler::DestroyCastUdpTransport( 291 void WebRtcNativeHandler::DestroyCastUdpTransport(
272 const v8::FunctionCallbackInfo<v8::Value>& args) { 292 const v8::FunctionCallbackInfo<v8::Value>& args) {
273 CHECK_EQ(1, args.Length()); 293 CHECK_EQ(1, args.Length());
274 CHECK(args[0]->IsInt32()); 294 CHECK(args[0]->IsInt32());
275 295
276 const int transport_id = args[0]->ToInt32()->Value(); 296 const int transport_id = args[0]->ToInt32()->Value();
277 if (!GetUdpTransportOrThrow(transport_id)) 297 if (!GetUdpTransportOrThrow(transport_id))
278 return; 298 return;
279 udp_transport_map_.erase(transport_id); 299 udp_transport_map_.erase(transport_id);
280 } 300 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 transport_id); 345 transport_id);
326 if (iter != udp_transport_map_.end()) 346 if (iter != udp_transport_map_.end())
327 return iter->second.get(); 347 return iter->second.get();
328 v8::Isolate* isolate = context()->v8_context()->GetIsolate(); 348 v8::Isolate* isolate = context()->v8_context()->GetIsolate();
329 isolate->ThrowException(v8::Exception::RangeError( 349 isolate->ThrowException(v8::Exception::RangeError(
330 v8::String::NewFromUtf8(isolate, kUdpTransportNotFound))); 350 v8::String::NewFromUtf8(isolate, kUdpTransportNotFound)));
331 return NULL; 351 return NULL;
332 } 352 }
333 353
334 } // namespace extensions 354 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/webrtc_native_handler.h ('k') | chrome/renderer/media/cast_send_transport.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698