// Copyright 2015 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/base_jni_onload.h"

#include "base/android/jni_android.h"
#include "base/android/jni_utils.h"
#include "base/android/library_loader/library_loader_hooks.h"
#include "base/bind.h"

namespace base {
namespace android {

namespace {

bool RegisterJNI(JNIEnv* env) {
  return RegisterLibraryLoaderEntryHook(env);
}

bool Init() {
  JNIEnv* env = base::android::AttachCurrentThread();
  base::android::InitReplacementClassLoader(env,
                                            base::android::GetClassLoader(env));
  return true;
}

}  // namespace


bool OnJNIOnLoadRegisterJNI(JavaVM* vm,
                            std::vector<RegisterCallback> callbacks) {
  base::android::InitVM(vm);
  JNIEnv* env = base::android::AttachCurrentThread();

  callbacks.push_back(base::Bind(&RegisterJNI));
  for (std::vector<RegisterCallback>::reverse_iterator i =
           callbacks.rbegin(); i != callbacks.rend(); ++i) {
    if (!i->Run(env))
      return false;
  }
  return true;
}

bool OnJNIOnLoadInit(std::vector<InitCallback> callbacks) {
  callbacks.push_back(base::Bind(&Init));
  for (std::vector<InitCallback>::reverse_iterator i =
           callbacks.rbegin(); i != callbacks.rend(); ++i) {
    if (!i->Run())
      return false;
  }
  return true;
}

}  // namespace android
}  // namespace base
