| Index: net/cert_net/cert_net_fetcher_impl.h
|
| diff --git a/net/cert_net/cert_net_fetcher_impl.h b/net/cert_net/cert_net_fetcher_impl.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..692647ad3cff1494201a06710013793254d45b30
|
| --- /dev/null
|
| +++ b/net/cert_net/cert_net_fetcher_impl.h
|
| @@ -0,0 +1,107 @@
|
| +// Copyright 2015 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 NET_CERT_NET_CERT_NET_FETCHER_H_
|
| +#define NET_CERT_NET_CERT_NET_FETCHER_H_
|
| +
|
| +#include <set>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/threading/thread_checker.h"
|
| +#include "net/base/net_errors.h"
|
| +#include "net/base/net_export.h"
|
| +#include "net/cert/cert_net_fetcher.h"
|
| +
|
| +namespace net {
|
| +
|
| +class URLRequestContext;
|
| +
|
| +// CertNetFetcherImpl is an implementation of CertNetFetcher that uses the
|
| +// network stack.
|
| +//
|
| +// For more details refer to the documentation for the interface.
|
| +class NET_EXPORT CertNetFetcherImpl : public CertNetFetcher {
|
| + public:
|
| + // Initializes CertNetFetcherImpl using the specified URLRequestContext for
|
| + // issuing requests. |context| must remain valid for the entire lifetime of
|
| + // the CertNetFetcherImpl.
|
| + explicit CertNetFetcherImpl(URLRequestContext* context);
|
| +
|
| + // Deletion implicitly cancels any outstanding requests.
|
| + ~CertNetFetcherImpl() override;
|
| +
|
| + WARN_UNUSED_RESULT scoped_ptr<Request> FetchCaIssuers(
|
| + const GURL& url,
|
| + int timeout_milliseconds,
|
| + int max_response_bytes,
|
| + const FetchCallback& callback) override;
|
| +
|
| + WARN_UNUSED_RESULT scoped_ptr<Request> FetchCrl(
|
| + const GURL& url,
|
| + int timeout_milliseconds,
|
| + int max_response_bytes,
|
| + const FetchCallback& callback) override;
|
| +
|
| + WARN_UNUSED_RESULT scoped_ptr<Request> FetchOcsp(
|
| + const GURL& url,
|
| + int timeout_milliseconds,
|
| + int max_response_bytes,
|
| + const FetchCallback& callback) override;
|
| +
|
| + private:
|
| + class RequestImpl;
|
| + class Job;
|
| + struct JobToRequestParamsComparator;
|
| + struct RequestParams;
|
| +
|
| + struct JobComparator {
|
| + bool operator()(const Job* job1, const Job* job2) const;
|
| + };
|
| +
|
| + // Owns the jobs.
|
| + using JobSet = std::set<Job*, JobComparator>;
|
| +
|
| + // Starts an asynchronous request to fetch the given URL. On completion
|
| + // |callback| will be invoked.
|
| + //
|
| + // Completion of the request will never occur synchronously. In other words it
|
| + // is guaranteed that |callback| will only be invoked once the Fetch*() method
|
| + // has returned.
|
| + WARN_UNUSED_RESULT scoped_ptr<Request> Fetch(
|
| + scoped_ptr<RequestParams> request_params,
|
| + const FetchCallback& callback);
|
| +
|
| + // Finds a job with a matching RequestPararms or returns nullptr if there was
|
| + // no match.
|
| + Job* FindJob(const RequestParams& params);
|
| +
|
| + // Removes |job| from the in progress jobs and transfers ownership to the
|
| + // caller.
|
| + scoped_ptr<Job> RemoveJob(Job* job);
|
| +
|
| + // Indicates which Job is currently executing inside of OnJobCompleted().
|
| + void SetCurrentlyCompletingJob(Job* job);
|
| + void ClearCurrentlyCompletingJob(Job* job);
|
| +
|
| + // The in-progress jobs. This set does not contain the job which is actively
|
| + // invoking callbacks (OnJobCompleted). Instead that is tracked by
|
| + // |currently_completing_job_|.
|
| + JobSet jobs_;
|
| +
|
| + // The Job that is currently executing OnJobCompleted(). There can be at most
|
| + // one such job. This pointer is not owned.
|
| + Job* currently_completing_job_;
|
| +
|
| + // Not owned. CertNetFetcherImpl must outlive the URLRequestContext.
|
| + URLRequestContext* context_;
|
| +
|
| + base::ThreadChecker thread_checker_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CertNetFetcherImpl);
|
| +};
|
| +
|
| +} // namespace net
|
| +
|
| +#endif // NET_CERT_NET_CERT_NET_FETCHER_H_
|
|
|