Page Speed Optimization Libraries  1.4.26.1
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/util/public/gtest_prod.h"
00019 #include "net/instaweb/util/public/scoped_ptr.h"
00020 #include "net/instaweb/util/public/string.h"
00021 #include "net/instaweb/util/public/string_util.h"
00022 
00023 namespace net_instaweb {
00024 
00025 class DeviceProperties;
00026 class GoogleUrl;
00027 class MessageHandler;
00028 class QueryParams;
00029 class RequestHeaders;
00030 class ResponseHeaders;
00031 class RewriteDriver;
00032 class RewriteDriverFactory;
00033 class RewriteFilter;
00034 class RewriteOptions;
00035 class ServerContext;
00036 
00037 class RewriteQuery {
00038  public:
00040   static const char kModPagespeed[];
00041   static const char kModPagespeedFilters[];
00046   static const char kNoscriptValue[];
00047 
00048   enum Status {
00049     kSuccess,
00050     kInvalid,
00051     kNoneFound
00052   };
00053 
00078   static Status Scan(bool allow_related_options,
00079                      RewriteDriverFactory* factory,
00080                      ServerContext* server_context,
00081                      GoogleUrl* request_url,
00082                      RequestHeaders* request_headers,
00083                      ResponseHeaders* response_headers,
00084                      scoped_ptr<RewriteOptions>* options,
00085                      MessageHandler* handler);
00086 
00095   template <class HeaderT>
00096   static Status ScanHeader(HeaderT* headers,
00097                            DeviceProperties* device_properties,
00098                            RewriteOptions* options,
00099                            MessageHandler* handler);
00100 
00101 
00106   static GoogleString GenerateResourceOption(StringPiece filter_id,
00107                                              RewriteDriver* driver);
00108 
00109  private:
00110   friend class RewriteQueryTest;
00111   FRIEND_TEST(RewriteQueryTest, ClientOptionsEmptyHeader);
00112   FRIEND_TEST(RewriteQueryTest, ClientOptionsMultipleHeaders);
00113   FRIEND_TEST(RewriteQueryTest, ClientOptionsOrder1);
00114   FRIEND_TEST(RewriteQueryTest, ClientOptionsOrder2);
00115   FRIEND_TEST(RewriteQueryTest, ClientOptionsCaseInsensitive);
00116   FRIEND_TEST(RewriteQueryTest, ClientOptionsNonDefaultProxyMode);
00117   FRIEND_TEST(RewriteQueryTest, ClientOptionsValidVersionBadOptions);
00118   FRIEND_TEST(RewriteQueryTest, ClientOptionsInvalidVersion);
00119 
00120   enum ProxyMode {
00122     kProxyModeDefault,
00124     kProxyModeNoImageTransform,
00127     kProxyModeNoTransform,
00128   };
00129 
00130   enum ImageQualityPreference {
00132     kImageQualityDefault,
00134     kImageQualityLow,
00136     kImageQualityMedium,
00138     kImageQualityHigh,
00139   };
00140 
00144   static bool MayHaveCustomOptions(const QueryParams& params,
00145                                    const RequestHeaders* req_headers,
00146                                    const ResponseHeaders* resp_headers);
00147 
00149   template <class HeaderT>
00150   static bool HeadersMayHaveCustomOptions(const QueryParams& params,
00151                                           const HeaderT* headers);
00152 
00154   static Status ScanNameValue(const StringPiece& name,
00155                               const GoogleString& value,
00156                               DeviceProperties* device_properties,
00157                               RewriteOptions* options,
00158                               MessageHandler* handler);
00159 
00161   static Status ParseResourceOption(StringPiece value, RewriteOptions* options,
00162                                     const RewriteFilter* rewrite_filter);
00163 
00166   static bool ParseClientOptions(
00167       const StringPiece& client_options,
00168       ProxyMode* proxy_mode,
00169       ImageQualityPreference* image_quality);
00170 
00173   static bool SetEffectiveImageQualities(
00174       ImageQualityPreference quality_preference,
00175       DeviceProperties* device_properties,
00176       RewriteOptions* options);
00177 
00179   static bool UpdateRewriteOptionsWithClientOptions(
00180       const GoogleString& header_value, DeviceProperties* device_properties,
00181       RewriteOptions* options);
00182 
00184   static bool ParseProxyMode(const GoogleString* mode_name, ProxyMode* mode);
00185 
00187   static bool ParseImageQualityPreference(
00188       const GoogleString* preference_name, ImageQualityPreference* preference);
00189 };
00190 
00191 }  
00192 
00193 #endif  ///< NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_QUERY_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines