22 #ifndef NET_INSTAWEB_HTTP_PUBLIC_ASYNC_FETCH_H_
23 #define NET_INSTAWEB_HTTP_PUBLIC_ASYNC_FETCH_H_
26 #include "net/instaweb/http/public/request_context.h"
27 #include "pagespeed/kernel/base/basictypes.h"
28 #include "pagespeed/kernel/base/string.h"
29 #include "pagespeed/kernel/base/string_util.h"
30 #include "pagespeed/kernel/base/writer.h"
31 #include "pagespeed/kernel/http/request_headers.h"
32 #include "pagespeed/kernel/http/response_headers.h"
35 namespace net_instaweb {
37 class AbstractLogRecord;
55 static const int kContentLengthUnknown = -1;
58 explicit AsyncFetch(
const RequestContextPtr& request_ctx);
72 void Done(
bool success);
76 virtual bool Write(
const StringPiece& content, MessageHandler* handler);
77 virtual bool Flush(MessageHandler* handler);
112 void set_response_headers(ResponseHeaders* headers);
121 void set_extra_response_headers(ResponseHeaders* headers);
129 virtual void Reset() { headers_complete_ =
false; }
131 bool headers_complete()
const {
return headers_complete_; }
140 return content_length_ != kContentLengthUnknown;
142 int64 content_length()
const {
return content_length_; }
143 void set_content_length(int64 x) { content_length_ = x; }
158 virtual bool HandleWrite(
const StringPiece& sp, MessageHandler* handler) = 0;
159 virtual bool HandleFlush(MessageHandler* handler) = 0;
160 virtual void HandleDone(
bool success) = 0;
161 virtual void HandleHeadersComplete() = 0;
164 RequestHeaders* request_headers_;
165 ResponseHeaders* response_headers_;
166 ResponseHeaders* extra_response_headers_;
167 RequestContextPtr request_ctx_;
168 bool owns_request_headers_;
169 bool owns_response_headers_;
170 bool owns_extra_response_headers_;
171 bool headers_complete_;
172 int64 content_length_;
184 :
AsyncFetch(request_ctx), buffer_pointer_(&buffer_) {
188 StringAsyncFetch(
const RequestContextPtr& request_ctx, GoogleString* buffer)
189 :
AsyncFetch(request_ctx), buffer_pointer_(buffer) {
195 virtual bool HandleWrite(
const StringPiece& content,
196 MessageHandler* handler) {
197 content.AppendToString(buffer_pointer_);
200 virtual bool HandleFlush(MessageHandler* handler) {
return true; }
201 virtual void HandleHeadersComplete() {}
202 virtual void HandleDone(
bool success) {
207 bool success()
const {
return success_; }
208 bool done()
const {
return done_; }
209 const GoogleString& buffer()
const {
return *buffer_pointer_; }
214 buffer_pointer_->clear();
225 void set_done(
bool done) { done_ = done; }
233 GoogleString buffer_;
234 GoogleString* buffer_pointer_;
253 virtual bool HandleWrite(
const StringPiece& sp, MessageHandler* handler);
254 virtual bool HandleFlush(MessageHandler* handler);
277 virtual void HandleDone(
bool success) {
278 base_fetch_->
Done(success);
281 virtual bool HandleWrite(
const StringPiece& content,
282 MessageHandler* handler) {
283 return base_fetch_->
Write(content, handler);
286 virtual bool HandleFlush(MessageHandler* handler) {
287 return base_fetch_->Flush(handler);
290 virtual void HandleHeadersComplete();
319 MessageHandler* handler);
322 void set_fallback_responses_served(Variable* x) {
323 fallback_responses_served_ = x;
326 bool serving_fallback()
const {
return serving_fallback_; }
329 virtual void HandleDone(
bool success);
330 virtual bool HandleWrite(
const StringPiece& content, MessageHandler* handler);
331 virtual bool HandleFlush(MessageHandler* handler);
332 virtual void HandleHeadersComplete();
336 MessageHandler* handler_;
338 bool serving_fallback_;
339 Variable* fallback_responses_served_;
356 MessageHandler* handler);
359 void set_num_conditional_refreshes(Variable* x) {
360 num_conditional_refreshes_ = x;
364 virtual void HandleDone(
bool success);
365 virtual bool HandleWrite(
const StringPiece& content, MessageHandler* handler);
366 virtual bool HandleFlush(MessageHandler* handler);
367 virtual void HandleHeadersComplete();
371 MessageHandler* handler_;
375 bool serving_cached_value_;
377 bool added_conditional_headers_to_request_;
379 Variable* num_conditional_refreshes_;
Definition: http_value.h:38
void set_success(bool success)
Definition: async_fetch.h:224
virtual const RequestContextPtr & request_context()
Definition: async_fetch.h:151
ResponseHeaders * response_headers()
See doc for request_headers and set_request_headers.
virtual bool IsBackgroundFetch() const
Definition: async_fetch.h:296
virtual const RequestContextPtr & request_context()
Definition: async_fetch.h:272
GoogleString LoggingString()
RequestHeaders * request_headers()
void SetRequestHeadersTakingOwnership(RequestHeaders *headers)
Same as above, but takes ownership.
static const char kStaleWarningHeaderValue[]
Warning header to be added if a stale response is served.
Definition: async_fetch.h:316
virtual AbstractLogRecord * log_record()
virtual void Reset()
Definition: async_fetch.h:211
Definition: async_fetch.h:267
Definition: async_fetch.h:53
Definition: async_fetch.h:353
void PropagateContentLength()
Propagates any set_content_length from this to the base fetch.
virtual bool IsCachedResultValid(const ResponseHeaders &headers)
Definition: async_fetch.h:292
virtual bool IsBackgroundFetch() const
Definition: async_fetch.h:125
Definition: async_fetch.h:244
ResponseHeaders * extra_response_headers()
Definition: async_fetch.h:313
virtual bool IsCachedResultValid(const ResponseHeaders &headers)
Definition: async_fetch.h:85
Definition: async_fetch.h:181
virtual bool Write(const StringPiece &content, MessageHandler *handler)
void set_request_headers(RequestHeaders *headers)
bool content_length_known() const
Definition: async_fetch.h:139
virtual void Reset()
Definition: async_fetch.h:129