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

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: Pointer not obj. Created 3 years, 9 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
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(),
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698