| 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
|
| deleted file mode 100644
|
| index 067a5e1901d5c2fb24a960eb1f6cc95909a7e1b3..0000000000000000000000000000000000000000
|
| --- a/content/browser/renderer_host/java/gin_java_method_invocation_helper_unittest.cc
|
| +++ /dev/null
|
| @@ -1,339 +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_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"
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -class NullObjectDelegate
|
| - : public GinJavaMethodInvocationHelper::ObjectDelegate {
|
| - public:
|
| - NullObjectDelegate() {}
|
| -
|
| - virtual ~NullObjectDelegate() {}
|
| -
|
| - virtual base::android::ScopedJavaLocalRef<jobject> GetLocalRef(
|
| - JNIEnv* env) OVERRIDE {
|
| - return base::android::ScopedJavaLocalRef<jobject>();
|
| - }
|
| -
|
| - virtual base::android::ScopedJavaLocalRef<jclass> GetLocalClassRef(
|
| - JNIEnv* env) OVERRIDE {
|
| - return base::android::ScopedJavaLocalRef<jclass>();
|
| - }
|
| -
|
| - virtual const JavaMethod* FindMethod(const std::string& method_name,
|
| - size_t num_parameters) OVERRIDE {
|
| - return NULL;
|
| - }
|
| -
|
| - virtual bool IsObjectGetClassMethod(const JavaMethod* method) OVERRIDE {
|
| - return false;
|
| - }
|
| -
|
| - virtual const base::android::JavaRef<jclass>& GetSafeAnnotationClass()
|
| - OVERRIDE {
|
| - return safe_annotation_class_;
|
| - }
|
| -
|
| - private:
|
| - base::android::ScopedJavaLocalRef<jclass> safe_annotation_class_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(NullObjectDelegate);
|
| -};
|
| -
|
| -class NullDispatcherDelegate
|
| - : public GinJavaMethodInvocationHelper::DispatcherDelegate {
|
| - public:
|
| - NullDispatcherDelegate() {}
|
| -
|
| - virtual ~NullDispatcherDelegate() {}
|
| -
|
| - virtual JavaObjectWeakGlobalRef GetObjectWeakRef(
|
| - GinJavaBoundObject::ObjectID object_id) OVERRIDE {
|
| - return JavaObjectWeakGlobalRef();
|
| - }
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(NullDispatcherDelegate);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class GinJavaMethodInvocationHelperTest : public testing::Test {
|
| -};
|
| -
|
| -namespace {
|
| -
|
| -class CountingDispatcherDelegate
|
| - : public GinJavaMethodInvocationHelper::DispatcherDelegate {
|
| - public:
|
| - CountingDispatcherDelegate() {}
|
| -
|
| - virtual ~CountingDispatcherDelegate() {}
|
| -
|
| - virtual JavaObjectWeakGlobalRef GetObjectWeakRef(
|
| - GinJavaBoundObject::ObjectID object_id) OVERRIDE {
|
| - counters_[object_id]++;
|
| - return JavaObjectWeakGlobalRef();
|
| - }
|
| -
|
| - void AssertInvocationsCount(GinJavaBoundObject::ObjectID begin_object_id,
|
| - GinJavaBoundObject::ObjectID end_object_id) {
|
| - EXPECT_EQ(end_object_id - begin_object_id,
|
| - static_cast<int>(counters_.size()));
|
| - for (GinJavaBoundObject::ObjectID i = begin_object_id;
|
| - i < end_object_id; ++i) {
|
| - EXPECT_LT(0, counters_[i]) << "ObjectID: " << i;
|
| - }
|
| - }
|
| -
|
| - private:
|
| - typedef std::map<GinJavaBoundObject::ObjectID, int> Counters;
|
| - Counters counters_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CountingDispatcherDelegate);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(GinJavaMethodInvocationHelperTest, RetrievalOfObjectsNoObjects) {
|
| - base::ListValue no_objects;
|
| - for (int i = 0; i < 10; ++i) {
|
| - no_objects.AppendInteger(i);
|
| - }
|
| -
|
| - scoped_refptr<GinJavaMethodInvocationHelper> helper =
|
| - new GinJavaMethodInvocationHelper(
|
| - scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
|
| - new NullObjectDelegate()),
|
| - "foo",
|
| - no_objects);
|
| - CountingDispatcherDelegate counter;
|
| - helper->Init(&counter);
|
| - counter.AssertInvocationsCount(0, 0);
|
| -}
|
| -
|
| -TEST_F(GinJavaMethodInvocationHelperTest, RetrievalOfObjectsHaveObjects) {
|
| - base::ListValue objects;
|
| - objects.AppendInteger(100);
|
| - objects.Append(GinJavaBridgeValue::CreateObjectIDValue(1).release());
|
| - base::ListValue* sub_list = new base::ListValue();
|
| - sub_list->AppendInteger(200);
|
| - sub_list->Append(GinJavaBridgeValue::CreateObjectIDValue(2).release());
|
| - objects.Append(sub_list);
|
| - base::DictionaryValue* sub_dict = new base::DictionaryValue();
|
| - sub_dict->SetInteger("1", 300);
|
| - sub_dict->Set("2", GinJavaBridgeValue::CreateObjectIDValue(3).release());
|
| - objects.Append(sub_dict);
|
| - base::ListValue* sub_list_with_dict = new base::ListValue();
|
| - base::DictionaryValue* sub_sub_dict = new base::DictionaryValue();
|
| - sub_sub_dict->Set("1", GinJavaBridgeValue::CreateObjectIDValue(4).release());
|
| - sub_list_with_dict->Append(sub_sub_dict);
|
| - objects.Append(sub_list_with_dict);
|
| - base::DictionaryValue* sub_dict_with_list = new base::DictionaryValue();
|
| - base::ListValue* sub_sub_list = new base::ListValue();
|
| - sub_sub_list->Append(GinJavaBridgeValue::CreateObjectIDValue(5).release());
|
| - sub_dict_with_list->Set("1", sub_sub_list);
|
| - objects.Append(sub_dict_with_list);
|
| -
|
| - scoped_refptr<GinJavaMethodInvocationHelper> helper =
|
| - new GinJavaMethodInvocationHelper(
|
| - scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
|
| - new NullObjectDelegate()),
|
| - "foo",
|
| - objects);
|
| - CountingDispatcherDelegate counter;
|
| - helper->Init(&counter);
|
| - 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>(
|
| - object_delegate),
|
| - object_delegate->get_method_name(),
|
| - no_objects);
|
| - NullDispatcherDelegate dispatcher;
|
| - helper->Init(&dispatcher);
|
| - 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_EQ(kGinJavaBridgeObjectIsGone, helper->GetInvocationError());
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -class MethodNotFoundObjectDelegate : public NullObjectDelegate {
|
| - public:
|
| - MethodNotFoundObjectDelegate() : find_method_called_(false) {}
|
| -
|
| - virtual ~MethodNotFoundObjectDelegate() {}
|
| -
|
| - virtual base::android::ScopedJavaLocalRef<jobject> GetLocalRef(
|
| - JNIEnv* env) OVERRIDE {
|
| - return base::android::ScopedJavaLocalRef<jobject>(
|
| - env, static_cast<jobject>(env->FindClass("java/lang/String")));
|
| - }
|
| -
|
| - virtual const JavaMethod* FindMethod(const std::string& method_name,
|
| - size_t num_parameters) OVERRIDE {
|
| - find_method_called_ = true;
|
| - return NULL;
|
| - }
|
| -
|
| - bool find_method_called() const { return find_method_called_; }
|
| -
|
| - protected:
|
| - bool find_method_called_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(MethodNotFoundObjectDelegate);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(GinJavaMethodInvocationHelperTest, HandleMethodNotFound) {
|
| - base::ListValue no_objects;
|
| - MethodNotFoundObjectDelegate* object_delegate =
|
| - new MethodNotFoundObjectDelegate();
|
| - scoped_refptr<GinJavaMethodInvocationHelper> helper =
|
| - new GinJavaMethodInvocationHelper(
|
| - scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
|
| - object_delegate),
|
| - "foo",
|
| - no_objects);
|
| - NullDispatcherDelegate dispatcher;
|
| - helper->Init(&dispatcher);
|
| - EXPECT_FALSE(object_delegate->find_method_called());
|
| - EXPECT_EQ(kGinJavaBridgeNoError, helper->GetInvocationError());
|
| - helper->Invoke();
|
| - EXPECT_TRUE(object_delegate->find_method_called());
|
| - EXPECT_TRUE(helper->HoldsPrimitiveResult());
|
| - EXPECT_TRUE(helper->GetPrimitiveResult().empty());
|
| - EXPECT_EQ(kGinJavaBridgeMethodNotFound, helper->GetInvocationError());
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -class GetClassObjectDelegate : public MethodNotFoundObjectDelegate {
|
| - public:
|
| - GetClassObjectDelegate() : get_class_called_(false) {}
|
| -
|
| - virtual ~GetClassObjectDelegate() {}
|
| -
|
| - virtual const JavaMethod* FindMethod(const std::string& method_name,
|
| - size_t num_parameters) OVERRIDE {
|
| - find_method_called_ = true;
|
| - return kFakeGetClass;
|
| - }
|
| -
|
| - virtual bool IsObjectGetClassMethod(const JavaMethod* method) OVERRIDE {
|
| - get_class_called_ = true;
|
| - return kFakeGetClass == method;
|
| - }
|
| -
|
| - bool get_class_called() const { return get_class_called_; }
|
| -
|
| - private:
|
| - static const JavaMethod* kFakeGetClass;
|
| - bool get_class_called_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(GetClassObjectDelegate);
|
| -};
|
| -
|
| -// We don't expect GinJavaMethodInvocationHelper to actually invoke the
|
| -// method, since the point of the test is to verify whether calls to
|
| -// 'getClass' get blocked.
|
| -const JavaMethod* GetClassObjectDelegate::kFakeGetClass =
|
| - (JavaMethod*)0xdeadbeef;
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(GinJavaMethodInvocationHelperTest, HandleGetClassInvocation) {
|
| - base::ListValue no_objects;
|
| - GetClassObjectDelegate* object_delegate =
|
| - new GetClassObjectDelegate();
|
| - scoped_refptr<GinJavaMethodInvocationHelper> helper =
|
| - new GinJavaMethodInvocationHelper(
|
| - scoped_ptr<GinJavaMethodInvocationHelper::ObjectDelegate>(
|
| - object_delegate),
|
| - "foo",
|
| - no_objects);
|
| - NullDispatcherDelegate dispatcher;
|
| - helper->Init(&dispatcher);
|
| - EXPECT_FALSE(object_delegate->find_method_called());
|
| - EXPECT_FALSE(object_delegate->get_class_called());
|
| - 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_EQ(kGinJavaBridgeAccessToObjectGetClassIsBlocked,
|
| - helper->GetInvocationError());
|
| -}
|
| -
|
| -} // namespace content
|
|
|