Page Speed Optimization Libraries
1.5.27.2
|
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/http/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 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 00133 static bool MayHaveCustomOptions(const QueryParams& params, 00134 const RequestHeaders* req_headers, 00135 const ResponseHeaders* resp_headers); 00136 00138 template <class HeaderT> 00139 static bool HeadersMayHaveCustomOptions(const QueryParams& params, 00140 const HeaderT* headers); 00141 00143 static Status ScanNameValue(const StringPiece& name, 00144 const GoogleString& value, 00145 DeviceProperties* device_properties, 00146 RewriteOptions* options, 00147 MessageHandler* handler); 00148 00150 static Status ParseResourceOption(StringPiece value, RewriteOptions* options, 00151 const RewriteFilter* rewrite_filter); 00152 00155 static bool ParseClientOptions( 00156 const StringPiece& client_options, 00157 ProxyMode* proxy_mode, 00158 DeviceProperties::ImageQualityPreference* image_quality); 00159 00162 static bool SetEffectiveImageQualities( 00163 DeviceProperties::ImageQualityPreference quality_preference, 00164 DeviceProperties* device_properties, 00165 RewriteOptions* options); 00166 00168 static bool UpdateRewriteOptionsWithClientOptions( 00169 const GoogleString& header_value, DeviceProperties* device_properties, 00170 RewriteOptions* options); 00171 00173 static bool ParseProxyMode(const GoogleString* mode_name, ProxyMode* mode); 00174 00176 static bool ParseImageQualityPreference( 00177 const GoogleString* preference_name, 00178 DeviceProperties::ImageQualityPreference* preference); 00179 }; 00180 00181 } 00182 00183 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_QUERY_H_