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

Unified Diff: remoting/client/jni/jni_client.cc

Issue 2007123003: [Android Client] Break down multi-threaded classes by thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename JniSecretFetcher to JniPairingSecretFetcher Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/client/jni/jni_client.h ('k') | remoting/client/jni/jni_display_handler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/client/jni/jni_client.cc
diff --git a/remoting/client/jni/jni_client.cc b/remoting/client/jni/jni_client.cc
index 172d0932aa3b796979753a849ba809be5bbc0478..4aad692ff48ba793b14afb9d8ea6627091d25874 100644
--- a/remoting/client/jni/jni_client.cc
+++ b/remoting/client/jni/jni_client.cc
@@ -10,26 +10,31 @@
#include "jni/Client_jni.h"
#include "remoting/client/jni/chromoting_jni_instance.h"
#include "remoting/client/jni/chromoting_jni_runtime.h"
+#include "remoting/client/jni/jni_display_handler.h"
+#include "remoting/client/jni/jni_pairing_secret_fetcher.h"
#include "remoting/client/jni/jni_touch_event_data.h"
using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF8ToJavaString;
-namespace {
-
-const int kBytesPerPixel = 4;
-}
-
namespace remoting {
-JniClient::JniClient(jobject java_client)
- : java_client_(java_client), weak_factory_(this) {}
+JniClient::JniClient(ChromotingJniRuntime* runtime,
+ base::android::ScopedJavaGlobalRef<jobject> java_client)
+ : runtime_(runtime),
+ java_client_(java_client),
+ weak_factory_(this) {}
JniClient::~JniClient() {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+
+ // The session must be shut down first, since it depends on our other
+ // components' still being alive.
+ DisconnectFromHost();
}
-void JniClient::ConnectToHost(const std::string& username,
+void JniClient::ConnectToHost(base::WeakPtr<JniDisplayHandler> display_handler,
+ const std::string& username,
const std::string& auth_token,
const std::string& host_jid,
const std::string& host_id,
@@ -38,55 +43,64 @@ void JniClient::ConnectToHost(const std::string& username,
const std::string& pairing_secret,
const std::string& capabilities,
const std::string& flags) {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
DCHECK(!session_);
- session_ = new ChromotingJniInstance(
- runtime(), this, username, auth_token, host_jid, host_id, host_pubkey,
- pairing_id, pairing_secret, capabilities, flags);
+ DCHECK(!secret_fetcher_);
+ secret_fetcher_.reset(new JniPairingSecretFetcher(runtime_, GetWeakPtr(),
+ host_id));
+
+ display_handler_ = display_handler;
+ session_.reset(new ChromotingJniInstance(
+ runtime_, GetWeakPtr(), display_handler_,
+ secret_fetcher_->GetWeakPtr(), username, auth_token, host_jid, host_id,
+ host_pubkey, pairing_id, pairing_secret, capabilities, flags));
session_->Connect();
}
void JniClient::DisconnectFromHost() {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
+ display_handler_ = nullptr;
if (session_) {
session_->Disconnect();
- session_ = nullptr;
+ runtime_->network_task_runner()->DeleteSoon(FROM_HERE,
+ session_.release());
}
}
void JniClient::OnConnectionState(protocol::ConnectionToHost::State state,
protocol::ErrorCode error) {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
- Java_Client_onConnectionState(env, java_client_, state, error);
+ Java_Client_onConnectionState(env, java_client_.obj(), state, error);
}
void JniClient::DisplayAuthenticationPrompt(bool pairing_supported) {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
- Java_Client_displayAuthenticationPrompt(env, java_client_, pairing_supported);
+ Java_Client_displayAuthenticationPrompt(env, java_client_.obj(),
+ pairing_supported);
}
void JniClient::CommitPairingCredentials(const std::string& host,
const std::string& id,
const std::string& secret) {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_host = ConvertUTF8ToJavaString(env, host);
ScopedJavaLocalRef<jstring> j_id = ConvertUTF8ToJavaString(env, id);
ScopedJavaLocalRef<jstring> j_secret = ConvertUTF8ToJavaString(env, secret);
- Java_Client_commitPairingCredentials(env, java_client_, j_host.obj(),
+ Java_Client_commitPairingCredentials(env, java_client_.obj(), j_host.obj(),
j_id.obj(), j_secret.obj());
}
void JniClient::FetchThirdPartyToken(const std::string& token_url,
const std::string& client_id,
const std::string& scope) {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_url = ConvertUTF8ToJavaString(env, token_url);
@@ -94,72 +108,32 @@ void JniClient::FetchThirdPartyToken(const std::string& token_url,
ConvertUTF8ToJavaString(env, client_id);
ScopedJavaLocalRef<jstring> j_scope = ConvertUTF8ToJavaString(env, scope);
- Java_Client_fetchThirdPartyToken(env, java_client_, j_url.obj(),
+ Java_Client_fetchThirdPartyToken(env, java_client_.obj(), j_url.obj(),
j_client_id.obj(), j_scope.obj());
}
void JniClient::SetCapabilities(const std::string& capabilities) {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_cap =
ConvertUTF8ToJavaString(env, capabilities);
- Java_Client_setCapabilities(env, java_client_, j_cap.obj());
+ Java_Client_setCapabilities(env, java_client_.obj(), j_cap.obj());
}
void JniClient::HandleExtensionMessage(const std::string& type,
const std::string& message) {
- DCHECK(runtime()->ui_task_runner()->BelongsToCurrentThread());
+ DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_type = ConvertUTF8ToJavaString(env, type);
ScopedJavaLocalRef<jstring> j_message = ConvertUTF8ToJavaString(env, message);
- Java_Client_handleExtensionMessage(env, java_client_, j_type.obj(),
+ Java_Client_handleExtensionMessage(env, java_client_.obj(), j_type.obj(),
j_message.obj());
}
-base::android::ScopedJavaLocalRef<jobject> JniClient::NewBitmap(int width,
- int height) {
- JNIEnv* env = base::android::AttachCurrentThread();
- return Java_Client_newBitmap(env, width, height);
-}
-
-void JniClient::UpdateFrameBitmap(jobject bitmap) {
- DCHECK(runtime()->display_task_runner()->BelongsToCurrentThread());
-
- JNIEnv* env = base::android::AttachCurrentThread();
- Java_Client_setVideoFrame(env, java_client_, bitmap);
-}
-
-void JniClient::UpdateCursorShape(
- const protocol::CursorShapeInfo& cursor_shape) {
- DCHECK(runtime()->display_task_runner()->BelongsToCurrentThread());
-
- // const_cast<> is safe as long as the Java updateCursorShape() method copies
- // the data out of the buffer without mutating it, and doesn't keep any
- // reference to the buffer afterwards. Unfortunately, there seems to be no way
- // to create a read-only ByteBuffer from a pointer-to-const.
- char* data = string_as_array(const_cast<std::string*>(&cursor_shape.data()));
- int cursor_total_bytes =
- cursor_shape.width() * cursor_shape.height() * kBytesPerPixel;
-
- JNIEnv* env = base::android::AttachCurrentThread();
- base::android::ScopedJavaLocalRef<jobject> buffer(
- env, env->NewDirectByteBuffer(data, cursor_total_bytes));
- Java_Client_updateCursorShape(env, java_client_, cursor_shape.width(),
- cursor_shape.height(), cursor_shape.hotspot_x(),
- cursor_shape.hotspot_y(), buffer.obj());
-}
-
-void JniClient::RedrawCanvas() {
- DCHECK(runtime()->display_task_runner()->BelongsToCurrentThread());
-
- JNIEnv* env = base::android::AttachCurrentThread();
- Java_Client_redrawGraphicsInternal(env, java_client_);
-}
-
// static
bool JniClient::RegisterJni(JNIEnv* env) {
return RegisterNativesImpl(env);
@@ -168,6 +142,7 @@ bool JniClient::RegisterJni(JNIEnv* env) {
void JniClient::Connect(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& caller,
+ jlong display_handler,
const base::android::JavaParamRef<jstring>& username,
const base::android::JavaParamRef<jstring>& authToken,
const base::android::JavaParamRef<jstring>& hostJid,
@@ -177,7 +152,11 @@ void JniClient::Connect(
const base::android::JavaParamRef<jstring>& pairSecret,
const base::android::JavaParamRef<jstring>& capabilities,
const base::android::JavaParamRef<jstring>& flags) {
- ConnectToHost(ConvertJavaStringToUTF8(env, username),
+ JniDisplayHandler* raw_handler = reinterpret_cast<JniDisplayHandler*>(
+ display_handler);
+ DCHECK(raw_handler);
+ ConnectToHost(raw_handler->GetWeakPtr(),
+ ConvertJavaStringToUTF8(env, username),
ConvertJavaStringToUTF8(env, authToken),
ConvertJavaStringToUTF8(env, hostJid),
ConvertJavaStringToUTF8(env, hostId),
@@ -203,12 +182,6 @@ void JniClient::AuthenticationResponse(
ConvertJavaStringToUTF8(env, deviceName));
}
-void JniClient::ScheduleRedraw(
- JNIEnv* env,
- const base::android::JavaParamRef<jobject>& caller) {
- session_->RedrawDesktop();
-}
-
void JniClient::SendMouseEvent(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& caller,
@@ -286,10 +259,10 @@ void JniClient::OnThirdPartyTokenFetched(
const base::android::JavaParamRef<jobject>& caller,
const JavaParamRef<jstring>& token,
const JavaParamRef<jstring>& shared_secret) {
- runtime()->network_task_runner()->PostTask(
+ runtime_->network_task_runner()->PostTask(
FROM_HERE,
base::Bind(&ChromotingJniInstance::HandleOnThirdPartyTokenFetched,
- session_, ConvertJavaStringToUTF8(env, token),
+ session_->GetWeakPtr(), ConvertJavaStringToUTF8(env, token),
ConvertJavaStringToUTF8(env, shared_secret)));
}
@@ -303,11 +276,6 @@ void JniClient::SendExtensionMessage(
}
void JniClient::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) {
- // The session must be shut down first, since it depends on our other
- // components' still being alive.
- DisconnectFromHost();
-
- env->DeleteGlobalRef(java_client_);
delete this;
}
@@ -315,14 +283,10 @@ base::WeakPtr<JniClient> JniClient::GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
-// static
-ChromotingJniRuntime* JniClient::runtime() {
- return ChromotingJniRuntime::GetInstance();
-}
-
static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& caller) {
- jobject caller_ref = env->NewGlobalRef(caller);
- return reinterpret_cast<intptr_t>(new JniClient(caller_ref));
+ return reinterpret_cast<intptr_t>(
+ new JniClient(ChromotingJniRuntime::GetInstance(),
+ base::android::ScopedJavaGlobalRef<jobject>(env, caller)));
}
} // namespace remoting
« no previous file with comments | « remoting/client/jni/jni_client.h ('k') | remoting/client/jni/jni_display_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698