// Copyright (c) 2011 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. // // MalwareDOMDetails iterates over a document's frames and gathers // interesting URLs such as those of scripts and frames. When done, it sends // them to the MalwareDetails that requested them. #ifndef CHROME_RENDERER_SAFE_BROWSING_MALWARE_DOM_DETAILS_H_ #define CHROME_RENDERER_SAFE_BROWSING_MALWARE_DOM_DETAILS_H_ #include #include #include "base/basictypes.h" #include "base/callback.h" #include "base/memory/scoped_ptr.h" #include "base/task.h" #include "content/renderer/render_view_observer.h" class GURL; class RenderView; namespace WebKit { class WebElement; class WebFrame; } struct SafeBrowsingHostMsg_MalwareDOMDetails_Node; namespace safe_browsing { // There is one MalwareDOMDetails per RenderView. class MalwareDOMDetails : public RenderViewObserver { public: // An upper limit on the number of nodes we collect. Not const for the test. static uint32 kMaxNodes; static MalwareDOMDetails* Create(RenderView* render_view); virtual ~MalwareDOMDetails(); // Begins extracting resource urls for the page currently loaded in // this object's RenderView. void ExtractResources( std::vector* resources); private: // Creates a MalwareDOMDetails for the specified RenderView. // The MalwareDOMDetails should be destroyed prior to destroying // the RenderView. explicit MalwareDOMDetails(RenderView* render_view); // RenderViewObserver implementation. virtual bool OnMessageReceived(const IPC::Message& message); void OnGetMalwareDOMDetails(); // Handler for the various HTML elements that we extract URLs from. void HandleElement( const WebKit::WebElement& element, SafeBrowsingHostMsg_MalwareDOMDetails_Node* parent_node, std::vector* resources); // Non-owned pointer to the view that we will extract features from. RenderView* render_view_; DISALLOW_COPY_AND_ASSIGN(MalwareDOMDetails); }; } // namespace safe_browsing #endif // CHROME_RENDERER_SAFE_BROWSING_MALWARE_DOM_DETAILS_H_