Page Speed Optimization Libraries
1.3.25.1
|
00001 // Copyright 2010 Google Inc. 00016 00017 #ifndef NET_INSTAWEB_APACHE_APACHE_CONFIG_H_ 00018 #define NET_INSTAWEB_APACHE_APACHE_CONFIG_H_ 00019 00020 #include "net/instaweb/rewriter/public/rewrite_options.h" 00021 #include "net/instaweb/system/public/system_rewrite_options.h" 00022 #include "net/instaweb/util/public/basictypes.h" 00023 #include "net/instaweb/util/public/string.h" 00024 #include "net/instaweb/util/public/string_util.h" 00025 00026 namespace net_instaweb { 00027 00028 class Hasher; 00029 00032 class ApacheConfig : public SystemRewriteOptions { 00033 public: 00034 enum RefererStatisticsOutputLevel { 00035 kFast, 00036 kSimple, 00037 kOrganized, 00038 }; 00039 00040 static bool ParseRefererStatisticsOutputLevel( 00041 const StringPiece& in, RefererStatisticsOutputLevel* out); 00042 00043 static void Initialize(); 00044 static void Terminate(); 00045 00046 explicit ApacheConfig(const StringPiece& dir); 00047 ApacheConfig(); 00048 ~ApacheConfig() {} 00049 00053 StringPiece description() const { return description_; } 00054 void set_description(const StringPiece& x) { x.CopyToString(&description_); } 00055 00056 int64 slurp_flush_limit() const { 00057 return slurp_flush_limit_.value(); 00058 } 00059 void set_slurp_flush_limit(int64 x) { 00060 set_option(x, &slurp_flush_limit_); 00061 } 00062 bool collect_referer_statistics() const { 00063 return collect_referer_statistics_.value(); 00064 } 00065 void set_collect_referer_statistics(bool x) { 00066 set_option(x, &collect_referer_statistics_); 00067 } 00068 bool hash_referer_statistics() const { 00069 return hash_referer_statistics_.value(); 00070 } 00071 void set_hash_referer_statistics(bool x) { 00072 set_option(x, &hash_referer_statistics_); 00073 } 00074 bool slurp_read_only() const { 00075 return slurp_read_only_.value(); 00076 } 00077 void set_slurp_read_only(bool x) { 00078 set_option(x, &slurp_read_only_); 00079 } 00080 bool rate_limit_background_fetches() const { 00081 return rate_limit_background_fetches_.value(); 00082 } 00083 RefererStatisticsOutputLevel referer_statistics_output_level() const { 00084 return referer_statistics_output_level_.value(); 00085 } 00086 void set_referer_statistics_output_level(RefererStatisticsOutputLevel x) { 00087 set_option(x, &referer_statistics_output_level_); 00088 } 00089 const GoogleString& slurp_directory() const { 00090 return slurp_directory_.value(); 00091 } 00092 void set_slurp_directory(GoogleString x) { 00093 set_option(x, &slurp_directory_); 00094 } 00095 00099 bool test_proxy() const { 00100 return test_proxy_.value(); 00101 } 00102 void set_test_proxy(bool x) { 00103 set_option(x, &test_proxy_); 00104 } 00105 00113 GoogleString test_proxy_slurp() const { 00114 return test_proxy_slurp_.value(); 00115 } 00116 00118 bool slurping_enabled() const { 00119 return !slurp_directory().empty(); 00120 } 00121 00122 bool slurping_enabled_read_only() const { 00123 return slurping_enabled() && slurp_read_only(); 00124 } 00125 00126 bool experimental_fetch_from_mod_spdy() const { 00127 return experimental_fetch_from_mod_spdy_.value(); 00128 } 00129 00131 virtual ApacheConfig* Clone() const; 00132 00135 static const ApacheConfig* DynamicCast(const RewriteOptions* instance); 00136 static ApacheConfig* DynamicCast(RewriteOptions* instance); 00137 00138 protected: 00139 template<class T> class ApacheOption : public OptionTemplateBase<T> { 00140 public: 00141 ApacheOption() {} 00142 00144 virtual bool SetFromString(const GoogleString& value_string) { 00145 T value; 00146 bool success = ApacheConfig::ParseFromString(value_string, &value); 00147 if (success) { 00148 this->set(value); 00149 } 00150 return success; 00151 } 00152 00153 virtual GoogleString Signature(const Hasher* hasher) const { 00154 return ApacheConfig::OptionSignature(this->value(), hasher); 00155 } 00156 00157 virtual GoogleString ToString() const { 00158 return ApacheConfig::ToString(this->value()); 00159 } 00160 00161 private: 00162 DISALLOW_COPY_AND_ASSIGN(ApacheOption); 00163 }; 00164 00165 private: 00168 static Properties* apache_properties_; 00169 00176 template<class RewriteOptionsSubclass, class OptionClass> 00177 static void add_option(typename OptionClass::ValueType default_value, 00178 OptionClass RewriteOptionsSubclass::*offset, 00179 const char* id, 00180 OptionEnum option_enum) { 00181 AddProperty(default_value, offset, id, option_enum, apache_properties_); 00182 } 00183 00184 void InitializeSignaturesAndDefaults(); 00185 static void AddProperties(); 00186 void Init(); 00187 00188 static bool ParseFromString(const GoogleString& value_string, 00189 RefererStatisticsOutputLevel* value) { 00190 return ParseRefererStatisticsOutputLevel(value_string, value); 00191 } 00192 00193 static GoogleString OptionSignature(RefererStatisticsOutputLevel x, 00194 const Hasher* hasher) { 00197 return IntegerToString(x); 00198 } 00199 00200 static GoogleString ToString(RefererStatisticsOutputLevel x) { 00203 return IntegerToString(x); 00204 } 00205 00206 GoogleString description_; 00207 00208 Option<GoogleString> slurp_directory_; 00209 Option<GoogleString> test_proxy_slurp_; 00210 00211 ApacheOption<RefererStatisticsOutputLevel> referer_statistics_output_level_; 00212 00213 Option<bool> collect_referer_statistics_; 00214 Option<bool> hash_referer_statistics_; 00215 Option<bool> slurp_read_only_; 00216 Option<bool> test_proxy_; 00217 Option<bool> rate_limit_background_fetches_; 00218 Option<bool> experimental_fetch_from_mod_spdy_; 00219 00220 Option<int64> slurp_flush_limit_; 00221 00222 DISALLOW_COPY_AND_ASSIGN(ApacheConfig); 00223 }; 00224 00225 } 00226 00227 #endif ///< NET_INSTAWEB_APACHE_APACHE_CONFIG_H_