• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2011, The Android Open Source Project
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 THE COPYRIGHT HOLDERS ``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 THE COPYRIGHT OWNER 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 
26 #ifndef JavaValueV8_h
27 #define JavaValueV8_h
28 
29 #if ENABLE(JAVA_BRIDGE)
30 
31 #include "JavaType.h"
32 
33 #include <wtf/text/WTFString.h>
34 
35 namespace JSC {
36 
37 namespace Bindings {
38 
39 class JavaInstance;
40 
41 // A variant used to represent a Java value, almost identical to the JNI
42 // jvalue type. It exists because the logic to convert between JavaScript
43 // objects (as JavaNPObject or JSValue) and Java objects should not depend upon
44 // JNI, to allow ports to provide a JavaInstance object etc which does not use
45 // JNI. This means that the 'object' field of this variant uses JavaInstance,
46 // not jobject.
47 //
48 // Note that this class is independent of the JavaScript engine, but is
49 // currently used only with V8.
50 // See https://bugs.webkit.org/show_bug.cgi?id=57023.
51 struct JavaValue {
JavaValueJavaValue52     JavaValue() : m_type(JavaTypeInvalid) {}
53 
54     JavaType m_type;
55     // We don't use a union because we want to be able to ref-count some of the
56     // values. This requires types with non-trivial constructors.
57     RefPtr<JavaInstance> m_objectValue;
58     bool m_booleanValue;
59     signed char m_byteValue;
60     unsigned short m_charValue;
61     short m_shortValue;
62     int m_intValue;
63     long long m_longValue;
64     float m_floatValue;
65     double m_doubleValue;
66     String m_stringValue;
67 };
68 
69 } // namespace Bindings
70 
71 } // namespace JSC
72 
73 #endif // ENABLE(JAVA_BRIDGE)
74 
75 #endif // JavaValueV8_h
76