15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/android/jni_android.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/android/jni_registrar.h" 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/android/library_loader/library_loader_hooks.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/debugger.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/app/android_library_loader_hooks.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/app/content_main.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/android/compositor.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/shell/android/shell_jni_registrar.h" 15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/app/shell_main_delegate.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is called by the VM when the shared library is first loaded. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::android::SetLibraryLoadedHook(&content::LibraryLoaded); 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::android::InitVM(vm); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!base::android::RegisterLibraryLoaderEntryHook(env)) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To be called only from the UI thread. If loading the library is done on 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a separate thread, this should be moved elsewhere. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!content::android::RegisterShellJni(env)) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Compositor::Initialize(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::SetContentMainDelegate(new content::ShellMainDelegate()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return JNI_VERSION_1_4; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 37