| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/chromoting_jni_runtime.h" | 5 #include "remoting/client/jni/chromoting_jni_runtime.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_array.h" | 8 #include "base/android/jni_array.h" |
| 9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
| 10 #include "base/android/library_loader/library_loader_hooks.h" | 10 #include "base/android/library_loader/library_loader_hooks.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 | 30 |
| 31 namespace remoting { | 31 namespace remoting { |
| 32 | 32 |
| 33 bool RegisterChromotingJniRuntime(JNIEnv* env) { | 33 bool RegisterChromotingJniRuntime(JNIEnv* env) { |
| 34 return remoting::RegisterNativesImpl(env); | 34 return remoting::RegisterNativesImpl(env); |
| 35 } | 35 } |
| 36 | 36 |
| 37 // Implementation of stubs defined in JniInterface_jni.h. These are the entry | 37 // Implementation of stubs defined in JniInterface_jni.h. These are the entry |
| 38 // points for JNI calls from Java into C++. | 38 // points for JNI calls from Java into C++. |
| 39 | 39 |
| 40 static void LoadNative(JNIEnv* env, jclass clazz, jobject context) { | 40 static void LoadNative(JNIEnv* env, |
| 41 const JavaParamRef<jclass>& clazz, |
| 42 const JavaParamRef<jobject>& context) { |
| 41 base::android::ScopedJavaLocalRef<jobject> context_activity(env, context); | 43 base::android::ScopedJavaLocalRef<jobject> context_activity(env, context); |
| 42 base::android::InitApplicationContext(env, context_activity); | 44 base::android::InitApplicationContext(env, context_activity); |
| 43 | 45 |
| 44 // The google_apis functions check the command-line arguments to make sure no | 46 // The google_apis functions check the command-line arguments to make sure no |
| 45 // runtime API keys have been specified by the environment. Unfortunately, we | 47 // runtime API keys have been specified by the environment. Unfortunately, we |
| 46 // neither launch Chromium nor have a command line, so we need to prevent | 48 // neither launch Chromium nor have a command line, so we need to prevent |
| 47 // them from DCHECKing out when they go looking. | 49 // them from DCHECKing out when they go looking. |
| 48 base::CommandLine::Init(0, nullptr); | 50 base::CommandLine::Init(0, nullptr); |
| 49 | 51 |
| 50 // Create the singleton now so that the Chromoting threads will be set up. | 52 // Create the singleton now so that the Chromoting threads will be set up. |
| 51 remoting::ChromotingJniRuntime::GetInstance(); | 53 remoting::ChromotingJniRuntime::GetInstance(); |
| 52 } | 54 } |
| 53 | 55 |
| 54 static ScopedJavaLocalRef<jstring> GetApiKey(JNIEnv* env, jclass clazz) { | 56 static ScopedJavaLocalRef<jstring> GetApiKey( |
| 57 JNIEnv* env, |
| 58 const JavaParamRef<jclass>& clazz) { |
| 55 return ConvertUTF8ToJavaString(env, google_apis::GetAPIKey().c_str()); | 59 return ConvertUTF8ToJavaString(env, google_apis::GetAPIKey().c_str()); |
| 56 } | 60 } |
| 57 | 61 |
| 58 static ScopedJavaLocalRef<jstring> GetClientId(JNIEnv* env, jclass clazz) { | 62 static ScopedJavaLocalRef<jstring> GetClientId( |
| 63 JNIEnv* env, |
| 64 const JavaParamRef<jclass>& clazz) { |
| 59 return ConvertUTF8ToJavaString( | 65 return ConvertUTF8ToJavaString( |
| 60 env, | 66 env, |
| 61 google_apis::GetOAuth2ClientID(google_apis::CLIENT_REMOTING).c_str()); | 67 google_apis::GetOAuth2ClientID(google_apis::CLIENT_REMOTING).c_str()); |
| 62 } | 68 } |
| 63 | 69 |
| 64 static ScopedJavaLocalRef<jstring> GetClientSecret(JNIEnv* env, jclass clazz) { | 70 static ScopedJavaLocalRef<jstring> GetClientSecret( |
| 71 JNIEnv* env, |
| 72 const JavaParamRef<jclass>& clazz) { |
| 65 return ConvertUTF8ToJavaString( | 73 return ConvertUTF8ToJavaString( |
| 66 env, | 74 env, |
| 67 google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_REMOTING).c_str()); | 75 google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_REMOTING).c_str()); |
| 68 } | 76 } |
| 69 | 77 |
| 70 static void Connect(JNIEnv* env, | 78 static void Connect(JNIEnv* env, |
| 71 jclass clazz, | 79 const JavaParamRef<jclass>& clazz, |
| 72 jstring username, | 80 const JavaParamRef<jstring>& username, |
| 73 jstring authToken, | 81 const JavaParamRef<jstring>& authToken, |
| 74 jstring hostJid, | 82 const JavaParamRef<jstring>& hostJid, |
| 75 jstring hostId, | 83 const JavaParamRef<jstring>& hostId, |
| 76 jstring hostPubkey, | 84 const JavaParamRef<jstring>& hostPubkey, |
| 77 jstring pairId, | 85 const JavaParamRef<jstring>& pairId, |
| 78 jstring pairSecret, | 86 const JavaParamRef<jstring>& pairSecret, |
| 79 jstring capabilities) { | 87 const JavaParamRef<jstring>& capabilities) { |
| 80 remoting::ChromotingJniRuntime::GetInstance()->ConnectToHost( | 88 remoting::ChromotingJniRuntime::GetInstance()->ConnectToHost( |
| 81 ConvertJavaStringToUTF8(env, username).c_str(), | 89 ConvertJavaStringToUTF8(env, username).c_str(), |
| 82 ConvertJavaStringToUTF8(env, authToken).c_str(), | 90 ConvertJavaStringToUTF8(env, authToken).c_str(), |
| 83 ConvertJavaStringToUTF8(env, hostJid).c_str(), | 91 ConvertJavaStringToUTF8(env, hostJid).c_str(), |
| 84 ConvertJavaStringToUTF8(env, hostId).c_str(), | 92 ConvertJavaStringToUTF8(env, hostId).c_str(), |
| 85 ConvertJavaStringToUTF8(env, hostPubkey).c_str(), | 93 ConvertJavaStringToUTF8(env, hostPubkey).c_str(), |
| 86 ConvertJavaStringToUTF8(env, pairId).c_str(), | 94 ConvertJavaStringToUTF8(env, pairId).c_str(), |
| 87 ConvertJavaStringToUTF8(env, pairSecret).c_str(), | 95 ConvertJavaStringToUTF8(env, pairSecret).c_str(), |
| 88 ConvertJavaStringToUTF8(env, capabilities).c_str()); | 96 ConvertJavaStringToUTF8(env, capabilities).c_str()); |
| 89 } | 97 } |
| 90 | 98 |
| 91 static void Disconnect(JNIEnv* env, jclass clazz) { | 99 static void Disconnect(JNIEnv* env, const JavaParamRef<jclass>& clazz) { |
| 92 remoting::ChromotingJniRuntime::GetInstance()->DisconnectFromHost(); | 100 remoting::ChromotingJniRuntime::GetInstance()->DisconnectFromHost(); |
| 93 } | 101 } |
| 94 | 102 |
| 95 static void AuthenticationResponse(JNIEnv* env, | 103 static void AuthenticationResponse(JNIEnv* env, |
| 96 jclass clazz, | 104 const JavaParamRef<jclass>& clazz, |
| 97 jstring pin, | 105 const JavaParamRef<jstring>& pin, |
| 98 jboolean createPair, | 106 jboolean createPair, |
| 99 jstring deviceName) { | 107 const JavaParamRef<jstring>& deviceName) { |
| 100 remoting::ChromotingJniRuntime::GetInstance()->session()->ProvideSecret( | 108 remoting::ChromotingJniRuntime::GetInstance()->session()->ProvideSecret( |
| 101 ConvertJavaStringToUTF8(env, pin).c_str(), createPair, | 109 ConvertJavaStringToUTF8(env, pin).c_str(), createPair, |
| 102 ConvertJavaStringToUTF8(env, deviceName)); | 110 ConvertJavaStringToUTF8(env, deviceName)); |
| 103 } | 111 } |
| 104 | 112 |
| 105 static void ScheduleRedraw(JNIEnv* env, jclass clazz) { | 113 static void ScheduleRedraw(JNIEnv* env, const JavaParamRef<jclass>& clazz) { |
| 106 remoting::ChromotingJniRuntime::GetInstance()->session()->RedrawDesktop(); | 114 remoting::ChromotingJniRuntime::GetInstance()->session()->RedrawDesktop(); |
| 107 } | 115 } |
| 108 | 116 |
| 109 static void SendMouseEvent(JNIEnv* env, | 117 static void SendMouseEvent(JNIEnv* env, |
| 110 jclass clazz, | 118 const JavaParamRef<jclass>& clazz, |
| 111 jint x, | 119 jint x, |
| 112 jint y, | 120 jint y, |
| 113 jint whichButton, | 121 jint whichButton, |
| 114 jboolean buttonDown) { | 122 jboolean buttonDown) { |
| 115 // Button must be within the bounds of the MouseEvent_MouseButton enum. | 123 // Button must be within the bounds of the MouseEvent_MouseButton enum. |
| 116 DCHECK(whichButton >= 0 && whichButton < 5); | 124 DCHECK(whichButton >= 0 && whichButton < 5); |
| 117 | 125 |
| 118 remoting::ChromotingJniRuntime::GetInstance()->session()->SendMouseEvent( | 126 remoting::ChromotingJniRuntime::GetInstance()->session()->SendMouseEvent( |
| 119 x, y, | 127 x, y, |
| 120 static_cast<remoting::protocol::MouseEvent_MouseButton>(whichButton), | 128 static_cast<remoting::protocol::MouseEvent_MouseButton>(whichButton), |
| 121 buttonDown); | 129 buttonDown); |
| 122 } | 130 } |
| 123 | 131 |
| 124 static void SendMouseWheelEvent(JNIEnv* env, | 132 static void SendMouseWheelEvent(JNIEnv* env, |
| 125 jclass clazz, | 133 const JavaParamRef<jclass>& clazz, |
| 126 jint delta_x, | 134 jint delta_x, |
| 127 jint delta_y) { | 135 jint delta_y) { |
| 128 remoting::ChromotingJniRuntime::GetInstance()->session()->SendMouseWheelEvent( | 136 remoting::ChromotingJniRuntime::GetInstance()->session()->SendMouseWheelEvent( |
| 129 delta_x, delta_y); | 137 delta_x, delta_y); |
| 130 } | 138 } |
| 131 | 139 |
| 132 static jboolean SendKeyEvent(JNIEnv* env, | 140 static jboolean SendKeyEvent(JNIEnv* env, |
| 133 jclass clazz, | 141 const JavaParamRef<jclass>& clazz, |
| 134 jint keyCode, | 142 jint keyCode, |
| 135 jboolean keyDown) { | 143 jboolean keyDown) { |
| 136 return remoting::ChromotingJniRuntime::GetInstance()->session()->SendKeyEvent( | 144 return remoting::ChromotingJniRuntime::GetInstance()->session()->SendKeyEvent( |
| 137 keyCode, keyDown); | 145 keyCode, keyDown); |
| 138 } | 146 } |
| 139 | 147 |
| 140 static void SendTextEvent(JNIEnv* env, | 148 static void SendTextEvent(JNIEnv* env, |
| 141 jclass clazz, | 149 const JavaParamRef<jclass>& clazz, |
| 142 jstring text) { | 150 const JavaParamRef<jstring>& text) { |
| 143 remoting::ChromotingJniRuntime::GetInstance()->session()->SendTextEvent( | 151 remoting::ChromotingJniRuntime::GetInstance()->session()->SendTextEvent( |
| 144 ConvertJavaStringToUTF8(env, text)); | 152 ConvertJavaStringToUTF8(env, text)); |
| 145 } | 153 } |
| 146 | 154 |
| 147 static void EnableVideoChannel(JNIEnv* env, | 155 static void EnableVideoChannel(JNIEnv* env, |
| 148 jclass clazz, | 156 const JavaParamRef<jclass>& clazz, |
| 149 jboolean enable) { | 157 jboolean enable) { |
| 150 remoting::ChromotingJniRuntime::GetInstance()->session()->EnableVideoChannel( | 158 remoting::ChromotingJniRuntime::GetInstance()->session()->EnableVideoChannel( |
| 151 enable); | 159 enable); |
| 152 } | 160 } |
| 153 | 161 |
| 154 static void OnThirdPartyTokenFetched(JNIEnv* env, | 162 static void OnThirdPartyTokenFetched( |
| 155 jclass clazz, | 163 JNIEnv* env, |
| 156 jstring token, | 164 const JavaParamRef<jclass>& clazz, |
| 157 jstring shared_secret) { | 165 const JavaParamRef<jstring>& token, |
| 166 const JavaParamRef<jstring>& shared_secret) { |
| 158 ChromotingJniRuntime* runtime = remoting::ChromotingJniRuntime::GetInstance(); | 167 ChromotingJniRuntime* runtime = remoting::ChromotingJniRuntime::GetInstance(); |
| 159 runtime->network_task_runner()->PostTask(FROM_HERE, base::Bind( | 168 runtime->network_task_runner()->PostTask(FROM_HERE, base::Bind( |
| 160 &ChromotingJniInstance::HandleOnThirdPartyTokenFetched, | 169 &ChromotingJniInstance::HandleOnThirdPartyTokenFetched, |
| 161 runtime->session(), | 170 runtime->session(), |
| 162 ConvertJavaStringToUTF8(env, token), | 171 ConvertJavaStringToUTF8(env, token), |
| 163 ConvertJavaStringToUTF8(env, shared_secret))); | 172 ConvertJavaStringToUTF8(env, shared_secret))); |
| 164 } | 173 } |
| 165 | 174 |
| 166 static void SendExtensionMessage(JNIEnv* env, | 175 static void SendExtensionMessage(JNIEnv* env, |
| 167 jclass clazz, | 176 const JavaParamRef<jclass>& clazz, |
| 168 jstring type, | 177 const JavaParamRef<jstring>& type, |
| 169 jstring data) { | 178 const JavaParamRef<jstring>& data) { |
| 170 remoting::ChromotingJniRuntime::GetInstance()->session()->SendClientMessage( | 179 remoting::ChromotingJniRuntime::GetInstance()->session()->SendClientMessage( |
| 171 ConvertJavaStringToUTF8(env, type), | 180 ConvertJavaStringToUTF8(env, type), |
| 172 ConvertJavaStringToUTF8(env, data)); | 181 ConvertJavaStringToUTF8(env, data)); |
| 173 } | 182 } |
| 174 | 183 |
| 175 // ChromotingJniRuntime implementation. | 184 // ChromotingJniRuntime implementation. |
| 176 | 185 |
| 177 // static | 186 // static |
| 178 ChromotingJniRuntime* ChromotingJniRuntime::GetInstance() { | 187 ChromotingJniRuntime* ChromotingJniRuntime::GetInstance() { |
| 179 return Singleton<ChromotingJniRuntime>::get(); | 188 return Singleton<ChromotingJniRuntime>::get(); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 | 367 |
| 359 JNIEnv* env = base::android::AttachCurrentThread(); | 368 JNIEnv* env = base::android::AttachCurrentThread(); |
| 360 Java_JniInterface_redrawGraphicsInternal(env); | 369 Java_JniInterface_redrawGraphicsInternal(env); |
| 361 } | 370 } |
| 362 | 371 |
| 363 void ChromotingJniRuntime::DetachFromVmAndSignal(base::WaitableEvent* waiter) { | 372 void ChromotingJniRuntime::DetachFromVmAndSignal(base::WaitableEvent* waiter) { |
| 364 base::android::DetachFromVM(); | 373 base::android::DetachFromVM(); |
| 365 waiter->Signal(); | 374 waiter->Signal(); |
| 366 } | 375 } |
| 367 } // namespace remoting | 376 } // namespace remoting |
| OLD | NEW |