Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1029)

Side by Side Diff: chrome/renderer/safe_browsing/threat_dom_details.cc

Issue 1414343007: Collect threat details for phishing and UwS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/renderer/safe_browsing/malware_dom_details.h" 5 #include "chrome/renderer/safe_browsing/threat_dom_details.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "chrome/common/chrome_constants.h" 8 #include "chrome/common/chrome_constants.h"
9 #include "chrome/common/safe_browsing/safebrowsing_messages.h" 9 #include "chrome/common/safe_browsing/safebrowsing_messages.h"
10 #include "content/public/renderer/render_view.h" 10 #include "content/public/renderer/render_view.h"
11 #include "third_party/WebKit/public/platform/WebString.h" 11 #include "third_party/WebKit/public/platform/WebString.h"
12 #include "third_party/WebKit/public/web/WebDocument.h" 12 #include "third_party/WebKit/public/web/WebDocument.h"
13 #include "third_party/WebKit/public/web/WebElement.h" 13 #include "third_party/WebKit/public/web/WebElement.h"
14 #include "third_party/WebKit/public/web/WebElementCollection.h" 14 #include "third_party/WebKit/public/web/WebElementCollection.h"
15 #include "third_party/WebKit/public/web/WebFrame.h" 15 #include "third_party/WebKit/public/web/WebFrame.h"
16 #include "third_party/WebKit/public/web/WebView.h" 16 #include "third_party/WebKit/public/web/WebView.h"
17 17
18 namespace safe_browsing { 18 namespace safe_browsing {
19 19
20 namespace { 20 namespace {
21 21
22 // Handler for the various HTML elements that we extract URLs from. 22 // Handler for the various HTML elements that we extract URLs from.
23 void HandleElement( 23 void HandleElement(
24 const blink::WebElement& element, 24 const blink::WebElement& element,
25 SafeBrowsingHostMsg_MalwareDOMDetails_Node* parent_node, 25 SafeBrowsingHostMsg_ThreatDOMDetails_Node* parent_node,
26 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>* resources) { 26 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node>* resources) {
27 if (!element.hasAttribute("src")) 27 if (!element.hasAttribute("src"))
28 return; 28 return;
29 29
30 // Retrieve the link and resolve the link in case it's relative. 30 // Retrieve the link and resolve the link in case it's relative.
31 blink::WebURL full_url = element.document().completeURL( 31 blink::WebURL full_url =
32 element.getAttribute("src")); 32 element.document().completeURL(element.getAttribute("src"));
33 33
34 const GURL& child_url = GURL(full_url); 34 const GURL& child_url = GURL(full_url);
35 35
36 // Add to the parent node. 36 // Add to the parent node.
37 parent_node->children.push_back(child_url); 37 parent_node->children.push_back(child_url);
38 38
39 // Create the child node. 39 // Create the child node.
40 SafeBrowsingHostMsg_MalwareDOMDetails_Node child_node; 40 SafeBrowsingHostMsg_ThreatDOMDetails_Node child_node;
41 child_node.url = child_url; 41 child_node.url = child_url;
42 child_node.tag_name = element.tagName().utf8(); 42 child_node.tag_name = element.tagName().utf8();
43 child_node.parent = parent_node->url; 43 child_node.parent = parent_node->url;
44 resources->push_back(child_node); 44 resources->push_back(child_node);
45 } 45 }
46 46
47 } // namespace 47 } // namespace
48 48
49 // An upper limit on the number of nodes we collect. 49 // An upper limit on the number of nodes we collect.
50 uint32 MalwareDOMDetails::kMaxNodes = 500; 50 uint32 ThreatDOMDetails::kMaxNodes = 500;
51 51
52 // static 52 // static
53 MalwareDOMDetails* MalwareDOMDetails::Create(content::RenderView* render_view) { 53 ThreatDOMDetails* ThreatDOMDetails::Create(content::RenderView* render_view) {
54 // Private constructor and public static Create() method to facilitate 54 // Private constructor and public static Create() method to facilitate
55 // stubbing out this class for binary-size reduction purposes. 55 // stubbing out this class for binary-size reduction purposes.
56 return new MalwareDOMDetails(render_view); 56 return new ThreatDOMDetails(render_view);
57 } 57 }
58 58
59 MalwareDOMDetails::MalwareDOMDetails(content::RenderView* render_view) 59 ThreatDOMDetails::ThreatDOMDetails(content::RenderView* render_view)
60 : content::RenderViewObserver(render_view) { 60 : content::RenderViewObserver(render_view) {}
61 }
62 61
63 MalwareDOMDetails::~MalwareDOMDetails() { 62 ThreatDOMDetails::~ThreatDOMDetails() {}
64 }
65 63
66 bool MalwareDOMDetails::OnMessageReceived(const IPC::Message& message) { 64 bool ThreatDOMDetails::OnMessageReceived(const IPC::Message& message) {
67 bool handled = true; 65 bool handled = true;
68 IPC_BEGIN_MESSAGE_MAP(MalwareDOMDetails, message) 66 IPC_BEGIN_MESSAGE_MAP(ThreatDOMDetails, message)
69 IPC_MESSAGE_HANDLER(SafeBrowsingMsg_GetMalwareDOMDetails, 67 IPC_MESSAGE_HANDLER(SafeBrowsingMsg_GetThreatDOMDetails,
70 OnGetMalwareDOMDetails) 68 OnGetThreatDOMDetails)
71 IPC_MESSAGE_UNHANDLED(handled = false) 69 IPC_MESSAGE_UNHANDLED(handled = false)
72 IPC_END_MESSAGE_MAP() 70 IPC_END_MESSAGE_MAP()
73 return handled; 71 return handled;
74 } 72 }
75 73
76 void MalwareDOMDetails::OnGetMalwareDOMDetails() { 74 void ThreatDOMDetails::OnGetThreatDOMDetails() {
77 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> resources; 75 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> resources;
78 ExtractResources(&resources); 76 ExtractResources(&resources);
79 // Notify the browser. 77 // Notify the browser.
80 render_view()->Send(new SafeBrowsingHostMsg_MalwareDOMDetails( 78 render_view()->Send(new SafeBrowsingHostMsg_ThreatDOMDetails(
81 render_view()->GetRoutingID(), resources)); 79 render_view()->GetRoutingID(), resources));
82 } 80 }
83 81
84 void MalwareDOMDetails::ExtractResources( 82 void ThreatDOMDetails::ExtractResources(
85 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>* resources) { 83 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node>* resources) {
86 blink::WebView* web_view = render_view()->GetWebView(); 84 blink::WebView* web_view = render_view()->GetWebView();
87 if (!web_view) { 85 if (!web_view) {
88 NOTREACHED(); 86 NOTREACHED();
89 return; 87 return;
90 } 88 }
91 blink::WebFrame* frame = web_view->mainFrame(); 89 blink::WebFrame* frame = web_view->mainFrame();
92 for (; frame; frame = frame->traverseNext(false /* don't wrap */)) { 90 for (; frame; frame = frame->traverseNext(false /* don't wrap */)) {
93 DCHECK(frame); 91 DCHECK(frame);
94 SafeBrowsingHostMsg_MalwareDOMDetails_Node details_node; 92 SafeBrowsingHostMsg_ThreatDOMDetails_Node details_node;
95 blink::WebDocument document = frame->document(); 93 blink::WebDocument document = frame->document();
96 details_node.url = GURL(document.url()); 94 details_node.url = GURL(document.url());
97 if (document.isNull()) { 95 if (document.isNull()) {
98 // Nothing in this frame, move on to the next one. 96 // Nothing in this frame, move on to the next one.
99 resources->push_back(details_node); 97 resources->push_back(details_node);
100 continue; 98 continue;
101 } 99 }
102 100
103 blink::WebElementCollection elements = document.all(); 101 blink::WebElementCollection elements = document.all();
104 blink::WebElement element = elements.firstItem(); 102 blink::WebElement element = elements.firstItem();
105 for (; !element.isNull(); element = elements.nextItem()) { 103 for (; !element.isNull(); element = elements.nextItem()) {
106 if (element.hasHTMLTagName("iframe") || element.hasHTMLTagName("frame") || 104 if (element.hasHTMLTagName("iframe") || element.hasHTMLTagName("frame") ||
107 element.hasHTMLTagName("embed") || element.hasHTMLTagName("script")) { 105 element.hasHTMLTagName("embed") || element.hasHTMLTagName("script")) {
108 HandleElement(element, &details_node, resources); 106 HandleElement(element, &details_node, resources);
109 if (resources->size() >= kMaxNodes) { 107 if (resources->size() >= kMaxNodes) {
110 // We have reached kMaxNodes, exit early. 108 // We have reached kMaxNodes, exit early.
111 resources->push_back(details_node); 109 resources->push_back(details_node);
112 return; 110 return;
113 } 111 }
114 } 112 }
115 } 113 }
116 114
117 resources->push_back(details_node); 115 resources->push_back(details_node);
118 } 116 }
119 } 117 }
120 118
121 } // namespace safe_browsing 119 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698