/platform/external/webkit/WebCore/bridge/jni/jsc/JavaInstanceJSC.h

https://github.com/aharish/totoro-gb-opensource-update2 · C Header · 108 lines · 58 code · 26 blank · 24 comment · 1 complexity · e85e6fed5ad17b1b688a6a5790422120 MD5 · raw file

  1. /*
  2. * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
  17. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  18. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  19. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  20. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  21. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  23. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #ifndef JavaInstanceJSC_h
  26. #define JavaInstanceJSC_h
  27. #if ENABLE(MAC_JAVA_BRIDGE)
  28. #include "Bridge.h"
  29. #include "runtime_root.h"
  30. #include <JavaVM/jni.h>
  31. namespace JSC {
  32. namespace Bindings {
  33. class JavaClass;
  34. class JObjectWrapper {
  35. friend class RefPtr<JObjectWrapper>;
  36. friend class JavaArray;
  37. friend class JavaField;
  38. friend class JavaInstance;
  39. friend class JavaMethod;
  40. public:
  41. jobject instance() const { return m_instance; }
  42. void setInstance(jobject instance) { m_instance = instance; }
  43. void ref() { m_refCount++; }
  44. void deref()
  45. {
  46. if (!(--m_refCount))
  47. delete this;
  48. }
  49. protected:
  50. JObjectWrapper(jobject instance);
  51. ~JObjectWrapper();
  52. jobject m_instance;
  53. private:
  54. JNIEnv* m_env;
  55. unsigned int m_refCount;
  56. };
  57. class JavaInstance : public Instance {
  58. public:
  59. static PassRefPtr<JavaInstance> create(jobject instance, PassRefPtr<RootObject> rootObject)
  60. {
  61. return adoptRef(new JavaInstance(instance, rootObject));
  62. }
  63. ~JavaInstance();
  64. virtual Class* getClass() const;
  65. virtual JSValue valueOf(ExecState*) const;
  66. virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
  67. virtual JSValue invokeMethod(ExecState* exec, const MethodList& method, const ArgList& args);
  68. jobject javaInstance() const { return m_instance->m_instance; }
  69. JSValue stringValue(ExecState*) const;
  70. JSValue numberValue(ExecState*) const;
  71. JSValue booleanValue() const;
  72. protected:
  73. JavaInstance(jobject instance, PassRefPtr<RootObject>);
  74. virtual void virtualBegin();
  75. virtual void virtualEnd();
  76. RefPtr<JObjectWrapper> m_instance;
  77. mutable JavaClass* m_class;
  78. };
  79. } // namespace Bindings
  80. } // namespace JSC
  81. #endif // ENABLE(MAC_JAVA_BRIDGE)
  82. #endif // JavaInstanceJSC_h