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\">&lt;!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\"&gt;</span></td></tr><tr><td "
50       "class=\"line-number\" value=\"4\"></td><td class=\"line-content\">      "
51       "<span class=\"html-tag\">&lt;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>&gt;</span></td></tr><tr><td "
55       "class=\"line-number\" value=\"5\"></td><td class=\"line-content\">      "
56       "<span class=\"html-tag\">&lt;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>\"&gt;</span></td></tr><tr><td "
62       "class=\"line-number\" value=\"6\"></td><td class=\"line-content\">      "
63       "<span class=\"html-tag\">&lt;p&gt;</span>hello world<span "
64       "class=\"html-tag\">&lt;/p&gt;</span></td></tr><tr><td "
65       "class=\"line-number\" value=\"7\"></td><td class=\"line-content\">      "
66       "<span class=\"html-tag\">&lt;/div&gt;</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\">&lt;script&gt;</span></td></tr><tr><td "
99       "class=\"line-number\" value=\"3\"></td><td class=\"line-content\">      "
100       "&lt;testscript&gt;</td></tr><tr><td class=\"line-number\" "
101       "value=\"4\"></td><td class=\"line-content\">      <span "
102       "class=\"html-tag\">&lt;/script&gt;</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\">&lt;style&gt;</span></td></tr><tr><td "
107       "class=\"line-number\" value=\"7\"></td><td class=\"line-content\">      "
108       "&lt;teststyle&gt;</td></tr><tr><td class=\"line-number\" "
109       "value=\"8\"></td><td class=\"line-content\">      <span "
110       "class=\"html-tag\">&lt;/style&gt;</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\">&lt;xmp&gt;</span></td></tr><tr><td "
115       "class=\"line-number\" value=\"11\"></td><td class=\"line-content\">     "
116       " &lt;testxmp&gt;</td></tr><tr><td class=\"line-number\" "
117       "value=\"12\"></td><td class=\"line-content\">      <span "
118       "class=\"html-tag\">&lt;/xmp&gt;</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\">&lt;textarea&gt;</span></td></tr><tr><td "
123       "class=\"line-number\" value=\"15\"></td><td class=\"line-content\">     "
124       " &lt;testtextarea&gt;</td></tr><tr><td class=\"line-number\" "
125       "value=\"16\"></td><td class=\"line-content\">      <span "
126       "class=\"html-tag\">&lt;/textarea&gt;</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&amp;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\">&lt;head&gt;</span><span class=\"html-tag\">&lt;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>\"&gt;</span><span "
156       "class=\"html-tag\">&lt;/head&gt;</span></td></tr><tr><td "
157       "class=\"line-number\" value=\"3\"></td><td class=\"line-content\">      "
158       "<span class=\"html-tag\">&lt;body&gt;</span></td></tr><tr><td "
159       "class=\"line-number\" value=\"4\"></td><td class=\"line-content\">      "
160       "<span class=\"html-tag\">&lt;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>\"&gt;</span>http://example.org/foo/bar<span "
165       "class=\"html-tag\">&lt;/a&gt;</span><span "
166       "class=\"html-tag\">&lt;br&gt;</span></td></tr><tr><td "
167       "class=\"line-number\" value=\"5\"></td><td class=\"line-content\">      "
168       "<span class=\"html-tag\">&lt;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>\"&gt;</span>http://example.org/bar<span "
173       "class=\"html-tag\">&lt;/a&gt;</span><span "
174       "class=\"html-tag\">&lt;br&gt;</span></td></tr><tr><td "
175       "class=\"line-number\" value=\"6\"></td><td class=\"line-content\">      "
176       "<span class=\"html-tag\">&lt;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>\"&gt;</span>http://example.org/"
181       "foobar<span class=\"html-tag\">&lt;/a&gt;</span><span "
182       "class=\"html-tag\">&lt;br&gt;</span></td></tr><tr><td "
183       "class=\"line-number\" value=\"7\"></td><td class=\"line-content\">      "
184       "<span class=\"html-tag\">&lt;a <span "
185       "class=\"html-attribute-name\">href</span>=\"<a "
186       "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
187       "href=\"bar?a&amp;b\" rel=\"noreferrer "
188       "noopener\">bar?a&amp;amp;b</a>\"&gt;</span>http://example.org/foo/"
189       "bar?a&amp;b<span class=\"html-tag\">&lt;/a&gt;</span></td></tr><tr><td "
190       "class=\"line-number\" value=\"8\"></td><td class=\"line-content\">      "
191       "<span class=\"html-tag\">&lt;/body&gt;</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&amp;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\">&lt;HEAD&gt;</span><span class=\"html-tag\">&lt;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>\"&gt;</span><span "
221       "class=\"html-tag\">&lt;/HEAD&gt;</span></td></tr><tr><td "
222       "class=\"line-number\" value=\"3\"></td><td class=\"line-content\">      "
223       "<span class=\"html-tag\">&lt;BODY&gt;</span></td></tr><tr><td "
224       "class=\"line-number\" value=\"4\"></td><td class=\"line-content\">      "
225       "<span class=\"html-tag\">&lt;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>\"&gt;</span>http://example.org/foo/bar<span "
230       "class=\"html-tag\">&lt;/A&gt;</span><span "
231       "class=\"html-tag\">&lt;BR&gt;</span></td></tr><tr><td "
232       "class=\"line-number\" value=\"5\"></td><td class=\"line-content\">      "
233       "<span class=\"html-tag\">&lt;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>\"&gt;</span>http://example.org/bar<span "
238       "class=\"html-tag\">&lt;/A&gt;</span><span "
239       "class=\"html-tag\">&lt;BR&gt;</span></td></tr><tr><td "
240       "class=\"line-number\" value=\"6\"></td><td class=\"line-content\">      "
241       "<span class=\"html-tag\">&lt;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>\"&gt;</span>http://example.org/"
246       "foobar<span class=\"html-tag\">&lt;/A&gt;</span><span "
247       "class=\"html-tag\">&lt;BR&gt;</span></td></tr><tr><td "
248       "class=\"line-number\" value=\"7\"></td><td class=\"line-content\">      "
249       "<span class=\"html-tag\">&lt;A <span "
250       "class=\"html-attribute-name\">HREF</span>=\"<a "
251       "class=\"html-attribute-value html-external-link\" target=\"_blank\" "
252       "href=\"bar?a&amp;b\" rel=\"noreferrer "
253       "noopener\">bar?a&amp;amp;b</a>\"&gt;</span>http://example.org/foo/"
254       "bar?a&amp;b<span class=\"html-tag\">&lt;/A&gt;</span></td></tr><tr><td "
255       "class=\"line-number\" value=\"8\"></td><td class=\"line-content\">      "
256       "<span class=\"html-tag\">&lt;/BODY&gt;</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\">&lt;p&gt;</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\">&lt;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>\"&gt;</td></tr><tr><td "
297       "class=\"line-number\" value=\"10\"></td><td class=\"line-content\">     "
298       " <span class=\"html-tag\">&lt;/p&gt;</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\">&lt;b&gt;</span>A<span "
316       "class=\"html-tag\">&lt;/b&gt;</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\">&lt;!DOCTYPE html&gt;</span></td></tr><tr><td "
354       "class=\"line-number\" value=\"3\"></td><td class=\"line-content\">      "
355       "<span class=\"html-tag\">&lt;html&gt;</span></td></tr><tr><td "
356       "class=\"line-number\" value=\"4\"></td><td class=\"line-content\">      "
357       "<span class=\"html-tag\">&lt;body&gt;</span></td></tr><tr><td "
358       "class=\"line-number\" value=\"5\"></td><td class=\"line-content\">      "
359       "<span class=\"html-tag\">&lt;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       "/&gt;</span></td></tr><tr><td class=\"line-number\" "
364       "value=\"6\"></td><td class=\"line-content\">      <span "
365       "class=\"html-tag\">&lt;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       "/&gt;</span></td></tr><tr><td class=\"line-number\" "
372       "value=\"7\"></td><td class=\"line-content\">      <span "
373       "class=\"html-tag\">&lt;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       "/&gt;</span></td></tr><tr><td class=\"line-number\" "
385       "value=\"8\"></td><td class=\"line-content\">      <span "
386       "class=\"html-tag\">&lt;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       "/&gt;</span></td></tr><tr><td class=\"line-number\" "
395       "value=\"9\"></td><td class=\"line-content\">      <span "
396       "class=\"html-tag\">&lt;/body&gt;</span></td></tr><tr><td "
397       "class=\"line-number\" value=\"10\"></td><td class=\"line-content\">     "
398       " <span class=\"html-tag\">&lt;/html&gt;</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\">&lt;!DOCTYPE html&gt;</span></td></tr><tr><td "
421       "class=\"line-number\" value=\"3\"></td><td class=\"line-content\">      "
422       "<span class=\"html-tag\">&lt;head&gt;</span></td></tr><tr><td "
423       "class=\"line-number\" value=\"4\"></td><td class=\"line-content\">      "
424       "<span class=\"html-tag\">&lt;title&gt;</span>Test<span "
425       "class=\"html-tag\">&lt;/title&gt;</span></td></tr><tr><td "
426       "class=\"line-number\" value=\"5\"></td><td class=\"line-content\">      "
427       "<span class=\"html-tag\">&lt;script <span "
428       "class=\"html-attribute-name\">type</span>=\"<span "
429       "class=\"html-attribute-value\">text/javascript</span>\"&gt;</span></"
430       "td></tr><tr><td class=\"line-number\" value=\"6\"></td><td "
431       "class=\"line-content\">      \"&lt;!--  "
432       "--!&gt;&lt;script&gt;\";</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\">&lt;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\">&lt;textarea&gt;</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\">&lt;script&gt;</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