Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Unified Diff: content/browser/renderer_host/java/gin_java_bound_object.cc

Issue 336313018: [Android] Move content/browser/{renderer_host => android}/java/* (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated paths for unit tests, rebased Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/java/gin_java_bound_object.cc
diff --git a/content/browser/renderer_host/java/gin_java_bound_object.cc b/content/browser/renderer_host/java/gin_java_bound_object.cc
deleted file mode 100644
index 70abba842c90bbc2497cc50cec74512abc0a56de..0000000000000000000000000000000000000000
--- a/content/browser/renderer_host/java/gin_java_bound_object.cc
+++ /dev/null
@@ -1,192 +0,0 @@
-// 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 "content/browser/renderer_host/java/gin_java_bound_object.h"
-
-#include "base/android/jni_android.h"
-#include "base/android/jni_string.h"
-#include "base/android/scoped_java_ref.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/browser/renderer_host/java/jni_helper.h"
-
-using base::android::AttachCurrentThread;
-using base::android::ScopedJavaLocalRef;
-
-namespace content {
-
-namespace {
-
-const char kJavaLangClass[] = "java/lang/Class";
-const char kJavaLangObject[] = "java/lang/Object";
-const char kJavaLangReflectMethod[] = "java/lang/reflect/Method";
-const char kGetClass[] = "getClass";
-const char kGetMethods[] = "getMethods";
-const char kIsAnnotationPresent[] = "isAnnotationPresent";
-const char kReturningJavaLangClass[] = "()Ljava/lang/Class;";
-const char kReturningJavaLangReflectMethodArray[] =
- "()[Ljava/lang/reflect/Method;";
-const char kTakesJavaLangClassReturningBoolean[] = "(Ljava/lang/Class;)Z";
-
-} // namespace
-
-
-// static
-GinJavaBoundObject* GinJavaBoundObject::CreateNamed(
- const JavaObjectWeakGlobalRef& ref,
- const base::android::JavaRef<jclass>& safe_annotation_clazz) {
- return new GinJavaBoundObject(ref, safe_annotation_clazz);
-}
-
-// static
-GinJavaBoundObject* GinJavaBoundObject::CreateTransient(
- const JavaObjectWeakGlobalRef& ref,
- const base::android::JavaRef<jclass>& safe_annotation_clazz,
- RenderFrameHost* holder) {
- std::set<RenderFrameHost*> holders;
- holders.insert(holder);
- return new GinJavaBoundObject(ref, safe_annotation_clazz, holders);
-}
-
-GinJavaBoundObject::GinJavaBoundObject(
- const JavaObjectWeakGlobalRef& ref,
- const base::android::JavaRef<jclass>& safe_annotation_clazz)
- : ref_(ref),
- names_count_(1),
- object_get_class_method_id_(NULL),
- are_methods_set_up_(false),
- safe_annotation_clazz_(safe_annotation_clazz) {
-}
-
-GinJavaBoundObject::GinJavaBoundObject(
- const JavaObjectWeakGlobalRef& ref,
- const base::android::JavaRef<jclass>& safe_annotation_clazz,
- const std::set<RenderFrameHost*> holders)
- : ref_(ref),
- names_count_(0),
- holders_(holders),
- object_get_class_method_id_(NULL),
- are_methods_set_up_(false),
- safe_annotation_clazz_(safe_annotation_clazz) {
-}
-
-GinJavaBoundObject::~GinJavaBoundObject() {
-}
-
-std::set<std::string> GinJavaBoundObject::GetMethodNames() {
- EnsureMethodsAreSetUp();
- std::set<std::string> result;
- for (JavaMethodMap::const_iterator it = methods_.begin();
- it != methods_.end();
- ++it) {
- result.insert(it->first);
- }
- return result;
-}
-
-bool GinJavaBoundObject::HasMethod(const std::string& method_name) {
- EnsureMethodsAreSetUp();
- return methods_.find(method_name) != methods_.end();
-}
-
-const JavaMethod* GinJavaBoundObject::FindMethod(
- const std::string& method_name,
- size_t num_parameters) {
- EnsureMethodsAreSetUp();
-
- // Get all methods with the correct name.
- std::pair<JavaMethodMap::const_iterator, JavaMethodMap::const_iterator>
- iters = methods_.equal_range(method_name);
- if (iters.first == iters.second) {
- return NULL;
- }
-
- // LIVECONNECT_COMPLIANCE: We just take the first method with the correct
- // number of arguments, while the spec proposes using cost-based algorithm:
- // https://jdk6.java.net/plugin2/liveconnect/#OVERLOADED_METHODS
- for (JavaMethodMap::const_iterator iter = iters.first; iter != iters.second;
- ++iter) {
- if (iter->second->num_parameters() == num_parameters) {
- return iter->second.get();
- }
- }
-
- return NULL;
-}
-
-bool GinJavaBoundObject::IsObjectGetClassMethod(const JavaMethod* method) {
- EnsureMethodsAreSetUp();
- // As java.lang.Object.getClass is declared to be final, it is sufficient to
- // compare methodIDs.
- return method->id() == object_get_class_method_id_;
-}
-
-const base::android::JavaRef<jclass>&
-GinJavaBoundObject::GetSafeAnnotationClass() {
- return safe_annotation_clazz_;
-}
-
-base::android::ScopedJavaLocalRef<jclass> GinJavaBoundObject::GetLocalClassRef(
- JNIEnv* env) {
- if (!object_get_class_method_id_) {
- object_get_class_method_id_ = GetMethodIDFromClassName(
- env, kJavaLangObject, kGetClass, kReturningJavaLangClass);
- }
- ScopedJavaLocalRef<jobject> obj = GetLocalRef(env);
- if (obj.obj()) {
- return base::android::ScopedJavaLocalRef<jclass>(
- env,
- static_cast<jclass>(
- env->CallObjectMethod(obj.obj(), object_get_class_method_id_)));
- } else {
- return base::android::ScopedJavaLocalRef<jclass>();
- }
-}
-
-void GinJavaBoundObject::EnsureMethodsAreSetUp() {
- if (are_methods_set_up_)
- return;
- are_methods_set_up_ = true;
-
- JNIEnv* env = AttachCurrentThread();
-
- ScopedJavaLocalRef<jclass> clazz = GetLocalClassRef(env);
- if (clazz.is_null()) {
- return;
- }
-
- ScopedJavaLocalRef<jobjectArray> methods(env, static_cast<jobjectArray>(
- env->CallObjectMethod(clazz.obj(), GetMethodIDFromClassName(
- env,
- kJavaLangClass,
- kGetMethods,
- kReturningJavaLangReflectMethodArray))));
-
- size_t num_methods = env->GetArrayLength(methods.obj());
- // Java objects always have public methods.
- DCHECK(num_methods);
-
- for (size_t i = 0; i < num_methods; ++i) {
- ScopedJavaLocalRef<jobject> java_method(
- env,
- env->GetObjectArrayElement(methods.obj(), i));
-
- if (!safe_annotation_clazz_.is_null()) {
- jboolean safe = env->CallBooleanMethod(java_method.obj(),
- GetMethodIDFromClassName(
- env,
- kJavaLangReflectMethod,
- kIsAnnotationPresent,
- kTakesJavaLangClassReturningBoolean),
- safe_annotation_clazz_.obj());
-
- if (!safe)
- continue;
- }
-
- JavaMethod* method = new JavaMethod(java_method);
- methods_.insert(std::make_pair(method->name(), method));
- }
-}
-
-} // namespace content

Powered by Google App Engine
This is Rietveld 408576698