Index: chrome/browser/safe_browsing/download_feedback_service.h |
diff --git a/chrome/browser/safe_browsing/download_feedback_service.h b/chrome/browser/safe_browsing/download_feedback_service.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bbfc21163a977b50bce167e06b8efe1eba4abd76 |
--- /dev/null |
+++ b/chrome/browser/safe_browsing/download_feedback_service.h |
@@ -0,0 +1,96 @@ |
+// Copyright 2013 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. |
+ |
+#ifndef CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_FEEDBACK_SERVICE_H_ |
+#define CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_FEEDBACK_SERVICE_H_ |
+ |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_vector.h" |
+#include "base/threading/non_thread_safe.h" |
+#include "chrome/browser/safe_browsing/download_protection_service.h" |
+#include "content/public/browser/download_danger_type.h" |
+ |
+namespace base { |
+class TaskRunner; |
+} |
+ |
+namespace content { |
+class DownloadItem; |
+} |
+ |
+namespace net { |
+class URLRequestContextGetter; |
+} |
+ |
+namespace safe_browsing { |
+ |
+class DownloadFeedback; |
+ |
+// Tracks active DownloadFeedback objects, provides interface for storing ping |
+// data for malicious downloads. |
+class DownloadFeedbackService : public base::NonThreadSafe { |
+ public: |
+ DownloadFeedbackService(net::URLRequestContextGetter* request_context_getter, |
+ base::TaskRunner* file_task_runner); |
+ ~DownloadFeedbackService(); |
+ |
+ // Stores the request and response ping data from the download check, if the |
+ // check result and file size are eligible. This must be called after a |
+ // download has been flagged as malicious in order for the download to be |
+ // enabled for uploading. |
+ static void MaybeStorePingsForDownload( |
+ DownloadProtectionService::DownloadCheckResult result, |
+ content::DownloadItem* download, |
+ const std::string& ping, |
+ const std::string& response); |
+ |
+ // Test if pings have been stored for |download|. |
+ static bool IsEnabledForDownload(const content::DownloadItem& download); |
+ |
+ // Get the ping values stored in |download|. Returns false if no ping values |
+ // are present. |
+ static bool GetPingsForDownloadForTesting( |
+ const content::DownloadItem& download, |
+ std::string* ping, |
+ std::string* response); |
+ |
+ // Records histogram for download feedback option shown to user. |
+ static void RecordFeedbackButtonShown( |
+ content::DownloadDangerType danger_type); |
+ |
+ // Begin download feedback for |download|. The |download| will be deleted |
+ // when this function returns. This must only be called if |
+ // IsEnabledForDownload is true for |download|. |
+ void BeginFeedbackForDownload(content::DownloadItem* download); |
+ |
+ private: |
+ static void BeginFeedbackOrDeleteFile( |
+ const scoped_refptr<base::TaskRunner>& file_task_runner, |
+ const base::WeakPtr<DownloadFeedbackService>& service, |
+ const std::string& ping_request, |
+ const std::string& ping_response, |
+ const base::FilePath& path); |
+ void StartPendingFeedback(); |
+ void BeginFeedback(const std::string& ping_request, |
+ const std::string& ping_response, |
+ const base::FilePath& path); |
+ void FeedbackComplete(); |
+ |
+ scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
+ scoped_refptr<base::TaskRunner> file_task_runner_; |
+ |
+ // Currently active & pending uploads. The first item is active, remaining |
+ // items are pending. |
+ ScopedVector<DownloadFeedback> active_feedback_; |
+ |
+ base::WeakPtrFactory<DownloadFeedbackService> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DownloadFeedbackService); |
+}; |
+} // namespace safe_browsing |
+ |
+#endif // CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_FEEDBACK_SERVICE_H_ |