Chromium Code Reviews| Index: content/browser/renderer_host/java_bound_object.h |
| diff --git a/content/browser/renderer_host/java_bound_object.h b/content/browser/renderer_host/java_bound_object.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..55dfd48a53668873173f061e1a3d778947776d2d |
| --- /dev/null |
| +++ b/content/browser/renderer_host/java_bound_object.h |
| @@ -0,0 +1,61 @@ |
| +// Copyright (c) 2011 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. |
| + |
| +#ifndef CONTENT_BROWSER_RENDERER_HOST_JAVA_BOUND_OBJECT_H_ |
| +#define CONTENT_BROWSER_RENDERER_HOST_JAVA_BOUND_OBJECT_H_ |
| + |
| +#if defined(ENABLE_JAVA_BRIDGE) |
|
jam
2011/11/10 17:30:20
is this really needed? if ENABLE_JAVA_BRIDGE is no
Steve Block
2011/11/10 18:17:55
I guess it's not strictly required, because the gy
|
| + |
| +#include <jni.h> |
| +#include <map> |
| +#include <string> |
| + |
| +#include "base/android/scoped_java_ref.h" |
| +#include "base/memory/linked_ptr.h" |
| +#include "content/browser/renderer_host/java_method.h" |
| +#include "third_party/npapi/bindings/npruntime.h" |
| + |
| +// Represents a Java object for use in the Java bridge. Holds a global ref to |
| +// the Java object and provides the ability to invoke methods on it. |
| +// Interrogation of the Java object for its methods is done lazily. This class |
| +// is not generally threadsafe. However, it does allow for instances to be |
| +// created and destroyed on different threads. |
| +class JavaBoundObject { |
| + public: |
| + // Takes a Java object and creates a JavaBoundObject around it. Returns an |
| + // NPObject with a ref count of one which owns the JavaBoundObject. |
| + static NPObject* Create(const base::android::JavaRef<jobject>& object); |
| + |
| + virtual ~JavaBoundObject(); |
| + |
| + // Gets the underlying JavaObject from a JavaBoundObject wrapped as an |
| + // NPObject. |
| + static jobject GetJavaObject(NPObject* object); |
| + |
| + // Methods to implement the NPObject callbacks. |
| + bool HasMethod(const std::string& name) const; |
| + bool Invoke(const std::string& name, const NPVariant* args, size_t arg_count, |
| + NPVariant* result); |
| + |
| + private: |
| + explicit JavaBoundObject(const base::android::JavaRef<jobject>& object); |
| + |
| + void EnsureMethodsAreSetUp(); |
| + |
| + base::android::ScopedJavaGlobalRef<jobject> java_object_; |
| + bool are_methods_set_up_; |
| + |
| + // A map containing the public methods of this Java object. We map from |
| + // method name to Method instance. We support overloaded methods, so multiple |
| + // entries in the map may have the same key. Note that we can't use |
| + // scoped_ptr in STL containers as we can't copy it. |
| + typedef std::multimap<std::string, linked_ptr<JavaMethod> > JavaMethodMap; |
| + JavaMethodMap methods_; |
| + |
| + DISALLOW_IMPLICIT_CONSTRUCTORS(JavaBoundObject); |
| +}; |
| + |
| +#endif // defined(ENABLE_JAVA_BRIDGE) |
| + |
| +#endif // CONTENT_BROWSER_RENDERER_HOST_JAVA_BOUND_OBJECT_H_ |