// Copyright 2014 The Chromium Authors
// 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 <string>

#include "base/android/jni_string.h"
#include "base/android/library_loader/anchor_functions_buildflags.h"
#include "base/android/library_loader/library_prefetcher.h"
#include "base/android/orderfile/orderfile_buildflags.h"
#include "base/at_exit.h"

// Must come after all headers that specialize FromJniType() / ToJniType().
#include "base/library_loader_jni/LibraryLoader_jni.h"

#if BUILDFLAG(ORDERFILE_INSTRUMENTATION)
#include "base/android/orderfile/orderfile_instrumentation.h"  // nogncheck
#endif

namespace base {
namespace android {

namespace {

base::AtExitManager* g_at_exit_manager = nullptr;
LibraryLoadedHook* g_registration_callback = nullptr;
NativeInitializationHook* g_native_initialization_hook = nullptr;
LibraryProcessType g_library_process_type = PROCESS_UNINITIALIZED;

}  // namespace

LibraryProcessType GetLibraryProcessType() {
  return g_library_process_type;
}

void SetNativeInitializationHook(
    NativeInitializationHook native_initialization_hook) {
  g_native_initialization_hook = native_initialization_hook;
}

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

bool LibraryLoaded(LibraryProcessType library_process_type) {
  DCHECK_EQ(g_library_process_type, PROCESS_UNINITIALIZED);
  g_library_process_type = library_process_type;
#if BUILDFLAG(ORDERFILE_INSTRUMENTATION)
  // For WebView renderer process, we want to start the recording later close to
  // when the navigation starts. That way we optimize more for the pageload
  // time.
  if (g_library_process_type != PROCESS_WEBVIEW_CHILD) {
    orderfile::StartDelayedDump();
  }
#endif

  if (g_native_initialization_hook &&
      !g_native_initialization_hook(library_process_type)) {
    return false;
  }
  if (g_registration_callback &&
      !g_registration_callback(library_process_type)) {
    return false;
  }
  return true;
}

static jboolean JNI_LibraryLoader_LibraryLoaded(JNIEnv* env,
                                                jint library_process_type) {
  return LibraryLoaded(static_cast<LibraryProcessType>(library_process_type));
}

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

void InitAtExitManager() {
  g_at_exit_manager = new base::AtExitManager();
}

}  // namespace android
}  // namespace base
