|  | // Copyright 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "base/android/content_uri_utils.h" | 
|  |  | 
|  | #include "base/android/jni_android.h" | 
|  | #include "base/android/jni_string.h" | 
|  | #include "jni/ContentUriUtils_jni.h" | 
|  |  | 
|  | using base::android::ConvertUTF8ToJavaString; | 
|  | using base::android::ScopedJavaLocalRef; | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | bool ContentUriExists(const FilePath& content_uri) { | 
|  | JNIEnv* env = base::android::AttachCurrentThread(); | 
|  | ScopedJavaLocalRef<jstring> j_uri = | 
|  | ConvertUTF8ToJavaString(env, content_uri.value()); | 
|  | return Java_ContentUriUtils_contentUriExists(env, j_uri); | 
|  | } | 
|  |  | 
|  | File OpenContentUriForRead(const FilePath& content_uri) { | 
|  | JNIEnv* env = base::android::AttachCurrentThread(); | 
|  | ScopedJavaLocalRef<jstring> j_uri = | 
|  | ConvertUTF8ToJavaString(env, content_uri.value()); | 
|  | jint fd = Java_ContentUriUtils_openContentUriForRead(env, j_uri); | 
|  | if (fd < 0) | 
|  | return File(); | 
|  | return File(fd); | 
|  | } | 
|  |  | 
|  | std::string GetContentUriMimeType(const FilePath& content_uri) { | 
|  | JNIEnv* env = base::android::AttachCurrentThread(); | 
|  | ScopedJavaLocalRef<jstring> j_uri = | 
|  | ConvertUTF8ToJavaString(env, content_uri.value()); | 
|  | ScopedJavaLocalRef<jstring> j_mime = | 
|  | Java_ContentUriUtils_getMimeType(env, j_uri); | 
|  | if (j_mime.is_null()) | 
|  | return std::string(); | 
|  |  | 
|  | return base::android::ConvertJavaStringToUTF8(env, j_mime.obj()); | 
|  | } | 
|  |  | 
|  | bool MaybeGetFileDisplayName(const FilePath& content_uri, | 
|  | base::string16* file_display_name) { | 
|  | DCHECK(content_uri.IsContentUri()); | 
|  | DCHECK(file_display_name); | 
|  |  | 
|  | JNIEnv* env = base::android::AttachCurrentThread(); | 
|  | ScopedJavaLocalRef<jstring> j_uri = | 
|  | ConvertUTF8ToJavaString(env, content_uri.value()); | 
|  | ScopedJavaLocalRef<jstring> j_display_name = | 
|  | Java_ContentUriUtils_maybeGetDisplayName(env, j_uri); | 
|  |  | 
|  | if (j_display_name.is_null()) | 
|  | return false; | 
|  |  | 
|  | *file_display_name = base::android::ConvertJavaStringToUTF16(j_display_name); | 
|  | return true; | 
|  | } | 
|  |  | 
|  | }  // namespace base |