// Copyright 2014 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. #ifndef BASE_ANDROID_LIBRARY_LOADER_LIBRARY_LOADER_HOOKS_H_ #define BASE_ANDROID_LIBRARY_LOADER_LIBRARY_LOADER_HOOKS_H_ #include #include "base/base_export.h" namespace base { namespace android { // The process the shared library is loaded in. // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.base.library_loader enum LibraryProcessType { // The LibraryLoad has not been initialized. PROCESS_UNINITIALIZED = 0, // Shared library is running in browser process. PROCESS_BROWSER = 1, // Shared library is running in child process. PROCESS_CHILD = 2, // Shared library is running in the app that uses webview. PROCESS_WEBVIEW = 3, // Shared library is running in child process as part of webview. PROCESS_WEBVIEW_CHILD = 4, }; // Record any pending renderer histogram value as a histogram. Pending values // are set by RegisterChromiumAndroidLinkerRendererHistogram. BASE_EXPORT void RecordChromiumAndroidLinkerRendererHistogram(); // Registers the callbacks that allows the entry point of the library to be // exposed to the calling java code. This handles only registering the // the callbacks needed by the loader. Any application specific JNI bindings // should happen once the native library has fully loaded, either in the library // loaded hook function or later. BASE_EXPORT bool RegisterLibraryLoaderEntryHook(JNIEnv* env); // Typedef for hook function to be called (indirectly from Java) once the // libraries are loaded. The hook function should register the JNI bindings // required to start the application. It should return true for success and // false for failure. // Note: this can't use base::Callback because there is no way of initializing // the default callback without using static objects, which we forbid. typedef bool LibraryLoadedHook(JNIEnv* env, jclass clazz); // Set the hook function to be called (from Java) once the libraries are loaded. // SetLibraryLoadedHook may only be called from JNI_OnLoad. The hook function // should register the JNI bindings required to start the application. BASE_EXPORT void SetLibraryLoadedHook(LibraryLoadedHook* func); // Pass the version name to the loader. This used to check that the library // version matches the version expected by Java before completing JNI // registration. // Note: argument must remain valid at least until library loading is complete. BASE_EXPORT void SetVersionNumber(const char* version_number); // Call on exit to delete the AtExitManager which OnLibraryLoadedOnUIThread // created. BASE_EXPORT void LibraryLoaderExitHook(); // Return the process type the shared library is loaded in. BASE_EXPORT LibraryProcessType GetLibraryProcessType(JNIEnv* env); // Initialize AtExitManager, this must be done at the begining of loading // shared library. void InitAtExitManager(); } // namespace android } // namespace base #endif // BASE_ANDROID_LIBRARY_LOADER_LIBRARY_LOADER_HOOKS_H_