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/chromoting_client_runtime.h" |
11 #include "remoting/client/jni/chromoting_jni_instance.h" | 12 #include "remoting/client/jni/chromoting_jni_instance.h" |
12 #include "remoting/client/jni/chromoting_jni_runtime.h" | |
13 #include "remoting/client/jni/connect_to_host_info.h" | 13 #include "remoting/client/jni/connect_to_host_info.h" |
14 #include "remoting/client/jni/jni_gl_display_handler.h" | 14 #include "remoting/client/jni/jni_gl_display_handler.h" |
15 #include "remoting/client/jni/jni_pairing_secret_fetcher.h" | 15 #include "remoting/client/jni/jni_pairing_secret_fetcher.h" |
16 #include "remoting/client/jni/jni_touch_event_data.h" | 16 #include "remoting/client/jni/jni_touch_event_data.h" |
17 #include "remoting/protocol/video_renderer.h" | 17 #include "remoting/protocol/video_renderer.h" |
18 | 18 |
19 using base::android::ConvertJavaStringToUTF8; | 19 using base::android::ConvertJavaStringToUTF8; |
20 using base::android::ConvertUTF8ToJavaString; | 20 using base::android::ConvertUTF8ToJavaString; |
21 using base::android::JavaParamRef; | 21 using base::android::JavaParamRef; |
22 using base::android::ScopedJavaLocalRef; | 22 using base::android::ScopedJavaLocalRef; |
23 | 23 |
24 namespace remoting { | 24 namespace remoting { |
25 | 25 |
26 JniClient::JniClient(ChromotingJniRuntime* runtime, | 26 JniClient::JniClient(base::android::ScopedJavaGlobalRef<jobject> java_client) |
27 base::android::ScopedJavaGlobalRef<jobject> java_client) | 27 : java_client_(java_client), weak_factory_(this) { |
28 : runtime_(runtime), | 28 runtime_ = ChromotingClientRuntime::GetInstance(); |
29 java_client_(java_client), | |
30 weak_factory_(this) { | |
31 weak_ptr_ = weak_factory_.GetWeakPtr(); | 29 weak_ptr_ = weak_factory_.GetWeakPtr(); |
32 } | 30 } |
33 | 31 |
34 JniClient::~JniClient() { | 32 JniClient::~JniClient() { |
35 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 33 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
36 | 34 |
37 // The session must be shut down first, since it depends on our other | 35 // The session must be shut down first, since it depends on our other |
38 // components' still being alive. | 36 // components' still being alive. |
39 DisconnectFromHost(); | 37 DisconnectFromHost(); |
40 } | 38 } |
41 | 39 |
42 void JniClient::ConnectToHost(const ConnectToHostInfo& info) { | 40 void JniClient::ConnectToHost(const ConnectToHostInfo& info) { |
43 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 41 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
44 DCHECK(!display_handler_); | 42 DCHECK(!display_handler_); |
45 DCHECK(!session_); | 43 DCHECK(!session_); |
46 DCHECK(!secret_fetcher_); | 44 DCHECK(!secret_fetcher_); |
47 display_handler_.reset(new JniGlDisplayHandler(runtime_, java_client_)); | 45 display_handler_.reset(new JniGlDisplayHandler(java_client_)); |
48 secret_fetcher_.reset( | 46 secret_fetcher_.reset( |
49 new JniPairingSecretFetcher(runtime_, GetWeakPtr(), info.host_id)); | 47 new JniPairingSecretFetcher(GetWeakPtr(), info.host_id)); |
50 session_.reset(new ChromotingJniInstance( | 48 session_.reset( |
51 runtime_, GetWeakPtr(), secret_fetcher_->GetWeakPtr(), | 49 new ChromotingJniInstance(GetWeakPtr(), secret_fetcher_->GetWeakPtr(), |
52 display_handler_->CreateCursorShapeStub(), | 50 display_handler_->CreateCursorShapeStub(), |
53 display_handler_->CreateVideoRenderer(), info)); | 51 display_handler_->CreateVideoRenderer(), info)); |
54 session_->Connect(); | 52 session_->Connect(); |
55 } | 53 } |
56 | 54 |
57 void JniClient::DisconnectFromHost() { | 55 void JniClient::DisconnectFromHost() { |
58 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); | 56 DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); |
59 if (session_) { | 57 if (session_) { |
60 session_->Disconnect(); | 58 session_->Disconnect(); |
61 runtime_->network_task_runner()->DeleteSoon(FROM_HERE, | 59 runtime_->network_task_runner()->DeleteSoon(FROM_HERE, |
62 session_.release()); | 60 session_.release()); |
63 } | 61 } |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 void JniClient::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) { | 278 void JniClient::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) { |
281 delete this; | 279 delete this; |
282 } | 280 } |
283 | 281 |
284 base::WeakPtr<JniClient> JniClient::GetWeakPtr() { | 282 base::WeakPtr<JniClient> JniClient::GetWeakPtr() { |
285 return weak_ptr_; | 283 return weak_ptr_; |
286 } | 284 } |
287 | 285 |
288 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& caller) { | 286 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& caller) { |
289 return reinterpret_cast<intptr_t>( | 287 return reinterpret_cast<intptr_t>( |
290 new JniClient(ChromotingJniRuntime::GetInstance(), | 288 new JniClient(base::android::ScopedJavaGlobalRef<jobject>(env, caller))); |
291 base::android::ScopedJavaGlobalRef<jobject>(env, caller))); | |
292 } | 289 } |
293 | 290 |
294 } // namespace remoting | 291 } // namespace remoting |
OLD | NEW |