| Index: content/browser/renderer_host/java/gin_java_method_invocation_helper_unittest.cc
|
| diff --git a/content/browser/renderer_host/java/gin_java_method_invocation_helper_unittest.cc b/content/browser/renderer_host/java/gin_java_method_invocation_helper_unittest.cc
|
| index d7634410deec5524f7d2bf6a41df8d87224c8294..067a5e1901d5c2fb24a960eb1f6cc95909a7e1b3 100644
|
| --- a/content/browser/renderer_host/java/gin_java_method_invocation_helper_unittest.cc
|
| +++ b/content/browser/renderer_host/java/gin_java_method_invocation_helper_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "content/browser/renderer_host/java/gin_java_method_invocation_helper.h"
|
|
|
| #include "base/android/jni_android.h"
|
| +#include "content/browser/renderer_host/java/jni_helper.h"
|
| #include "content/common/android/gin_java_bridge_value.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -154,21 +155,73 @@ TEST_F(GinJavaMethodInvocationHelperTest, RetrievalOfObjectsHaveObjects) {
|
| counter.AssertInvocationsCount(1, 6);
|
| }
|
|
|
| +namespace {
|
| +
|
| +class ObjectIsGoneObjectDelegate : public NullObjectDelegate {
|
| + public:
|
| + ObjectIsGoneObjectDelegate() :
|
| + get_local_ref_called_(false) {
|
| + // We need a Java Method object to create a valid JavaMethod instance.
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + jmethodID method_id =
|
| + GetMethodIDFromClassName(env, "java/lang/Object", "hashCode", "()I");
|
| + EXPECT_TRUE(method_id);
|
| + base::android::ScopedJavaLocalRef<jobject> method_obj(
|
| + env,
|
| + env->ToReflectedMethod(
|
| + base::android::GetClass(env, "java/lang/Object").obj(),
|
| + method_id,
|
| + false));
|
| + EXPECT_TRUE(method_obj.obj());
|
| + method_.reset(new JavaMethod(method_obj));
|
| + }
|
| +
|
| + virtual ~ObjectIsGoneObjectDelegate() {}
|
| +
|
| + virtual base::android::ScopedJavaLocalRef<jobject> GetLocalRef(
|
| + JNIEnv* env) OVERRIDE {
|
| + get_local_ref_called_ = true;
|
| + return NullObjectDelegate::GetLocalRef(env);
|
| + }
|
| +
|
| + virtual const JavaMethod* FindMethod(const std::string& method_name,
|
| + size_t num_parameters) OVERRIDE {
|
| + return method_.get();
|
| + }
|
| +
|
| + bool get_local_ref_called() { return get_local_ref_called_; }
|
| +
|
| + const std::string& get_method_name() { return method_->name(); }
|
| +
|
| + protected:
|
| + scoped_ptr<JavaMethod> method_;
|
| + bool get_local_ref_called_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(ObjectIsGoneObjectDelegate);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| TEST_F(GinJavaMethodInvocationHelperTest, HandleObjectIsGone) {
|
| base::ListValue no_objects;
|
| + ObjectIsGoneObjectDelegate* object_delegate =
|
| + new ObjectIsGoneObjectDelegate();
|
| scoped_refptr<GinJavaMethodInvocationHelper> helper =
|
| new GinJavaMethodInvocationHelper(
|
| scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
|
| - new NullObjectDelegate()),
|
| - "foo",
|
| + object_delegate),
|
| + object_delegate->get_method_name(),
|
| no_objects);
|
| NullDispatcherDelegate dispatcher;
|
| helper->Init(&dispatcher);
|
| - EXPECT_TRUE(helper->GetErrorMessage().empty());
|
| + EXPECT_FALSE(object_delegate->get_local_ref_called());
|
| + EXPECT_EQ(kGinJavaBridgeNoError, helper->GetInvocationError());
|
| helper->Invoke();
|
| + EXPECT_TRUE(object_delegate->get_local_ref_called());
|
| EXPECT_TRUE(helper->HoldsPrimitiveResult());
|
| EXPECT_TRUE(helper->GetPrimitiveResult().empty());
|
| - EXPECT_FALSE(helper->GetErrorMessage().empty());
|
| + EXPECT_EQ(kGinJavaBridgeObjectIsGone, helper->GetInvocationError());
|
| }
|
|
|
| namespace {
|
| @@ -215,12 +268,12 @@ TEST_F(GinJavaMethodInvocationHelperTest, HandleMethodNotFound) {
|
| NullDispatcherDelegate dispatcher;
|
| helper->Init(&dispatcher);
|
| EXPECT_FALSE(object_delegate->find_method_called());
|
| - EXPECT_TRUE(helper->GetErrorMessage().empty());
|
| + EXPECT_EQ(kGinJavaBridgeNoError, helper->GetInvocationError());
|
| helper->Invoke();
|
| EXPECT_TRUE(object_delegate->find_method_called());
|
| EXPECT_TRUE(helper->HoldsPrimitiveResult());
|
| EXPECT_TRUE(helper->GetPrimitiveResult().empty());
|
| - EXPECT_FALSE(helper->GetErrorMessage().empty());
|
| + EXPECT_EQ(kGinJavaBridgeMethodNotFound, helper->GetInvocationError());
|
| }
|
|
|
| namespace {
|
| @@ -273,13 +326,14 @@ TEST_F(GinJavaMethodInvocationHelperTest, HandleGetClassInvocation) {
|
| helper->Init(&dispatcher);
|
| EXPECT_FALSE(object_delegate->find_method_called());
|
| EXPECT_FALSE(object_delegate->get_class_called());
|
| - EXPECT_TRUE(helper->GetErrorMessage().empty());
|
| + EXPECT_EQ(kGinJavaBridgeNoError, helper->GetInvocationError());
|
| helper->Invoke();
|
| EXPECT_TRUE(object_delegate->find_method_called());
|
| EXPECT_TRUE(object_delegate->get_class_called());
|
| EXPECT_TRUE(helper->HoldsPrimitiveResult());
|
| EXPECT_TRUE(helper->GetPrimitiveResult().empty());
|
| - EXPECT_FALSE(helper->GetErrorMessage().empty());
|
| + EXPECT_EQ(kGinJavaBridgeAccessToObjectGetClassIsBlocked,
|
| + helper->GetInvocationError());
|
| }
|
|
|
| } // namespace content
|
|
|