15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_NET_CHROME_FRAUDULENT_CERTIFICATE_REPORTER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_NET_CHROME_FRAUDULENT_CERTIFICATE_REPORTER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/fraudulent_certificate_reporter.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestContext;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_browser_net {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeFraudulentCertificateReporter
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public net::FraudulentCertificateReporter,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public net::URLRequest::Delegate {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ChromeFraudulentCertificateReporter(
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::URLRequestContext* request_context);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChromeFraudulentCertificateReporter();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Allows users of this class to override this and set their own URLRequest
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // type. Used by SendReport.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequest* CreateURLRequest(net::URLRequestContext* context);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::FraudulentCertificateReporter
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SendReport(const std::string& hostname,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const net::SSLInfo& ssl_info,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bool sni_available) OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::URLRequest::Delegate
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnReadCompleted(net::URLRequest* request,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int bytes_read) OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::URLRequestContext* const request_context_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Performs post-report cleanup.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RequestComplete(net::URLRequest* request);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL upload_url_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<net::URLRequest*> inflight_requests_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeFraudulentCertificateReporter);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome_browser_net
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_NET_CHROME_FRAUDULENT_CERTIFICATE_REPORTER_H_
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
60