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