• 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 {
52 // ANDROID
JavaValueJavaValue53     JavaValue()
54         : m_type(JavaTypeInvalid)
55         , m_booleanValue(false)
56         , m_byteValue(0)
57         , m_charValue(0)
58         , m_shortValue(0)
59         , m_intValue(0)
60         , m_longValue(0)
61         , m_floatValue(0.0)
62         , m_doubleValue(0.0) {}
63 // ANDROID
64 
65     JavaType m_type;
66     // We don't use a union because we want to be able to ref-count some of the
67     // values. This requires types with non-trivial constructors.
68     RefPtr<JavaInstance> m_objectValue;
69     bool m_booleanValue;
70     signed char m_byteValue;
71     unsigned short m_charValue;
72     short m_shortValue;
73     int m_intValue;
74     long long m_longValue;
75     float m_floatValue;
76     double m_doubleValue;
77     String m_stringValue;
78 };
79 
80 } // namespace Bindings
81 
82 } // namespace JSC
83 
84 #endif // ENABLE(JAVA_BRIDGE)
85 
86 #endif // JavaValueV8_h
87