| Index: net/http/disk_cache_based_ssl_host_info.h
|
| diff --git a/net/http/disk_cache_based_ssl_host_info.h b/net/http/disk_cache_based_ssl_host_info.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3496ed6558c705395aed876e16ac643804b4bb16
|
| --- /dev/null
|
| +++ b/net/http/disk_cache_based_ssl_host_info.h
|
| @@ -0,0 +1,106 @@
|
| +// Copyright (c) 2012 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_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H_
|
| +#define NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/threading/non_thread_safe.h"
|
| +#include "net/base/completion_callback.h"
|
| +#include "net/disk_cache/disk_cache.h"
|
| +#include "net/socket/ssl_host_info.h"
|
| +
|
| +namespace net {
|
| +
|
| +class HttpCache;
|
| +class IOBuffer;
|
| +struct SSLConfig;
|
| +
|
| +// DiskCacheBasedSSLHostInfo fetches information about an SSL host from our
|
| +// standard disk cache. Since the information is defined to be non-sensitive,
|
| +// it's ok for us to keep it on disk.
|
| +class NET_EXPORT_PRIVATE DiskCacheBasedSSLHostInfo
|
| + : public SSLHostInfo,
|
| + public NON_EXPORTED_BASE(base::NonThreadSafe) {
|
| + public:
|
| + DiskCacheBasedSSLHostInfo(const std::string& hostname,
|
| + const SSLConfig& ssl_config,
|
| + CertVerifier* cert_verifier,
|
| + HttpCache* http_cache);
|
| +
|
| + // SSLHostInfo implementation.
|
| + virtual void Start() OVERRIDE;
|
| + virtual int WaitForDataReady(const CompletionCallback& callback) OVERRIDE;
|
| + virtual void Persist() OVERRIDE;
|
| +
|
| + private:
|
| + struct CacheOperationDataShim;
|
| + enum State {
|
| + GET_BACKEND,
|
| + GET_BACKEND_COMPLETE,
|
| + OPEN,
|
| + OPEN_COMPLETE,
|
| + READ,
|
| + READ_COMPLETE,
|
| + WAIT_FOR_DATA_READY_DONE,
|
| + CREATE_OR_OPEN,
|
| + CREATE_OR_OPEN_COMPLETE,
|
| + WRITE,
|
| + WRITE_COMPLETE,
|
| + SET_DONE,
|
| + NONE,
|
| + };
|
| +
|
| + virtual ~DiskCacheBasedSSLHostInfo();
|
| +
|
| + std::string key() const;
|
| +
|
| + // The |unused| parameter is a small hack so that we can have the
|
| + // CacheOperationDataShim object owned by the Callback that is created for
|
| + // this method. See comment above CacheOperationDataShim for details.
|
| + void OnIOComplete(CacheOperationDataShim* unused, int rv);
|
| +
|
| + int DoLoop(int rv);
|
| +
|
| + int DoGetBackendComplete(int rv);
|
| + int DoOpenComplete(int rv);
|
| + int DoReadComplete(int rv);
|
| + int DoWriteComplete(int rv);
|
| + int DoCreateOrOpenComplete(int rv);
|
| +
|
| + int DoGetBackend();
|
| + int DoOpen();
|
| + int DoRead();
|
| + int DoWrite();
|
| + int DoCreateOrOpen();
|
| +
|
| + // DoWaitForDataReadyDone is the terminal state of the read operation.
|
| + int DoWaitForDataReadyDone();
|
| +
|
| + // DoSetDone is the terminal state of the write operation.
|
| + int DoSetDone();
|
| +
|
| + base::WeakPtrFactory<DiskCacheBasedSSLHostInfo> weak_factory_;
|
| + CacheOperationDataShim* data_shim_; // Owned by |io_callback_|.
|
| + CompletionCallback io_callback_;
|
| + State state_;
|
| + bool ready_;
|
| + bool found_entry_; // Controls the behavior of DoCreateOrOpen.
|
| + std::string new_data_;
|
| + const std::string hostname_;
|
| + HttpCache* const http_cache_;
|
| + disk_cache::Backend* backend_;
|
| + disk_cache::Entry* entry_;
|
| + CompletionCallback user_callback_;
|
| + scoped_refptr<IOBuffer> read_buffer_;
|
| + scoped_refptr<IOBuffer> write_buffer_;
|
| + std::string data_;
|
| +};
|
| +
|
| +} // namespace net
|
| +
|
| +#endif // NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H_
|
|
|