Page Speed Optimization Libraries  1.6.29.3
net/instaweb/rewriter/public/rewrite_query.h
00001 // Copyright 2011 Google Inc.
00014 
00015 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_QUERY_H_
00016 #define NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_QUERY_H_
00017 
00018 #include "net/instaweb/rewriter/public/device_properties.h"
00019 #include "net/instaweb/util/public/gtest_prod.h"
00020 #include "net/instaweb/util/public/scoped_ptr.h"
00021 #include "net/instaweb/util/public/string.h"
00022 #include "net/instaweb/util/public/string_util.h"
00023 
00024 namespace net_instaweb {
00025 
00026 class GoogleUrl;
00027 class MessageHandler;
00028 class QueryParams;
00029 class RequestHeaders;
00030 class RequestProperties;
00031 class ResponseHeaders;
00032 class RewriteDriver;
00033 class RewriteDriverFactory;
00034 class RewriteFilter;
00035 class RewriteOptions;
00036 class ServerContext;
00037 
00038 class RewriteQuery {
00039  public:
00041   static const char kModPagespeed[];
00042   static const char kPageSpeed[];
00043   static const char kModPagespeedFilters[];
00044   static const char kPageSpeedFilters[];
00049   static const char kNoscriptValue[];
00050 
00051   enum Status {
00052     kSuccess,
00053     kInvalid,
00054     kNoneFound
00055   };
00056 
00076   static Status Scan(bool allow_related_options,
00077                      RewriteDriverFactory* factory,
00078                      ServerContext* server_context,
00079                      GoogleUrl* request_url,
00080                      RequestHeaders* request_headers,
00081                      ResponseHeaders* response_headers,
00082                      scoped_ptr<RewriteOptions>* options,
00083                      MessageHandler* handler);
00084 
00092   template <class HeaderT>
00093   static Status ScanHeader(HeaderT* headers,
00094                            RequestProperties* request_properties,
00095                            RewriteOptions* options,
00096                            MessageHandler* handler);
00097 
00098 
00103   static GoogleString GenerateResourceOption(StringPiece filter_id,
00104                                              RewriteDriver* driver);
00105 
00106  private:
00107   friend class RewriteQueryTest;
00108   FRIEND_TEST(RewriteQueryTest, ClientOptionsEmptyHeader);
00109   FRIEND_TEST(RewriteQueryTest, ClientOptionsMultipleHeaders);
00110   FRIEND_TEST(RewriteQueryTest, ClientOptionsOrder1);
00111   FRIEND_TEST(RewriteQueryTest, ClientOptionsOrder2);
00112   FRIEND_TEST(RewriteQueryTest, ClientOptionsCaseInsensitive);
00113   FRIEND_TEST(RewriteQueryTest, ClientOptionsNonDefaultProxyMode);
00114   FRIEND_TEST(RewriteQueryTest, ClientOptionsValidVersionBadOptions);
00115   FRIEND_TEST(RewriteQueryTest, ClientOptionsInvalidVersion);
00116 
00117   enum ProxyMode {
00119     kProxyModeDefault,
00121     kProxyModeNoImageTransform,
00124     kProxyModeNoTransform,
00125   };
00126 
00130   static bool MayHaveCustomOptions(const QueryParams& params,
00131                                    const RequestHeaders* req_headers,
00132                                    const ResponseHeaders* resp_headers);
00133 
00135   template <class HeaderT>
00136   static bool HeadersMayHaveCustomOptions(const QueryParams& params,
00137                                           const HeaderT* headers);
00138 
00140   static Status ScanNameValue(const StringPiece& name,
00141                               const GoogleString& value,
00142                               RequestProperties* request_properties,
00143                               RewriteOptions* options,
00144                               MessageHandler* handler);
00145 
00147   static Status ParseResourceOption(StringPiece value, RewriteOptions* options,
00148                                     const RewriteFilter* rewrite_filter);
00149 
00152   static bool ParseClientOptions(
00153       const StringPiece& client_options,
00154       ProxyMode* proxy_mode,
00155       DeviceProperties::ImageQualityPreference* image_quality);
00156 
00159   static bool SetEffectiveImageQualities(
00160       DeviceProperties::ImageQualityPreference quality_preference,
00161       RequestProperties* request_properties,
00162       RewriteOptions* options);
00163 
00165   static bool UpdateRewriteOptionsWithClientOptions(
00166       const GoogleString& header_value, RequestProperties* request_properties,
00167       RewriteOptions* options);
00168 
00170   static bool ParseProxyMode(const GoogleString* mode_name, ProxyMode* mode);
00171 
00173   static bool ParseImageQualityPreference(
00174       const GoogleString* preference_name,
00175       DeviceProperties::ImageQualityPreference* preference);
00176 };
00177 
00178 }  
00179 
00180 #endif  ///< NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_QUERY_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines