Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "remoting/client/jni/jni_client.h" | 5 #include "remoting/client/jni/jni_client.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "jni/Client_jni.h" | 10 #include "jni/Client_jni.h" |
| 11 #include "remoting/client/audio_player_android.h" | |
| 11 #include "remoting/client/chromoting_client_runtime.h" | 12 #include "remoting/client/chromoting_client_runtime.h" |
| 12 #include "remoting/client/jni/chromoting_jni_instance.h" | 13 #include "remoting/client/chromoting_session.h" |
| 13 #include "remoting/client/jni/connect_to_host_info.h" | 14 #include "remoting/client/connect_to_host_info.h" |
| 14 #include "remoting/client/jni/jni_gl_display_handler.h" | 15 #include "remoting/client/jni/jni_gl_display_handler.h" |
| 15 #include "remoting/client/jni/jni_pairing_secret_fetcher.h" | 16 #include "remoting/client/jni/jni_pairing_secret_fetcher.h" |
| 16 #include "remoting/client/jni/jni_touch_event_data.h" | 17 #include "remoting/client/jni/jni_touch_event_data.h" |
| 17 #include "remoting/protocol/video_renderer.h" | 18 #include "remoting/protocol/video_renderer.h" |
| 18 | 19 |
| 19 using base::android::ConvertJavaStringToUTF8; | 20 using base::android::ConvertJavaStringToUTF8; |
| 20 using base::android::ConvertUTF8ToJavaString; | 21 using base::android::ConvertUTF8ToJavaString; |
| 21 using base::android::JavaParamRef; | 22 using base::android::JavaParamRef; |
| 22 using base::android::ScopedJavaLocalRef; | 23 using base::android::ScopedJavaLocalRef; |
| 23 | 24 |
| 24 namespace remoting { | 25 namespace remoting { |
| 25 | 26 |
| 26 JniClient::JniClient(base::android::ScopedJavaGlobalRef<jobject> java_client) | 27 JniClient::JniClient(base::android::ScopedJavaGlobalRef<jobject> java_client) |
| 27 : java_client_(java_client), weak_factory_(this) { | 28 : java_client_(java_client), weak_factory_(this) { |
| 28 runtime_ = ChromotingClientRuntime::GetInstance(); | 29 runtime_ = ChromotingClientRuntime::GetInstance(); |
| 29 weak_ptr_ = weak_factory_.GetWeakPtr(); | 30 weak_ptr_ = weak_factory_.GetWeakPtr(); |
| 30 } | 31 } |
| 31 | 32 |
| 32 JniClient::~JniClient() { | 33 JniClient::~JniClient() { |
| 33 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 34 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 34 | 35 |
| 35 // The session must be shut down first, since it depends on our other | 36 // The session must be shut down first, since it depends on our other |
| 36 // components' still being alive. | 37 // components' still being alive. |
| 37 DisconnectFromHost(); | 38 DisconnectFromHost(); |
| 38 } | 39 } |
| 39 | 40 |
| 40 void JniClient::ConnectToHost(const ConnectToHostInfo& info) { | 41 void JniClient::ConnectToHost(const ConnectToHostInfo& info) { |
| 41 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 42 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 42 DCHECK(!display_handler_); | 43 DCHECK(!display_handler_); |
| 44 DCHECK(!audio_player_); | |
| 43 DCHECK(!session_); | 45 DCHECK(!session_); |
| 44 DCHECK(!secret_fetcher_); | 46 DCHECK(!secret_fetcher_); |
| 45 display_handler_.reset(new JniGlDisplayHandler(java_client_)); | 47 display_handler_.reset(new JniGlDisplayHandler(java_client_)); |
| 46 secret_fetcher_.reset( | 48 secret_fetcher_.reset( |
| 47 new JniPairingSecretFetcher(GetWeakPtr(), info.host_id)); | 49 new JniPairingSecretFetcher(GetWeakPtr(), info.host_id)); |
| 48 session_.reset( | 50 |
| 49 new ChromotingJniInstance(GetWeakPtr(), secret_fetcher_->GetWeakPtr(), | 51 protocol::ClientAuthenticationConfig client_auth_config; |
| 50 display_handler_->CreateCursorShapeStub(), | 52 client_auth_config.host_id = info.host_id; |
| 51 display_handler_->CreateVideoRenderer(), info)); | 53 client_auth_config.pairing_client_id = info.pairing_id; |
| 54 client_auth_config.pairing_secret = info.pairing_secret; | |
| 55 client_auth_config.fetch_secret_callback = | |
| 56 base::Bind(&JniPairingSecretFetcher::FetchSecret, secret_fetcher_); | |
| 57 | |
| 58 audio_player_.reset(new AudioPlayerAndroid()); | |
| 59 | |
| 60 session_.reset(new ChromotingSession( | |
| 61 GetWeakPtr(), display_handler_->CreateCursorShapeStub(), | |
| 62 display_handler_->CreateVideoRenderer(), audio_player_->GetWeakPtr(), info , | |
|
Yuwei
2017/03/21 20:40:30
Line longer than 80 characters.
nicholss
2017/03/29 20:32:36
Done.
| |
| 63 client_auth_config)); | |
| 52 session_->Connect(); | 64 session_->Connect(); |
| 53 } | 65 } |
| 54 | 66 |
| 55 void JniClient::DisconnectFromHost() { | 67 void JniClient::DisconnectFromHost() { |
| 56 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 68 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 57 if (session_) { | 69 if (session_) { |
| 58 session_->Disconnect(); | 70 session_->Disconnect(); |
| 59 runtime_->network_task_runner()->DeleteSoon(FROM_HERE, | 71 runtime_->network_task_runner()->DeleteSoon(FROM_HERE, |
| 60 session_.release()); | 72 session_.release()); |
| 61 } | 73 } |
| 62 if (secret_fetcher_) { | 74 if (secret_fetcher_) { |
| 63 runtime_->network_task_runner()->DeleteSoon(FROM_HERE, | 75 runtime_->network_task_runner()->DeleteSoon(FROM_HERE, |
| 64 secret_fetcher_.release()); | 76 secret_fetcher_.release()); |
| 65 } | 77 } |
| 66 display_handler_.reset(); | 78 display_handler_.reset(); |
| 79 audio_player_.reset(); | |
| 67 } | 80 } |
| 68 | 81 |
| 69 void JniClient::OnConnectionState(protocol::ConnectionToHost::State state, | 82 void JniClient::OnConnectionState(protocol::ConnectionToHost::State state, |
| 70 protocol::ErrorCode error) { | 83 protocol::ErrorCode error) { |
| 71 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 84 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
| 72 | 85 |
| 73 JNIEnv* env = base::android::AttachCurrentThread(); | 86 JNIEnv* env = base::android::AttachCurrentThread(); |
| 74 Java_Client_onConnectionState(env, java_client_, state, error); | 87 Java_Client_onConnectionState(env, java_client_, state, error); |
| 75 } | 88 } |
| 76 | 89 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 157 info.host_jid = ConvertJavaStringToUTF8(env, host_jid); | 170 info.host_jid = ConvertJavaStringToUTF8(env, host_jid); |
| 158 info.host_id = ConvertJavaStringToUTF8(env, host_id); | 171 info.host_id = ConvertJavaStringToUTF8(env, host_id); |
| 159 info.host_pubkey = ConvertJavaStringToUTF8(env, host_pubkey); | 172 info.host_pubkey = ConvertJavaStringToUTF8(env, host_pubkey); |
| 160 info.pairing_id = ConvertJavaStringToUTF8(env, pair_id); | 173 info.pairing_id = ConvertJavaStringToUTF8(env, pair_id); |
| 161 info.pairing_secret = ConvertJavaStringToUTF8(env, pair_secret); | 174 info.pairing_secret = ConvertJavaStringToUTF8(env, pair_secret); |
| 162 info.capabilities = ConvertJavaStringToUTF8(env, capabilities); | 175 info.capabilities = ConvertJavaStringToUTF8(env, capabilities); |
| 163 info.flags = ConvertJavaStringToUTF8(env, flags); | 176 info.flags = ConvertJavaStringToUTF8(env, flags); |
| 164 info.host_version = ConvertJavaStringToUTF8(env, host_version); | 177 info.host_version = ConvertJavaStringToUTF8(env, host_version); |
| 165 info.host_os = ConvertJavaStringToUTF8(env, host_os); | 178 info.host_os = ConvertJavaStringToUTF8(env, host_os); |
| 166 info.host_os_version = ConvertJavaStringToUTF8(env, host_os_version); | 179 info.host_os_version = ConvertJavaStringToUTF8(env, host_os_version); |
| 180 | |
| 167 ConnectToHost(info); | 181 ConnectToHost(info); |
| 168 } | 182 } |
| 169 | 183 |
| 170 void JniClient::Disconnect(JNIEnv* env, | 184 void JniClient::Disconnect(JNIEnv* env, |
| 171 const base::android::JavaParamRef<jobject>& caller) { | 185 const base::android::JavaParamRef<jobject>& caller) { |
| 172 DisconnectFromHost(); | 186 DisconnectFromHost(); |
| 173 } | 187 } |
| 174 | 188 |
| 175 void JniClient::AuthenticationResponse( | 189 void JniClient::AuthenticationResponse( |
| 176 JNIEnv* env, | 190 JNIEnv* env, |
| 177 const JavaParamRef<jobject>& caller, | 191 const JavaParamRef<jobject>& caller, |
| 178 const JavaParamRef<jstring>& pin, | 192 const JavaParamRef<jstring>& pin, |
| 179 jboolean createPair, | 193 jboolean createPair, |
| 180 const JavaParamRef<jstring>& deviceName) { | 194 const JavaParamRef<jstring>& deviceName) { |
| 181 session_->ProvideSecret(ConvertJavaStringToUTF8(env, pin).c_str(), createPair, | 195 if (session_) { |
| 182 ConvertJavaStringToUTF8(env, deviceName)); | 196 session_->ProvideSecret(ConvertJavaStringToUTF8(env, pin).c_str(), |
|
Yuwei
2017/03/21 20:40:30
These c_str() calls are suspicious... Will it buil
nicholss
2017/03/29 20:32:36
I dropped them, it built locally but it was not an
| |
| 197 createPair, | |
| 198 ConvertJavaStringToUTF8(env, deviceName)); | |
| 199 } | |
| 200 | |
| 201 if (secret_fetcher_) { | |
| 202 runtime_->network_task_runner()->PostTask( | |
| 203 FROM_HERE, | |
| 204 base::Bind(&JniPairingSecretFetcher::ProvideSecret, secret_fetcher_, | |
| 205 ConvertJavaStringToUTF8(env, pin).c_str())); | |
| 206 } | |
| 183 } | 207 } |
| 184 | 208 |
| 185 void JniClient::SendMouseEvent( | 209 void JniClient::SendMouseEvent( |
| 186 JNIEnv* env, | 210 JNIEnv* env, |
| 187 const base::android::JavaParamRef<jobject>& caller, | 211 const base::android::JavaParamRef<jobject>& caller, |
| 188 jint x, | 212 jint x, |
| 189 jint y, | 213 jint y, |
| 190 jint whichButton, | 214 jint whichButton, |
| 191 jboolean buttonDown) { | 215 jboolean buttonDown) { |
| 192 // Button must be within the bounds of the MouseEvent_MouseButton enum. | 216 // Button must be within the bounds of the MouseEvent_MouseButton enum. |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 254 session_->EnableVideoChannel(enable); | 278 session_->EnableVideoChannel(enable); |
| 255 } | 279 } |
| 256 | 280 |
| 257 void JniClient::OnThirdPartyTokenFetched( | 281 void JniClient::OnThirdPartyTokenFetched( |
| 258 JNIEnv* env, | 282 JNIEnv* env, |
| 259 const base::android::JavaParamRef<jobject>& caller, | 283 const base::android::JavaParamRef<jobject>& caller, |
| 260 const JavaParamRef<jstring>& token, | 284 const JavaParamRef<jstring>& token, |
| 261 const JavaParamRef<jstring>& shared_secret) { | 285 const JavaParamRef<jstring>& shared_secret) { |
| 262 runtime_->network_task_runner()->PostTask( | 286 runtime_->network_task_runner()->PostTask( |
| 263 FROM_HERE, | 287 FROM_HERE, |
| 264 base::Bind(&ChromotingJniInstance::HandleOnThirdPartyTokenFetched, | 288 base::Bind(&ChromotingSession::HandleOnThirdPartyTokenFetched, |
| 265 session_->GetWeakPtr(), ConvertJavaStringToUTF8(env, token), | 289 session_->GetWeakPtr(), ConvertJavaStringToUTF8(env, token), |
| 266 ConvertJavaStringToUTF8(env, shared_secret))); | 290 ConvertJavaStringToUTF8(env, shared_secret))); |
| 267 } | 291 } |
| 268 | 292 |
| 269 void JniClient::SendExtensionMessage( | 293 void JniClient::SendExtensionMessage( |
| 270 JNIEnv* env, | 294 JNIEnv* env, |
| 271 const base::android::JavaParamRef<jobject>& caller, | 295 const base::android::JavaParamRef<jobject>& caller, |
| 272 const JavaParamRef<jstring>& type, | 296 const JavaParamRef<jstring>& type, |
| 273 const JavaParamRef<jstring>& data) { | 297 const JavaParamRef<jstring>& data) { |
| 274 session_->SendClientMessage(ConvertJavaStringToUTF8(env, type), | 298 session_->SendClientMessage(ConvertJavaStringToUTF8(env, type), |
| 275 ConvertJavaStringToUTF8(env, data)); | 299 ConvertJavaStringToUTF8(env, data)); |
| 276 } | 300 } |
| 277 | 301 |
| 278 void JniClient::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) { | 302 void JniClient::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) { |
| 279 delete this; | 303 delete this; |
| 280 } | 304 } |
| 281 | 305 |
| 282 base::WeakPtr<JniClient> JniClient::GetWeakPtr() { | 306 base::WeakPtr<JniClient> JniClient::GetWeakPtr() { |
| 283 return weak_ptr_; | 307 return weak_ptr_; |
| 284 } | 308 } |
| 285 | 309 |
| 286 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& caller) { | 310 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& caller) { |
| 287 return reinterpret_cast<intptr_t>( | 311 return reinterpret_cast<intptr_t>( |
| 288 new JniClient(base::android::ScopedJavaGlobalRef<jobject>(env, caller))); | 312 new JniClient(base::android::ScopedJavaGlobalRef<jobject>(env, caller))); |
| 289 } | 313 } |
| 290 | 314 |
| 291 } // namespace remoting | 315 } // namespace remoting |
| OLD | NEW |