Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H | 5 #ifndef NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H |
| 6 #define NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H | 6 #define NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/lock.h" | 10 #include "base/lock.h" |
| 11 #include "base/non_thread_safe.h" | 11 #include "base/non_thread_safe.h" |
| 12 #include "base/scoped_ptr.h" | 12 #include "base/scoped_ptr.h" |
| 13 #include "base/weak_ptr.h" | |
| 13 #include "net/base/completion_callback.h" | 14 #include "net/base/completion_callback.h" |
| 14 #include "net/disk_cache/disk_cache.h" | 15 #include "net/disk_cache/disk_cache.h" |
| 15 #include "net/socket/ssl_host_info.h" | 16 #include "net/socket/ssl_host_info.h" |
| 16 | 17 |
| 17 namespace net { | 18 namespace net { |
| 18 | 19 |
| 19 class HttpCache; | 20 class HttpCache; |
| 20 class IOBuffer; | 21 class IOBuffer; |
| 21 struct SSLConfig; | 22 struct SSLConfig; |
| 22 | 23 |
| 23 // DiskCacheBasedSSLHostInfo fetches information about an SSL host from our | 24 // DiskCacheBasedSSLHostInfo fetches information about an SSL host from our |
| 24 // standard disk cache. Since the information is defined to be non-sensitive, | 25 // standard disk cache. Since the information is defined to be non-sensitive, |
| 25 // it's ok for us to keep it on disk. | 26 // it's ok for us to keep it on disk. |
| 26 class DiskCacheBasedSSLHostInfo : public SSLHostInfo, | 27 class DiskCacheBasedSSLHostInfo : public SSLHostInfo, |
| 27 public NonThreadSafe { | 28 public NonThreadSafe { |
| 28 public: | 29 public: |
| 29 DiskCacheBasedSSLHostInfo(const std::string& hostname, | 30 DiskCacheBasedSSLHostInfo(const std::string& hostname, |
| 30 const SSLConfig& ssl_config, | 31 const SSLConfig& ssl_config, |
| 31 HttpCache* http_cache); | 32 HttpCache* http_cache); |
| 32 | 33 |
| 33 // Implementation of SSLHostInfo | 34 // Implementation of SSLHostInfo |
| 34 virtual void Start(); | 35 virtual void Start(); |
| 35 virtual int WaitForDataReady(CompletionCallback* callback); | 36 virtual int WaitForDataReady(CompletionCallback* callback); |
| 36 virtual void Persist(); | 37 virtual void Persist(); |
| 37 | 38 |
| 38 private: | 39 private: |
| 40 enum State { | |
| 41 GET_BACKEND, | |
| 42 GET_BACKEND_COMPLETE, | |
| 43 OPEN, | |
| 44 OPEN_COMPLETE, | |
| 45 READ, | |
| 46 READ_COMPLETE, | |
| 47 WAIT_FOR_DATA_READY_DONE, | |
| 48 CREATE, | |
| 49 CREATE_COMPLETE, | |
| 50 WRITE, | |
| 51 WRITE_COMPLETE, | |
| 52 SET_DONE, | |
| 53 NONE, | |
| 54 }; | |
| 55 | |
| 39 ~DiskCacheBasedSSLHostInfo(); | 56 ~DiskCacheBasedSSLHostInfo(); |
| 57 | |
| 58 class CallbackImpl : public CallbackRunner<Tuple1<int> > { | |
| 59 public: | |
| 60 CallbackImpl(const base::WeakPtr<DiskCacheBasedSSLHostInfo>& obj, | |
| 61 void (DiskCacheBasedSSLHostInfo::*meth) (int)) | |
| 62 : obj_(obj), | |
| 63 meth_(meth) { | |
| 64 } | |
| 65 | |
| 66 virtual void RunWithParams(const Tuple1<int>& params) { | |
| 67 if (!obj_) { | |
| 68 delete this; | |
| 69 } else { | |
| 70 DispatchToMethod(obj_.get(), meth_, params); | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 disk_cache::Backend** backend_pointer() { return &backend_; } | |
| 75 disk_cache::Entry** entry_pointer() { return &entry_; } | |
| 76 disk_cache::Backend* backend() const { return backend_; } | |
| 77 disk_cache::Entry* entry() const { return entry_; } | |
| 78 | |
| 79 protected: | |
|
willchan no longer on Chromium
2010/12/16 00:12:27
private
| |
| 80 base::WeakPtr<DiskCacheBasedSSLHostInfo> obj_; | |
| 81 void (DiskCacheBasedSSLHostInfo::*meth_) (int); | |
| 82 | |
| 83 disk_cache::Backend* backend_; | |
| 84 disk_cache::Entry* entry_; | |
| 85 }; | |
| 86 | |
| 40 std::string key() const; | 87 std::string key() const; |
| 41 | 88 |
| 42 void DoLoop(int rv); | 89 void DoLoop(int rv); |
| 43 | 90 |
| 44 int DoGetBackendComplete(int rv); | 91 int DoGetBackendComplete(int rv); |
| 45 int DoOpenComplete(int rv); | 92 int DoOpenComplete(int rv); |
| 46 int DoReadComplete(int rv); | 93 int DoReadComplete(int rv); |
| 47 int DoWriteComplete(int rv); | 94 int DoWriteComplete(int rv); |
| 48 int DoCreateComplete(int rv); | 95 int DoCreateComplete(int rv); |
| 49 | 96 |
| 50 int DoGetBackend(); | 97 int DoGetBackend(); |
| 51 int DoOpen(); | 98 int DoOpen(); |
| 52 int DoRead(); | 99 int DoRead(); |
| 53 int DoCreate(); | 100 int DoCreate(); |
| 54 int DoWrite(); | 101 int DoWrite(); |
| 55 | 102 |
| 56 // WaitForDataReadyDone is the terminal state of the read operation. | 103 // WaitForDataReadyDone is the terminal state of the read operation. |
| 57 int WaitForDataReadyDone(); | 104 int WaitForDataReadyDone(); |
| 58 // SetDone is the terminal state of the write operation. | 105 // SetDone is the terminal state of the write operation. |
| 59 int SetDone(); | 106 int SetDone(); |
| 60 | 107 |
| 61 enum State { | 108 // IsCallbackPending returns true if we have a pending callback. |
| 62 GET_BACKEND, | 109 bool IsCallbackPending() const; |
| 63 GET_BACKEND_COMPLETE, | |
| 64 OPEN, | |
| 65 OPEN_COMPLETE, | |
| 66 READ, | |
| 67 READ_COMPLETE, | |
| 68 WAIT_FOR_DATA_READY_DONE, | |
| 69 CREATE, | |
| 70 CREATE_COMPLETE, | |
| 71 WRITE, | |
| 72 WRITE_COMPLETE, | |
| 73 SET_DONE, | |
| 74 NONE, | |
| 75 }; | |
| 76 | 110 |
| 77 scoped_refptr<CancelableCompletionCallback<DiskCacheBasedSSLHostInfo> > | 111 base::WeakPtrFactory<DiskCacheBasedSSLHostInfo> weak_ptr_factory_; |
| 78 callback_; | 112 CallbackImpl* callback_; |
| 79 State state_; | 113 State state_; |
| 80 bool ready_; | 114 bool ready_; |
| 81 std::string new_data_; | 115 std::string new_data_; |
| 82 const std::string hostname_; | 116 const std::string hostname_; |
| 83 HttpCache* const http_cache_; | 117 HttpCache* const http_cache_; |
| 84 disk_cache::Backend* backend_; | 118 disk_cache::Backend* backend_; |
| 85 disk_cache::Entry *entry_; | 119 disk_cache::Entry* entry_; |
| 86 CompletionCallback* user_callback_; | 120 CompletionCallback* user_callback_; |
| 87 scoped_refptr<net::IOBuffer> read_buffer_; | 121 scoped_refptr<net::IOBuffer> read_buffer_; |
| 88 scoped_refptr<net::IOBuffer> write_buffer_; | 122 scoped_refptr<net::IOBuffer> write_buffer_; |
| 89 std::string data_; | 123 std::string data_; |
| 90 }; | 124 }; |
| 91 | 125 |
| 92 } // namespace net | 126 } // namespace net |
| 93 | 127 |
| 94 #endif // NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H | 128 #endif // NET_HTTP_DISK_CACHE_BASED_SSL_HOST_INFO_H |
| OLD | NEW |