11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/android/base_jni_registrar.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/android/jni_android.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/android/jni_registrar.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/at_exit.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/cronet/android/chromium_url_request.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/cronet/android/chromium_url_request_context.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/android/net_jni_registrar.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "url/android/url_jni_registrar.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "url/url_util.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(USE_ICU_ALTERNATIVES_ON_ANDROID) 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/i18n/icu_util.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace cronet { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst base::android::RegistrationMethod kCronetRegisteredMethods[] = { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci {"BaseAndroid", base::android::RegisterJni}, 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci {"ChromiumUrlRequest", cronet::ChromiumUrlRequestRegisterJni}, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci {"ChromiumUrlRequestContext", cronet::ChromiumUrlRequestContextRegisterJni}, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci {"NetAndroid", net::android::RegisterJni}, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci {"UrlAndroid", url::android::RegisterJni}, 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::AtExitManager* g_at_exit_manager = NULL; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Checks the available version of JNI. Also, caches Java reflection artifacts. 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccijint CronetOnLoad(JavaVM* vm, void* reserved) { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci JNIEnv* env; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return -1; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::android::InitVM(vm); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!base::android::RegisterNativeMethods( 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci env, kCronetRegisteredMethods, arraysize(kCronetRegisteredMethods))) { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return -1; 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci g_at_exit_manager = new base::AtExitManager(); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(USE_ICU_ALTERNATIVES_ON_ANDROID) 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::i18n::InitializeICU(); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url::Initialize(); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return JNI_VERSION_1_6; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CronetOnUnLoad(JavaVM* jvm, void* reserved) { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (g_at_exit_manager) { 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delete g_at_exit_manager; 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci g_at_exit_manager = NULL; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace cronet 67