| Index: net/android/network_library.cc
|
| diff --git a/net/android/network_library.cc b/net/android/network_library.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6fbcd30dcc85eb27acf45d4edc81412b8d9345a5
|
| --- /dev/null
|
| +++ b/net/android/network_library.cc
|
| @@ -0,0 +1,109 @@
|
| +// Copyright (c) 2010 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 "net/android/network_library.h"
|
| +
|
| +#include "base/android/auto_jobject.h"
|
| +#include "base/android/jni_android.h"
|
| +#include "base/android/jni_array.h"
|
| +#include "base/android/jni_string.h"
|
| +#include "base/logging.h"
|
| +#include "jni/android_network_library_jni.h"
|
| +
|
| +using base::android::AttachCurrentThread;
|
| +using base::android::AutoJObject;
|
| +using base::android::CheckException;
|
| +using base::android::ConvertJavaStringToUTF8;
|
| +using base::android::ConvertUTF8ToJavaString;
|
| +using base::android::GetApplicationContext;
|
| +using base::android::ToJavaArrayOfByteArray;
|
| +using base::android::ToJavaByteArray;
|
| +
|
| +namespace net {
|
| +namespace android {
|
| +
|
| +VerifyResult VerifyX509CertChain(const std::vector<std::string>& cert_chain,
|
| + const std::string& hostname,
|
| + const std::string& auth_type) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + if (!env) {
|
| + // TODO(husky): Maybe initialize the JVM in unit tests?
|
| + LOG(WARNING) << "JNI initialization failed";
|
| + return VERIFY_INVOCATION_ERROR;
|
| + }
|
| +
|
| + AutoJObject chain_byte_array = AutoJObject::FromLocalRef(
|
| + env, ToJavaArrayOfByteArray(env, cert_chain));
|
| + DCHECK(chain_byte_array.obj());
|
| +
|
| + AutoJObject host_string = AutoJObject::FromLocalRef(
|
| + env, ConvertUTF8ToJavaString(env, hostname));
|
| + DCHECK(host_string.obj());
|
| +
|
| + AutoJObject auth_string = AutoJObject::FromLocalRef(
|
| + env, ConvertUTF8ToJavaString(env, auth_type));
|
| + DCHECK(auth_string.obj());
|
| +
|
| + jint error = Java_AndroidNetworkLibrary_verifyServerCertificates(
|
| + env, static_cast<jobjectArray>(chain_byte_array.obj()),
|
| + static_cast<jstring>(host_string.obj()),
|
| + static_cast<jstring>(auth_string.obj()));
|
| +
|
| + switch (error) {
|
| + case 0:
|
| + return VERIFY_OK;
|
| + case 1:
|
| + return VERIFY_BAD_HOSTNAME;
|
| + case 2:
|
| + return VERIFY_NO_TRUSTED_ROOT;
|
| + }
|
| + return VERIFY_INVOCATION_ERROR;
|
| +}
|
| +
|
| +bool StoreKeyPair(const uint8* public_key,
|
| + size_t public_len,
|
| + const uint8* private_key,
|
| + size_t private_len) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + AutoJObject public_array = AutoJObject::FromLocalRef(
|
| + env, ToJavaByteArray(env, public_key, public_len));
|
| + AutoJObject private_array = AutoJObject::FromLocalRef(
|
| + env, ToJavaByteArray(env, private_key, private_len));
|
| + jboolean ret = Java_AndroidNetworkLibrary_storeKeyPair(env,
|
| + GetApplicationContext(),
|
| + static_cast<jbyteArray>(public_array.obj()),
|
| + static_cast<jbyteArray>(private_array.obj()));
|
| + if (CheckException(env) || !ret) {
|
| + LOG(WARNING) << "Call to Java_AndroidNetworkLibrary_storeKeyPair failed";
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +bool GetMimeTypeFromExtension(const std::string& extension,
|
| + std::string* result) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| +
|
| + AutoJObject extension_string = AutoJObject::FromLocalRef(
|
| + env, ConvertUTF8ToJavaString(env, extension));
|
| + AutoJObject ret = AutoJObject::FromLocalRef(
|
| + env, Java_AndroidNetworkLibrary_getMimeTypeFromExtension(
|
| + env, static_cast<jstring>(extension_string.obj())));
|
| +
|
| + if (CheckException(env) || !ret.obj()) {
|
| + LOG(WARNING) << "Call to getMimeTypeFromExtension failed";
|
| + return false;
|
| + }
|
| + *result = ConvertJavaStringToUTF8(env, static_cast<jstring>(ret.obj()));
|
| + return true;
|
| +}
|
| +
|
| +bool RegisterNetworkLibrary(JNIEnv* env) {
|
| + return RegisterNativesImpl(env);
|
| +}
|
| +
|
| +} // namespace android
|
| +} // namespace net
|
| +
|
| +
|
|
|