OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/android/system/core_impl.h" | 5 #include "mojo/android/system/core_impl.h" |
6 | 6 |
7 #include "base/android/base_jni_registrar.h" | 7 #include "base/android/base_jni_registrar.h" |
8 #include "base/android/jni_android.h" | 8 #include "base/android/jni_android.h" |
9 #include "base/android/jni_registrar.h" | 9 #include "base/android/jni_registrar.h" |
10 #include "base/android/library_loader/library_loader_hooks.h" | 10 #include "base/android/library_loader/library_loader_hooks.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 reinterpret_cast<const MojoHandleSignals*>(buffer_start + 4 * nb_handles); | 81 reinterpret_cast<const MojoHandleSignals*>(buffer_start + 4 * nb_handles); |
82 MojoHandleSignalsState* states_start = | 82 MojoHandleSignalsState* states_start = |
83 reinterpret_cast<MojoHandleSignalsState*>(buffer_start + 8 * nb_handles); | 83 reinterpret_cast<MojoHandleSignalsState*>(buffer_start + 8 * nb_handles); |
84 uint32_t* result_index = | 84 uint32_t* result_index = |
85 reinterpret_cast<uint32_t*>(buffer_start + 16 * nb_handles); | 85 reinterpret_cast<uint32_t*>(buffer_start + 16 * nb_handles); |
86 *result_index = static_cast<uint32_t>(-1); | 86 *result_index = static_cast<uint32_t>(-1); |
87 return MojoWaitMany(handle_start, signals_start, nb_handles, deadline, | 87 return MojoWaitMany(handle_start, signals_start, nb_handles, deadline, |
88 result_index, states_start); | 88 result_index, states_start); |
89 } | 89 } |
90 | 90 |
91 static jobject CreateMessagePipe(JNIEnv* env, | 91 static ScopedJavaLocalRef<jobject> CreateMessagePipe(JNIEnv* env, |
92 jobject jcaller, | 92 jobject jcaller, |
93 jobject options_buffer) { | 93 jobject options_buffer) { |
94 const MojoCreateMessagePipeOptions* options = NULL; | 94 const MojoCreateMessagePipeOptions* options = NULL; |
95 if (options_buffer) { | 95 if (options_buffer) { |
96 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); | 96 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); |
97 DCHECK(buffer_start); | 97 DCHECK(buffer_start); |
98 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u); | 98 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u); |
99 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); | 99 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); |
100 DCHECK_EQ(buffer_size, sizeof(MojoCreateMessagePipeOptions)); | 100 DCHECK_EQ(buffer_size, sizeof(MojoCreateMessagePipeOptions)); |
101 options = static_cast<const MojoCreateMessagePipeOptions*>(buffer_start); | 101 options = static_cast<const MojoCreateMessagePipeOptions*>(buffer_start); |
102 DCHECK_EQ(options->struct_size, buffer_size); | 102 DCHECK_EQ(options->struct_size, buffer_size); |
103 } | 103 } |
104 MojoHandle handle1; | 104 MojoHandle handle1; |
105 MojoHandle handle2; | 105 MojoHandle handle2; |
106 MojoResult result = MojoCreateMessagePipe(options, &handle1, &handle2); | 106 MojoResult result = MojoCreateMessagePipe(options, &handle1, &handle2); |
107 return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2) | 107 return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2); |
108 .Release(); | |
109 } | 108 } |
110 | 109 |
111 static jobject CreateDataPipe(JNIEnv* env, | 110 static ScopedJavaLocalRef<jobject> CreateDataPipe(JNIEnv* env, |
112 jobject jcaller, | 111 jobject jcaller, |
113 jobject options_buffer) { | 112 jobject options_buffer) { |
114 const MojoCreateDataPipeOptions* options = NULL; | 113 const MojoCreateDataPipeOptions* options = NULL; |
115 if (options_buffer) { | 114 if (options_buffer) { |
116 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); | 115 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); |
117 DCHECK(buffer_start); | 116 DCHECK(buffer_start); |
118 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u); | 117 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u); |
119 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); | 118 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); |
120 DCHECK_EQ(buffer_size, sizeof(MojoCreateDataPipeOptions)); | 119 DCHECK_EQ(buffer_size, sizeof(MojoCreateDataPipeOptions)); |
121 options = static_cast<const MojoCreateDataPipeOptions*>(buffer_start); | 120 options = static_cast<const MojoCreateDataPipeOptions*>(buffer_start); |
122 DCHECK_EQ(options->struct_size, buffer_size); | 121 DCHECK_EQ(options->struct_size, buffer_size); |
123 } | 122 } |
124 MojoHandle handle1; | 123 MojoHandle handle1; |
125 MojoHandle handle2; | 124 MojoHandle handle2; |
126 MojoResult result = MojoCreateDataPipe(options, &handle1, &handle2); | 125 MojoResult result = MojoCreateDataPipe(options, &handle1, &handle2); |
127 return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2) | 126 return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2); |
128 .Release(); | |
129 } | 127 } |
130 | 128 |
131 static jobject CreateSharedBuffer(JNIEnv* env, | 129 static ScopedJavaLocalRef<jobject> CreateSharedBuffer(JNIEnv* env, |
132 jobject jcaller, | 130 jobject jcaller, |
133 jobject options_buffer, | 131 jobject options_buffer, |
134 jlong num_bytes) { | 132 jlong num_bytes) { |
135 const MojoCreateSharedBufferOptions* options = 0; | 133 const MojoCreateSharedBufferOptions* options = 0; |
136 if (options_buffer) { | 134 if (options_buffer) { |
137 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); | 135 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); |
138 DCHECK(buffer_start); | 136 DCHECK(buffer_start); |
139 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u); | 137 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u); |
140 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); | 138 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); |
141 DCHECK_EQ(buffer_size, sizeof(MojoCreateSharedBufferOptions)); | 139 DCHECK_EQ(buffer_size, sizeof(MojoCreateSharedBufferOptions)); |
142 options = static_cast<const MojoCreateSharedBufferOptions*>(buffer_start); | 140 options = static_cast<const MojoCreateSharedBufferOptions*>(buffer_start); |
143 DCHECK_EQ(options->struct_size, buffer_size); | 141 DCHECK_EQ(options->struct_size, buffer_size); |
144 } | 142 } |
145 MojoHandle handle; | 143 MojoHandle handle; |
146 MojoResult result = MojoCreateSharedBuffer(options, num_bytes, &handle); | 144 MojoResult result = MojoCreateSharedBuffer(options, num_bytes, &handle); |
147 return Java_CoreImpl_newResultAndInteger(env, result, handle).Release(); | 145 return Java_CoreImpl_newResultAndInteger(env, result, handle); |
148 } | 146 } |
149 | 147 |
150 static jint Close(JNIEnv* env, jobject jcaller, jint mojo_handle) { | 148 static jint Close(JNIEnv* env, jobject jcaller, jint mojo_handle) { |
151 return MojoClose(mojo_handle); | 149 return MojoClose(mojo_handle); |
152 } | 150 } |
153 | 151 |
154 static jint Wait(JNIEnv* env, | 152 static jint Wait(JNIEnv* env, |
155 jobject jcaller, | 153 jobject jcaller, |
156 jobject buffer, | 154 jobject buffer, |
157 jint mojo_handle, | 155 jint mojo_handle, |
(...skipping 30 matching lines...) Expand all Loading... |
188 if (handles_buffer) { | 186 if (handles_buffer) { |
189 handles = | 187 handles = |
190 static_cast<MojoHandle*>(env->GetDirectBufferAddress(handles_buffer)); | 188 static_cast<MojoHandle*>(env->GetDirectBufferAddress(handles_buffer)); |
191 num_handles = env->GetDirectBufferCapacity(handles_buffer) / 4; | 189 num_handles = env->GetDirectBufferCapacity(handles_buffer) / 4; |
192 } | 190 } |
193 // Java code will handle invalidating handles if the write succeeded. | 191 // Java code will handle invalidating handles if the write succeeded. |
194 return MojoWriteMessage( | 192 return MojoWriteMessage( |
195 mojo_handle, buffer_start, buffer_size, handles, num_handles, flags); | 193 mojo_handle, buffer_start, buffer_size, handles, num_handles, flags); |
196 } | 194 } |
197 | 195 |
198 static jobject ReadMessage(JNIEnv* env, | 196 static ScopedJavaLocalRef<jobject> ReadMessage(JNIEnv* env, |
199 jobject jcaller, | 197 jobject jcaller, |
200 jint mojo_handle, | 198 jint mojo_handle, |
201 jobject bytes, | 199 jobject bytes, |
202 jobject handles_buffer, | 200 jobject handles_buffer, |
203 jint flags) { | 201 jint flags) { |
204 void* buffer_start = 0; | 202 void* buffer_start = 0; |
205 uint32_t buffer_size = 0; | 203 uint32_t buffer_size = 0; |
206 if (bytes) { | 204 if (bytes) { |
207 buffer_start = env->GetDirectBufferAddress(bytes); | 205 buffer_start = env->GetDirectBufferAddress(bytes); |
208 DCHECK(buffer_start); | 206 DCHECK(buffer_start); |
209 buffer_size = env->GetDirectBufferCapacity(bytes); | 207 buffer_size = env->GetDirectBufferCapacity(bytes); |
210 } | 208 } |
211 MojoHandle* handles = 0; | 209 MojoHandle* handles = 0; |
212 uint32_t num_handles = 0; | 210 uint32_t num_handles = 0; |
213 if (handles_buffer) { | 211 if (handles_buffer) { |
214 handles = | 212 handles = |
215 static_cast<MojoHandle*>(env->GetDirectBufferAddress(handles_buffer)); | 213 static_cast<MojoHandle*>(env->GetDirectBufferAddress(handles_buffer)); |
216 num_handles = env->GetDirectBufferCapacity(handles_buffer) / 4; | 214 num_handles = env->GetDirectBufferCapacity(handles_buffer) / 4; |
217 } | 215 } |
218 MojoResult result = MojoReadMessage( | 216 MojoResult result = MojoReadMessage( |
219 mojo_handle, buffer_start, &buffer_size, handles, &num_handles, flags); | 217 mojo_handle, buffer_start, &buffer_size, handles, &num_handles, flags); |
220 // Jave code will handle taking ownership of any received handle. | 218 // Jave code will handle taking ownership of any received handle. |
221 return Java_CoreImpl_newReadMessageResult( | 219 return Java_CoreImpl_newReadMessageResult(env, result, buffer_size, |
222 env, result, buffer_size, num_handles).Release(); | 220 num_handles); |
223 } | 221 } |
224 | 222 |
225 static jobject ReadData(JNIEnv* env, | 223 static ScopedJavaLocalRef<jobject> ReadData(JNIEnv* env, |
226 jobject jcaller, | 224 jobject jcaller, |
227 jint mojo_handle, | 225 jint mojo_handle, |
228 jobject elements, | 226 jobject elements, |
229 jint elements_capacity, | 227 jint elements_capacity, |
230 jint flags) { | 228 jint flags) { |
231 void* buffer_start = 0; | 229 void* buffer_start = 0; |
232 uint32_t buffer_size = elements_capacity; | 230 uint32_t buffer_size = elements_capacity; |
233 if (elements) { | 231 if (elements) { |
234 buffer_start = env->GetDirectBufferAddress(elements); | 232 buffer_start = env->GetDirectBufferAddress(elements); |
235 DCHECK(buffer_start); | 233 DCHECK(buffer_start); |
236 DCHECK(elements_capacity <= env->GetDirectBufferCapacity(elements)); | 234 DCHECK(elements_capacity <= env->GetDirectBufferCapacity(elements)); |
237 } | 235 } |
238 MojoResult result = | 236 MojoResult result = |
239 MojoReadData(mojo_handle, buffer_start, &buffer_size, flags); | 237 MojoReadData(mojo_handle, buffer_start, &buffer_size, flags); |
240 return Java_CoreImpl_newResultAndInteger( | 238 return Java_CoreImpl_newResultAndInteger( |
241 env, result, (result == MOJO_RESULT_OK) ? buffer_size : 0) | 239 env, result, (result == MOJO_RESULT_OK) ? buffer_size : 0); |
242 .Release(); | |
243 } | 240 } |
244 | 241 |
245 static jobject BeginReadData(JNIEnv* env, | 242 static ScopedJavaLocalRef<jobject> BeginReadData(JNIEnv* env, |
246 jobject jcaller, | 243 jobject jcaller, |
247 jint mojo_handle, | 244 jint mojo_handle, |
248 jint num_bytes, | 245 jint num_bytes, |
249 jint flags) { | 246 jint flags) { |
250 void const* buffer = 0; | 247 void const* buffer = 0; |
251 uint32_t buffer_size = num_bytes; | 248 uint32_t buffer_size = num_bytes; |
252 MojoResult result = | 249 MojoResult result = |
253 MojoBeginReadData(mojo_handle, &buffer, &buffer_size, flags); | 250 MojoBeginReadData(mojo_handle, &buffer, &buffer_size, flags); |
254 jobject byte_buffer = 0; | 251 jobject byte_buffer = 0; |
255 if (result == MOJO_RESULT_OK) { | 252 if (result == MOJO_RESULT_OK) { |
256 byte_buffer = | 253 byte_buffer = |
257 env->NewDirectByteBuffer(const_cast<void*>(buffer), buffer_size); | 254 env->NewDirectByteBuffer(const_cast<void*>(buffer), buffer_size); |
258 } | 255 } |
259 return Java_CoreImpl_newResultAndBuffer(env, result, byte_buffer).Release(); | 256 return Java_CoreImpl_newResultAndBuffer(env, result, byte_buffer); |
260 } | 257 } |
261 | 258 |
262 static jint EndReadData(JNIEnv* env, | 259 static jint EndReadData(JNIEnv* env, |
263 jobject jcaller, | 260 jobject jcaller, |
264 jint mojo_handle, | 261 jint mojo_handle, |
265 jint num_bytes_read) { | 262 jint num_bytes_read) { |
266 return MojoEndReadData(mojo_handle, num_bytes_read); | 263 return MojoEndReadData(mojo_handle, num_bytes_read); |
267 } | 264 } |
268 | 265 |
269 static jobject WriteData(JNIEnv* env, | 266 static ScopedJavaLocalRef<jobject> WriteData(JNIEnv* env, |
270 jobject jcaller, | 267 jobject jcaller, |
271 jint mojo_handle, | 268 jint mojo_handle, |
272 jobject elements, | 269 jobject elements, |
273 jint limit, | 270 jint limit, |
274 jint flags) { | 271 jint flags) { |
275 void* buffer_start = env->GetDirectBufferAddress(elements); | 272 void* buffer_start = env->GetDirectBufferAddress(elements); |
276 DCHECK(buffer_start); | 273 DCHECK(buffer_start); |
277 DCHECK(limit <= env->GetDirectBufferCapacity(elements)); | 274 DCHECK(limit <= env->GetDirectBufferCapacity(elements)); |
278 uint32_t buffer_size = limit; | 275 uint32_t buffer_size = limit; |
279 MojoResult result = | 276 MojoResult result = |
280 MojoWriteData(mojo_handle, buffer_start, &buffer_size, flags); | 277 MojoWriteData(mojo_handle, buffer_start, &buffer_size, flags); |
281 return Java_CoreImpl_newResultAndInteger( | 278 return Java_CoreImpl_newResultAndInteger( |
282 env, result, (result == MOJO_RESULT_OK) ? buffer_size : 0) | 279 env, result, (result == MOJO_RESULT_OK) ? buffer_size : 0); |
283 .Release(); | |
284 } | 280 } |
285 | 281 |
286 static jobject BeginWriteData(JNIEnv* env, | 282 static ScopedJavaLocalRef<jobject> BeginWriteData(JNIEnv* env, |
287 jobject jcaller, | 283 jobject jcaller, |
288 jint mojo_handle, | 284 jint mojo_handle, |
289 jint num_bytes, | 285 jint num_bytes, |
290 jint flags) { | 286 jint flags) { |
291 void* buffer = 0; | 287 void* buffer = 0; |
292 uint32_t buffer_size = num_bytes; | 288 uint32_t buffer_size = num_bytes; |
293 MojoResult result = | 289 MojoResult result = |
294 MojoBeginWriteData(mojo_handle, &buffer, &buffer_size, flags); | 290 MojoBeginWriteData(mojo_handle, &buffer, &buffer_size, flags); |
295 jobject byte_buffer = 0; | 291 jobject byte_buffer = 0; |
296 if (result == MOJO_RESULT_OK) { | 292 if (result == MOJO_RESULT_OK) { |
297 byte_buffer = env->NewDirectByteBuffer(buffer, buffer_size); | 293 byte_buffer = env->NewDirectByteBuffer(buffer, buffer_size); |
298 } | 294 } |
299 return Java_CoreImpl_newResultAndBuffer(env, result, byte_buffer).Release(); | 295 return Java_CoreImpl_newResultAndBuffer(env, result, byte_buffer); |
300 } | 296 } |
301 | 297 |
302 static jint EndWriteData(JNIEnv* env, | 298 static jint EndWriteData(JNIEnv* env, |
303 jobject jcaller, | 299 jobject jcaller, |
304 jint mojo_handle, | 300 jint mojo_handle, |
305 jint num_bytes_written) { | 301 jint num_bytes_written) { |
306 return MojoEndWriteData(mojo_handle, num_bytes_written); | 302 return MojoEndWriteData(mojo_handle, num_bytes_written); |
307 } | 303 } |
308 | 304 |
309 static jobject Duplicate(JNIEnv* env, | 305 static ScopedJavaLocalRef<jobject> Duplicate(JNIEnv* env, |
310 jobject jcaller, | 306 jobject jcaller, |
311 jint mojo_handle, | 307 jint mojo_handle, |
312 jobject options_buffer) { | 308 jobject options_buffer) { |
313 const MojoDuplicateBufferHandleOptions* options = 0; | 309 const MojoDuplicateBufferHandleOptions* options = 0; |
314 if (options_buffer) { | 310 if (options_buffer) { |
315 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); | 311 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); |
316 DCHECK(buffer_start); | 312 DCHECK(buffer_start); |
317 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); | 313 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); |
318 DCHECK_EQ(buffer_size, sizeof(MojoDuplicateBufferHandleOptions)); | 314 DCHECK_EQ(buffer_size, sizeof(MojoDuplicateBufferHandleOptions)); |
319 options = | 315 options = |
320 static_cast<const MojoDuplicateBufferHandleOptions*>(buffer_start); | 316 static_cast<const MojoDuplicateBufferHandleOptions*>(buffer_start); |
321 DCHECK_EQ(options->struct_size, buffer_size); | 317 DCHECK_EQ(options->struct_size, buffer_size); |
322 } | 318 } |
323 MojoHandle handle; | 319 MojoHandle handle; |
324 MojoResult result = MojoDuplicateBufferHandle(mojo_handle, options, &handle); | 320 MojoResult result = MojoDuplicateBufferHandle(mojo_handle, options, &handle); |
325 return Java_CoreImpl_newResultAndInteger(env, result, handle).Release(); | 321 return Java_CoreImpl_newResultAndInteger(env, result, handle); |
326 } | 322 } |
327 | 323 |
328 static jobject Map(JNIEnv* env, | 324 static ScopedJavaLocalRef<jobject> Map(JNIEnv* env, |
329 jobject jcaller, | 325 jobject jcaller, |
330 jint mojo_handle, | 326 jint mojo_handle, |
331 jlong offset, | 327 jlong offset, |
332 jlong num_bytes, | 328 jlong num_bytes, |
333 jint flags) { | 329 jint flags) { |
334 void* buffer = 0; | 330 void* buffer = 0; |
335 MojoResult result = | 331 MojoResult result = |
336 MojoMapBuffer(mojo_handle, offset, num_bytes, &buffer, flags); | 332 MojoMapBuffer(mojo_handle, offset, num_bytes, &buffer, flags); |
337 jobject byte_buffer = 0; | 333 jobject byte_buffer = 0; |
338 if (result == MOJO_RESULT_OK) { | 334 if (result == MOJO_RESULT_OK) { |
339 byte_buffer = env->NewDirectByteBuffer(buffer, num_bytes); | 335 byte_buffer = env->NewDirectByteBuffer(buffer, num_bytes); |
340 } | 336 } |
341 return Java_CoreImpl_newResultAndBuffer(env, result, byte_buffer).Release(); | 337 return Java_CoreImpl_newResultAndBuffer(env, result, byte_buffer); |
342 } | 338 } |
343 | 339 |
344 static int Unmap(JNIEnv* env, jobject jcaller, jobject buffer) { | 340 static int Unmap(JNIEnv* env, jobject jcaller, jobject buffer) { |
345 void* buffer_start = env->GetDirectBufferAddress(buffer); | 341 void* buffer_start = env->GetDirectBufferAddress(buffer); |
346 DCHECK(buffer_start); | 342 DCHECK(buffer_start); |
347 return MojoUnmapBuffer(buffer_start); | 343 return MojoUnmapBuffer(buffer_start); |
348 } | 344 } |
349 | 345 |
350 static jobject AsyncWait(JNIEnv* env, | 346 static ScopedJavaLocalRef<jobject> AsyncWait(JNIEnv* env, |
351 jobject jcaller, | 347 jobject jcaller, |
352 jint mojo_handle, | 348 jint mojo_handle, |
353 jint signals, | 349 jint signals, |
354 jlong deadline, | 350 jlong deadline, |
355 jobject callback) { | 351 jobject callback) { |
356 AsyncWaitCallbackData* callback_data = | 352 AsyncWaitCallbackData* callback_data = |
357 new AsyncWaitCallbackData(env, jcaller, callback); | 353 new AsyncWaitCallbackData(env, jcaller, callback); |
358 MojoAsyncWaitID cancel_id; | 354 MojoAsyncWaitID cancel_id; |
359 if (static_cast<MojoHandle>(mojo_handle) != MOJO_HANDLE_INVALID) { | 355 if (static_cast<MojoHandle>(mojo_handle) != MOJO_HANDLE_INVALID) { |
360 cancel_id = Environment::GetDefaultAsyncWaiter()->AsyncWait( | 356 cancel_id = Environment::GetDefaultAsyncWaiter()->AsyncWait( |
361 mojo_handle, signals, deadline, AsyncWaitCallback, callback_data); | 357 mojo_handle, signals, deadline, AsyncWaitCallback, callback_data); |
362 } else { | 358 } else { |
363 cancel_id = kInvalidHandleCancelID; | 359 cancel_id = kInvalidHandleCancelID; |
364 base::MessageLoop::current()->PostTask( | 360 base::MessageLoop::current()->PostTask( |
365 FROM_HERE, | 361 FROM_HERE, |
366 base::Bind( | 362 base::Bind( |
367 &AsyncWaitCallback, callback_data, MOJO_RESULT_INVALID_ARGUMENT)); | 363 &AsyncWaitCallback, callback_data, MOJO_RESULT_INVALID_ARGUMENT)); |
368 } | 364 } |
369 base::android::ScopedJavaLocalRef<jobject> cancellable = | 365 base::android::ScopedJavaLocalRef<jobject> cancellable = |
370 Java_CoreImpl_newAsyncWaiterCancellableImpl( | 366 Java_CoreImpl_newAsyncWaiterCancellableImpl( |
371 env, jcaller, cancel_id, reinterpret_cast<intptr_t>(callback_data)); | 367 env, jcaller, cancel_id, reinterpret_cast<intptr_t>(callback_data)); |
372 callback_data->cancellable.Reset(env, cancellable.obj()); | 368 callback_data->cancellable.Reset(env, cancellable.obj()); |
373 return cancellable.Release(); | 369 return cancellable; |
374 } | 370 } |
375 | 371 |
376 static void CancelAsyncWait(JNIEnv* env, | 372 static void CancelAsyncWait(JNIEnv* env, |
377 jobject jcaller, | 373 jobject jcaller, |
378 jlong id, | 374 jlong id, |
379 jlong data_ptr) { | 375 jlong data_ptr) { |
380 if (id == 0) { | 376 if (id == 0) { |
381 // If |id| is |kInvalidHandleCancelID|, the async wait was done on an | 377 // If |id| is |kInvalidHandleCancelID|, the async wait was done on an |
382 // invalid handle, so the AsyncWaitCallback will be called and will clear | 378 // invalid handle, so the AsyncWaitCallback will be called and will clear |
383 // the data_ptr. | 379 // the data_ptr. |
(...skipping 15 matching lines...) Expand all Loading... |
399 return 0; | 395 return 0; |
400 return alignment - offset; | 396 return alignment - offset; |
401 } | 397 } |
402 | 398 |
403 bool RegisterCoreImpl(JNIEnv* env) { | 399 bool RegisterCoreImpl(JNIEnv* env) { |
404 return RegisterNativesImpl(env); | 400 return RegisterNativesImpl(env); |
405 } | 401 } |
406 | 402 |
407 } // namespace android | 403 } // namespace android |
408 } // namespace mojo | 404 } // namespace mojo |
OLD | NEW |