| // Copyright 2020 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "third_party/blink/renderer/core/html/html_view_source_document.h" |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" |
| #include "third_party/blink/renderer/core/testing/sim/sim_request.h" |
| #include "third_party/blink/renderer/core/testing/sim/sim_test.h" |
| |
| namespace blink { |
| |
| class HTMLViewSourceDocumentTest : public SimTest { |
| public: |
| void LoadMainResource(const String& html) { |
| SimRequest main_resource("https://example.com/", "text/html"); |
| LoadURL("https://example.com/"); |
| main_resource.Complete(html); |
| Compositor().BeginFrame(); |
| } |
| |
| void SetUp() override { |
| SimTest::SetUp(); |
| MainFrame().EnableViewSourceMode(true); |
| } |
| }; |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource1) { |
| LoadMainResource(R"HTML( |
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
| "http://www.w3.org/TR/html4/strict.dtd"> |
| <hr noshade width=75%> |
| <div align="center" title="" id="foo"> |
| <p>hello world</p> |
| </div> |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"> <span " |
| "class=\"html-doctype\"><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML " |
| "4.01//EN\"</span></td></tr><tr><td class=\"line-number\" " |
| "value=\"3\"></td><td class=\"line-content\"><span " |
| "class=\"html-doctype\"> " |
| "\"http://www.w3.org/TR/html4/strict.dtd\"></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><hr <span " |
| "class=\"html-attribute-name\">noshade</span> <span " |
| "class=\"html-attribute-name\">width</span>=<span " |
| "class=\"html-attribute-value\">75%</span>></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><div <span " |
| "class=\"html-attribute-name\">align</span>=\"<span " |
| "class=\"html-attribute-value\">center</span>\" <span " |
| "class=\"html-attribute-name\">title</span>=\"\" <span " |
| "class=\"html-attribute-name\">id</span>=\"<span " |
| "class=\"html-attribute-value\">foo</span>\"></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"6\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><p></span>hello world<span " |
| "class=\"html-tag\"></p></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"></div></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"8\"></td><td class=\"line-content\"> " |
| "<span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource2) { |
| LoadMainResource(R"HTML( |
| <script> |
| <testscript> |
| </script> |
| |
| <style> |
| <teststyle> |
| </style> |
| |
| <xmp> |
| <testxmp> |
| </xmp> |
| |
| <textarea> |
| <testtextarea> |
| </textarea> |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><script></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> " |
| "<testscript></td></tr><tr><td class=\"line-number\" " |
| "value=\"4\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"></script></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"5\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"6\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><style></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> " |
| "<teststyle></td></tr><tr><td class=\"line-number\" " |
| "value=\"8\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"></style></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"9\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"10\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><xmp></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"11\"></td><td class=\"line-content\"> " |
| " <testxmp></td></tr><tr><td class=\"line-number\" " |
| "value=\"12\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"></xmp></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"13\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"14\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><textarea></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"15\"></td><td class=\"line-content\"> " |
| " <testtextarea></td></tr><tr><td class=\"line-number\" " |
| "value=\"16\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"></textarea></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"17\"></td><td class=\"line-content\"> " |
| "<span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource3) { |
| LoadMainResource(R"HTML( |
| <head><base href="http://example.org/foo/"></head> |
| <body> |
| <a href="bar">http://example.org/foo/bar</a><br> |
| <a href="/bar">http://example.org/bar</a><br> |
| <a href="http://example.org/foobar">http://example.org/foobar</a><br> |
| <a href="bar?a&b">http://example.org/foo/bar?a&b</a> |
| </body> |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><head></span><span class=\"html-tag\"><base " |
| "<span class=\"html-attribute-name\">href</span><base " |
| "href=\"http://example.org/foo/\">=\"<a class=\"html-attribute-value " |
| "html-resource-link\" target=\"_blank\" href=\"http://example.org/foo/\" " |
| "rel=\"noreferrer " |
| "noopener\">http://example.org/foo/</a>\"></span><span " |
| "class=\"html-tag\"></head></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><body></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><a <span " |
| "class=\"html-attribute-name\">href</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"bar\" rel=\"noreferrer " |
| "noopener\">bar</a>\"></span>http://example.org/foo/bar<span " |
| "class=\"html-tag\"></a></span><span " |
| "class=\"html-tag\"><br></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><a <span " |
| "class=\"html-attribute-name\">href</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"/bar\" rel=\"noreferrer " |
| "noopener\">/bar</a>\"></span>http://example.org/bar<span " |
| "class=\"html-tag\"></a></span><span " |
| "class=\"html-tag\"><br></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"6\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><a <span " |
| "class=\"html-attribute-name\">href</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"http://example.org/foobar\" rel=\"noreferrer " |
| "noopener\">http://example.org/foobar</a>\"></span>http://example.org/" |
| "foobar<span class=\"html-tag\"></a></span><span " |
| "class=\"html-tag\"><br></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><a <span " |
| "class=\"html-attribute-name\">href</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"bar?a&b\" rel=\"noreferrer " |
| "noopener\">bar?a&amp;b</a>\"></span>http://example.org/foo/" |
| "bar?a&b<span class=\"html-tag\"></a></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"8\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"></body></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"9\"></td><td class=\"line-content\"> " |
| "<span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource4) { |
| LoadMainResource(R"HTML( |
| <HEAD><BASE HREF="http://example.org/foo/"></HEAD> |
| <BODY> |
| <A HREF="bar">http://example.org/foo/bar</A><BR> |
| <A HREF="/bar">http://example.org/bar</A><BR> |
| <A HREF="http://example.org/foobar">http://example.org/foobar</A><BR> |
| <A HREF="bar?a&b">http://example.org/foo/bar?a&b</A> |
| </BODY> |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><HEAD></span><span class=\"html-tag\"><BASE " |
| "<span class=\"html-attribute-name\">HREF</span><base " |
| "href=\"http://example.org/foo/\">=\"<a class=\"html-attribute-value " |
| "html-resource-link\" target=\"_blank\" href=\"http://example.org/foo/\" " |
| "rel=\"noreferrer " |
| "noopener\">http://example.org/foo/</a>\"></span><span " |
| "class=\"html-tag\"></HEAD></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><BODY></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><A <span " |
| "class=\"html-attribute-name\">HREF</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"bar\" rel=\"noreferrer " |
| "noopener\">bar</a>\"></span>http://example.org/foo/bar<span " |
| "class=\"html-tag\"></A></span><span " |
| "class=\"html-tag\"><BR></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><A <span " |
| "class=\"html-attribute-name\">HREF</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"/bar\" rel=\"noreferrer " |
| "noopener\">/bar</a>\"></span>http://example.org/bar<span " |
| "class=\"html-tag\"></A></span><span " |
| "class=\"html-tag\"><BR></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"6\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><A <span " |
| "class=\"html-attribute-name\">HREF</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"http://example.org/foobar\" rel=\"noreferrer " |
| "noopener\">http://example.org/foobar</a>\"></span>http://example.org/" |
| "foobar<span class=\"html-tag\"></A></span><span " |
| "class=\"html-tag\"><BR></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"7\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><A <span " |
| "class=\"html-attribute-name\">HREF</span>=\"<a " |
| "class=\"html-attribute-value html-external-link\" target=\"_blank\" " |
| "href=\"bar?a&b\" rel=\"noreferrer " |
| "noopener\">bar?a&amp;b</a>\"></span>http://example.org/foo/" |
| "bar?a&b<span class=\"html-tag\"></A></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"8\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"></BODY></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"9\"></td><td class=\"line-content\"> " |
| "<span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource5) { |
| LoadMainResource(R"HTML( |
| |
| |
| <p> |
| |
| <input |
| |
| |
| type="text"> |
| </p> |
| |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"><br></td></tr><tr><td " |
| "class=\"line-number\" value=\"3\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"4\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><p></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"5\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"6\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><input</span></td></tr><tr><td " |
| "class=\"line-number\" value=\"7\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"8\"></td><td class=\"line-content\"><br></td></tr><tr><td " |
| "class=\"line-number\" value=\"9\"></td><td class=\"line-content\"> " |
| "<span class=\"html-attribute-name\">type</span>=\"<span " |
| "class=\"html-attribute-value\">text</span>\"></td></tr><tr><td " |
| "class=\"line-number\" value=\"10\"></td><td class=\"line-content\"> " |
| " <span class=\"html-tag\"></p></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"11\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"12\"></td><td class=\"line-content\"> <span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource6) { |
| std::string many_spaces(32760, ' '); |
| LoadMainResource((many_spaces + std::string(" <b>A</b> ")).c_str()); |
| std::string expected_beginning( |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\">" |
| "</td><td class=\"line-content\"> "); |
| std::string expected_ending( |
| " <span class=\"html-tag\"><b></span>A<span " |
| "class=\"html-tag\"></b></span> <span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| EXPECT_EQ(GetDocument().documentElement()->outerHTML(), |
| (expected_beginning + many_spaces + expected_ending).c_str()); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource7) { |
| LoadMainResource("1234567"); |
| EXPECT_EQ(GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\">1234567<span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></" |
| "body></html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource8) { |
| LoadMainResource(R"HTML( |
| <!DOCTYPE html> |
| <html> |
| <body> |
| <img src="img.png" /> |
| <img srcset="img.png, img2.png" /> |
| <img src="img.png" srcset="img.png 1x, img2.png 2x, img3.png 3x" /> |
| <img srcset="img.png 480w, img2.png 640w, img3.png 1024w" /> |
| </body> |
| </html> |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form></td></tr>" |
| "<tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"> <span " |
| "class=\"html-doctype\"><!DOCTYPE html></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><html></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><body></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><img <span " |
| "class=\"html-attribute-name\">src</span>=\"<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img.png\" rel=\"noreferrer noopener\">img.png</a>\" " |
| "/></span></td></tr><tr><td class=\"line-number\" " |
| "value=\"6\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><img <span " |
| "class=\"html-attribute-name\">srcset</span>=\"<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img.png\" rel=\"noreferrer noopener\">img.png</a>,<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img2.png\" rel=\"noreferrer noopener\"> img2.png</a>\" " |
| "/></span></td></tr><tr><td class=\"line-number\" " |
| "value=\"7\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><img <span " |
| "class=\"html-attribute-name\">src</span>=\"<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img.png\" rel=\"noreferrer noopener\">img.png</a>\" <span " |
| "class=\"html-attribute-name\">srcset</span>=\"<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img.png\" rel=\"noreferrer noopener\">img.png 1x</a>,<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img2.png\" rel=\"noreferrer noopener\"> img2.png 2x</a>,<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img3.png\" rel=\"noreferrer noopener\"> img3.png 3x</a>\" " |
| "/></span></td></tr><tr><td class=\"line-number\" " |
| "value=\"8\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"><img <span " |
| "class=\"html-attribute-name\">srcset</span>=\"<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img.png\" rel=\"noreferrer noopener\">img.png 480w</a>,<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img2.png\" rel=\"noreferrer noopener\"> img2.png 640w</a>,<a " |
| "class=\"html-attribute-value html-resource-link\" target=\"_blank\" " |
| "href=\"img3.png\" rel=\"noreferrer noopener\"> img3.png 1024w</a>\" " |
| "/></span></td></tr><tr><td class=\"line-number\" " |
| "value=\"9\"></td><td class=\"line-content\"> <span " |
| "class=\"html-tag\"></body></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"10\"></td><td class=\"line-content\"> " |
| " <span class=\"html-tag\"></html></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"11\"></td><td class=\"line-content\"> " |
| "<span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, ViewSource9) { |
| LoadMainResource(R"HTML( |
| <!DOCTYPE html> |
| <head> |
| <title>Test</title> |
| <script type="text/javascript"> |
| "<!-- --!><script>"; |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"> <span " |
| "class=\"html-doctype\"><!DOCTYPE html></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"3\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><head></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"4\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><title></span>Test<span " |
| "class=\"html-tag\"></title></span></td></tr><tr><td " |
| "class=\"line-number\" value=\"5\"></td><td class=\"line-content\"> " |
| "<span class=\"html-tag\"><script <span " |
| "class=\"html-attribute-name\">type</span>=\"<span " |
| "class=\"html-attribute-value\">text/javascript</span>\"></span></" |
| "td></tr><tr><td class=\"line-number\" value=\"6\"></td><td " |
| "class=\"line-content\"> \"<!-- " |
| "--!><script>\";</td></tr><tr><td class=\"line-number\" " |
| "value=\"7\"></td><td class=\"line-content\"> <span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, IncompleteToken) { |
| LoadMainResource(R"HTML( |
| Incomplete token test |
| text <h1 there! This text will never make it into a token. |
| But it should be in view-source. |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td><td " |
| "class=\"line-content\"><br></td></tr><tr><td class=\"line-number\" " |
| "value=\"2\"></td><td class=\"line-content\"> Incomplete token " |
| "test</td></tr><tr><td class=\"line-number\" value=\"3\"></td><td " |
| "class=\"line-content\"> text <span " |
| "class=\"html-end-of-file\"><h1 there! This text will never make it " |
| "into a token.</span></td></tr><tr><td class=\"line-number\" " |
| "value=\"4\"></td><td class=\"line-content\"><span " |
| "class=\"html-end-of-file\"> But it should be in " |
| "view-source.</span></td></tr><tr><td class=\"line-number\" " |
| "value=\"5\"></td><td class=\"line-content\"><span " |
| "class=\"html-end-of-file\"> " |
| "</span></td></tr></tbody></table></body></html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, UnfinishedTextarea) { |
| LoadMainResource(R"HTML(<textarea>foobar in textarea |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td>" |
| "<td class=\"line-content\"><span " |
| "class=\"html-tag\"><textarea></span>foobar in " |
| "textarea</td></tr><tr><td class=\"line-number\" value=\"2\"></td><td " |
| "class=\"line-content\"> <span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| TEST_F(HTMLViewSourceDocumentTest, UnfinishedScript) { |
| LoadMainResource(R"HTML(<script>foobar in script |
| )HTML"); |
| EXPECT_EQ( |
| GetDocument().documentElement()->outerHTML(), |
| "<html><head></head><body><div " |
| "class=\"line-gutter-backdrop\"></div><table><tbody><tr><td " |
| "colspan=\"2\" class=\"line-wrap-cell\"><form " |
| "autocomplete=\"off\"><label " |
| "class=\"line-wrap-control\"><input " |
| "type=\"checkbox\"></label></form>" |
| "</td></tr><tr><td class=\"line-number\" value=\"1\"></td>" |
| "<td class=\"line-content\"><span " |
| "class=\"html-tag\"><script></span>foobar in " |
| "script</td></tr><tr><td class=\"line-number\" value=\"2\"></td><td " |
| "class=\"line-content\"> <span " |
| "class=\"html-end-of-file\"></span></td></tr></tbody></table></body></" |
| "html>"); |
| } |
| |
| } // namespace blink |