20 #ifndef NET_INSTAWEB_APACHE_INSTAWEB_HANDLER_H_
21 #define NET_INSTAWEB_APACHE_INSTAWEB_HANDLER_H_
25 #include "net/instaweb/http/public/request_context.h"
27 #include "net/instaweb/rewriter/public/rewrite_query.h"
28 #include "pagespeed/kernel/base/basictypes.h"
29 #include "pagespeed/kernel/base/scoped_ptr.h"
30 #include "pagespeed/kernel/base/string.h"
31 #include "pagespeed/kernel/base/string_util.h"
32 #include "pagespeed/kernel/base/thread_system.h"
33 #include "pagespeed/kernel/http/content_type.h"
34 #include "pagespeed/kernel/http/google_url.h"
36 #include "apr_pools.h"
42 namespace net_instaweb {
44 class ApacheRequestContext;
45 class ApacheRewriteDriverFactory;
46 class ApacheServerContext;
47 class InPlaceResourceRecorder;
50 class ResponseHeaders;
53 class SystemRewriteOptions;
77 virtual void HandleHeadersComplete();
78 virtual void HandleDone(
bool success);
89 bool status_ok()
const {
return status_ok_; }
99 GoogleString mapped_url_;
102 scoped_ptr<ThreadSystem::CondvarCapableMutex> mutex_;
103 scoped_ptr<ThreadSystem::Condvar> condvar_;
109 int64 blocking_fetch_timeout_ms_;
133 const RequestContextPtr request_context()
const {
return request_context_; }
134 bool use_custom_options()
const {
return custom_options_.get() != NULL; }
135 const QueryParams& query_params() {
return rewrite_query_.query_params(); }
136 const QueryParams& pagespeed_query_params() {
137 return rewrite_query_.pagespeed_query_params();
139 const QueryParams& pagespeed_option_cookies() {
140 return rewrite_query_.pagespeed_option_cookies();
143 void SetupSpdyConnectionIfNeeded();
144 void RemoveStrippedResponseHeadersFromApacheRequest();
153 ApacheFetch*
MakeFetch(
const GoogleString& url);
181 RequestHeaders* ReleaseRequestHeaders() {
return request_headers_.release(); }
220 void ComputeCustomOptions();
222 static bool IsCompressibleContentType(
const char* content_type);
224 static void send_out_headers_and_body(
225 request_rec* request,
226 const ResponseHeaders& response_headers,
227 const GoogleString& output);
233 request_rec* request,
238 static void write_handler_response(
const StringPiece& output,
239 request_rec* request,
240 ContentType content_type,
241 const StringPiece& cache_control);
242 static void write_handler_response(
const StringPiece& output,
243 request_rec* request);
250 static const char* get_instaweb_resource_url(
256 static int log_request_headers(
void* logging_data,
const char* key,
259 static void instaweb_static_handler(request_rec* request,
262 static apr_status_t instaweb_statistics_handler(
271 static bool parse_query_params(
const request_rec* request, GoogleString* data,
277 static bool parse_body_from_post(
const request_rec* request,
278 GoogleString* data, apr_status_t* ret);
280 static apr_status_t instaweb_beacon_handler(
284 const GoogleUrl& gurl);
286 request_rec* request_;
287 RequestContextPtr request_context_;
290 scoped_ptr<RequestHeaders> request_headers_;
291 scoped_ptr<ResponseHeaders> response_headers_;
292 GoogleString original_url_;
293 GoogleUrl stripped_gurl_;
294 scoped_ptr<SystemRewriteOptions> custom_options_;
306 int num_response_attributes_;
308 scoped_ptr<ApacheFetch> fetch_;
Definition: instaweb_handler.h:126
Definition: instaweb_handler.h:57
Definition: rewrite_query.h:41
Definition: in_place_resource_recorder.h:43
void HandleAsPagespeedResource()
static apr_status_t instaweb_map_to_storage(request_rec *request)
void WaitForFetch()
Waits for an outstanding fetch (obtained by MakeFetch) to complete.
static bool is_pagespeed_subrequest(request_rec *request)
virtual const RequestContextPtr & request_context()
Definition: async_fetch.h:151
Definition: rewrite_options.h:439
ApacheFetch * MakeFetch()
Definition: instaweb_handler.h:157
void set_handle_error(bool x)
Definition: instaweb_handler.h:75
Definition: system_rewrite_options.h:31
Definition: apache_server_context.h:49
RewriteDriver * MakeDriver()
Writer object that writes to an Apache Request stream.
Definition: apache_writer.h:33
const GoogleUrl & stripped_gurl() const
Any PageSpeed query params are removed.
Definition: instaweb_handler.h:132
Definition: rewrite_driver.h:98
static apr_status_t instaweb_handler(request_rec *request)
Definition: server_context.h:101
Definition: async_fetch.h:244
static apr_status_t save_url_hook(request_rec *request)
virtual bool IsCachedResultValid(const ResponseHeaders &headers)
static void AboutToBeDoneWithRecorder(request_rec *request, InPlaceResourceRecorder *recorder)
const SystemRewriteOptions * options()
Definition: instaweb_handler.h:185
void set_is_proxy(bool x)
Definition: instaweb_handler.h:96
Creates an Apache RewriteDriver.
Definition: apache_rewrite_driver_factory.h:47
Definition: rewrite_options.h:83
Definition: apache_request_context.h:39
static apr_status_t save_url_in_note(request_rec *request, ApacheServerContext *server_context)