1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.protocol.data;
16
17 import org.htmlunit.WebDriverTestCase;
18 import org.htmlunit.junit.annotation.Alerts;
19 import org.junit.jupiter.api.Test;
20 import org.openqa.selenium.WebDriver;
21
22
23
24
25
26
27
28
29 public class DataURLDecoderTest extends WebDriverTestCase {
30
31
32
33
34 @Test
35 @Alerts({"one", "two", "three", "four", "five's"})
36 public void dataProtocol() throws Exception {
37 final String html = DOCTYPE_HTML
38 + "<html><head>\n"
39 + "<script>\n"
40 + "var d1, d2, d3, d4, d5;\n"
41 + "</script>\n"
42 + "<script src=\"data:text/javascript,d1%20%3D%20'one'%3B\"></script>\n"
43 + "<script src=\"data:text/javascript;base64,ZDIgPSAndHdvJzs%3D\"></script>\n"
44 + "<script src=\""
45 + "data:text/javascript;base64,%5a%44%4d%67%50%53%41%6e%64%47%68%79%5a%57%55%6e%4f%77%3D%3D\"></script>\n"
46 + "<script src=\"data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20\"></script>\n"
47 + "<script src=\"data:text/javascript,d5%20%3D%20'five%5Cu0027s'%3B\"></script>\n"
48 + "<script>\n"
49 + LOG_TITLE_FUNCTION
50 + "function test() {\n"
51 + " log(d1);\n"
52 + " log(d2);\n"
53 + " log(d3);\n"
54 + " log(d4);\n"
55 + " log(d5);\n"
56 + "}\n"
57 + "</script></head><body onload='test()'></body></html>";
58
59 loadPageVerifyTitle2(html);
60 }
61
62
63
64
65 @Test
66 @Alerts(CHROME = "data:image/png;base64,"
67 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAHBJREFUOE+tkkkOACAIA+3/H40hEYOI"
68 + "iAtXYKBNQURUHgq3AACFbx8DeJFLHu8AaWTUaNUDILLDHnA/WAH026GETrU6m2Es7xgwLUQmDua0Qe14+gM9eA0QiDU25UGU"
69 + "hS9BcpNode8SOQXpC2B31etXnvKZ0TEDfq8AAAAASUVORK5CYII=",
70 EDGE = "data:image/png;base64,"
71 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAHBJREFUOE+tkkkOACAIA+3/H40hEYOI"
72 + "iAtXYKBNQURUHgq3AACFbx8DeJFLHu8AaWTUaNUDILLDHnA/WAH026GETrU6m2Es7xgwLUQmDua0Qe14+gM9eA0QiDU25UGU"
73 + "hS9BcpNode8SOQXpC2B31etXnvKZ0TEDfq8AAAAASUVORK5CYII=",
74 FF = "data:image/png;base64,"
75 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVQ4T62SSQ4AIAgD7f8frZKIQUTEhSsw0KbItdJD4RYA"
76 + "INHtYwAtUvHjHcCNiBqpegB4dugD5gcrgHzbldCpWmczjOQdA6YFz8TBnDYoHQ9/IAevAQzRxoY88LLwJUhmErXuXSKnIH0B"
77 + "7K5a/QKe8pnRes1vRwAAAABJRU5ErkJggg==",
78 FF_ESR = "data:image/png;base64,"
79 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVQ4T62SSQ4AIAgD7f8frZKIQUTEhSsw0KbItdJD4RYA"
80 + "INHtYwAtUvHjHcCNiBqpegB4dugD5gcrgHzbldCpWmczjOQdA6YFz8TBnDYoHQ9/IAevAQzRxoY88LLwJUhmErXuXSKnIH0B"
81 + "7K5a/QKe8pnRes1vRwAAAABJRU5ErkJggg==")
82 public void base64WithPlus() throws Exception {
83 final String html = DOCTYPE_HTML
84 + "<html><head>\n"
85 + "<script>\n"
86 + LOG_TEXTAREA_FUNCTION
87 + "function test() {\n"
88 + " var canvas = document.getElementById('canvas');\n"
89 + " var img = document.getElementById('image');\n"
90 + " canvas.width = img.width;\n"
91 + " canvas.height = img.height;\n"
92 + " var ctx = canvas.getContext('2d');\n"
93 + " ctx.drawImage(img, 0, 0);\n"
94 + " log(canvas.toDataURL());\n"
95 + "}\n"
96 + "</script></head><body onload='test()'>\n"
97 + " <img id='image' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEU"
98 + "AAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAA"
99 + "AElFTkSuQmCC'>\n"
100 + " <canvas id='canvas'></canvas>\n"
101 + LOG_TEXTAREA
102 + "</body></html>";
103
104 loadPageVerifyTextArea2(html);
105 }
106
107
108
109
110 @Test
111 @Alerts("HtmlUnit")
112 public void withPlus() throws Exception {
113 final String dataUrl = "data:text/html;charset=utf-8,"
114 + "<html><head></head>\n"
115 + "<body>\n"
116 + "<script>\n"
117 + " var result = 'Html';\n"
118 + " result += 'Unit§';\n"
119 + " window.document.title = result;\n"
120 + "</script>\n"
121 + "</body></html>";
122
123 final WebDriver driver = getWebDriver();
124 driver.get(dataUrl);
125 verifyTitle2(driver, getExpectedAlerts());
126 }
127 }