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

Side by Side Diff: content/browser/renderer_host/java/java_method.cc

Issue 9584014: Remove env() getter from JavaRef<> (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-applied downstream patch after it was re-worked Created 8 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/renderer_host/java/java_bound_object.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/java/java_method.h" 5 #include "content/browser/renderer_host/java/java_method.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/memory/singleton.h" 10 #include "base/memory/singleton.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 NOTREACHED(); 88 NOTREACHED();
89 return EmptyString(); 89 return EmptyString();
90 } 90 }
91 91
92 } // namespace 92 } // namespace
93 93
94 JavaMethod::JavaMethod(const base::android::JavaRef<jobject>& method) 94 JavaMethod::JavaMethod(const base::android::JavaRef<jobject>& method)
95 : java_method_(method), 95 : java_method_(method),
96 have_calculated_num_parameters_(false), 96 have_calculated_num_parameters_(false),
97 id_(NULL) { 97 id_(NULL) {
98 JNIEnv* env = java_method_.env(); 98 JNIEnv* env = AttachCurrentThread();
99 // On construction, we do nothing except get the name. Everything else is 99 // On construction, we do nothing except get the name. Everything else is
100 // done lazily. 100 // done lazily.
101 ScopedJavaLocalRef<jstring> name(env, static_cast<jstring>( 101 ScopedJavaLocalRef<jstring> name(env, static_cast<jstring>(
102 env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName( 102 env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
103 env, 103 env,
104 kJavaLangReflectMethod, 104 kJavaLangReflectMethod,
105 kGetName, 105 kGetName,
106 kReturningJavaLangString)))); 106 kReturningJavaLangString))));
107 name_ = ConvertJavaStringToUTF8(name); 107 name_ = ConvertJavaStringToUTF8(name);
108 } 108 }
(...skipping 23 matching lines...) Expand all
132 132
133 void JavaMethod::EnsureNumParametersIsSetUp() const { 133 void JavaMethod::EnsureNumParametersIsSetUp() const {
134 if (have_calculated_num_parameters_) { 134 if (have_calculated_num_parameters_) {
135 return; 135 return;
136 } 136 }
137 have_calculated_num_parameters_ = true; 137 have_calculated_num_parameters_ = true;
138 138
139 // The number of parameters will be used frequently when determining 139 // The number of parameters will be used frequently when determining
140 // whether to call this method. We don't get the ID etc until actually 140 // whether to call this method. We don't get the ID etc until actually
141 // required. 141 // required.
142 JNIEnv* env = java_method_.env(); 142 JNIEnv* env = AttachCurrentThread();
143 ScopedJavaLocalRef<jarray> parameters(env, static_cast<jarray>( 143 ScopedJavaLocalRef<jarray> parameters(env, static_cast<jarray>(
144 env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName( 144 env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
145 env, 145 env,
146 kJavaLangReflectMethod, 146 kJavaLangReflectMethod,
147 kGetParameterTypes, 147 kGetParameterTypes,
148 kReturningJavaLangClassArray)))); 148 kReturningJavaLangClassArray))));
149 num_parameters_ = env->GetArrayLength(parameters.obj()); 149 num_parameters_ = env->GetArrayLength(parameters.obj());
150 } 150 }
151 151
152 void JavaMethod::EnsureTypesAndIDAreSetUp() const { 152 void JavaMethod::EnsureTypesAndIDAreSetUp() const {
153 if (id_) { 153 if (id_) {
154 return; 154 return;
155 } 155 }
156 156
157 // Get the parameters 157 // Get the parameters
158 JNIEnv* env = java_method_.env(); 158 JNIEnv* env = AttachCurrentThread();
159 ScopedJavaLocalRef<jobjectArray> parameters(env, static_cast<jobjectArray>( 159 ScopedJavaLocalRef<jobjectArray> parameters(env, static_cast<jobjectArray>(
160 env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName( 160 env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
161 env, 161 env,
162 kJavaLangReflectMethod, 162 kJavaLangReflectMethod,
163 kGetParameterTypes, 163 kGetParameterTypes,
164 kReturningJavaLangClassArray)))); 164 kReturningJavaLangClassArray))));
165 // Usually, this will already have been called. 165 // Usually, this will already have been called.
166 EnsureNumParametersIsSetUp(); 166 EnsureNumParametersIsSetUp();
167 DCHECK_EQ(num_parameters_, 167 DCHECK_EQ(num_parameters_,
168 static_cast<size_t>(env->GetArrayLength(parameters.obj()))); 168 static_cast<size_t>(env->GetArrayLength(parameters.obj())));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 env, 225 env,
226 kJavaLangReflectMethod, 226 kJavaLangReflectMethod,
227 kGetDeclaringClass, 227 kGetDeclaringClass,
228 kReturningJavaLangClass)))); 228 kReturningJavaLangClass))));
229 id_ = is_static ? 229 id_ = is_static ?
230 GetStaticMethodID(env, declaring_class, name_.c_str(), 230 GetStaticMethodID(env, declaring_class, name_.c_str(),
231 signature.c_str()) : 231 signature.c_str()) :
232 GetMethodID(env, declaring_class, name_.c_str(), signature.c_str()); 232 GetMethodID(env, declaring_class, name_.c_str(), signature.c_str());
233 java_method_.Reset(); 233 java_method_.Reset();
234 } 234 }
OLDNEW
« no previous file with comments | « content/browser/renderer_host/java/java_bound_object.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698