| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 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 NET_HTTP_HTTP_TRANSACTION_H_ | |
| 6 #define NET_HTTP_HTTP_TRANSACTION_H_ | |
| 7 | |
| 8 #include "net/base/completion_callback.h" | |
| 9 #include "net/base/load_states.h" | |
| 10 #include "net/base/net_export.h" | |
| 11 #include "net/base/request_priority.h" | |
| 12 #include "net/base/upload_progress.h" | |
| 13 #include "net/websockets/websocket_handshake_stream_base.h" | |
| 14 | |
| 15 namespace net { | |
| 16 | |
| 17 class AuthCredentials; | |
| 18 class BoundNetLog; | |
| 19 class HttpRequestHeaders; | |
| 20 struct HttpRequestInfo; | |
| 21 class HttpResponseInfo; | |
| 22 class IOBuffer; | |
| 23 struct LoadTimingInfo; | |
| 24 class ProxyInfo; | |
| 25 class QuicServerInfo; | |
| 26 class X509Certificate; | |
| 27 | |
| 28 // Represents a single HTTP transaction (i.e., a single request/response pair). | |
| 29 // HTTP redirects are not followed and authentication challenges are not | |
| 30 // answered. Cookies are assumed to be managed by the caller. | |
| 31 class NET_EXPORT_PRIVATE HttpTransaction { | |
| 32 public: | |
| 33 // If |*defer| is set to true, the transaction will wait until | |
| 34 // ResumeNetworkStart is called before establishing a connection. | |
| 35 typedef base::Callback<void(bool* defer)> BeforeNetworkStartCallback; | |
| 36 | |
| 37 // Provides an opportunity to add proxy-specific request headers. Called after | |
| 38 // it is determined that a proxy is being used and before the request headers | |
| 39 // are sent. |proxy_info| contains information about the proxy being used, | |
| 40 // and additional headers may be added to |request_headers|. | |
| 41 typedef base::Callback<void( | |
| 42 const ProxyInfo& proxy_info, | |
| 43 HttpRequestHeaders* request_headers)> BeforeProxyHeadersSentCallback; | |
| 44 | |
| 45 // Stops any pending IO and destroys the transaction object. | |
| 46 virtual ~HttpTransaction() {} | |
| 47 | |
| 48 // Starts the HTTP transaction (i.e., sends the HTTP request). | |
| 49 // | |
| 50 // Returns OK if the transaction could be started synchronously, which means | |
| 51 // that the request was served from the cache. ERR_IO_PENDING is returned to | |
| 52 // indicate that the CompletionCallback will be notified once response info is | |
| 53 // available or if an IO error occurs. Any other return value indicates that | |
| 54 // the transaction could not be started. | |
| 55 // | |
| 56 // Regardless of the return value, the caller is expected to keep the | |
| 57 // request_info object alive until Destroy is called on the transaction. | |
| 58 // | |
| 59 // NOTE: The transaction is not responsible for deleting the callback object. | |
| 60 // | |
| 61 // Profiling information for the request is saved to |net_log| if non-NULL. | |
| 62 virtual int Start(const HttpRequestInfo* request_info, | |
| 63 const CompletionCallback& callback, | |
| 64 const BoundNetLog& net_log) = 0; | |
| 65 | |
| 66 // Restarts the HTTP transaction, ignoring the last error. This call can | |
| 67 // only be made after a call to Start (or RestartIgnoringLastError) failed. | |
| 68 // Once Read has been called, this method cannot be called. This method is | |
| 69 // used, for example, to continue past various SSL related errors. | |
| 70 // | |
| 71 // Not all errors can be ignored using this method. See error code | |
| 72 // descriptions for details about errors that can be ignored. | |
| 73 // | |
| 74 // NOTE: The transaction is not responsible for deleting the callback object. | |
| 75 // | |
| 76 virtual int RestartIgnoringLastError(const CompletionCallback& callback) = 0; | |
| 77 | |
| 78 // Restarts the HTTP transaction with a client certificate. | |
| 79 virtual int RestartWithCertificate(X509Certificate* client_cert, | |
| 80 const CompletionCallback& callback) = 0; | |
| 81 | |
| 82 // Restarts the HTTP transaction with authentication credentials. | |
| 83 virtual int RestartWithAuth(const AuthCredentials& credentials, | |
| 84 const CompletionCallback& callback) = 0; | |
| 85 | |
| 86 // Returns true if auth is ready to be continued. Callers should check | |
| 87 // this value anytime Start() completes: if it is true, the transaction | |
| 88 // can be resumed with RestartWithAuth(L"", L"", callback) to resume | |
| 89 // the automatic auth exchange. This notification gives the caller a | |
| 90 // chance to process the response headers from all of the intermediate | |
| 91 // restarts needed for authentication. | |
| 92 virtual bool IsReadyToRestartForAuth() = 0; | |
| 93 | |
| 94 // Once response info is available for the transaction, response data may be | |
| 95 // read by calling this method. | |
| 96 // | |
| 97 // Response data is copied into the given buffer and the number of bytes | |
| 98 // copied is returned. ERR_IO_PENDING is returned if response data is not | |
| 99 // yet available. The CompletionCallback is notified when the data copy | |
| 100 // completes, and it is passed the number of bytes that were successfully | |
| 101 // copied. Or, if a read error occurs, the CompletionCallback is notified of | |
| 102 // the error. Any other negative return value indicates that the transaction | |
| 103 // could not be read. | |
| 104 // | |
| 105 // NOTE: The transaction is not responsible for deleting the callback object. | |
| 106 // If the operation is not completed immediately, the transaction must acquire | |
| 107 // a reference to the provided buffer. | |
| 108 // | |
| 109 virtual int Read(IOBuffer* buf, int buf_len, | |
| 110 const CompletionCallback& callback) = 0; | |
| 111 | |
| 112 // Stops further caching of this request by the HTTP cache, if there is any. | |
| 113 virtual void StopCaching() = 0; | |
| 114 | |
| 115 // Gets the full request headers sent to the server. This is guaranteed to | |
| 116 // work only if Start returns success and the underlying transaction supports | |
| 117 // it. (Right now, this is only network transactions, not cache ones.) | |
| 118 // | |
| 119 // Returns true and overwrites headers if it can get the request headers; | |
| 120 // otherwise, returns false and does not modify headers. | |
| 121 virtual bool GetFullRequestHeaders(HttpRequestHeaders* headers) const = 0; | |
| 122 | |
| 123 // Get the number of bytes received from network. | |
| 124 virtual int64 GetTotalReceivedBytes() const = 0; | |
| 125 | |
| 126 // Called to tell the transaction that we have successfully reached the end | |
| 127 // of the stream. This is equivalent to performing an extra Read() at the end | |
| 128 // that should return 0 bytes. This method should not be called if the | |
| 129 // transaction is busy processing a previous operation (like a pending Read). | |
| 130 // | |
| 131 // DoneReading may also be called before the first Read() to notify that the | |
| 132 // entire response body is to be ignored (e.g., in a redirect). | |
| 133 virtual void DoneReading() = 0; | |
| 134 | |
| 135 // Returns the response info for this transaction or NULL if the response | |
| 136 // info is not available. | |
| 137 virtual const HttpResponseInfo* GetResponseInfo() const = 0; | |
| 138 | |
| 139 // Returns the load state for this transaction. | |
| 140 virtual LoadState GetLoadState() const = 0; | |
| 141 | |
| 142 // Returns the upload progress in bytes. If there is no upload data, | |
| 143 // zero will be returned. This does not include the request headers. | |
| 144 virtual UploadProgress GetUploadProgress() const = 0; | |
| 145 | |
| 146 // SetQuicServerInfo sets a object which reads and writes public information | |
| 147 // about a QUIC server. | |
| 148 virtual void SetQuicServerInfo(QuicServerInfo* quic_server_info) = 0; | |
| 149 | |
| 150 // Populates all of load timing, except for request start times and receive | |
| 151 // headers time. | |
| 152 // |load_timing_info| must have all null times when called. Returns false and | |
| 153 // does not modify |load_timing_info| if there's no timing information to | |
| 154 // provide. | |
| 155 virtual bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const = 0; | |
| 156 | |
| 157 // Called when the priority of the parent job changes. | |
| 158 virtual void SetPriority(RequestPriority priority) = 0; | |
| 159 | |
| 160 // Set the WebSocketHandshakeStreamBase::CreateHelper to be used for the | |
| 161 // request. Only relevant to WebSocket transactions. Must be called before | |
| 162 // Start(). Ownership of |create_helper| remains with the caller. | |
| 163 virtual void SetWebSocketHandshakeStreamCreateHelper( | |
| 164 WebSocketHandshakeStreamBase::CreateHelper* create_helper) = 0; | |
| 165 | |
| 166 // Set the callback to receive notification just before network use. | |
| 167 virtual void SetBeforeNetworkStartCallback( | |
| 168 const BeforeNetworkStartCallback& callback) = 0; | |
| 169 | |
| 170 // Set the callback to receive notification just before a proxy request | |
| 171 // is to be sent. | |
| 172 virtual void SetBeforeProxyHeadersSentCallback( | |
| 173 const BeforeProxyHeadersSentCallback& callback) = 0; | |
| 174 | |
| 175 // Resumes the transaction after being deferred. | |
| 176 virtual int ResumeNetworkStart() = 0; | |
| 177 }; | |
| 178 | |
| 179 } // namespace net | |
| 180 | |
| 181 #endif // NET_HTTP_HTTP_TRANSACTION_H_ | |
| OLD | NEW |