• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 //
5 // MalwareDOMDetails iterates over a document's frames and gathers
6 // interesting URLs such as those of scripts and frames. When done, it sends
7 // them to the MalwareDetails that requested them.
8 
9 #ifndef CHROME_RENDERER_SAFE_BROWSING_MALWARE_DOM_DETAILS_H_
10 #define CHROME_RENDERER_SAFE_BROWSING_MALWARE_DOM_DETAILS_H_
11 
12 #include <vector>
13 
14 #include "base/basictypes.h"
15 #include "base/compiler_specific.h"
16 #include "content/public/renderer/render_view_observer.h"
17 
18 namespace blink {
19 class WebElement;
20 }
21 
22 struct SafeBrowsingHostMsg_MalwareDOMDetails_Node;
23 
24 namespace safe_browsing {
25 
26 // There is one MalwareDOMDetails per RenderView.
27 class MalwareDOMDetails : public content::RenderViewObserver {
28  public:
29   // An upper limit on the number of nodes we collect. Not const for the test.
30   static uint32 kMaxNodes;
31 
32   static MalwareDOMDetails* Create(content::RenderView* render_view);
33   virtual ~MalwareDOMDetails();
34 
35   // Begins extracting resource urls for the page currently loaded in
36   // this object's RenderView.
37   void ExtractResources(
38       std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>* resources);
39 
40  private:
41   // Creates a MalwareDOMDetails for the specified RenderView.
42   // The MalwareDOMDetails should be destroyed prior to destroying
43   // the RenderView.
44   explicit MalwareDOMDetails(content::RenderView* render_view);
45 
46   // RenderViewObserver implementation.
47   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
48 
49   void OnGetMalwareDOMDetails();
50 
51   // Handler for the various HTML elements that we extract URLs from.
52   void HandleElement(
53       const blink::WebElement& element,
54       SafeBrowsingHostMsg_MalwareDOMDetails_Node* parent_node,
55       std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>* resources);
56 
57   DISALLOW_COPY_AND_ASSIGN(MalwareDOMDetails);
58 };
59 
60 }  // namespace safe_browsing
61 
62 #endif  // CHROME_RENDERER_SAFE_BROWSING_MALWARE_DOM_DETAILS_H_
63