1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/core/html/html_view_source_document.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
9 #include "third_party/blink/renderer/core/testing/sim/sim_request.h"
10 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
11
12 namespace blink {
13
14 class HTMLViewSourceDocumentTest : public SimTest {
15 public:
LoadMainResource(const String & html)16 void LoadMainResource(const String& html) {
17 SimRequest main_resource("https://example.com/", "text/html");
18 LoadURL("https://example.com/");
19 main_resource.Complete(html);
20 Compositor().BeginFrame();
21 }
22
SetUp()23 void SetUp() override {
24 SimTest::SetUp();
25 MainFrame().EnableViewSourceMode(true);
26 }
27 };
28
TEST_F(HTMLViewSourceDocumentTest,ViewSource1)29 TEST_F(HTMLViewSourceDocumentTest, ViewSource1) {
30 LoadMainResource(R"HTML(
31 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
32 "http://www.w3.org/TR/html4/strict.dtd">
33 <hr noshade width=75%>
34 <div align="center" title="" id="foo">
35 <p>hello world</p>
36 </div>
37 )HTML");
38 EXPECT_EQ(
39 GetDocument().documentElement()->outerHTML(),
40 "<html><head></head><body><div "
41 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
42 "class=\"line-number\" value=\"1\"></td><td "
43 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
44 "value=\"2\"></td><td class=\"line-content\"> <span "
45 "class=\"html-doctype\"><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML "
46 "4.01//EN\"</span></td></tr><tr><td class=\"line-number\" "
47 "value=\"3\"></td><td class=\"line-content\"><span "
48 "class=\"html-doctype\"> "
49 "\"http://www.w3.org/TR/html4/strict.dtd\"></span></td></tr><tr><td "
50 "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> "
51 "<span class=\"html-tag\"><hr <span "
52 "class=\"html-attribute-name\">noshade</span> <span "
53 "class=\"html-attribute-name\">width</span>=<span "
54 "class=\"html-attribute-value\">75%</span>></span></td></tr><tr><td "
55 "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> "
56 "<span class=\"html-tag\"><div <span "
57 "class=\"html-attribute-name\">align</span>=\"<span "
58 "class=\"html-attribute-value\">center</span>\" <span "
59 "class=\"html-attribute-name\">title</span>=\"\" <span "
60 "class=\"html-attribute-name\">id</span>=\"<span "
61 "class=\"html-attribute-value\">foo</span>\"></span></td></tr><tr><td "
62 "class=\"line-number\" value=\"6\"></td><td class=\"line-content\"> "
63 "<span class=\"html-tag\"><p></span>hello world<span "
64 "class=\"html-tag\"></p></span></td></tr><tr><td "
65 "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> "
66 "<span class=\"html-tag\"></div></span></td></tr><tr><td "
67 "class=\"line-number\" value=\"8\"></td><td class=\"line-content\"> "
68 "<span "
69 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
70 "html>");
71 }
72
TEST_F(HTMLViewSourceDocumentTest,ViewSource2)73 TEST_F(HTMLViewSourceDocumentTest, ViewSource2) {
74 LoadMainResource(R"HTML(
75 <script>
76 <testscript>
77 </script>
78
79 <style>
80 <teststyle>
81 </style>
82
83 <xmp>
84 <testxmp>
85 </xmp>
86
87 <textarea>
88 <testtextarea>
89 </textarea>
90 )HTML");
91 EXPECT_EQ(
92 GetDocument().documentElement()->outerHTML(),
93 "<html><head></head><body><div "
94 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
95 "class=\"line-number\" value=\"1\"></td><td "
96 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
97 "value=\"2\"></td><td class=\"line-content\"> <span "
98 "class=\"html-tag\"><script></span></td></tr><tr><td "
99 "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> "
100 "<testscript></td></tr><tr><td class=\"line-number\" "
101 "value=\"4\"></td><td class=\"line-content\"> <span "
102 "class=\"html-tag\"></script></span></td></tr><tr><td "
103 "class=\"line-number\" value=\"5\"></td><td "
104 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
105 "value=\"6\"></td><td class=\"line-content\"> <span "
106 "class=\"html-tag\"><style></span></td></tr><tr><td "
107 "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> "
108 "<teststyle></td></tr><tr><td class=\"line-number\" "
109 "value=\"8\"></td><td class=\"line-content\"> <span "
110 "class=\"html-tag\"></style></span></td></tr><tr><td "
111 "class=\"line-number\" value=\"9\"></td><td "
112 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
113 "value=\"10\"></td><td class=\"line-content\"> <span "
114 "class=\"html-tag\"><xmp></span></td></tr><tr><td "
115 "class=\"line-number\" value=\"11\"></td><td class=\"line-content\"> "
116 " <testxmp></td></tr><tr><td class=\"line-number\" "
117 "value=\"12\"></td><td class=\"line-content\"> <span "
118 "class=\"html-tag\"></xmp></span></td></tr><tr><td "
119 "class=\"line-number\" value=\"13\"></td><td "
120 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
121 "value=\"14\"></td><td class=\"line-content\"> <span "
122 "class=\"html-tag\"><textarea></span></td></tr><tr><td "
123 "class=\"line-number\" value=\"15\"></td><td class=\"line-content\"> "
124 " <testtextarea></td></tr><tr><td class=\"line-number\" "
125 "value=\"16\"></td><td class=\"line-content\"> <span "
126 "class=\"html-tag\"></textarea></span></td></tr><tr><td "
127 "class=\"line-number\" value=\"17\"></td><td class=\"line-content\"> "
128 "<span "
129 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
130 "html>");
131 }
132
TEST_F(HTMLViewSourceDocumentTest,ViewSource3)133 TEST_F(HTMLViewSourceDocumentTest, ViewSource3) {
134 LoadMainResource(R"HTML(
135 <head><base href="http://example.org/foo/"></head>
136 <body>
137 <a href="bar">http://example.org/foo/bar</a><br>
138 <a href="/bar">http://example.org/bar</a><br>
139 <a href="http://example.org/foobar">http://example.org/foobar</a><br>
140 <a href="bar?a&b">http://example.org/foo/bar?a&b</a>
141 </body>
142 )HTML");
143 EXPECT_EQ(
144 GetDocument().documentElement()->outerHTML(),
145 "<html><head></head><body><div "
146 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
147 "class=\"line-number\" value=\"1\"></td><td "
148 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
149 "value=\"2\"></td><td class=\"line-content\"> <span "
150 "class=\"html-tag\"><head></span><span class=\"html-tag\"><base "
151 "<span class=\"html-attribute-name\">href</span><base "
152 "href=\"http://example.org/foo/\">=\"<a class=\"html-attribute-value "
153 "html-resource-link\" target=\"_blank\" href=\"http://example.org/foo/\" "
154 "rel=\"noreferrer "
155 "noopener\">http://example.org/foo/</a>\"></span><span "
156 "class=\"html-tag\"></head></span></td></tr><tr><td "
157 "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> "
158 "<span class=\"html-tag\"><body></span></td></tr><tr><td "
159 "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> "
160 "<span class=\"html-tag\"><a <span "
161 "class=\"html-attribute-name\">href</span>=\"<a "
162 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
163 "href=\"bar\" rel=\"noreferrer "
164 "noopener\">bar</a>\"></span>http://example.org/foo/bar<span "
165 "class=\"html-tag\"></a></span><span "
166 "class=\"html-tag\"><br></span></td></tr><tr><td "
167 "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> "
168 "<span class=\"html-tag\"><a <span "
169 "class=\"html-attribute-name\">href</span>=\"<a "
170 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
171 "href=\"/bar\" rel=\"noreferrer "
172 "noopener\">/bar</a>\"></span>http://example.org/bar<span "
173 "class=\"html-tag\"></a></span><span "
174 "class=\"html-tag\"><br></span></td></tr><tr><td "
175 "class=\"line-number\" value=\"6\"></td><td class=\"line-content\"> "
176 "<span class=\"html-tag\"><a <span "
177 "class=\"html-attribute-name\">href</span>=\"<a "
178 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
179 "href=\"http://example.org/foobar\" rel=\"noreferrer "
180 "noopener\">http://example.org/foobar</a>\"></span>http://example.org/"
181 "foobar<span class=\"html-tag\"></a></span><span "
182 "class=\"html-tag\"><br></span></td></tr><tr><td "
183 "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> "
184 "<span class=\"html-tag\"><a <span "
185 "class=\"html-attribute-name\">href</span>=\"<a "
186 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
187 "href=\"bar?a&b\" rel=\"noreferrer "
188 "noopener\">bar?a&amp;b</a>\"></span>http://example.org/foo/"
189 "bar?a&b<span class=\"html-tag\"></a></span></td></tr><tr><td "
190 "class=\"line-number\" value=\"8\"></td><td class=\"line-content\"> "
191 "<span class=\"html-tag\"></body></span></td></tr><tr><td "
192 "class=\"line-number\" value=\"9\"></td><td class=\"line-content\"> "
193 "<span "
194 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
195 "html>");
196 }
197
TEST_F(HTMLViewSourceDocumentTest,ViewSource4)198 TEST_F(HTMLViewSourceDocumentTest, ViewSource4) {
199 LoadMainResource(R"HTML(
200 <HEAD><BASE HREF="http://example.org/foo/"></HEAD>
201 <BODY>
202 <A HREF="bar">http://example.org/foo/bar</A><BR>
203 <A HREF="/bar">http://example.org/bar</A><BR>
204 <A HREF="http://example.org/foobar">http://example.org/foobar</A><BR>
205 <A HREF="bar?a&b">http://example.org/foo/bar?a&b</A>
206 </BODY>
207 )HTML");
208 EXPECT_EQ(
209 GetDocument().documentElement()->outerHTML(),
210 "<html><head></head><body><div "
211 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
212 "class=\"line-number\" value=\"1\"></td><td "
213 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
214 "value=\"2\"></td><td class=\"line-content\"> <span "
215 "class=\"html-tag\"><HEAD></span><span class=\"html-tag\"><BASE "
216 "<span class=\"html-attribute-name\">HREF</span><base "
217 "href=\"http://example.org/foo/\">=\"<a class=\"html-attribute-value "
218 "html-resource-link\" target=\"_blank\" href=\"http://example.org/foo/\" "
219 "rel=\"noreferrer "
220 "noopener\">http://example.org/foo/</a>\"></span><span "
221 "class=\"html-tag\"></HEAD></span></td></tr><tr><td "
222 "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> "
223 "<span class=\"html-tag\"><BODY></span></td></tr><tr><td "
224 "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> "
225 "<span class=\"html-tag\"><A <span "
226 "class=\"html-attribute-name\">HREF</span>=\"<a "
227 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
228 "href=\"bar\" rel=\"noreferrer "
229 "noopener\">bar</a>\"></span>http://example.org/foo/bar<span "
230 "class=\"html-tag\"></A></span><span "
231 "class=\"html-tag\"><BR></span></td></tr><tr><td "
232 "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> "
233 "<span class=\"html-tag\"><A <span "
234 "class=\"html-attribute-name\">HREF</span>=\"<a "
235 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
236 "href=\"/bar\" rel=\"noreferrer "
237 "noopener\">/bar</a>\"></span>http://example.org/bar<span "
238 "class=\"html-tag\"></A></span><span "
239 "class=\"html-tag\"><BR></span></td></tr><tr><td "
240 "class=\"line-number\" value=\"6\"></td><td class=\"line-content\"> "
241 "<span class=\"html-tag\"><A <span "
242 "class=\"html-attribute-name\">HREF</span>=\"<a "
243 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
244 "href=\"http://example.org/foobar\" rel=\"noreferrer "
245 "noopener\">http://example.org/foobar</a>\"></span>http://example.org/"
246 "foobar<span class=\"html-tag\"></A></span><span "
247 "class=\"html-tag\"><BR></span></td></tr><tr><td "
248 "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> "
249 "<span class=\"html-tag\"><A <span "
250 "class=\"html-attribute-name\">HREF</span>=\"<a "
251 "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
252 "href=\"bar?a&b\" rel=\"noreferrer "
253 "noopener\">bar?a&amp;b</a>\"></span>http://example.org/foo/"
254 "bar?a&b<span class=\"html-tag\"></A></span></td></tr><tr><td "
255 "class=\"line-number\" value=\"8\"></td><td class=\"line-content\"> "
256 "<span class=\"html-tag\"></BODY></span></td></tr><tr><td "
257 "class=\"line-number\" value=\"9\"></td><td class=\"line-content\"> "
258 "<span "
259 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
260 "html>");
261 }
262
TEST_F(HTMLViewSourceDocumentTest,ViewSource5)263 TEST_F(HTMLViewSourceDocumentTest, ViewSource5) {
264 LoadMainResource(R"HTML(
265
266
267 <p>
268
269 <input
270
271
272 type="text">
273 </p>
274
275 )HTML");
276 EXPECT_EQ(
277 GetDocument().documentElement()->outerHTML(),
278 "<html><head></head><body><div "
279 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
280 "class=\"line-number\" value=\"1\"></td><td "
281 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
282 "value=\"2\"></td><td class=\"line-content\"><br></td></tr><tr><td "
283 "class=\"line-number\" value=\"3\"></td><td "
284 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
285 "value=\"4\"></td><td class=\"line-content\"> <span "
286 "class=\"html-tag\"><p></span></td></tr><tr><td "
287 "class=\"line-number\" value=\"5\"></td><td "
288 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
289 "value=\"6\"></td><td class=\"line-content\"> <span "
290 "class=\"html-tag\"><input</span></td></tr><tr><td "
291 "class=\"line-number\" value=\"7\"></td><td "
292 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
293 "value=\"8\"></td><td class=\"line-content\"><br></td></tr><tr><td "
294 "class=\"line-number\" value=\"9\"></td><td class=\"line-content\"> "
295 "<span class=\"html-attribute-name\">type</span>=\"<span "
296 "class=\"html-attribute-value\">text</span>\"></td></tr><tr><td "
297 "class=\"line-number\" value=\"10\"></td><td class=\"line-content\"> "
298 " <span class=\"html-tag\"></p></span></td></tr><tr><td "
299 "class=\"line-number\" value=\"11\"></td><td "
300 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
301 "value=\"12\"></td><td class=\"line-content\"> <span "
302 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
303 "html>");
304 }
305
TEST_F(HTMLViewSourceDocumentTest,ViewSource6)306 TEST_F(HTMLViewSourceDocumentTest, ViewSource6) {
307 std::string many_spaces(32760, ' ');
308 LoadMainResource((many_spaces + std::string(" <b>A</b> ")).c_str());
309 std::string expected_beginning(
310 "<html><head></head><body><div "
311 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
312 "class=\"line-number\" value=\"1\"></td><td class=\"line-content\"> "
313 " ");
314 std::string expected_ending(
315 " <span class=\"html-tag\"><b></span>A<span "
316 "class=\"html-tag\"></b></span> <span "
317 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
318 "html>");
319 EXPECT_EQ(GetDocument().documentElement()->outerHTML(),
320 (expected_beginning + many_spaces + expected_ending).c_str());
321 }
322
TEST_F(HTMLViewSourceDocumentTest,ViewSource7)323 TEST_F(HTMLViewSourceDocumentTest, ViewSource7) {
324 LoadMainResource("1234567");
325 EXPECT_EQ(GetDocument().documentElement()->outerHTML(),
326 "<html><head></head><body><div "
327 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
328 "class=\"line-number\" value=\"1\"></td><td "
329 "class=\"line-content\">1234567<span "
330 "class=\"html-end-of-file\"></span></td></tr></tbody></table></"
331 "body></html>");
332 }
333
TEST_F(HTMLViewSourceDocumentTest,ViewSource8)334 TEST_F(HTMLViewSourceDocumentTest, ViewSource8) {
335 LoadMainResource(R"HTML(
336 <!DOCTYPE html>
337 <html>
338 <body>
339 <img src="img.png" />
340 <img srcset="img.png, img2.png" />
341 <img src="img.png" srcset="img.png 1x, img2.png 2x, img3.png 3x" />
342 <img srcset="img.png 480w, img2.png 640w, img3.png 1024w" />
343 </body>
344 </html>
345 )HTML");
346 EXPECT_EQ(
347 GetDocument().documentElement()->outerHTML(),
348 "<html><head></head><body><div "
349 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
350 "class=\"line-number\" value=\"1\"></td><td "
351 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
352 "value=\"2\"></td><td class=\"line-content\"> <span "
353 "class=\"html-doctype\"><!DOCTYPE html></span></td></tr><tr><td "
354 "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> "
355 "<span class=\"html-tag\"><html></span></td></tr><tr><td "
356 "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> "
357 "<span class=\"html-tag\"><body></span></td></tr><tr><td "
358 "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> "
359 "<span class=\"html-tag\"><img <span "
360 "class=\"html-attribute-name\">src</span>=\"<a "
361 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
362 "href=\"img.png\" rel=\"noreferrer noopener\">img.png</a>\" "
363 "/></span></td></tr><tr><td class=\"line-number\" "
364 "value=\"6\"></td><td class=\"line-content\"> <span "
365 "class=\"html-tag\"><img <span "
366 "class=\"html-attribute-name\">srcset</span>=\"<a "
367 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
368 "href=\"img.png\" rel=\"noreferrer noopener\">img.png</a>,<a "
369 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
370 "href=\"img2.png\" rel=\"noreferrer noopener\"> img2.png</a>\" "
371 "/></span></td></tr><tr><td class=\"line-number\" "
372 "value=\"7\"></td><td class=\"line-content\"> <span "
373 "class=\"html-tag\"><img <span "
374 "class=\"html-attribute-name\">src</span>=\"<a "
375 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
376 "href=\"img.png\" rel=\"noreferrer noopener\">img.png</a>\" <span "
377 "class=\"html-attribute-name\">srcset</span>=\"<a "
378 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
379 "href=\"img.png\" rel=\"noreferrer noopener\">img.png 1x</a>,<a "
380 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
381 "href=\"img2.png\" rel=\"noreferrer noopener\"> img2.png 2x</a>,<a "
382 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
383 "href=\"img3.png\" rel=\"noreferrer noopener\"> img3.png 3x</a>\" "
384 "/></span></td></tr><tr><td class=\"line-number\" "
385 "value=\"8\"></td><td class=\"line-content\"> <span "
386 "class=\"html-tag\"><img <span "
387 "class=\"html-attribute-name\">srcset</span>=\"<a "
388 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
389 "href=\"img.png\" rel=\"noreferrer noopener\">img.png 480w</a>,<a "
390 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
391 "href=\"img2.png\" rel=\"noreferrer noopener\"> img2.png 640w</a>,<a "
392 "class=\"html-attribute-value html-resource-link\" target=\"_blank\" "
393 "href=\"img3.png\" rel=\"noreferrer noopener\"> img3.png 1024w</a>\" "
394 "/></span></td></tr><tr><td class=\"line-number\" "
395 "value=\"9\"></td><td class=\"line-content\"> <span "
396 "class=\"html-tag\"></body></span></td></tr><tr><td "
397 "class=\"line-number\" value=\"10\"></td><td class=\"line-content\"> "
398 " <span class=\"html-tag\"></html></span></td></tr><tr><td "
399 "class=\"line-number\" value=\"11\"></td><td class=\"line-content\"> "
400 "<span "
401 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
402 "html>");
403 }
404
TEST_F(HTMLViewSourceDocumentTest,ViewSource9)405 TEST_F(HTMLViewSourceDocumentTest, ViewSource9) {
406 LoadMainResource(R"HTML(
407 <!DOCTYPE html>
408 <head>
409 <title>Test</title>
410 <script type="text/javascript">
411 "<!-- --!><script>";
412 )HTML");
413 EXPECT_EQ(
414 GetDocument().documentElement()->outerHTML(),
415 "<html><head></head><body><div "
416 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
417 "class=\"line-number\" value=\"1\"></td><td "
418 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
419 "value=\"2\"></td><td class=\"line-content\"> <span "
420 "class=\"html-doctype\"><!DOCTYPE html></span></td></tr><tr><td "
421 "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> "
422 "<span class=\"html-tag\"><head></span></td></tr><tr><td "
423 "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> "
424 "<span class=\"html-tag\"><title></span>Test<span "
425 "class=\"html-tag\"></title></span></td></tr><tr><td "
426 "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> "
427 "<span class=\"html-tag\"><script <span "
428 "class=\"html-attribute-name\">type</span>=\"<span "
429 "class=\"html-attribute-value\">text/javascript</span>\"></span></"
430 "td></tr><tr><td class=\"line-number\" value=\"6\"></td><td "
431 "class=\"line-content\"> \"<!-- "
432 "--!><script>\";</td></tr><tr><td class=\"line-number\" "
433 "value=\"7\"></td><td class=\"line-content\"> <span "
434 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
435 "html>");
436 }
437
TEST_F(HTMLViewSourceDocumentTest,IncompleteToken)438 TEST_F(HTMLViewSourceDocumentTest, IncompleteToken) {
439 LoadMainResource(R"HTML(
440 Incomplete token test
441 text <h1 there! This text will never make it into a token.
442 But it should be in view-source.
443 )HTML");
444 EXPECT_EQ(
445 GetDocument().documentElement()->outerHTML(),
446 "<html><head></head><body><div "
447 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
448 "class=\"line-number\" value=\"1\"></td><td "
449 "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" "
450 "value=\"2\"></td><td class=\"line-content\"> Incomplete token "
451 "test</td></tr><tr><td class=\"line-number\" value=\"3\"></td><td "
452 "class=\"line-content\"> text <span "
453 "class=\"html-end-of-file\"><h1 there! This text will never make it "
454 "into a token.</span></td></tr><tr><td class=\"line-number\" "
455 "value=\"4\"></td><td class=\"line-content\"><span "
456 "class=\"html-end-of-file\"> But it should be in "
457 "view-source.</span></td></tr><tr><td class=\"line-number\" "
458 "value=\"5\"></td><td class=\"line-content\"><span "
459 "class=\"html-end-of-file\"> "
460 "</span></td></tr></tbody></table></body></html>");
461 }
462
TEST_F(HTMLViewSourceDocumentTest,UnfinishedTextarea)463 TEST_F(HTMLViewSourceDocumentTest, UnfinishedTextarea) {
464 LoadMainResource(R"HTML(<textarea>foobar in textarea
465 )HTML");
466 EXPECT_EQ(
467 GetDocument().documentElement()->outerHTML(),
468 "<html><head></head><body><div "
469 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
470 "class=\"line-number\" value=\"1\"></td><td class=\"line-content\"><span "
471 "class=\"html-tag\"><textarea></span>foobar in "
472 "textarea</td></tr><tr><td class=\"line-number\" value=\"2\"></td><td "
473 "class=\"line-content\"> <span "
474 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
475 "html>");
476 }
477
TEST_F(HTMLViewSourceDocumentTest,UnfinishedScript)478 TEST_F(HTMLViewSourceDocumentTest, UnfinishedScript) {
479 LoadMainResource(R"HTML(<script>foobar in script
480 )HTML");
481 EXPECT_EQ(
482 GetDocument().documentElement()->outerHTML(),
483 "<html><head></head><body><div "
484 "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td "
485 "class=\"line-number\" value=\"1\"></td><td class=\"line-content\"><span "
486 "class=\"html-tag\"><script></span>foobar in "
487 "script</td></tr><tr><td class=\"line-number\" value=\"2\"></td><td "
488 "class=\"line-content\"> <span "
489 "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></"
490 "html>");
491 }
492
493 } // namespace blink
494