| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/strings/stringprintf.h" | 5 #include "base/strings/stringprintf.h" |
| 6 #include "chrome/common/safe_browsing/safebrowsing_messages.h" | 6 #include "chrome/common/safe_browsing/safebrowsing_messages.h" |
| 7 #include "chrome/renderer/safe_browsing/malware_dom_details.h" | 7 #include "chrome/renderer/safe_browsing/threat_dom_details.h" |
| 8 #include "chrome/test/base/chrome_render_view_test.h" | 8 #include "chrome/test/base/chrome_render_view_test.h" |
| 9 #include "net/base/escape.h" | 9 #include "net/base/escape.h" |
| 10 | 10 |
| 11 typedef ChromeRenderViewTest MalwareDOMDetailsTest; | 11 typedef ChromeRenderViewTest ThreatDOMDetailsTest; |
| 12 | 12 |
| 13 | 13 TEST_F(ThreatDOMDetailsTest, Everything) { |
| 14 TEST_F(MalwareDOMDetailsTest, Everything) { | 14 scoped_ptr<safe_browsing::ThreatDOMDetails> details( |
| 15 scoped_ptr<safe_browsing::MalwareDOMDetails> details( | 15 safe_browsing::ThreatDOMDetails::Create(view_)); |
| 16 safe_browsing::MalwareDOMDetails::Create(view_)); | |
| 17 // Lower kMaxNodes for the test. Loading 500 subframes in a | 16 // Lower kMaxNodes for the test. Loading 500 subframes in a |
| 18 // debug build takes a while. | 17 // debug build takes a while. |
| 19 details->kMaxNodes = 50; | 18 details->kMaxNodes = 50; |
| 20 | 19 |
| 21 const char urlprefix[] = "data:text/html;charset=utf-8,"; | 20 const char urlprefix[] = "data:text/html;charset=utf-8,"; |
| 22 | 21 |
| 23 { // An page with an internal script | 22 { // An page with an internal script |
| 24 std::string html = "<html><head><script></script></head></html>"; | 23 std::string html = "<html><head><script></script></head></html>"; |
| 25 LoadHTML(html.c_str()); | 24 LoadHTML(html.c_str()); |
| 26 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 25 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 27 details->ExtractResources(¶ms); | 26 details->ExtractResources(¶ms); |
| 28 ASSERT_EQ(1u, params.size()); | 27 ASSERT_EQ(1u, params.size()); |
| 29 EXPECT_EQ(GURL(urlprefix + html), params[0].url); | 28 EXPECT_EQ(GURL(urlprefix + html), params[0].url); |
| 30 } | 29 } |
| 31 | 30 |
| 32 { // A page with 2 external scripts. | 31 { // A page with 2 external scripts. |
| 33 // Note: This part of the test causes 2 leaks: LEAK: 5 WebCoreNode | 32 // Note: This part of the test causes 2 leaks: LEAK: 5 WebCoreNode |
| 34 // LEAK: 2 CachedResource. | 33 // LEAK: 2 CachedResource. |
| 35 GURL script1_url("data:text/javascript;charset=utf-8,var a=1;"); | 34 GURL script1_url("data:text/javascript;charset=utf-8,var a=1;"); |
| 36 GURL script2_url("data:text/javascript;charset=utf-8,var b=2;"); | 35 GURL script2_url("data:text/javascript;charset=utf-8,var b=2;"); |
| 37 std::string html = "<html><head><script src=\"" + script1_url.spec() + | 36 std::string html = "<html><head><script src=\"" + script1_url.spec() + |
| 38 "\"></script><script src=\"" + script2_url.spec() + | 37 "\"></script><script src=\"" + script2_url.spec() + |
| 39 "\"></script></head></html>"; | 38 "\"></script></head></html>"; |
| 40 GURL url(urlprefix + html); | 39 GURL url(urlprefix + html); |
| 41 | 40 |
| 42 LoadHTML(html.c_str()); | 41 LoadHTML(html.c_str()); |
| 43 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 42 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 44 details->ExtractResources(¶ms); | 43 details->ExtractResources(¶ms); |
| 45 ASSERT_EQ(3u, params.size()); | 44 ASSERT_EQ(3u, params.size()); |
| 46 EXPECT_EQ(script1_url, params[0].url); | 45 EXPECT_EQ(script1_url, params[0].url); |
| 47 EXPECT_EQ("SCRIPT", params[0].tag_name); | 46 EXPECT_EQ("SCRIPT", params[0].tag_name); |
| 48 EXPECT_EQ(script2_url, params[1].url); | 47 EXPECT_EQ(script2_url, params[1].url); |
| 49 EXPECT_EQ("SCRIPT", params[0].tag_name); | 48 EXPECT_EQ("SCRIPT", params[0].tag_name); |
| 50 EXPECT_EQ(url, params[2].url); | 49 EXPECT_EQ(url, params[2].url); |
| 51 } | 50 } |
| 52 | 51 |
| 53 { // A page with an iframe which in turn contains an iframe. | 52 { // A page with an iframe which in turn contains an iframe. |
| 54 // html | 53 // html |
| 55 // \ iframe1 | 54 // \ iframe1 |
| 56 // \ iframe2 | 55 // \ iframe2 |
| 57 std::string iframe2_html = "<html><body>iframe2</body></html>"; | 56 std::string iframe2_html = "<html><body>iframe2</body></html>"; |
| 58 GURL iframe2_url(urlprefix + iframe2_html); | 57 GURL iframe2_url(urlprefix + iframe2_html); |
| 59 std::string iframe1_html = "<iframe src=\"" + net::EscapeForHTML( | 58 std::string iframe1_html = "<iframe src=\"" + |
| 60 iframe2_url.spec()) + "\"></iframe>"; | 59 net::EscapeForHTML(iframe2_url.spec()) + |
| 60 "\"></iframe>"; |
| 61 GURL iframe1_url(urlprefix + iframe1_html); | 61 GURL iframe1_url(urlprefix + iframe1_html); |
| 62 std::string html = "<html><head><iframe src=\"" + net::EscapeForHTML( | 62 std::string html = "<html><head><iframe src=\"" + |
| 63 iframe1_url.spec()) + "\"></iframe></head></html>"; | 63 net::EscapeForHTML(iframe1_url.spec()) + |
| 64 "\"></iframe></head></html>"; |
| 64 GURL url(urlprefix + html); | 65 GURL url(urlprefix + html); |
| 65 | 66 |
| 66 LoadHTML(html.c_str()); | 67 LoadHTML(html.c_str()); |
| 67 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 68 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 68 details->ExtractResources(¶ms); | 69 details->ExtractResources(¶ms); |
| 69 ASSERT_EQ(5u, params.size()); | 70 ASSERT_EQ(5u, params.size()); |
| 70 | 71 |
| 71 EXPECT_EQ(iframe1_url, params[0].url); | 72 EXPECT_EQ(iframe1_url, params[0].url); |
| 72 EXPECT_EQ(url, params[0].parent); | 73 EXPECT_EQ(url, params[0].parent); |
| 73 EXPECT_EQ(0u, params[0].children.size()); | 74 EXPECT_EQ(0u, params[0].children.size()); |
| 74 EXPECT_EQ("IFRAME", params[0].tag_name); | 75 EXPECT_EQ("IFRAME", params[0].tag_name); |
| 75 | 76 |
| 76 EXPECT_EQ(url, params[1].url); | 77 EXPECT_EQ(url, params[1].url); |
| 77 EXPECT_EQ(GURL(), params[1].parent); | 78 EXPECT_EQ(GURL(), params[1].parent); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 89 EXPECT_EQ(iframe1_url, params[3].url); | 90 EXPECT_EQ(iframe1_url, params[3].url); |
| 90 EXPECT_EQ(GURL(), params[3].parent); | 91 EXPECT_EQ(GURL(), params[3].parent); |
| 91 EXPECT_EQ(1u, params[3].children.size()); | 92 EXPECT_EQ(1u, params[3].children.size()); |
| 92 EXPECT_EQ(iframe2_url, params[3].children[0]); | 93 EXPECT_EQ(iframe2_url, params[3].children[0]); |
| 93 | 94 |
| 94 EXPECT_EQ(iframe2_url, params[4].url); | 95 EXPECT_EQ(iframe2_url, params[4].url); |
| 95 EXPECT_EQ(GURL(), params[4].parent); | 96 EXPECT_EQ(GURL(), params[4].parent); |
| 96 EXPECT_EQ(0u, params[4].children.size()); | 97 EXPECT_EQ(0u, params[4].children.size()); |
| 97 } | 98 } |
| 98 | 99 |
| 99 { // >50 subframes, to verify kMaxNodes. | 100 { // >50 subframes, to verify kMaxNodes. |
| 100 std::string html; | 101 std::string html; |
| 101 for (int i = 0; i < 55; ++i) { | 102 for (int i = 0; i < 55; ++i) { |
| 102 // The iframe contents is just a number. | 103 // The iframe contents is just a number. |
| 103 GURL iframe_url(base::StringPrintf("%s%d", urlprefix, i)); | 104 GURL iframe_url(base::StringPrintf("%s%d", urlprefix, i)); |
| 104 html += "<iframe src=\"" + net::EscapeForHTML(iframe_url.spec()) + | 105 html += "<iframe src=\"" + net::EscapeForHTML(iframe_url.spec()) + |
| 105 "\"></iframe>"; | 106 "\"></iframe>"; |
| 106 } | 107 } |
| 107 GURL url(urlprefix + html); | 108 GURL url(urlprefix + html); |
| 108 | 109 |
| 109 LoadHTML(html.c_str()); | 110 LoadHTML(html.c_str()); |
| 110 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 111 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 111 details->ExtractResources(¶ms); | 112 details->ExtractResources(¶ms); |
| 112 ASSERT_EQ(51u, params.size()); | 113 ASSERT_EQ(51u, params.size()); |
| 113 } | 114 } |
| 114 | 115 |
| 115 { // A page with >50 scripts, to verify kMaxNodes. | 116 { // A page with >50 scripts, to verify kMaxNodes. |
| 116 std::string html; | 117 std::string html; |
| 117 for (int i = 0; i < 55; ++i) { | 118 for (int i = 0; i < 55; ++i) { |
| 118 // The iframe contents is just a number. | 119 // The iframe contents is just a number. |
| 119 GURL script_url(base::StringPrintf("%s%d", urlprefix, i)); | 120 GURL script_url(base::StringPrintf("%s%d", urlprefix, i)); |
| 120 html += "<script src=\"" + net::EscapeForHTML(script_url.spec()) + | 121 html += "<script src=\"" + net::EscapeForHTML(script_url.spec()) + |
| 121 "\"></script>"; | 122 "\"></script>"; |
| 122 } | 123 } |
| 123 GURL url(urlprefix + html); | 124 GURL url(urlprefix + html); |
| 124 | 125 |
| 125 LoadHTML(html.c_str()); | 126 LoadHTML(html.c_str()); |
| 126 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 127 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 127 details->ExtractResources(¶ms); | 128 details->ExtractResources(¶ms); |
| 128 ASSERT_EQ(51u, params.size()); | 129 ASSERT_EQ(51u, params.size()); |
| 129 } | 130 } |
| 130 } | 131 } |
| OLD | NEW |