Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / extensions / cast_streaming_native_handler.cc
index 8170f63..71fd3e9 100644 (file)
@@ -236,6 +236,38 @@ void CastStreamingNativeHandler::CallCreateCallback(
   create_callback_.reset();
 }
 
+void CastStreamingNativeHandler::CallStartCallback(int stream_id) {
+  v8::Isolate* isolate = context()->isolate();
+  v8::HandleScope handle_scope(isolate);
+  v8::Context::Scope context_scope(context()->v8_context());
+  v8::Handle<v8::Array> event_args = v8::Array::New(isolate, 1);
+  event_args->Set(0, v8::Integer::New(isolate, stream_id));
+  context()->DispatchEvent("cast.streaming.rtpStream.onStarted", event_args);
+}
+
+void CastStreamingNativeHandler::CallStopCallback(int stream_id) {
+  v8::Isolate* isolate = context()->isolate();
+  v8::HandleScope handle_scope(isolate);
+  v8::Context::Scope context_scope(context()->v8_context());
+  v8::Handle<v8::Array> event_args = v8::Array::New(isolate, 1);
+  event_args->Set(0, v8::Integer::New(isolate, stream_id));
+  context()->DispatchEvent("cast.streaming.rtpStream.onStopped", event_args);
+}
+
+void CastStreamingNativeHandler::CallErrorCallback(int stream_id,
+                                                   const std::string& message) {
+  v8::Isolate* isolate = context()->isolate();
+  v8::HandleScope handle_scope(isolate);
+  v8::Context::Scope context_scope(context()->v8_context());
+  v8::Handle<v8::Array> event_args = v8::Array::New(isolate, 2);
+  event_args->Set(0, v8::Integer::New(isolate, stream_id));
+  event_args->Set(
+      1,
+      v8::String::NewFromUtf8(
+          isolate, message.data(), v8::String::kNormalString, message.size()));
+  context()->DispatchEvent("cast.streaming.rtpStream.onError", event_args);
+}
+
 void CastStreamingNativeHandler::DestroyCastRtpStream(
     const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK_EQ(1, args.Length());
@@ -303,7 +335,20 @@ void CastStreamingNativeHandler::StartCastRtpStream(
   v8::Isolate* isolate = context()->v8_context()->GetIsolate();
   if (!ToCastRtpParamsOrThrow(isolate, *params, &cast_params))
     return;
-  transport->Start(cast_params);
+
+  base::Closure start_callback =
+      base::Bind(&CastStreamingNativeHandler::CallStartCallback,
+                 weak_factory_.GetWeakPtr(),
+                 transport_id);
+  base::Closure stop_callback =
+      base::Bind(&CastStreamingNativeHandler::CallStopCallback,
+                 weak_factory_.GetWeakPtr(),
+                 transport_id);
+  CastRtpStream::ErrorCallback error_callback =
+      base::Bind(&CastStreamingNativeHandler::CallErrorCallback,
+                 weak_factory_.GetWeakPtr(),
+                 transport_id);
+  transport->Start(cast_params, start_callback, stop_callback, error_callback);
 }
 
 void CastStreamingNativeHandler::StopCastRtpStream(