Home | History | Annotate | Download | only in main
      1 // Copyright (c) 2012 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_webview/lib/main/aw_main_delegate.h"
      6 #include "android_webview/native/android_webview_jni_registrar.h"
      7 #include "base/android/jni_android.h"
      8 #include "base/android/jni_registrar.h"
      9 #include "base/android/jni_utils.h"
     10 #include "base/android/library_loader/library_loader_hooks.h"
     11 #include "components/navigation_interception/component_jni_registrar.h"
     12 #include "components/web_contents_delegate_android/component_jni_registrar.h"
     13 #include "content/public/app/android_library_loader_hooks.h"
     14 #include "content/public/app/content_main.h"
     15 #include "url/url_util.h"
     16 
     17 static base::android::RegistrationMethod
     18     kWebViewDependencyRegisteredMethods[] = {
     19     { "NavigationInterception",
     20         navigation_interception::RegisterNavigationInterceptionJni },
     21     { "WebContentsDelegateAndroid",
     22         web_contents_delegate_android::RegisterWebContentsDelegateAndroidJni },
     23 };
     24 
     25 // This is called by the VM when the shared library is first loaded.
     26 // Most of the initialization is done in LibraryLoadedOnMainThread(), not here.
     27 JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
     28 
     29   base::android::SetLibraryLoadedHook(&content::LibraryLoaded);
     30 
     31   base::android::InitVM(vm);
     32   JNIEnv* env = base::android::AttachCurrentThread();
     33   if (!base::android::RegisterLibraryLoaderEntryHook(env))
     34     return -1;
     35 
     36   // Register content JNI functions now, rather than waiting until
     37   // LibraryLoadedOnMainThread, so that we can call into native code early.
     38   if (!content::EnsureJniRegistered(env))
     39     return -1;
     40 
     41   // Register JNI for components we depend on.
     42   if (!RegisterNativeMethods(
     43       env,
     44       kWebViewDependencyRegisteredMethods,
     45       arraysize(kWebViewDependencyRegisteredMethods)))
     46     return -1;
     47 
     48   if (!android_webview::RegisterJni(env))
     49     return -1;
     50 
     51   base::android::InitReplacementClassLoader(env,
     52                                             base::android::GetClassLoader(env));
     53 
     54   content::SetContentMainDelegate(new android_webview::AwMainDelegate());
     55 
     56   // Initialize url lib here while we are still single-threaded, in case we use
     57   // CookieManager before initializing Chromium (which would normally have done
     58   // this). It's safe to call this multiple times.
     59   url::Initialize();
     60 
     61   return JNI_VERSION_1_4;
     62 }
     63