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

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

Issue 345753003: [Android] Java Bridge with Gin: implement Java Bridge dispatcher (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use an enum for passing error codes 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/gin_java_method_invocation_helper.h " 5 #include "content/browser/renderer_host/java/gin_java_method_invocation_helper.h "
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "content/browser/renderer_host/java/jni_helper.h"
8 #include "content/common/android/gin_java_bridge_value.h" 9 #include "content/common/android/gin_java_bridge_value.h"
9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
10 11
11 namespace content { 12 namespace content {
12 13
13 namespace { 14 namespace {
14 15
15 class NullObjectDelegate 16 class NullObjectDelegate
16 : public GinJavaMethodInvocationHelper::ObjectDelegate { 17 : public GinJavaMethodInvocationHelper::ObjectDelegate {
17 public: 18 public:
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 new GinJavaMethodInvocationHelper( 148 new GinJavaMethodInvocationHelper(
148 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>( 149 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
149 new NullObjectDelegate()), 150 new NullObjectDelegate()),
150 "foo", 151 "foo",
151 objects); 152 objects);
152 CountingDispatcherDelegate counter; 153 CountingDispatcherDelegate counter;
153 helper->Init(&counter); 154 helper->Init(&counter);
154 counter.AssertInvocationsCount(1, 6); 155 counter.AssertInvocationsCount(1, 6);
155 } 156 }
156 157
158 namespace {
159
160 class ObjectIsGoneObjectDelegate : public NullObjectDelegate {
161 public:
162 ObjectIsGoneObjectDelegate() :
163 get_local_ref_called_(false) {
164 // We need a Java Method object to create a valid JavaMethod instance.
165 JNIEnv* env = base::android::AttachCurrentThread();
166 jmethodID method_id =
167 GetMethodIDFromClassName(env, "java/lang/Object", "hashCode", "()I");
168 EXPECT_TRUE(method_id);
169 base::android::ScopedJavaLocalRef<jobject> method_obj(
170 env,
171 env->ToReflectedMethod(
172 base::android::GetClass(env, "java/lang/Object").obj(),
173 method_id,
174 false));
175 EXPECT_TRUE(method_obj.obj());
176 method_.reset(new JavaMethod(method_obj));
177 }
178
179 virtual ~ObjectIsGoneObjectDelegate() {}
180
181 virtual base::android::ScopedJavaLocalRef<jobject> GetLocalRef(
182 JNIEnv* env) OVERRIDE {
183 get_local_ref_called_ = true;
184 return NullObjectDelegate::GetLocalRef(env);
185 }
186
187 virtual const JavaMethod* FindMethod(const std::string& method_name,
188 size_t num_parameters) OVERRIDE {
189 return method_.get();
190 }
191
192 bool get_local_ref_called() { return get_local_ref_called_; }
193
194 const std::string& get_method_name() { return method_->name(); }
195
196 protected:
197 scoped_ptr<JavaMethod> method_;
198 bool get_local_ref_called_;
199
200 private:
201 DISALLOW_COPY_AND_ASSIGN(ObjectIsGoneObjectDelegate);
202 };
203
204 } // namespace
205
157 TEST_F(GinJavaMethodInvocationHelperTest, HandleObjectIsGone) { 206 TEST_F(GinJavaMethodInvocationHelperTest, HandleObjectIsGone) {
158 base::ListValue no_objects; 207 base::ListValue no_objects;
208 ObjectIsGoneObjectDelegate* object_delegate =
209 new ObjectIsGoneObjectDelegate();
159 scoped_refptr<GinJavaMethodInvocationHelper> helper = 210 scoped_refptr<GinJavaMethodInvocationHelper> helper =
160 new GinJavaMethodInvocationHelper( 211 new GinJavaMethodInvocationHelper(
161 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>( 212 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
162 new NullObjectDelegate()), 213 object_delegate),
163 "foo", 214 object_delegate->get_method_name(),
164 no_objects); 215 no_objects);
165 NullDispatcherDelegate dispatcher; 216 NullDispatcherDelegate dispatcher;
166 helper->Init(&dispatcher); 217 helper->Init(&dispatcher);
167 EXPECT_TRUE(helper->GetErrorMessage().empty()); 218 EXPECT_FALSE(object_delegate->get_local_ref_called());
219 EXPECT_EQ(kGinJavaBridgeNoError, helper->GetInvocationError());
168 helper->Invoke(); 220 helper->Invoke();
221 EXPECT_TRUE(object_delegate->get_local_ref_called());
169 EXPECT_TRUE(helper->HoldsPrimitiveResult()); 222 EXPECT_TRUE(helper->HoldsPrimitiveResult());
170 EXPECT_TRUE(helper->GetPrimitiveResult().empty()); 223 EXPECT_TRUE(helper->GetPrimitiveResult().empty());
171 EXPECT_FALSE(helper->GetErrorMessage().empty()); 224 EXPECT_EQ(kGinJavaBridgeObjectIsGone, helper->GetInvocationError());
172 } 225 }
173 226
174 namespace { 227 namespace {
175 228
176 class MethodNotFoundObjectDelegate : public NullObjectDelegate { 229 class MethodNotFoundObjectDelegate : public NullObjectDelegate {
177 public: 230 public:
178 MethodNotFoundObjectDelegate() : find_method_called_(false) {} 231 MethodNotFoundObjectDelegate() : find_method_called_(false) {}
179 232
180 virtual ~MethodNotFoundObjectDelegate() {} 233 virtual ~MethodNotFoundObjectDelegate() {}
181 234
(...skipping 26 matching lines...) Expand all
208 new MethodNotFoundObjectDelegate(); 261 new MethodNotFoundObjectDelegate();
209 scoped_refptr<GinJavaMethodInvocationHelper> helper = 262 scoped_refptr<GinJavaMethodInvocationHelper> helper =
210 new GinJavaMethodInvocationHelper( 263 new GinJavaMethodInvocationHelper(
211 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>( 264 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
212 object_delegate), 265 object_delegate),
213 "foo", 266 "foo",
214 no_objects); 267 no_objects);
215 NullDispatcherDelegate dispatcher; 268 NullDispatcherDelegate dispatcher;
216 helper->Init(&dispatcher); 269 helper->Init(&dispatcher);
217 EXPECT_FALSE(object_delegate->find_method_called()); 270 EXPECT_FALSE(object_delegate->find_method_called());
218 EXPECT_TRUE(helper->GetErrorMessage().empty()); 271 EXPECT_EQ(kGinJavaBridgeNoError, helper->GetInvocationError());
219 helper->Invoke(); 272 helper->Invoke();
220 EXPECT_TRUE(object_delegate->find_method_called()); 273 EXPECT_TRUE(object_delegate->find_method_called());
221 EXPECT_TRUE(helper->HoldsPrimitiveResult()); 274 EXPECT_TRUE(helper->HoldsPrimitiveResult());
222 EXPECT_TRUE(helper->GetPrimitiveResult().empty()); 275 EXPECT_TRUE(helper->GetPrimitiveResult().empty());
223 EXPECT_FALSE(helper->GetErrorMessage().empty()); 276 EXPECT_EQ(kGinJavaBridgeMethodNotFound, helper->GetInvocationError());
224 } 277 }
225 278
226 namespace { 279 namespace {
227 280
228 class GetClassObjectDelegate : public MethodNotFoundObjectDelegate { 281 class GetClassObjectDelegate : public MethodNotFoundObjectDelegate {
229 public: 282 public:
230 GetClassObjectDelegate() : get_class_called_(false) {} 283 GetClassObjectDelegate() : get_class_called_(false) {}
231 284
232 virtual ~GetClassObjectDelegate() {} 285 virtual ~GetClassObjectDelegate() {}
233 286
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 scoped_refptr<GinJavaMethodInvocationHelper> helper = 319 scoped_refptr<GinJavaMethodInvocationHelper> helper =
267 new GinJavaMethodInvocationHelper( 320 new GinJavaMethodInvocationHelper(
268 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>( 321 scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
269 object_delegate), 322 object_delegate),
270 "foo", 323 "foo",
271 no_objects); 324 no_objects);
272 NullDispatcherDelegate dispatcher; 325 NullDispatcherDelegate dispatcher;
273 helper->Init(&dispatcher); 326 helper->Init(&dispatcher);
274 EXPECT_FALSE(object_delegate->find_method_called()); 327 EXPECT_FALSE(object_delegate->find_method_called());
275 EXPECT_FALSE(object_delegate->get_class_called()); 328 EXPECT_FALSE(object_delegate->get_class_called());
276 EXPECT_TRUE(helper->GetErrorMessage().empty()); 329 EXPECT_EQ(kGinJavaBridgeNoError, helper->GetInvocationError());
277 helper->Invoke(); 330 helper->Invoke();
278 EXPECT_TRUE(object_delegate->find_method_called()); 331 EXPECT_TRUE(object_delegate->find_method_called());
279 EXPECT_TRUE(object_delegate->get_class_called()); 332 EXPECT_TRUE(object_delegate->get_class_called());
280 EXPECT_TRUE(helper->HoldsPrimitiveResult()); 333 EXPECT_TRUE(helper->HoldsPrimitiveResult());
281 EXPECT_TRUE(helper->GetPrimitiveResult().empty()); 334 EXPECT_TRUE(helper->GetPrimitiveResult().empty());
282 EXPECT_FALSE(helper->GetErrorMessage().empty()); 335 EXPECT_EQ(kGinJavaBridgeAccessToObjectGetClassIsBlocked,
336 helper->GetInvocationError());
283 } 337 }
284 338
285 } // namespace content 339 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698