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 |