1 // Copyright 2014 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 #ifndef CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORT_UPLOADER_IMPL_H_ 6 #define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORT_UPLOADER_IMPL_H_ 7 8 #include <string> 9 10 #include "base/compiler_specific.h" 11 #include "base/macros.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/time/time.h" 14 #include "chrome/browser/safe_browsing/incident_reporting/incident_report_uploader.h" 15 #include "net/url_request/url_fetcher_delegate.h" 16 #include "url/gurl.h" 17 18 namespace net { 19 class URLFetcher; 20 class URLRequestContextGetter; 21 } // namespace net 22 23 namespace safe_browsing { 24 25 class ClientIncidentReport; 26 27 // An uploader of incident reports. A report is issued via the UploadReport 28 // method. The upload can be cancelled by deleting the returned instance. The 29 // instance is no longer usable after the delegate is notified, and may safely 30 // be destroyed by the delegate. 31 class IncidentReportUploaderImpl : public IncidentReportUploader, 32 public net::URLFetcherDelegate { 33 public: 34 // The id associated with the URLFetcher, for use by tests. 35 static const int kTestUrlFetcherId; 36 37 virtual ~IncidentReportUploaderImpl(); 38 39 // Uploads a report with a caller-provided URL context. |callback| will be run 40 // when the upload is complete. Returns NULL if |report| cannot be serialized 41 // for transmission, in which case the delegate is not notified. 42 static scoped_ptr<IncidentReportUploader> UploadReport( 43 const OnResultCallback& callback, 44 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter, 45 const ClientIncidentReport& report); 46 47 private: 48 IncidentReportUploaderImpl( 49 const OnResultCallback& callback, 50 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter, 51 const std::string& post_data); 52 53 // Returns the URL to which incident reports are to be sent. 54 static GURL GetIncidentReportUrl(); 55 56 // net::URLFetcherDelegate methods. 57 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 58 59 // The underlying URL fetcher. The instance is alive from construction through 60 // OnURLFetchComplete. 61 scoped_ptr<net::URLFetcher> url_fetcher_; 62 63 // The time at which the upload was initiated. 64 base::TimeTicks time_begin_; 65 66 DISALLOW_COPY_AND_ASSIGN(IncidentReportUploaderImpl); 67 }; 68 69 } // namespace safe_browsing 70 71 #endif // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORT_UPLOADER_IMPL_H_ 72