• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "android/jni/mime_utils.h"
6 
7 #include "android/jni/jni_utils.h"
8 
9 // Accessors for the various JNI binding objects.
10 namespace {
11 
get_class(JNIEnv * env)12 static jclass get_class(JNIEnv* env) {
13   static jclass clazz = env->FindClass("libcore/net/MimeUtils");
14   return clazz;
15 }
16 
guess_mime_type_from_extension(JNIEnv * env)17 static jmethodID guess_mime_type_from_extension(JNIEnv* env) {
18   static jmethodID method = env->GetStaticMethodID(get_class(env),
19       "guessMimeTypeFromExtension", "(Ljava/lang/String;)Ljava/lang/String;");
20   return method;
21 }
22 
guess_extension_from_mime_type(JNIEnv * env)23 static jmethodID guess_extension_from_mime_type(JNIEnv* env) {
24   static jmethodID method = env->GetStaticMethodID(get_class(env),
25       "guessExtensionFromMimeType", "(Ljava/lang/String;)Ljava/lang/String;");
26   return method;
27 }
28 
29 } // namespace
30 
31 namespace android {
32 
GuessMimeTypeFromExtension(const std::string & extension,std::string * result)33 bool MimeUtils::GuessMimeTypeFromExtension(const std::string& extension,
34     std::string* result) {
35   JNIEnv* env = jni::GetJNIEnv();
36   jstring jExtension = env->NewStringUTF(extension.c_str());
37   jobject jResult = env->CallStaticObjectMethod(
38       get_class(env), guess_mime_type_from_extension(env), jExtension);
39   env->DeleteLocalRef(jExtension);
40   if (jResult) {
41     *result = jni::JstringToStdString(env, static_cast<jstring>(jResult));
42     env->DeleteLocalRef(jResult);
43   }
44   return jResult;
45 }
46 
GuessExtensionFromMimeType(const std::string & mimeType,std::string * result)47 bool MimeUtils::GuessExtensionFromMimeType(const std::string& mimeType,
48     std::string* result) {
49   JNIEnv* env = jni::GetJNIEnv();
50   jstring jMimeType = env->NewStringUTF(mimeType.c_str());
51   jobject jResult = env->CallStaticObjectMethod(
52       get_class(env), guess_extension_from_mime_type(env), jMimeType);
53   env->DeleteLocalRef(jMimeType);
54   if (jResult) {
55     *result = jni::JstringToStdString(env, static_cast<jstring>(jResult));
56     env->DeleteLocalRef(jResult);
57   }
58   return jResult;
59 }
60 
61 } // namespace android
62 
63