00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_HTTP_PUBLIC_INFLATING_FETCH_H_
00020 #define NET_INSTAWEB_HTTP_PUBLIC_INFLATING_FETCH_H_
00021
00022 #include "base/scoped_ptr.h"
00023 #include "net/instaweb/http/public/async_fetch.h"
00024 #include "net/instaweb/util/public/basictypes.h"
00025 #include "net/instaweb/util/public/gzip_inflater.h"
00026 #include "net/instaweb/util/public/string_util.h"
00027
00028 namespace net_instaweb {
00029
00030 class MessageHandler;
00031
00042 class InflatingFetch : public SharedAsyncFetch {
00043 public:
00044 explicit InflatingFetch(AsyncFetch* fetch);
00045 virtual ~InflatingFetch();
00046
00050 void EnableGzipFromBackend();
00051
00052 protected:
00053 virtual bool HandleWrite(const StringPiece& sp, MessageHandler* handler);
00054 virtual void HandleHeadersComplete();
00055 virtual void HandleDone(bool success);
00056 virtual void Reset();
00057
00058 private:
00059 void InitInflater(GzipInflater::InflateType, const StringPiece& value);
00060 bool IsCompressionAllowedInRequest();
00061
00062 scoped_ptr<GzipInflater> inflater_;
00063 bool request_checked_for_accept_encoding_;
00064 bool compression_desired_;
00065 bool inflate_failure_;
00066 DISALLOW_COPY_AND_ASSIGN(InflatingFetch);
00067 };
00068
00069 }
00070
00071 #endif ///< NET_INSTAWEB_HTTP_PUBLIC_INFLATING_FETCH_H_