// 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.

#include "base/android/library_loader/library_loader_hooks.h"

#include "base/at_exit.h"
#include "base/metrics/histogram.h"
#include "jni/LibraryLoader_jni.h"

namespace base {
namespace android {

namespace {

base::AtExitManager* g_at_exit_manager = NULL;
const char* g_library_version_number = "";
LibraryLoadedHook* g_registration_callback = NULL;

} // namespace

void SetLibraryLoadedHook(LibraryLoadedHook* func) {
  g_registration_callback = func;
}

static jboolean LibraryLoaded(JNIEnv* env, jclass clazz,
                          jobjectArray init_command_line) {
  if(g_registration_callback == NULL) {
    return true;
  }
  return g_registration_callback(env, clazz, init_command_line);
}

static void RecordChromiumAndroidLinkerHistogram(
    JNIEnv* env,
    jclass clazz,
    jboolean loaded_at_fixed_address_failed,
    jboolean is_low_memory_device) {
  UMA_HISTOGRAM_BOOLEAN("ChromiumAndroidLinker.LoadedAtFixedAddressFailed",
                        loaded_at_fixed_address_failed);
  UMA_HISTOGRAM_BOOLEAN("ChromiumAndroidLinker.IsLowMemoryDevice",
                        is_low_memory_device);
}

void LibraryLoaderExitHook() {
  if (g_at_exit_manager) {
    delete g_at_exit_manager;
    g_at_exit_manager = NULL;
  }
}

bool RegisterLibraryLoaderEntryHook(JNIEnv* env) {
  // We need the AtExitManager to be created at the very beginning.
  g_at_exit_manager = new base::AtExitManager();

  return RegisterNativesImpl(env);
}

void SetVersionNumber(const char* version_number) {
  g_library_version_number = strdup(version_number);
}

jstring GetVersionNumber(JNIEnv* env, jclass clazz) {
  return env->NewStringUTF(g_library_version_number);
}

}  // namespace android
}  // namespace base
