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

Side by Side Diff: remoting/client/jni/jni_client.cc

Issue 2753963002: Refactoring and rewriting the chromoting jni instance to be chromoting session. (Closed)
Patch Set: Merge with master. Created 3 years, 8 months 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
« no previous file with comments | « remoting/client/jni/jni_client.h ('k') | remoting/client/jni/jni_runtime_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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(),
Yuwei 2017/03/29 22:55:27 GetWeakPtr() should be the JniRuntimeDelegate
nicholss 2017/03/29 23:34:53 Oh man yes. Thanks nice catch! I had to give the J
Yuwei 2017/03/29 23:56:29 IIRC WeakPtr should be clever enough to convert Jn
Yuwei 2017/03/30 19:02:57 Sorry for misleading... Looks like it's taking a C
62 display_handler_->CreateVideoRenderer(), audio_player_->GetWeakPtr(),
63 info, 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
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), createPair, 195 if (session_) {
182 ConvertJavaStringToUTF8(env, deviceName)); 196 session_->ProvideSecret(ConvertJavaStringToUTF8(env, pin), createPair,
197 ConvertJavaStringToUTF8(env, deviceName));
198 }
199
200 if (secret_fetcher_) {
201 runtime_->network_task_runner()->PostTask(
202 FROM_HERE,
203 base::Bind(&JniPairingSecretFetcher::ProvideSecret, secret_fetcher_,
204 ConvertJavaStringToUTF8(env, pin)));
205 }
183 } 206 }
184 207
185 void JniClient::SendMouseEvent( 208 void JniClient::SendMouseEvent(
186 JNIEnv* env, 209 JNIEnv* env,
187 const base::android::JavaParamRef<jobject>& caller, 210 const base::android::JavaParamRef<jobject>& caller,
188 jint x, 211 jint x,
189 jint y, 212 jint y,
190 jint whichButton, 213 jint whichButton,
191 jboolean buttonDown) { 214 jboolean buttonDown) {
192 // Button must be within the bounds of the MouseEvent_MouseButton enum. 215 // Button must be within the bounds of the MouseEvent_MouseButton enum.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 session_->EnableVideoChannel(enable); 277 session_->EnableVideoChannel(enable);
255 } 278 }
256 279
257 void JniClient::OnThirdPartyTokenFetched( 280 void JniClient::OnThirdPartyTokenFetched(
258 JNIEnv* env, 281 JNIEnv* env,
259 const base::android::JavaParamRef<jobject>& caller, 282 const base::android::JavaParamRef<jobject>& caller,
260 const JavaParamRef<jstring>& token, 283 const JavaParamRef<jstring>& token,
261 const JavaParamRef<jstring>& shared_secret) { 284 const JavaParamRef<jstring>& shared_secret) {
262 runtime_->network_task_runner()->PostTask( 285 runtime_->network_task_runner()->PostTask(
263 FROM_HERE, 286 FROM_HERE,
264 base::Bind(&ChromotingJniInstance::HandleOnThirdPartyTokenFetched, 287 base::Bind(&ChromotingSession::HandleOnThirdPartyTokenFetched,
265 session_->GetWeakPtr(), ConvertJavaStringToUTF8(env, token), 288 session_->GetWeakPtr(), ConvertJavaStringToUTF8(env, token),
266 ConvertJavaStringToUTF8(env, shared_secret))); 289 ConvertJavaStringToUTF8(env, shared_secret)));
267 } 290 }
268 291
269 void JniClient::SendExtensionMessage( 292 void JniClient::SendExtensionMessage(
270 JNIEnv* env, 293 JNIEnv* env,
271 const base::android::JavaParamRef<jobject>& caller, 294 const base::android::JavaParamRef<jobject>& caller,
272 const JavaParamRef<jstring>& type, 295 const JavaParamRef<jstring>& type,
273 const JavaParamRef<jstring>& data) { 296 const JavaParamRef<jstring>& data) {
274 session_->SendClientMessage(ConvertJavaStringToUTF8(env, type), 297 session_->SendClientMessage(ConvertJavaStringToUTF8(env, type),
275 ConvertJavaStringToUTF8(env, data)); 298 ConvertJavaStringToUTF8(env, data));
276 } 299 }
277 300
278 void JniClient::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) { 301 void JniClient::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) {
279 delete this; 302 delete this;
280 } 303 }
281 304
282 base::WeakPtr<JniClient> JniClient::GetWeakPtr() { 305 base::WeakPtr<JniClient> JniClient::GetWeakPtr() {
283 return weak_ptr_; 306 return weak_ptr_;
284 } 307 }
285 308
286 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& caller) { 309 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& caller) {
287 return reinterpret_cast<intptr_t>( 310 return reinterpret_cast<intptr_t>(
288 new JniClient(base::android::ScopedJavaGlobalRef<jobject>(env, caller))); 311 new JniClient(base::android::ScopedJavaGlobalRef<jobject>(env, caller)));
289 } 312 }
290 313
291 } // namespace remoting 314 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/client/jni/jni_client.h ('k') | remoting/client/jni/jni_runtime_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698