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