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_ |