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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/app/android_library_loader_hooks.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/base_jni_registrar.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/android/command_line_android.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/jni_registrar.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_string.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/base_switches.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/trace_event.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/tracked_objects.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/app/android/app_jni_registrar.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/browser_jni_registrar.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/android/common_jni_registrar.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/common/content_constants_internal.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/result_codes.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/android/media_jni_registrar.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/android/net_jni_registrar.h" 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/android/ui_base_jni_registrar.h" 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/android/gfx_jni_registrar.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gl/android/gl_jni_registrar.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/shell_dialogs/android/shell_dialogs_jni_registrar.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)namespace content { 330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)bool EnsureJniRegistered(JNIEnv* env) { 350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static bool g_jni_init_done = false; 360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!g_jni_init_done) { 380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!base::android::RegisterJni(env)) 390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!gfx::android::RegisterJni(env)) 420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!net::android::RegisterJni(env)) 450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!ui::android::RegisterJni(env)) 480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!ui::gl::android::RegisterJni(env)) 510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!ui::shell_dialogs::RegisterJni(env)) 540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!content::android::RegisterCommonJni(env)) 570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!content::android::RegisterBrowserJni(env)) 600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!content::android::RegisterAppJni(env)) 630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!media::RegisterJni(env)) 660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return false; 670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) g_jni_init_done = true; 690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return true; 720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool LibraryLoaded(JNIEnv* env, jclass clazz) { 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line->HasSwitch(switches::kTraceStartup)) { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::debug::CategoryFilter category_filter( 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->GetSwitchValueASCII(switches::kTraceStartup)); 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::debug::TraceLog::GetInstance()->SetEnabled( 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) category_filter, 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::debug::TraceLog::RECORDING_MODE, 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::debug::TraceOptions()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Android's main browser loop is custom so we set the browser 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // name here as early as possible. 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TRACE_EVENT_BEGIN_ETW("BrowserMain", 0, ""); 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::debug::TraceLog::GetInstance()->SetProcessName("Browser"); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::debug::TraceLog::GetInstance()->SetProcessSortIndex( 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kTraceEventBrowserProcessSortIndex); 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Can only use event tracing after setting up the command line. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TRACE_EVENT0("jni", "JNI_OnLoad continuation"); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch logging::LoggingSettings settings; 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch logging::InitLogging(settings); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To view log output with IDs and timestamps use "adb logcat -v threadtime". 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging::SetLogItems(false, // Process ID 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // Thread ID 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, // Timestamp 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); // Tick count 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(0) << "Chromium logging enabled: level = " << logging::GetMinLogLevel() 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", default verbosity = " << logging::GetVlogVerbosity(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return EnsureJniRegistered(env); 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 111