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

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

Issue 407403002: Chromoting: Synchronize connected/disconnected state between Java/C++ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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
Index: remoting/client/jni/chromoting_jni_runtime.cc
diff --git a/remoting/client/jni/chromoting_jni_runtime.cc b/remoting/client/jni/chromoting_jni_runtime.cc
index 60a8128e6b3ad2734a5a9a8670b4d75fe6bc11a5..358cba4270965293e0e679734c0e1fd47594c751 100644
--- a/remoting/client/jni/chromoting_jni_runtime.cc
+++ b/remoting/client/jni/chromoting_jni_runtime.cc
@@ -27,6 +27,10 @@ namespace {
const int kBytesPerPixel = 4;
+remoting::ChromotingJniInstance* GetSession() {
Sergey Ulanov 2014/07/24 02:47:02 nit: Move this inside the remoting namespace below
Lambros 2014/07/26 00:42:35 Removed.
+ return remoting::ChromotingJniRuntime::GetInstance()->session();
+}
+
} // namespace
namespace remoting {
@@ -97,13 +101,17 @@ static void AuthenticationResponse(JNIEnv* env,
jstring pin,
jboolean createPair,
jstring deviceName) {
- remoting::ChromotingJniRuntime::GetInstance()->session()->ProvideSecret(
- ConvertJavaStringToUTF8(env, pin).c_str(), createPair,
- ConvertJavaStringToUTF8(env, deviceName));
+ if (GetSession()) {
Sergey Ulanov 2014/07/24 02:47:02 I think it's better to check that the session in J
Lambros 2014/07/26 00:42:35 Done.
+ GetSession()->ProvideSecret(
+ ConvertJavaStringToUTF8(env, pin).c_str(), createPair,
+ ConvertJavaStringToUTF8(env, deviceName));
+ }
}
static void ScheduleRedraw(JNIEnv* env, jclass clazz) {
- remoting::ChromotingJniRuntime::GetInstance()->session()->RedrawDesktop();
+ if (GetSession()) {
+ GetSession()->RedrawDesktop();
+ }
}
static void SendMouseEvent(JNIEnv* env,
@@ -115,45 +123,55 @@ static void SendMouseEvent(JNIEnv* env,
// Button must be within the bounds of the MouseEvent_MouseButton enum.
DCHECK(whichButton >= 0 && whichButton < 5);
- remoting::ChromotingJniRuntime::GetInstance()->session()->SendMouseEvent(
- x, y,
- static_cast<remoting::protocol::MouseEvent_MouseButton>(whichButton),
- buttonDown);
+ if (GetSession()) {
+ GetSession()->SendMouseEvent(
+ x, y,
+ static_cast<remoting::protocol::MouseEvent_MouseButton>(whichButton),
+ buttonDown);
+ }
}
static void SendMouseWheelEvent(JNIEnv* env,
jclass clazz,
jint delta_x,
jint delta_y) {
- remoting::ChromotingJniRuntime::GetInstance()->session()->SendMouseWheelEvent(
- delta_x, delta_y);
+ if (GetSession()) {
+ GetSession()->SendMouseWheelEvent(delta_x, delta_y);
+ }
}
static jboolean SendKeyEvent(JNIEnv* env,
- jclass clazz,
- jint keyCode,
- jboolean keyDown) {
- return remoting::ChromotingJniRuntime::GetInstance()->session()->SendKeyEvent(
- keyCode, keyDown);
+ jclass clazz,
+ jint keyCode,
+ jboolean keyDown) {
+ if (GetSession()) {
+ return GetSession()->SendKeyEvent(keyCode, keyDown);
+ } else {
+ return false;
+ }
}
static void SendTextEvent(JNIEnv* env,
jclass clazz,
jstring text) {
- remoting::ChromotingJniRuntime::GetInstance()->session()->SendTextEvent(
- ConvertJavaStringToUTF8(env, text));
+ if (GetSession()) {
+ GetSession()->SendTextEvent(ConvertJavaStringToUTF8(env, text));
+ }
}
static void OnThirdPartyTokenFetched(JNIEnv* env,
jclass clazz,
jstring token,
jstring shared_secret) {
- ChromotingJniRuntime* runtime = remoting::ChromotingJniRuntime::GetInstance();
- runtime->network_task_runner()->PostTask(FROM_HERE, base::Bind(
- &ChromotingJniInstance::HandleOnThirdPartyTokenFetched,
- runtime->session(),
- ConvertJavaStringToUTF8(env, token),
- ConvertJavaStringToUTF8(env, shared_secret)));
+ if (GetSession()) {
+ ChromotingJniRuntime* runtime =
+ remoting::ChromotingJniRuntime::GetInstance();
+ runtime->network_task_runner()->PostTask(FROM_HERE, base::Bind(
+ &ChromotingJniInstance::HandleOnThirdPartyTokenFetched,
+ runtime->session(),
+ ConvertJavaStringToUTF8(env, token),
+ ConvertJavaStringToUTF8(env, shared_secret)));
+ }
}
// ChromotingJniRuntime implementation.
@@ -209,12 +227,12 @@ ChromotingJniRuntime::~ChromotingJniRuntime() {
}
void ChromotingJniRuntime::ConnectToHost(const char* username,
- const char* auth_token,
- const char* host_jid,
- const char* host_id,
- const char* host_pubkey,
- const char* pairing_id,
- const char* pairing_secret) {
+ const char* auth_token,
+ const char* host_jid,
+ const char* host_id,
+ const char* host_pubkey,
+ const char* pairing_id,
+ const char* pairing_secret) {
DCHECK(ui_task_runner_->BelongsToCurrentThread());
DCHECK(!session_);
session_ = new ChromotingJniInstance(this,
@@ -240,6 +258,16 @@ void ChromotingJniRuntime::ReportConnectionStatus(
protocol::ErrorCode error) {
DCHECK(ui_task_runner_->BelongsToCurrentThread());
+ switch (state) {
+ case protocol::ConnectionToHost::CLOSED:
+ case protocol::ConnectionToHost::FAILED:
+ // If the session has become disconnected, ensure that |session_| gets
+ // cleaned up.
+ DisconnectFromHost();
Sergey Ulanov 2014/07/24 02:47:02 Can the Java layer call Disconnect() when the host
Lambros 2014/07/26 00:42:35 Done.
+ break;
+ default:
+ break;
+ }
JNIEnv* env = base::android::AttachCurrentThread();
Java_JniInterface_reportConnectionStatus(env, state, error);
}

Powered by Google App Engine
This is Rietveld 408576698