1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host;
16
17 import java.nio.charset.StandardCharsets;
18
19 import org.htmlunit.corejs.javascript.ScriptableObject;
20 import org.htmlunit.corejs.javascript.typedarrays.NativeArrayBuffer;
21 import org.htmlunit.corejs.javascript.typedarrays.NativeUint8Array;
22 import org.htmlunit.javascript.HtmlUnitScriptable;
23 import org.htmlunit.javascript.JavaScriptEngine;
24 import org.htmlunit.javascript.configuration.JsxClass;
25 import org.htmlunit.javascript.configuration.JsxConstructor;
26 import org.htmlunit.javascript.configuration.JsxFunction;
27 import org.htmlunit.javascript.configuration.JsxGetter;
28
29
30
31
32
33
34
35
36
37 @JsxClass
38 public class TextEncoder extends HtmlUnitScriptable {
39
40
41
42
43 @JsxConstructor
44 public void jsConstructor() {
45
46 }
47
48
49
50
51
52
53 @JsxGetter
54 public String getEncoding() {
55 return "utf-8";
56 }
57
58
59
60
61
62
63
64 @JsxFunction
65 public NativeUint8Array encode(final Object toEncode) {
66 if (JavaScriptEngine.isUndefined(toEncode)) {
67 final NativeUint8Array result = new NativeUint8Array(0);
68 result.setParentScope(getParentScope());
69 result.setPrototype(ScriptableObject.getClassPrototype(getParentScope(), result.getClassName()));
70 return result;
71 }
72
73 final String txt;
74 if (toEncode == null) {
75 txt = "null";
76 }
77 else {
78 txt = JavaScriptEngine.toString(toEncode);
79 }
80
81 final byte[] bytes = txt.getBytes(StandardCharsets.UTF_8);
82
83 final NativeArrayBuffer arrayBuffer = new NativeArrayBuffer(bytes.length);
84 System.arraycopy(bytes, 0, arrayBuffer.getBuffer(), 0, bytes.length);
85
86 final NativeUint8Array result = new NativeUint8Array(arrayBuffer, 0, bytes.length);
87 result.setParentScope(getParentScope());
88 result.setPrototype(ScriptableObject.getClassPrototype(getParentScope(), result.getClassName()));
89 return result;
90 }
91 }