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

Unified Diff: components/devtools_bridge/android/session_dependency_factory_android.cc

Issue 716433003: Continue impementation SessionDependencyFactoryNative. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@native-factory
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: components/devtools_bridge/android/session_dependency_factory_android.cc
diff --git a/components/devtools_bridge/android/session_dependency_factory_android.cc b/components/devtools_bridge/android/session_dependency_factory_android.cc
new file mode 100644
index 0000000000000000000000000000000000000000..df6173de16f52de6836a085140c74641d7a696d8
--- /dev/null
+++ b/components/devtools_bridge/android/session_dependency_factory_android.cc
@@ -0,0 +1,206 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/devtools_bridge/android/session_dependency_factory_android.h"
+
+#include "base/android/jni_string.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/bind.h"
+#include "components/devtools_bridge/abstract_data_channel.h"
+#include "components/devtools_bridge/abstract_peer_connection.h"
+#include "components/devtools_bridge/rtc_configuration.h"
+#include "jni/SessionDependencyFactoryNative_jni.h"
+
+using base::android::AttachCurrentThread;
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF8ToJavaString;
+
+namespace devtools_bridge {
+namespace android {
+
+namespace {
+
+class PeerConnectionDelegateImpl
+ : public AbstractPeerConnection::Delegate {
+ public:
+ PeerConnectionDelegateImpl(JNIEnv* env, jobject java_object) {
+ java_object_.Reset(env, java_object);
+ connected_ = false;
+ }
+
+ virtual void OnIceConnectionChange(bool connected) override {
+ JNIEnv* env = AttachCurrentThread();
+ Java_SessionDependencyFactoryNative_notifyIceConnectionChange(
+ env, java_object_.obj(), connected);
+ }
+
+ virtual void OnIceCandidate(
+ const std::string& sdp_mid, int sdp_mline_index, const std::string& sdp)
+ override {
+ JNIEnv* env = AttachCurrentThread();
+ Java_SessionDependencyFactoryNative_notifyIceCandidate(
+ env, java_object_.obj(),
+ ConvertUTF8ToJavaString(env, sdp_mid).Release(),
+ sdp_mline_index, ConvertUTF8ToJavaString(env, sdp).Release());
+ }
+
+ void NotifyLocalOfferCreatedAndSetSet(const std::string& description) {
+ JNIEnv* env = AttachCurrentThread();
+ Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
+ env, java_object_.obj(),
+ ConvertUTF8ToJavaString(env, description).Release());
+ }
+
+ virtual void OnLocalOfferCreatedAndSetSet(const std::string& description)
+ override {
+ JNIEnv* env = AttachCurrentThread();
+ Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
+ env, java_object_.obj(),
+ ConvertUTF8ToJavaString(env, description).Release());
+ }
+
+ virtual void OnLocalAnswerCreatedAndSetSet(const std::string& description)
+ override {
+ JNIEnv* env = AttachCurrentThread();
+ Java_SessionDependencyFactoryNative_notifyLocalAnswerCreatedAndSetSet(
+ env, java_object_.obj(),
+ ConvertUTF8ToJavaString(env, description).Release());
+ }
+
+ virtual void OnRemoteDescriptionSet() override {
+ JNIEnv* env = AttachCurrentThread();
+ Java_SessionDependencyFactoryNative_notifyRemoteDescriptionSet(
+ env, java_object_.obj());
+ }
+
+ virtual void OnFailure(const std::string& description) override {
+ JNIEnv* env = AttachCurrentThread();
+ Java_SessionDependencyFactoryNative_notifyConnectionFailure(
+ env, java_object_.obj(),
+ ConvertUTF8ToJavaString(env, description).Release());
+ }
+
+ private:
+ base::android::ScopedJavaGlobalRef<jobject> java_object_;
+ bool connected_;
+};
+
+static void CleanupOnSignalingThread() {
+ // Called on signaling thread when SessionDependencyFactory is destroying.
+ base::android::DetachFromVM();
+}
+
+} // namespace
+
+// SessionDependencyFactoryNative
+
+SessionDependencyFactoryAndroid::SessionDependencyFactoryAndroid()
+ : impl_(SessionDependencyFactory::CreateInstance(
+ base::Bind(&CleanupOnSignalingThread))) {
+}
+
+SessionDependencyFactoryAndroid::~SessionDependencyFactoryAndroid() {
+}
+
+// static
+void SessionDependencyFactoryAndroid::RegisterNatives(JNIEnv* env) {
+ RegisterNativesImpl(env);
+}
+
+scoped_ptr<AbstractPeerConnection>
+SessionDependencyFactoryAndroid::CreatePeerConnection(
+ scoped_ptr<RTCConfiguration> config,
+ scoped_ptr<AbstractPeerConnection::Delegate> delegate) {
+ return impl_->CreatePeerConnection(config.Pass(), delegate.Pass());
+}
+
+// JNI generated methods
+
+static jlong CreateFactory(JNIEnv* env, jclass jcaller) {
+ return reinterpret_cast<jlong>(new SessionDependencyFactoryAndroid());
+}
+
+static void DestroyFactory(JNIEnv* env, jclass jcaller, jlong factoryPtr) {
+ delete reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr);
+}
+
+static jlong CreateConfig(JNIEnv* env, jclass jcaller) {
+ return reinterpret_cast<jlong>(
+ RTCConfiguration::CreateInstance().release());
+}
+
+static void AddIceServer(
+ JNIEnv* env, jclass jcaller, jlong configPtr,
+ jstring uri, jstring username, jstring credential) {
+ reinterpret_cast<RTCConfiguration*>(configPtr)->AddIceServer(
+ ConvertJavaStringToUTF8(env, uri),
+ ConvertJavaStringToUTF8(env, username),
+ ConvertJavaStringToUTF8(env, credential));
+}
+
+static jlong CreatePeerConnection(
+ JNIEnv* env, jclass jcaller,
+ jlong factoryPtr, jlong configPtr, jobject observer) {
+ auto factory =
+ reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr);
+ auto config = reinterpret_cast<RTCConfiguration*>(configPtr);
+
+ auto delegate = new PeerConnectionDelegateImpl(env, observer);
+
+ return reinterpret_cast<jlong>(factory->CreatePeerConnection(
+ make_scoped_ptr(config), make_scoped_ptr(delegate)).release());
+}
+
+static void DestroyPeerConnection(
+ JNIEnv* env, jclass jcaller, jlong connectionPtr) {
+ delete reinterpret_cast<AbstractPeerConnection*>(connectionPtr);
+}
+
+static void CreateAndSetLocalOffer(
+ JNIEnv* env, jclass jcaller, jlong connectionPtr) {
+ reinterpret_cast<AbstractPeerConnection*>(
+ connectionPtr)->CreateAndSetLocalOffer();
+}
+
+static void CreateAndSetLocalAnswer(
+ JNIEnv* env, jclass jcaller, jlong connectionPtr) {
+ reinterpret_cast<AbstractPeerConnection*>(
+ connectionPtr)->CreateAndSetLocalAnswer();
+}
+
+static void SetRemoteOffer(
+ JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) {
+ reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteOffer(
+ ConvertJavaStringToUTF8(env, description));
+}
+
+static void SetRemoteAnswer(
+ JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) {
+ reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteAnswer(
+ ConvertJavaStringToUTF8(env, description));
+}
+
+static void AddIceCandidate(
+ JNIEnv* env, jclass jcaller,
+ jlong connectionPtr, jstring sdpMid, jint sdpMLineIndex, jstring sdp) {
+ reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->AddIceCandidate(
+ ConvertJavaStringToUTF8(env, sdpMid),
+ sdpMLineIndex,
+ ConvertJavaStringToUTF8(env, sdp));
+}
+
+static jlong CreateDataChannel(
+ JNIEnv* env, jclass jcaller, jlong connectionPtr, jint channelId) {
+ return reinterpret_cast<jlong>(
+ reinterpret_cast<AbstractPeerConnection*>(
+ connectionPtr)->CreateDataChannel(channelId).release());
+}
+
+static void DestroyDataChannel(
+ JNIEnv* env, jclass jcaller, jlong channelPtr) {
+ delete reinterpret_cast<AbstractDataChannel*>(channelPtr);
+}
+
+} // namespace android
+} // namespace devtools_bridge

Powered by Google App Engine
This is Rietveld 408576698