15 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_QUERY_H_
16 #define NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_QUERY_H_
18 #include "net/instaweb/rewriter/public/device_properties.h"
19 #include "net/instaweb/http/public/request_context.h"
20 #include "pagespeed/kernel/base/basictypes.h"
21 #include "pagespeed/kernel/base/gtest_prod.h"
22 #include "pagespeed/kernel/base/scoped_ptr.h"
23 #include "pagespeed/kernel/base/string.h"
24 #include "pagespeed/kernel/base/string_util.h"
25 #include "pagespeed/kernel/http/headers.h"
26 #include "pagespeed/kernel/http/query_params.h"
27 #include "pagespeed/kernel/http/request_headers.h"
29 namespace net_instaweb {
33 class RequestProperties;
34 class ResponseHeaders;
36 class RewriteDriverFactory;
45 static const char kPageSpeed[];
46 static const char kModPagespeedFilters[];
47 static const char kPageSpeedFilters[];
89 Status
Scan(
bool allow_related_options,
90 bool allow_options_to_be_specified_by_cookies,
91 const GoogleString& request_option_override,
92 const RequestContextPtr& request_context,
95 GoogleUrl* request_url,
96 RequestHeaders* request_headers,
97 ResponseHeaders* response_headers,
98 MessageHandler* handler);
107 template <
class HeaderT>
109 const GoogleString& request_option_override,
110 const RequestContextPtr& request_context,
114 MessageHandler* handler);
128 const QueryParams& query_params()
const {
return query_params_; }
129 const QueryParams& pagespeed_query_params()
const {
130 return pagespeed_query_params_;
132 const QueryParams& pagespeed_option_cookies()
const {
133 return pagespeed_option_cookies_;
135 const RewriteOptions* options()
const {
return options_.get(); }
136 RewriteOptions* ReleaseOptions() {
return options_.release(); }
140 static bool IsOK(Status status) {
141 return (status == kNoneFound) || (status == kSuccess);
145 friend class RewriteQueryTest;
146 FRIEND_TEST(RewriteQueryTest, ClientOptionsEmptyHeader);
147 FRIEND_TEST(RewriteQueryTest, ClientOptionsMultipleHeaders);
148 FRIEND_TEST(RewriteQueryTest, ClientOptionsOrder1);
149 FRIEND_TEST(RewriteQueryTest, ClientOptionsOrder2);
150 FRIEND_TEST(RewriteQueryTest, ClientOptionsCaseInsensitive);
151 FRIEND_TEST(RewriteQueryTest, ClientOptionsNonDefaultProxyMode);
152 FRIEND_TEST(RewriteQueryTest, ClientOptionsValidVersionBadOptions);
153 FRIEND_TEST(RewriteQueryTest, ClientOptionsInvalidVersion);
159 kProxyModeNoImageTransform,
162 kProxyModeNoTransform,
168 static bool MayHaveCustomOptions(
169 const QueryParams& params,
const RequestHeaders* req_headers,
170 const ResponseHeaders* resp_headers,
171 const RequestHeaders::CookieMultimap& cookies);
174 template <
class HeaderT>
175 static bool HeadersMayHaveCustomOptions(
const QueryParams& params,
176 const HeaderT* headers);
179 static bool CookiesMayHaveCustomOptions(
180 const RequestHeaders::CookieMultimap& cookies);
183 static Status ScanNameValue(
const StringPiece& name,
184 const StringPiece& value,
186 const RequestContextPtr& request_context,
187 RequestProperties* request_properties,
188 RewriteOptions* options,
189 MessageHandler* handler);
192 static Status ParseResourceOption(StringPiece value, RewriteOptions* options,
193 const RewriteFilter* rewrite_filter);
197 static bool ParseClientOptions(
198 const StringPiece& client_options,
199 ProxyMode* proxy_mode,
204 static bool SetEffectiveImageQualities(
206 RequestProperties* request_properties,
207 RewriteOptions* options);
210 static bool UpdateRewriteOptionsWithClientOptions(
211 StringPiece header_value, RequestProperties* request_properties,
212 RewriteOptions* options);
215 static bool ParseProxyMode(
const GoogleString* mode_name, ProxyMode* mode);
218 static bool ParseImageQualityPreference(
219 const GoogleString* preference_name,
222 QueryParams query_params_;
223 QueryParams pagespeed_query_params_;
224 QueryParams pagespeed_option_cookies_;
225 scoped_ptr<RewriteOptions> options_;
227 DISALLOW_COPY_AND_ASSIGN(RewriteQuery);
static const char kModPagespeed[]
The names of query-params.
Definition: rewrite_query.h:44
ImageQualityPreference
Definition: device_properties.h:67
Definition: rewrite_query.h:41
static Status ScanHeader(bool allow_options, const GoogleString &request_option_override, const RequestContextPtr &request_context, HeaderT *headers, RequestProperties *request_properties, RewriteOptions *options, MessageHandler *handler)
static GoogleString GenerateResourceOption(StringPiece filter_id, RewriteDriver *driver)
static const char kNoscriptValue[]
Definition: rewrite_query.h:52
static bool IsOK(Status status)
Definition: rewrite_query.h:140
Definition: rewrite_driver.h:98
Definition: server_context.h:101
Status Scan(bool allow_related_options, bool allow_options_to_be_specified_by_cookies, const GoogleString &request_option_override, const RequestContextPtr &request_context, RewriteDriverFactory *factory, ServerContext *server_context, GoogleUrl *request_url, RequestHeaders *request_headers, ResponseHeaders *response_headers, MessageHandler *handler)
static bool MightBeCustomOption(StringPiece name)
Definition: rewrite_options.h:83
Definition: request_properties.h:39
Definition: rewrite_driver_factory.h:73