1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.event;
16
17 import org.htmlunit.HttpHeader;
18 import org.htmlunit.corejs.javascript.NativeArray;
19 import org.htmlunit.corejs.javascript.Scriptable;
20 import org.htmlunit.corejs.javascript.ScriptableObject;
21 import org.htmlunit.javascript.JavaScriptEngine;
22 import org.htmlunit.javascript.configuration.JsxClass;
23 import org.htmlunit.javascript.configuration.JsxConstructor;
24 import org.htmlunit.javascript.configuration.JsxFunction;
25 import org.htmlunit.javascript.configuration.JsxGetter;
26 import org.htmlunit.javascript.host.Window;
27 import org.htmlunit.javascript.host.WindowProxy;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 @JsxClass
43 public class MessageEvent extends Event {
44
45 private Object data_;
46 private String origin_;
47 private String lastEventId_;
48 private Window source_;
49 private Object ports_;
50
51
52
53
54 public MessageEvent() {
55 super();
56 setType(TYPE_MESSAGE);
57 origin_ = "";
58 lastEventId_ = "";
59 data_ = JavaScriptEngine.UNDEFINED;
60 }
61
62
63
64
65
66 public MessageEvent(final Object data) {
67 this();
68 data_ = data;
69 }
70
71
72
73
74
75
76
77 @Override
78 @JsxConstructor
79 public void jsConstructor(final String type, final ScriptableObject details) {
80 super.jsConstructor(type, details);
81
82 data_ = null;
83
84 String origin = "";
85 String lastEventId = "";
86 if (details != null && !JavaScriptEngine.isUndefined(details)) {
87 data_ = details.get("data");
88
89 final String detailOrigin = (String) details.get(HttpHeader.ORIGIN_LC);
90 if (detailOrigin != null) {
91 origin = detailOrigin;
92 }
93
94 final Object detailLastEventId = details.get("lastEventId");
95 if (detailLastEventId != null) {
96 lastEventId = JavaScriptEngine.toString(detailLastEventId);
97 }
98
99 source_ = null;
100 final Object detailSource = details.get("source");
101 if (detailSource instanceof Window) {
102 source_ = (Window) detailSource;
103 }
104 else if (detailSource instanceof WindowProxy) {
105 source_ = ((WindowProxy) detailSource).getDelegee();
106 }
107 ports_ = details.get("ports");
108 }
109 origin_ = origin;
110 lastEventId_ = lastEventId;
111 }
112
113
114
115
116
117
118
119
120
121
122
123
124 @JsxFunction
125 public void initMessageEvent(
126 final String type,
127 final boolean canBubble,
128 final boolean cancelable,
129 final Object data,
130 final String origin,
131 final String lastEventId,
132 final Window source,
133 final Object ports) {
134 initEvent(type, canBubble, cancelable);
135 data_ = data;
136 origin_ = origin;
137 lastEventId_ = lastEventId;
138 source_ = source;
139
140 if (JavaScriptEngine.isUndefined(ports)
141 || ports instanceof NativeArray
142 || (ports instanceof Scriptable && ScriptableObject.hasProperty((Scriptable) ports, "length"))) {
143 ports_ = ports;
144 }
145 else {
146 throw JavaScriptEngine.typeError(
147 "Argument 8 of MessageEvent.initMessageEvent can't be converted to a sequence.");
148 }
149 }
150
151
152
153
154
155 @JsxGetter
156 public Object getData() {
157 return data_;
158 }
159
160
161
162
163
164 @JsxGetter
165 public String getOrigin() {
166 return origin_;
167 }
168
169
170
171
172
173 public void setOrigin(final String origin) {
174 origin_ = origin;
175 }
176
177
178
179
180
181 @JsxGetter
182 public String getLastEventId() {
183 return lastEventId_;
184 }
185
186
187
188
189
190 @JsxGetter
191 public Window getSource() {
192 return source_;
193 }
194
195
196
197
198
199 @JsxGetter
200 public Object getPorts() {
201 return ports_;
202 }
203 }