Page Speed Optimization Libraries
1.4.26.1
|
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_