| Index: chrome/browser/safe_browsing/malware_details.h
|
| ===================================================================
|
| --- chrome/browser/safe_browsing/malware_details.h (revision 79632)
|
| +++ chrome/browser/safe_browsing/malware_details.h (working copy)
|
| @@ -10,8 +10,7 @@
|
| // users opt-in to do so from the malware warning page.
|
|
|
| // An instance of this class is generated when a malware warning page
|
| -// is shown (SafeBrowsingBlockingPage). It is passed on to the
|
| -// SafeBrowsing service when the warning goes away.
|
| +// is shown (SafeBrowsingBlockingPage).
|
|
|
| #include <string>
|
| #include <vector>
|
| @@ -22,17 +21,27 @@
|
| #include "chrome/browser/safe_browsing/report.pb.h"
|
| #include "chrome/browser/safe_browsing/safe_browsing_service.h"
|
| #include "content/browser/tab_contents/tab_contents_observer.h"
|
| +#include "net/base/completion_callback.h"
|
|
|
| class TabContents;
|
| struct SafeBrowsingHostMsg_MalwareDOMDetails_Node;
|
|
|
| +class MalwareDetailsCacheCollector;
|
| class MalwareDetailsFactory;
|
|
|
| +namespace safe_browsing {
|
| +// Maps a URL to its Resource.
|
| +typedef base::hash_map<
|
| + std::string,
|
| + linked_ptr<safe_browsing::ClientMalwareReportRequest::Resource> > ResourceMap;
|
| +}
|
| +
|
| class MalwareDetails : public base::RefCountedThreadSafe<MalwareDetails>,
|
| public TabContentsObserver {
|
| public:
|
| // Constructs a new MalwareDetails instance, using the factory.
|
| static MalwareDetails* NewMalwareDetails(
|
| + SafeBrowsingService* sb_service,
|
| TabContents* tab_contents,
|
| const SafeBrowsingService::UnsafeResource& resource);
|
|
|
| @@ -42,34 +51,43 @@
|
| factory_ = factory;
|
| }
|
|
|
| - // The SafeBrowsingService calls this from the IO thread, to get the
|
| - // serialized report as a string and send it over.
|
| - const std::string* GetSerializedReport();
|
| + // Callback with the malware details, serialized. See GetSerializedReport.
|
| + typedef Callback1<scoped_refptr<MalwareDetails> >::Type
|
| + MalwareDetailsCallback;
|
|
|
| + // The SafeBrowsingBlockingPage calls this from the IO thread when
|
| + // the user is leaving the blocking page and has opted-in to sending
|
| + // the report. We start the cache collection, and when we are done,
|
| + // we send the report.
|
| + void FinishCollection();
|
| +
|
| + void OnCacheCollectionReady(int result);
|
| +
|
| // TabContentsObserver implementation.
|
| virtual bool OnMessageReceived(const IPC::Message& message);
|
|
|
| protected:
|
| friend class MalwareDetailsFactoryImpl;
|
|
|
| - MalwareDetails(TabContents* tab_contents,
|
| + MalwareDetails(SafeBrowsingService* sb_service,
|
| + TabContents* tab_contents,
|
| const SafeBrowsingService::UnsafeResource& resource);
|
|
|
| + virtual ~MalwareDetails();
|
| +
|
| // Called on the IO thread with the DOM details.
|
| virtual void AddDOMDetails(
|
| const std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>& params);
|
|
|
| - virtual ~MalwareDetails();
|
| + // The report protocol buffer.
|
| + scoped_ptr<safe_browsing::ClientMalwareReportRequest> report_;
|
|
|
| + // Used to get a pointer to the HTTP cache.
|
| + URLRequestContextGetter* request_context_getter_;
|
| +
|
| private:
|
| friend class base::RefCountedThreadSafe<MalwareDetails>;
|
|
|
| - // Maps a URL to its Resource.
|
| - typedef base::hash_map<
|
| - std::string,
|
| - linked_ptr<safe_browsing::ClientMalwareReportRequest::Resource> >
|
| - ResourceMap;
|
| -
|
| // Starts the collection of the report.
|
| void StartCollection();
|
|
|
| @@ -93,21 +111,25 @@
|
| void OnReceivedMalwareDOMDetails(
|
| const std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>& params);
|
|
|
| + SafeBrowsingService* sb_service_;
|
| +
|
| const SafeBrowsingService::UnsafeResource resource_;
|
|
|
| // For every Url we collect we create a Resource message. We keep
|
| // them in a map so we can avoid duplicates.
|
| - ResourceMap resources_;
|
| + safe_browsing::ResourceMap resources_;
|
|
|
| - // The report protocol buffer.
|
| - scoped_ptr<safe_browsing::ClientMalwareReportRequest> report_;
|
| -
|
| // The factory used to instanciate SafeBrowsingBlockingPage objects.
|
| // Usefull for tests, so they can provide their own implementation of
|
| // SafeBrowsingBlockingPage.
|
| static MalwareDetailsFactory* factory_;
|
|
|
| + // Used to collect details from the HTTP Cache.
|
| + scoped_refptr<MalwareDetailsCacheCollector> cache_collector_;
|
| +
|
| FRIEND_TEST_ALL_PREFIXES(MalwareDetailsTest, MalwareDOMDetails);
|
| + FRIEND_TEST_ALL_PREFIXES(MalwareDetailsTest, HTTPCache);
|
| + FRIEND_TEST_ALL_PREFIXES(MalwareDetailsTest, HTTPCacheNoEntries);
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MalwareDetails);
|
| };
|
| @@ -118,6 +140,7 @@
|
| virtual ~MalwareDetailsFactory() { }
|
|
|
| virtual MalwareDetails* CreateMalwareDetails(
|
| + SafeBrowsingService* sb_service,
|
| TabContents* tab_contents,
|
| const SafeBrowsingService::UnsafeResource& unsafe_resource) = 0;
|
| };
|
|
|