19 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_OPTIONS_H_
20 #define NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_OPTIONS_H_
29 #include "base/logging.h"
34 #include "pagespeed/kernel/base/basictypes.h"
35 #include "pagespeed/kernel/base/dense_hash_map.h"
36 #include "pagespeed/kernel/base/enum_set.h"
37 #include "pagespeed/kernel/base/fast_wildcard_group.h"
38 #include "pagespeed/kernel/base/gtest_prod.h"
39 #include "pagespeed/kernel/base/hasher.h"
40 #include "pagespeed/kernel/base/md5_hasher.h"
41 #include "pagespeed/kernel/base/proto_util.h"
42 #include "pagespeed/kernel/base/rde_hash_map.h"
43 #include "pagespeed/kernel/base/scoped_ptr.h"
44 #include "pagespeed/kernel/base/sha1_signature.h"
45 #include "pagespeed/kernel/base/string.h"
46 #include "pagespeed/kernel/base/string_hash.h"
47 #include "pagespeed/kernel/base/string_util.h"
48 #include "pagespeed/kernel/base/thread_annotations.h"
49 #include "pagespeed/kernel/base/thread_system.h"
50 #include "pagespeed/kernel/base/wildcard.h"
51 #include "pagespeed/kernel/http/http_names.h"
52 #include "pagespeed/kernel/http/semantic_type.h"
53 #include "pagespeed/kernel/http/user_agent_matcher.h"
54 #include "pagespeed/kernel/util/copy_on_write.h"
56 namespace net_instaweb {
90 template<
class ValueType>
class Property;
91 template<
class RewriteOptionsSub
class,
class OptionClass>
class PropertyLeaf;
112 kCanonicalizeJavascriptLibraries,
114 kCollectFlushEarlyContentFilter,
121 kConvertJpegToProgressive,
125 kConvertToWebpLossless,
127 kDecodeRewrittenUrls,
142 kFallbackRewriteCssUrls,
146 kHandleNoscriptRedirect,
148 kIncludeJsSourceMaps,
150 kInlineGoogleFontCss,
154 kInPlaceOptimizeForBrowser,
157 kInsertImageDimensions,
162 kMakeGoogleAnalyticsAsync,
164 kMoveCssAboveScripts,
169 kPrioritizeCriticalCss,
177 kResizeToRenderedImageDimensions,
180 kRewriteJavascriptExternal,
181 kRewriteJavascriptInline,
182 kRewriteStyleAttributes,
183 kRewriteStyleAttributesWithUrl,
187 kSquashImagesForMobileScreen,
188 kStripImageColorProfile,
213 static const char kAccessControlAllowOrigins[];
214 static const char kAddOptionsToUrls[];
215 static const char kAllowLoggingUrlsInLogRecord[];
216 static const char kAllowOptionsToBeSetByCookies[];
217 static const char kAlwaysRewriteCss[];
218 static const char kAnalyticsID[];
219 static const char kAvoidRenamingIntrospectiveJavascript[];
220 static const char kAwaitPcacheLookup[];
221 static const char kBeaconReinstrumentTimeSec[];
222 static const char kBeaconUrl[];
223 static const char kBlinkMaxHtmlSizeRewritable[];
224 static const char kCacheFragment[];
225 static const char kCacheSmallImagesUnrewritten[];
226 static const char kClientDomainRewrite[];
227 static const char kCombineAcrossPaths[];
228 static const char kCriticalImagesBeaconEnabled[];
229 static const char kCriticalLineConfig[];
230 static const char kCssFlattenMaxBytes[];
231 static const char kCssImageInlineMaxBytes[];
232 static const char kCssInlineMaxBytes[];
233 static const char kCssOutlineMinBytes[];
234 static const char kCssPreserveURLs[];
235 static const char kDefaultCacheHtml[];
236 static const char kDisableBackgroundFetchesForBots[];
237 static const char kDisableRewriteOnNoTransform[];
238 static const char kDistributeFetches[];
239 static const char kDistributedRewriteKey[];
240 static const char kDistributedRewriteServers[];
241 static const char kDistributedRewriteTimeoutMs[];
242 static const char kDomainRewriteHyperlinks[];
243 static const char kDomainShardCount[];
244 static const char kDownstreamCachePurgeMethod[];
245 static const char kDownstreamCacheRebeaconingKey[];
246 static const char kDownstreamCacheRewrittenPercentageThreshold[];
247 static const char kEnableAggressiveRewritersForMobile[];
248 static const char kEnableBlinkHtmlChangeDetection[];
249 static const char kEnableBlinkHtmlChangeDetectionLogging[];
250 static const char kEnableCachePurge[];
251 static const char kEnableDeferJsExperimental[];
252 static const char kEnableExtendedInstrumentation[];
253 static const char kEnableFlushEarlyCriticalCss[];
254 static const char kEnableLazyLoadHighResImages[];
255 static const char kEnablePrioritizingScripts[];
256 static const char kEnabled[];
257 static const char kEnrollExperiment[];
258 static const char kExperimentCookieDurationMs[];
259 static const char kExperimentSlot[];
260 static const char kFetcherTimeOutMs[];
261 static const char kFinderPropertiesCacheExpirationTimeMs[];
262 static const char kFinderPropertiesCacheRefreshTimeMs[];
263 static const char kFlushBufferLimitBytes[];
264 static const char kFlushHtml[];
265 static const char kFlushMoreResourcesEarlyIfTimePermits[];
266 static const char kForbidAllDisabledFilters[];
267 static const char kHideRefererUsingMeta[];
268 static const char kIdleFlushTimeMs[];
269 static const char kImageInlineMaxBytes[];
270 static const char kImageJpegNumProgressiveScans[];
271 static const char kImageJpegNumProgressiveScansForSmallScreens[];
272 static const char kImageJpegRecompressionQuality[];
273 static const char kImageJpegRecompressionQualityForSmallScreens[];
274 static const char kImageLimitOptimizedPercent[];
275 static const char kImageLimitRenderedAreaPercent[];
276 static const char kImageLimitResizeAreaPercent[];
277 static const char kImageMaxRewritesAtOnce[];
278 static const char kImagePreserveURLs[];
279 static const char kImageRecompressionQuality[];
280 static const char kImageResolutionLimitBytes[];
281 static const char kImageWebpRecompressionQuality[];
282 static const char kImageWebpRecompressionQualityForSmallScreens[];
283 static const char kImageWebpTimeoutMs[];
284 static const char kImplicitCacheTtlMs[];
285 static const char kIncreaseSpeedTracking[];
286 static const char kInlineOnlyCriticalImages[];
287 static const char kInPlacePreemptiveRewriteCss[];
288 static const char kInPlacePreemptiveRewriteCssImages[];
289 static const char kInPlacePreemptiveRewriteImages[];
290 static const char kInPlacePreemptiveRewriteJavascript[];
291 static const char kInPlaceResourceOptimization[];
292 static const char kInPlaceRewriteDeadlineMs[];
293 static const char kInPlaceWaitForOptimized[];
294 static const char kJsInlineMaxBytes[];
295 static const char kJsOutlineMinBytes[];
296 static const char kJsPreserveURLs[];
297 static const char kLazyloadImagesAfterOnload[];
298 static const char kLazyloadImagesBlankUrl[];
299 static const char kLoadFromFileCacheTtlMs[];
300 static const char kLogBackgroundRewrite[];
301 static const char kLogRewriteTiming[];
302 static const char kLogUrlIndices[];
303 static const char kLowercaseHtmlNames[];
304 static const char kMaxCacheableResponseContentLength[];
305 static const char kMaxCombinedCssBytes[];
306 static const char kMaxCombinedJsBytes[];
307 static const char kMaxHtmlCacheTimeMs[];
308 static const char kMaxHtmlParseBytes[];
309 static const char kMaxImageBytesForWebpInCss[];
310 static const char kMaxImageSizeLowResolutionBytes[];
311 static const char kMaxInlinedPreviewImagesIndex[];
312 static const char kMaxLowResImageSizeBytes[];
313 static const char kMaxLowResToHighResImageSizePercentage[];
314 static const char kMaxPrefetchJsElements[];
315 static const char kMaxRewriteInfoLogSize[];
316 static const char kMaxUrlSegmentSize[];
317 static const char kMaxUrlSize[];
318 static const char kMetadataCacheStalenessThresholdMs[];
319 static const char kMinCacheTtlMs[];
320 static const char kMinImageSizeLowResolutionBytes[];
321 static const char kMinResourceCacheTimeToRewriteMs[];
322 static const char kMobCxxLayout[];
323 static const char kMobLayout[];
324 static const char kMobLogo[];
325 static const char kMobNav[];
326 static const char kModifyCachingHeaders[];
327 static const char kNoTransformOptimizedImages[];
328 static const char kNonCacheablesForCachePartialHtml[];
329 static const char kObliviousPagespeedUrls[];
330 static const char kOptionCookiesDurationMs[];
331 static const char kOverrideCachingTtlMs[];
332 static const char kPersistBlinkBlacklist[];
333 static const char kPreserveUrlRelativity[];
334 static const char kPrivateNotVaryForIE[];
335 static const char kPubliclyCacheMismatchedHashesExperimental[];
336 static const char kProactivelyFreshenUserFacingRequest[];
337 static const char kProactiveResourceFreshening[];
338 static const char kProgressiveJpegMinBytes[];
339 static const char kRejectBlacklisted[];
340 static const char kRejectBlacklistedStatusCode[];
341 static const char kReportUnloadTime[];
342 static const char kRequestOptionOverride[];
343 static const char kRespectVary[];
344 static const char kRespectXForwardedProto[];
345 static const char kRewriteDeadlineMs[];
346 static const char kRewriteLevel[];
347 static const char kRewriteRandomDropPercentage[];
348 static const char kRewriteUncacheableResources[];
349 static const char kRunningExperiment[];
350 static const char kServeGhostClickBusterWithSplitHtml[];
351 static const char kServeSplitHtmlInTwoChunks[];
352 static const char kServeStaleIfFetchError[];
353 static const char kServeStaleWhileRevalidateThresholdSec[];
354 static const char kServeXhrAccessControlHeaders[];
355 static const char kStickyQueryParameters[];
356 static const char kSupportNoScriptEnabled[];
357 static const char kTestOnlyPrioritizeCriticalCssDontApplyOriginalCss[];
358 static const char kUrlSigningKey[];
359 static const char kUseBlankImageForInlinePreview[];
360 static const char kUseExperimentalJsMinifier[];
361 static const char kUseFallbackPropertyCacheValues[];
362 static const char kUseImageScanlineApi[];
363 static const char kUseSelectorsForCriticalCss[];
364 static const char kUseSmartDiffInBlink[];
365 static const char kXModPagespeedHeaderValue[];
366 static const char kXPsaBlockingRewrite[];
369 static const char kBlockingRewriteRefererUrls[];
370 static const char kDisableFilters[];
371 static const char kDisallow[];
373 static const char kDomain[];
374 static const char kDownstreamCachePurgeLocationPrefix[];
375 static const char kEnableFilters[];
376 static const char kExperimentVariable[];
377 static const char kExperimentSpec[];
378 static const char kForbidFilters[];
379 static const char kInlineResourcesWithoutExplicitAuthorization[];
380 static const char kRetainComment[];
383 static const char kLoadFromFile[];
384 static const char kLoadFromFileMatch[];
385 static const char kLoadFromFileRule[];
386 static const char kLoadFromFileRuleMatch[];
387 static const char kMapOriginDomain[];
388 static const char kMapProxyDomain[];
389 static const char kMapRewriteDomain[];
390 static const char kShardDomain[];
393 static const char kUrlValuedAttribute[];
397 static const char kCacheFlushPollIntervalSec[];
398 static const char kCompressMetadataCache[];
399 static const char kFetcherProxy[];
400 static const char kFetchFromModSpdy[];
401 static const char kFetchHttps[];
402 static const char kFileCacheCleanInodeLimit[];
403 static const char kFileCacheCleanIntervalMs[];
404 static const char kFileCacheCleanSizeKb[];
405 static const char kFileCachePath[];
406 static const char kLogDir[];
407 static const char kLruCacheByteLimit[];
408 static const char kLruCacheKbPerProcess[];
409 static const char kMemcachedServers[];
410 static const char kMemcachedThreads[];
411 static const char kMemcachedTimeoutUs[];
412 static const char kProxySuffix[];
413 static const char kRateLimitBackgroundFetches[];
414 static const char kServeWebpToAnyAgent[];
415 static const char kSlurpDirectory[];
416 static const char kSlurpFlushLimit[];
417 static const char kSlurpReadOnly[];
418 static const char kSslCertDirectory[];
419 static const char kSslCertFile[];
420 static const char kStatisticsEnabled[];
421 static const char kStatisticsLoggingChartsCSS[];
422 static const char kStatisticsLoggingChartsJS[];
423 static const char kStatisticsLoggingEnabled[];
424 static const char kStatisticsLoggingIntervalMs[];
425 static const char kStatisticsLoggingMaxFileSizeKb[];
426 static const char kTestProxy[];
427 static const char kTestProxySlurp[];
428 static const char kUseSharedMemLocking[];
442 GoogleString http_in;
443 GoogleString https_in;
447 NameValue(
const StringPiece& name_in,
const StringPiece& value_in) {
448 name_in.CopyToString(&name);
449 value_in.CopyToString(&value);
493 static const char kCacheExtenderId[];
494 static const char kCollectFlushEarlyContentFilterId[];
495 static const char kCssCombinerId[];
496 static const char kCssFilterId[];
497 static const char kCssImportFlattenerId[];
498 static const char kCssInlineId[];
499 static const char kGoogleFontCssInlineId[];
500 static const char kImageCombineId[];
501 static const char kImageCompressionId[];
502 static const char kInPlaceRewriteId[];
503 static const char kJavascriptCombinerId[];
504 static const char kJavascriptInlineId[];
505 static const char kJavascriptMinId[];
506 static const char kJavascriptMinSourceMapId[];
507 static const char kLocalStorageCacheId[];
508 static const char kPrioritizeCriticalCssId[];
510 static const char kPanelCommentPrefix[];
527 typedef EnumSet<Filter, kEndOfFilters> FilterSet;
528 typedef std::vector<Filter> FilterVector;
539 MessageHandler* handler);
544 typedef std::set<OptionStringPair> OptionSet;
546 typedef std::vector<PropertyBase*> PropertyVector;
559 GoogleString* error_detail) = 0;
560 virtual void Merge(
const OptionBase* src) = 0;
561 virtual bool was_set()
const = 0;
562 virtual GoogleString Signature(
const Hasher*
hasher)
const = 0;
563 virtual GoogleString ToString()
const = 0;
564 const char* id()
const {
return property()->id(); }
565 const char* help_text()
const {
return property()->help_text(); }
566 OptionScope scope()
const {
return property()->scope(); }
567 StringPiece option_name()
const {
return property()->option_name(); }
568 bool is_used_for_signature_computation()
const {
569 return property()->is_used_for_signature_computation();
571 virtual const PropertyBase* property()
const = 0;
613 static const int kDefaultBeaconReinstrumentTimeSec;
614 static const int64 kDefaultBlinkMaxHtmlSizeRewritable;
615 static const int64 kDefaultCssFlattenMaxBytes;
616 static const int64 kDefaultCssImageInlineMaxBytes;
617 static const int64 kDefaultCssInlineMaxBytes;
618 static const int64 kDefaultCssOutlineMinBytes;
619 static const int64 kDefaultImageInlineMaxBytes;
620 static const int64 kDefaultJsInlineMaxBytes;
621 static const int64 kDefaultJsOutlineMinBytes;
622 static const int64 kDefaultProgressiveJpegMinBytes;
623 static const int64 kDefaultMaxCacheableResponseContentLength;
624 static const int64 kDefaultMaxHtmlCacheTimeMs;
625 static const int64 kDefaultMaxHtmlParseBytes;
626 static const int64 kDefaultMaxImageBytesForWebpInCss;
627 static const int64 kDefaultMaxLowResImageSizeBytes;
628 static const int kDefaultMaxLowResToFullResImageSizePercentage;
629 static const int64 kDefaultMetadataInputErrorsCacheTtlMs;
630 static const int64 kDefaultMinResourceCacheTimeToRewriteMs;
631 static const char kDefaultDownstreamCachePurgeMethod[];
632 static const int64 kDefaultDownstreamCacheRewrittenPercentageThreshold;
633 static const int64 kDefaultIdleFlushTimeMs;
634 static const int64 kDefaultFlushBufferLimitBytes;
635 static const int64 kDefaultImplicitCacheTtlMs;
636 static const int64 kDefaultMinCacheTtlMs;
637 static const int64 kDefaultPrioritizeVisibleContentCacheTimeMs;
638 static const char kDefaultBeaconUrl[];
639 static const int64 kDefaultImageRecompressQuality;
640 static const int64 kDefaultImageJpegRecompressQuality;
641 static const int64 kDefaultImageJpegRecompressQualityForSmallScreens;
642 static const int kDefaultImageLimitOptimizedPercent;
643 static const int kDefaultImageLimitRenderedAreaPercent;
644 static const int kDefaultImageLimitResizeAreaPercent;
645 static const int64 kDefaultImageResolutionLimitBytes;
646 static const int64 kDefaultImageJpegNumProgressiveScans;
647 static const int64 kDefaultImageWebpRecompressQuality;
648 static const int64 kDefaultImageWebpRecompressQualityForSmallScreens;
649 static const int64 kDefaultImageWebpTimeoutMs;
650 static const int kDefaultDomainShardCount;
651 static const int64 kDefaultBlinkHtmlChangeDetectionTimeMs;
652 static const int kDefaultMaxPrefetchJsElements;
653 static const int64 kDefaultOptionCookiesDurationMs;
654 static const int64 kDefaultLoadFromFileCacheTtlMs;
660 static const int kDefaultImageMaxRewritesAtOnce;
702 static const int kDefaultExperimentTrafficPercent;
706 static const char kDefaultBlockingRewriteKey[];
708 static const char kRejectedRequestUrlKeyName[];
710 static const int kDefaultPropertyCacheHttpStatusStabilityThreshold;
712 static const int kDefaultMaxRewriteInfoLogSize;
727 MessageHandler* handler);
739 bool is_valid()
const {
return id_ >= 0; }
742 int id()
const {
return id_; }
743 int percent()
const {
return percent_; }
744 GoogleString ga_id()
const {
return ga_id_; }
745 int slot()
const {
return ga_variable_slot_; }
746 RewriteLevel rewrite_level()
const {
return rewrite_level_; }
747 FilterSet enabled_filters()
const {
return enabled_filters_; }
748 FilterSet disabled_filters()
const {
return disabled_filters_; }
749 OptionSet filter_options()
const {
return filter_options_; }
750 bool matches_device_type(UserAgentMatcher::DeviceType type)
const;
751 bool use_default()
const {
return use_default_; }
752 GoogleString ToString()
const;
761 typedef std::bitset<net_instaweb::UserAgentMatcher::kEndOfDeviceType>
764 static bool ParseDeviceTypeBitSet(
const StringPiece& in,
765 DeviceTypeBitSet* out,
766 MessageHandler* handler);
769 FRIEND_TEST(RewriteOptionsTest, ExperimentMergeTest);
770 FRIEND_TEST(RewriteOptionsTest, DeviceTypeMergeTest);
774 void Initialize(
const StringPiece& spec, MessageHandler* handler);
782 int ga_variable_slot_;
785 FilterSet enabled_filters_;
786 FilterSet disabled_filters_;
787 OptionSet filter_options_;
791 scoped_ptr<DeviceTypeBitSet> matches_device_types_;
800 GoogleString element;
801 GoogleString attribute;
802 semantic_type::Category category;
834 int size()
const {
return property_vector_.size(); }
836 const PropertyBase* property(
int index)
const {
837 return property_vector_[index];
839 PropertyBase* property(
int index) {
return property_vector_[index]; }
846 void Merge(Properties* properties);
848 void push_back(PropertyBase* p) { property_vector_.push_back(p); }
859 int initialization_count_;
865 bool owns_properties_;
866 PropertyVector property_vector_;
872 const char* filter_id;
873 const char* filter_name;
876 static bool ParseRewriteLevel(
const StringPiece& in,
RewriteLevel* out);
878 typedef std::set<semantic_type::Category> ResourceCategorySet;
880 static bool ParseInlineUnauthorizedResourceType(
881 const StringPiece& in,
882 ResourceCategorySet* resource_types);
901 static bool Terminate();
927 bool modified()
const {
return modified_; }
936 level_.set_default(level);
945 const NameValue* custom_fetch_header(
int i)
const {
946 return custom_fetch_headers_[i];
949 int num_custom_fetch_headers()
const {
950 return custom_fetch_headers_.size();
965 MessageHandler* handler);
981 int experiment_id()
const {
return experiment_id_; }
983 int experiment_spec_id(
int i)
const {
984 return experiment_specs_[i]->id();
993 ExperimentSpec* experiment_spec(
int i)
const {
994 return experiment_specs_[i];
997 int num_experiments()
const {
return experiment_specs_.size(); }
999 bool enroll_experiment()
const {
1000 return enroll_experiment_id() != experiment::kForceNoExperiment;
1015 const StringPiece& attribute,
1016 semantic_type::Category category);
1021 StringPiece* element,
1022 StringPiece* attribute,
1023 semantic_type::Category* category)
const;
1025 int num_url_valued_attributes()
const {
1026 if (url_valued_attributes_ == NULL) {
1029 return url_valued_attributes_->size();
1033 void AddInlineUnauthorizedResourceType(semantic_type::Category category);
1034 bool HasInlineUnauthorizedResourceType(
1035 semantic_type::Category category)
const;
1036 void ClearInlineUnauthorizedResourceTypes();
1037 void set_inline_unauthorized_resource_types(ResourceCategorySet x);
1041 uint64 bytes, StringPiece md5_hash, StringPiece canonical_url) {
1043 bytes, md5_hash, canonical_url);
1050 if (Enabled(kCanonicalizeJavascriptLibraries)) {
1051 return javascript_library_identification_.get();
1064 MessageHandler* handler);
1070 MessageHandler* handler);
1076 MessageHandler* handler);
1082 MessageHandler* handler);
1099 MessageHandler* handler);
1115 void DisableFilter(
Filter filter);
1116 void DisableIfNotExplictlyEnabled(
Filter filter);
1117 void ForbidFilter(
Filter filter);
1118 void EnableFilters(
const FilterSet& filter_set);
1119 void DisableFilters(
const FilterSet& filter_set);
1120 void ForbidFilters(
const FilterSet& filter_set);
1148 bool Enabled(
Filter filter)
const;
1149 bool Forbidden(
Filter filter)
const;
1150 bool Forbidden(StringPiece filter_id)
const;
1163 const StringPiece& options, OptionSet* set, MessageHandler* handler);
1170 StringPiece name, StringPiece value, GoogleString* msg);
1174 StringPiece name, StringPiece value);
1186 StringPiece name, StringPiece arg,
1187 GoogleString* msg, MessageHandler* handler);
1190 StringPiece name, StringPiece arg1, StringPiece arg2,
1191 GoogleString* msg, MessageHandler* handler);
1194 StringPiece name, StringPiece arg1, StringPiece arg2, StringPiece arg3,
1195 GoogleString* msg, MessageHandler* handler);
1202 bool OptionValue(StringPiece option_name,
const char**
id,
1203 bool* was_set, GoogleString* value)
const;
1213 MessageHandler* handler);
1220 return StringToInt(value_string, value);
1223 return StringToInt64(value_string, value);
1225 static bool ParseFromString(StringPiece value_string, GoogleString* value) {
1226 value_string.CopyToString(value);
1230 return ParseRewriteLevel(value_string, value);
1233 ResourceCategorySet* value) {
1234 return ParseInlineUnauthorizedResourceType(value_string, value);
1236 static bool ParseFromString(StringPiece value_string, BeaconUrl* value) {
1240 protobuf::MessageLite* proto);
1245 void set_css_outline_min_bytes(int64 x) {
1249 GoogleString ga_id()
const {
return ga_id_.value(); }
1250 void set_ga_id(GoogleString
id) {
1254 bool increase_speed_tracking()
const {
1255 return increase_speed_tracking_.value();
1257 void set_increase_speed_tracking(
bool x) {
1261 int64 js_outline_min_bytes()
const {
return js_outline_min_bytes_.value(); }
1262 void set_js_outline_min_bytes(int64 x) {
1266 int64 progressive_jpeg_min_bytes()
const {
1267 return progressive_jpeg_min_bytes_.value();
1269 void set_progressive_jpeg_min_bytes(int64 x) {
1273 int64 css_flatten_max_bytes()
const {
return css_flatten_max_bytes_.value(); }
1274 void set_css_flatten_max_bytes(int64 x) {
1277 bool cache_small_images_unrewritten()
const {
1278 return cache_small_images_unrewritten_.value();
1280 void set_cache_small_images_unrewritten(
bool x) {
1281 set_option(x, &cache_small_images_unrewritten_);
1283 int64 image_resolution_limit_bytes()
const {
1284 return image_resolution_limit_bytes_.value();
1286 void set_image_resolution_limit_bytes(int64 x) {
1287 set_option(x, &image_resolution_limit_bytes_);
1292 void set_image_inline_max_bytes(int64 x);
1295 void set_css_image_inline_max_bytes(int64 x) {
1300 int64 css_inline_max_bytes()
const {
return css_inline_max_bytes_.value(); }
1301 void set_css_inline_max_bytes(int64 x) {
1304 int64 js_inline_max_bytes()
const {
return js_inline_max_bytes_.value(); }
1305 void set_js_inline_max_bytes(int64 x) {
1308 int64 max_html_cache_time_ms()
const {
1309 return max_html_cache_time_ms_.value();
1311 void set_max_html_cache_time_ms(int64 x) {
1314 int64 max_html_parse_bytes()
const {
1315 return max_html_parse_bytes_.value();
1317 void set_max_html_parse_bytes(int64 x) {
1320 int64 max_image_bytes_for_webp_in_css()
const {
1321 return max_image_bytes_for_webp_in_css_.value();
1323 void set_max_image_bytes_for_webp_in_css(int64 x) {
1324 set_option(x, &max_image_bytes_for_webp_in_css_);
1326 int64 max_cacheable_response_content_length()
const {
1327 return max_cacheable_response_content_length_.value();
1329 void set_max_cacheable_response_content_length(int64 x) {
1330 set_option(x, &max_cacheable_response_content_length_);
1332 int64 min_resource_cache_time_to_rewrite_ms()
const {
1333 return min_resource_cache_time_to_rewrite_ms_.value();
1335 void set_min_resource_cache_time_to_rewrite_ms(int64 x) {
1336 set_option(x, &min_resource_cache_time_to_rewrite_ms_);
1338 bool need_to_store_experiment_data()
const {
1339 return need_to_store_experiment_data_;
1341 void set_need_to_store_experiment_data(
bool x) {
1342 need_to_store_experiment_data_ = x;
1345 int64 blocking_fetch_timeout_ms()
const {
1346 return blocking_fetch_timeout_ms_.value();
1348 void set_blocking_fetch_timeout_ms(int64 x) {
1351 bool override_ie_document_mode()
const {
1352 return override_ie_document_mode_.value();
1354 void set_override_ie_document_mode(
bool x) {
1358 int64 blink_blacklist_end_timestamp_ms()
const {
1359 return blink_blacklist_end_timestamp_ms_.value();
1361 void set_blink_blacklist_end_timestamp_ms(int64 x) {
1362 set_option(x, &blink_blacklist_end_timestamp_ms_);
1365 bool persist_blink_blacklist()
const {
1366 return persist_blink_blacklist_.value();
1368 void set_persist_blink_blacklist(
bool x) {
1372 bool preserve_url_relativity()
const {
1373 return preserve_url_relativity_.value();
1375 void set_preserve_url_relativity(
bool x) {
1396 bool search_wildcards)
const;
1416 bool ignores_metadata_and_pcache);
1419 void PurgeUrl(StringPiece url, int64 timestamp_ms);
1428 cache_purge_mutex_.reset(lock);
1451 LOCKS_EXCLUDED(cache_purge_mutex_.get());
1457 LOCKS_EXCLUDED(cache_purge_mutex_.get());
1466 return idle_flush_time_ms_.value();
1468 void set_idle_flush_time_ms(int64 x) {
1474 return flush_buffer_limit_bytes_.value();
1477 void set_flush_buffer_limit_bytes(int64 x) {
1484 void set_max_url_segment_size(
int x) {
1488 int image_max_rewrites_at_once()
const {
1489 return image_max_rewrites_at_once_.value();
1491 void set_image_max_rewrites_at_once(
int x) {
1497 void set_max_url_size(
int x) {
1501 int rewrite_deadline_ms()
const {
return rewrite_deadline_ms_.value(); }
1502 void set_rewrite_deadline_ms(
int x) {
1506 bool test_instant_fetch_rewrite_deadline()
const {
1507 return test_instant_fetch_rewrite_deadline_.value();
1509 void set_test_instant_fetch_rewrite_deadline(
bool x) {
1510 set_option(x, &test_instant_fetch_rewrite_deadline_);
1513 void set_test_only_prioritize_critical_css_dont_apply_original_css(
bool x) {
1514 set_option(x, &test_only_prioritize_critical_css_dont_apply_original_css_);
1516 bool test_only_prioritize_critical_css_dont_apply_original_css()
const {
1517 return test_only_prioritize_critical_css_dont_apply_original_css_.value();
1520 int domain_shard_count()
const {
return domain_shard_count_.value(); }
1531 bool enabled()
const {
1534 bool unplugged()
const {
1538 void set_add_options_to_urls(
bool x) {
1542 bool add_options_to_urls()
const {
1543 return add_options_to_urls_.value();
1546 void set_publicly_cache_mismatched_hashes_experimental(
bool x) {
1547 set_option(x, &publicly_cache_mismatched_hashes_experimental_);
1550 bool publicly_cache_mismatched_hashes_experimental()
const {
1551 return publicly_cache_mismatched_hashes_experimental_.value();
1554 void set_oblivious_pagespeed_urls(
bool x) {
1558 bool oblivious_pagespeed_urls()
const {
1559 return oblivious_pagespeed_urls_.value();
1562 void set_in_place_rewriting_enabled(
bool x) {
1566 bool in_place_rewriting_enabled()
const {
1567 return CheckBandwidthOption(in_place_rewriting_enabled_);
1570 void set_in_place_wait_for_optimized(
bool x) {
1571 set_option(x, &in_place_wait_for_optimized_);
1574 bool in_place_wait_for_optimized()
const {
1575 return (in_place_wait_for_optimized_.value() ||
1576 (in_place_rewrite_deadline_ms() < 0));
1579 void set_in_place_rewrite_deadline_ms(
int x) {
1580 set_option(x, &in_place_rewrite_deadline_ms_);
1583 int in_place_rewrite_deadline_ms()
const {
1584 return in_place_rewrite_deadline_ms_.value();
1587 void set_in_place_preemptive_rewrite_css(
bool x) {
1588 set_option(x, &in_place_preemptive_rewrite_css_);
1590 bool in_place_preemptive_rewrite_css()
const {
1591 return CheckBandwidthOption(in_place_preemptive_rewrite_css_);
1594 void set_in_place_preemptive_rewrite_css_images(
bool x) {
1595 set_option(x, &in_place_preemptive_rewrite_css_images_);
1597 bool in_place_preemptive_rewrite_css_images()
const {
1598 return CheckBandwidthOption(in_place_preemptive_rewrite_css_images_);
1601 void set_in_place_preemptive_rewrite_images(
bool x) {
1602 set_option(x, &in_place_preemptive_rewrite_images_);
1604 bool in_place_preemptive_rewrite_images()
const {
1605 return CheckBandwidthOption(in_place_preemptive_rewrite_images_);
1608 void set_in_place_preemptive_rewrite_javascript(
bool x) {
1609 set_option(x, &in_place_preemptive_rewrite_javascript_);
1611 bool in_place_preemptive_rewrite_javascript()
const {
1612 return CheckBandwidthOption(in_place_preemptive_rewrite_javascript_);
1615 void set_private_not_vary_for_ie(
bool x) {
1618 bool private_not_vary_for_ie()
const {
1619 return private_not_vary_for_ie_.value();
1622 void set_combine_across_paths(
bool x) {
1625 bool combine_across_paths()
const {
return combine_across_paths_.value(); }
1627 void set_log_background_rewrites(
bool x) {
1630 bool log_background_rewrites()
const {
1631 return log_background_rewrites_.value();
1634 void set_log_rewrite_timing(
bool x) {
1637 bool log_rewrite_timing()
const {
return log_rewrite_timing_.value(); }
1639 void set_log_url_indices(
bool x) {
1642 bool log_url_indices()
const {
return log_url_indices_.value(); }
1644 void set_lowercase_html_names(
bool x) {
1647 bool lowercase_html_names()
const {
return lowercase_html_names_.value(); }
1649 void set_always_rewrite_css(
bool x) {
1652 bool always_rewrite_css()
const {
return always_rewrite_css_.value(); }
1654 void set_respect_vary(
bool x) {
1657 bool respect_vary()
const {
return respect_vary_.value(); }
1659 void set_respect_x_forwarded_proto(
bool x) {
1662 bool respect_x_forwarded_proto()
const {
1663 return respect_x_forwarded_proto_.value();
1666 void set_flush_html(
bool x) {
set_option(x, &flush_html_); }
1667 bool flush_html()
const {
return flush_html_.value(); }
1669 void set_serve_split_html_in_two_chunks(
bool x) {
1670 set_option(x, &serve_split_html_in_two_chunks_);
1672 bool serve_split_html_in_two_chunks()
const {
1673 return serve_split_html_in_two_chunks_.value();
1676 void set_serve_stale_if_fetch_error(
bool x) {
1679 bool serve_stale_if_fetch_error()
const {
1680 return serve_stale_if_fetch_error_.value();
1683 void set_serve_ghost_click_buster_with_split_html(
bool x) {
1684 set_option(x, &serve_ghost_click_buster_with_split_html_);
1686 bool serve_ghost_click_buster_with_split_html()
const {
1687 return serve_ghost_click_buster_with_split_html_.value();
1690 void set_serve_xhr_access_control_headers(
bool x) {
1691 set_option(x, &serve_xhr_access_control_headers_);
1693 bool serve_xhr_access_control_headers()
const {
1694 return serve_xhr_access_control_headers_.value();
1697 void set_proactively_freshen_user_facing_request(
bool x) {
1698 set_option(x, &proactively_freshen_user_facing_request_);
1700 bool proactively_freshen_user_facing_request()
const {
1701 return proactively_freshen_user_facing_request_.value();
1704 void set_serve_stale_while_revalidate_threshold_sec(int64 x) {
1705 set_option(x, &serve_stale_while_revalidate_threshold_sec_);
1707 int64 serve_stale_while_revalidate_threshold_sec()
const {
1708 return serve_stale_while_revalidate_threshold_sec_.value();
1711 void set_enable_flush_early_critical_css(
bool x) {
1712 set_option(x, &enable_flush_early_critical_css_);
1714 bool enable_flush_early_critical_css()
const {
1715 return enable_flush_early_critical_css_.value();
1718 void set_use_selectors_for_critical_css(
bool x) {
1719 set_option(x, &use_selectors_for_critical_css_);
1721 bool use_selectors_for_critical_css()
const {
1722 return use_selectors_for_critical_css_.value();
1725 void set_default_cache_html(
bool x) {
set_option(x, &default_cache_html_); }
1726 bool default_cache_html()
const {
return default_cache_html_.value(); }
1728 void set_modify_caching_headers(
bool x) {
1731 bool modify_caching_headers()
const {
1732 return modify_caching_headers_.value();
1735 void set_inline_only_critical_images(
bool x) {
1736 set_option(x, &inline_only_critical_images_);
1738 bool inline_only_critical_images()
const {
1739 return inline_only_critical_images_.value();
1742 void set_critical_images_beacon_enabled(
bool x) {
1743 set_option(x, &critical_images_beacon_enabled_);
1745 bool critical_images_beacon_enabled()
const {
1746 return critical_images_beacon_enabled_.value();
1749 void set_beacon_reinstrument_time_sec(
int x) {
1750 set_option(x, &beacon_reinstrument_time_sec_);
1752 int beacon_reinstrument_time_sec()
const {
1753 return beacon_reinstrument_time_sec_.value();
1756 void set_accept_invalid_signatures(
bool x) {
1759 bool accept_invalid_signatures()
const {
1760 return accept_invalid_signatures_.value();
1763 void set_request_option_override(StringPiece p) {
1764 set_option(GoogleString(p.data(), p.size()), &request_option_override_);
1766 const GoogleString& request_option_override()
const {
1767 return request_option_override_.value();
1770 void set_url_signing_key(StringPiece p) {
1771 set_option(GoogleString(p.data(), p.size()), &url_signing_key_);
1773 const GoogleString& url_signing_key()
const {
1774 return url_signing_key_.value();
1777 void set_lazyload_images_after_onload(
bool x) {
1778 set_option(x, &lazyload_images_after_onload_);
1780 bool lazyload_images_after_onload()
const {
1781 return lazyload_images_after_onload_.value();
1784 void set_lazyload_images_blank_url(
const StringPiece& p) {
1785 set_option(GoogleString(p.data(), p.size()), &lazyload_images_blank_url_);
1787 const GoogleString& lazyload_images_blank_url()
const {
1788 return lazyload_images_blank_url_.value();
1791 void set_max_inlined_preview_images_index(
int x) {
1792 set_option(x, &max_inlined_preview_images_index_);
1794 int max_inlined_preview_images_index()
const {
1795 return max_inlined_preview_images_index_.value();
1798 void set_use_blank_image_for_inline_preview(
bool x) {
1799 set_option(x, &use_blank_image_for_inline_preview_);
1801 bool use_blank_image_for_inline_preview()
const {
1802 return use_blank_image_for_inline_preview_.value();
1805 void set_min_image_size_low_resolution_bytes(int64 x) {
1806 set_option(x, &min_image_size_low_resolution_bytes_);
1808 int64 min_image_size_low_resolution_bytes()
const {
1809 return min_image_size_low_resolution_bytes_.value();
1812 void set_max_image_size_low_resolution_bytes(int64 x) {
1813 set_option(x, &max_image_size_low_resolution_bytes_);
1815 int64 max_image_size_low_resolution_bytes()
const {
1816 return max_image_size_low_resolution_bytes_.value();
1819 void set_experiment_cookie_duration_ms(int64 x) {
1820 set_option(x, &experiment_cookie_duration_ms_);
1822 int64 experiment_cookie_duration_ms()
const {
1823 return experiment_cookie_duration_ms_.value();
1826 void set_finder_properties_cache_expiration_time_ms(int64 x) {
1827 set_option(x, &finder_properties_cache_expiration_time_ms_);
1829 int64 finder_properties_cache_expiration_time_ms()
const {
1830 return finder_properties_cache_expiration_time_ms_.value();
1833 void set_finder_properties_cache_refresh_time_ms(int64 x) {
1834 set_option(x, &finder_properties_cache_refresh_time_ms_);
1836 int64 finder_properties_cache_refresh_time_ms()
const {
1837 return finder_properties_cache_refresh_time_ms_.value();
1840 void set_rewrite_random_drop_percentage(
int x) {
1841 set_option(x, &rewrite_random_drop_percentage_);
1843 int rewrite_random_drop_percentage()
const {
1844 return rewrite_random_drop_percentage_.value();
1847 bool css_preserve_urls()
const {
1848 return CheckBandwidthOption(css_preserve_urls_);
1850 void set_css_preserve_urls(
bool x) {
1854 bool image_preserve_urls()
const {
1855 return CheckBandwidthOption(image_preserve_urls_);
1857 void set_image_preserve_urls(
bool x) {
1861 bool js_preserve_urls()
const {
1862 return CheckBandwidthOption(js_preserve_urls_);
1864 void set_js_preserve_urls(
bool x) {
1868 void set_metadata_cache_staleness_threshold_ms(int64 x) {
1869 set_option(x, &metadata_cache_staleness_threshold_ms_);
1871 int64 metadata_cache_staleness_threshold_ms()
const {
1872 return metadata_cache_staleness_threshold_ms_.value();
1875 void set_metadata_input_errors_cache_ttl_ms(int64 x) {
1876 set_option(x, &metadata_input_errors_cache_ttl_ms_);
1878 int64 metadata_input_errors_cache_ttl_ms()
const {
1879 return metadata_input_errors_cache_ttl_ms_.value();
1882 const GoogleString& downstream_cache_purge_method()
const {
1883 return downstream_cache_purge_method_.value();
1885 void set_downstream_cache_purge_method(
const StringPiece& p) {
1886 set_option(p.as_string(), &downstream_cache_purge_method_);
1889 const GoogleString& downstream_cache_purge_location_prefix()
const {
1890 return downstream_cache_purge_location_prefix_.value();
1895 while (p.ends_with(
"/")) {
1898 set_option(p.as_string(), &downstream_cache_purge_location_prefix_);
1900 bool IsDownstreamCacheIntegrationEnabled()
const {
1901 return !downstream_cache_purge_location_prefix().empty();
1904 void set_downstream_cache_rebeaconing_key(
const StringPiece& p) {
1905 set_option(p.as_string(), &downstream_cache_rebeaconing_key_);
1907 const GoogleString& downstream_cache_rebeaconing_key()
const {
1908 return downstream_cache_rebeaconing_key_.value();
1910 bool IsDownstreamCacheRebeaconingKeyConfigured()
const {
1911 return !downstream_cache_rebeaconing_key().empty();
1916 if (!IsDownstreamCacheRebeaconingKeyConfigured()) {
1919 return StringCaseEqual(key, downstream_cache_rebeaconing_key());
1922 void set_downstream_cache_rewritten_percentage_threshold(int64 x) {
1923 set_option(x, &downstream_cache_rewritten_percentage_threshold_);
1925 int64 downstream_cache_rewritten_percentage_threshold()
const {
1926 return downstream_cache_rewritten_percentage_threshold_.value();
1929 const BeaconUrl& beacon_url()
const {
return beacon_url_.value(); }
1930 void set_beacon_url(
const GoogleString& beacon_url) {
1931 GoogleString ignored_error_detail;
1932 beacon_url_.SetFromString(beacon_url, &ignored_error_detail);
1938 int64 image_jpeg_recompress_quality()
const {
1939 return image_jpeg_recompress_quality_.value();
1941 void set_image_jpeg_recompress_quality(int64 x) {
1942 set_option(x, &image_jpeg_recompress_quality_);
1945 int64 image_jpeg_recompress_quality_for_small_screens()
const {
1946 return image_jpeg_recompress_quality_for_small_screens_.value();
1948 void set_image_jpeg_recompress_quality_for_small_screens(int64 x) {
1949 set_option(x, &image_jpeg_recompress_quality_for_small_screens_);
1952 int64 image_recompress_quality()
const {
1953 return image_recompress_quality_.value();
1955 void set_image_recompress_quality(int64 x) {
1959 int image_limit_optimized_percent()
const {
1960 return image_limit_optimized_percent_.value();
1962 void set_image_limit_optimized_percent(
int x) {
1963 set_option(x, &image_limit_optimized_percent_);
1965 int image_limit_resize_area_percent()
const {
1966 return image_limit_resize_area_percent_.value();
1968 void set_image_limit_resize_area_percent(
int x) {
1969 set_option(x, &image_limit_resize_area_percent_);
1972 int image_limit_rendered_area_percent()
const {
1973 return image_limit_rendered_area_percent_.value();
1975 void set_image_limit_rendered_area_percent(
int x) {
1976 set_option(x, &image_limit_rendered_area_percent_);
1979 int64 image_jpeg_num_progressive_scans()
const {
1980 return image_jpeg_num_progressive_scans_.value();
1982 void set_image_jpeg_num_progressive_scans(int64 x) {
1983 set_option(x, &image_jpeg_num_progressive_scans_);
1986 int64 image_jpeg_num_progressive_scans_for_small_screens()
const {
1987 return image_jpeg_num_progressive_scans_for_small_screens_.value();
1989 void set_image_jpeg_num_progressive_scans_for_small_screens(int64 x) {
1990 set_option(x, &image_jpeg_num_progressive_scans_for_small_screens_);
1993 int64 image_webp_recompress_quality()
const {
1994 return image_webp_recompress_quality_.value();
1996 void set_image_webp_recompress_quality(int64 x) {
1997 set_option(x, &image_webp_recompress_quality_);
2000 int64 image_webp_recompress_quality_for_small_screens()
const {
2001 return image_webp_recompress_quality_for_small_screens_.value();
2003 void set_image_webp_recompress_quality_for_small_screens(int64 x) {
2004 set_option(x, &image_webp_recompress_quality_for_small_screens_);
2006 int64 image_webp_timeout_ms()
const {
2007 return image_webp_timeout_ms_.value();
2009 void set_image_webp_timeout_ms(int64 x) {
2013 bool domain_rewrite_hyperlinks()
const {
2014 return domain_rewrite_hyperlinks_.value();
2016 void set_domain_rewrite_hyperlinks(
bool x) {
2020 bool client_domain_rewrite()
const {
2021 return client_domain_rewrite_.value();
2023 void set_client_domain_rewrite(
bool x) {
2027 void set_flush_more_resources_early_if_time_permits(
bool x) {
2028 set_option(x, &flush_more_resources_early_if_time_permits_);
2030 bool flush_more_resources_early_if_time_permits()
const {
2031 return flush_more_resources_early_if_time_permits_.value();
2034 void set_flush_more_resources_in_ie_and_firefox(
bool x) {
2035 set_option(x, &flush_more_resources_in_ie_and_firefox_);
2037 bool flush_more_resources_in_ie_and_firefox()
const {
2038 return flush_more_resources_in_ie_and_firefox_.value();
2041 void set_max_prefetch_js_elements(
int x) {
2044 int max_prefetch_js_elements()
const {
2045 return max_prefetch_js_elements_.value();
2048 void set_enable_defer_js_experimental(
bool x) {
2049 set_option(x, &enable_defer_js_experimental_);
2051 bool enable_defer_js_experimental()
const {
2052 return enable_defer_js_experimental_.value();
2055 void set_disable_rewrite_on_no_transform(
bool x) {
2056 set_option(x, &disable_rewrite_on_no_transform_);
2058 bool disable_rewrite_on_no_transform()
const {
2059 return disable_rewrite_on_no_transform_.value();
2062 void set_disable_background_fetches_for_bots(
bool x) {
2063 set_option(x, &disable_background_fetches_for_bots_);
2065 bool disable_background_fetches_for_bots()
const {
2066 return disable_background_fetches_for_bots_.value();
2069 void set_enable_cache_purge(
bool x) {
2072 bool enable_cache_purge()
const {
2073 return enable_cache_purge_.value();
2076 void set_proactive_resource_freshening(
bool x) {
2077 set_option(x, &proactive_resource_freshening_);
2079 bool proactive_resource_freshening()
const {
2080 return proactive_resource_freshening_.value();
2083 void set_lazyload_highres_images(
bool x) {
2086 bool lazyload_highres_images()
const {
2087 return lazyload_highres_images_.value();
2090 void set_enable_blink_debug_dashboard(
bool x) {
2091 set_option(x, &enable_blink_debug_dashboard_);
2093 bool enable_blink_debug_dashboard()
const {
2094 return enable_blink_debug_dashboard_.value();
2097 void set_enable_blink_html_change_detection(
bool x) {
2098 set_option(x, &enable_blink_html_change_detection_);
2100 bool enable_blink_html_change_detection()
const {
2101 return enable_blink_html_change_detection_.value();
2104 void set_enable_blink_html_change_detection_logging(
bool x) {
2105 set_option(x, &enable_blink_html_change_detection_logging_);
2107 bool enable_blink_html_change_detection_logging()
const {
2108 return enable_blink_html_change_detection_logging_.value();
2111 void set_use_smart_diff_in_blink(
bool x) {
2114 bool use_smart_diff_in_blink()
const {
2115 return use_smart_diff_in_blink_.value();
2118 void set_use_fallback_property_cache_values(
bool x) {
2119 set_option(x, &use_fallback_property_cache_values_);
2121 bool use_fallback_property_cache_values()
const {
2122 return use_fallback_property_cache_values_.value();
2125 void set_await_pcache_lookup(
bool x) {
2128 bool await_pcache_lookup()
const {
2129 return await_pcache_lookup_.value();
2132 void set_enable_prioritizing_scripts(
bool x) {
2133 set_option(x, &enable_prioritizing_scripts_);
2135 bool enable_prioritizing_scripts()
const {
2136 return enable_prioritizing_scripts_.value();
2139 void set_blink_html_change_detection_time_ms(int64 x) {
2140 set_option(x, &blink_html_change_detection_time_ms_);
2142 int64 blink_html_change_detection_time_ms()
const {
2143 return blink_html_change_detection_time_ms_.value();
2146 const GoogleString& blocking_rewrite_key()
const {
2147 return blocking_rewrite_key_.value();
2149 void set_blocking_rewrite_key(
const StringPiece& p) {
2150 set_option(p.as_string(), &blocking_rewrite_key_);
2153 void EnableBlockingRewriteForRefererUrlPattern(
2154 const StringPiece& url_pattern) {
2156 blocking_rewrite_referer_urls_.MakeWriteable()->Allow(url_pattern);
2159 bool IsBlockingRewriteEnabledForReferer(
const StringPiece& url)
const {
2160 return blocking_rewrite_referer_urls_->Match(url,
false);
2163 bool IsBlockingRewriteRefererUrlPatternPresent()
const {
2164 return blocking_rewrite_referer_urls_->num_wildcards() > 0;
2167 bool rewrite_uncacheable_resources()
const {
2168 return rewrite_uncacheable_resources_.value();
2171 void set_rewrite_uncacheable_resources(
bool x) {
2172 set_option(x, &rewrite_uncacheable_resources_);
2175 void set_running_experiment(
bool x) {
2178 bool running_experiment()
const {
2179 return running_experiment_.value();
2186 int experiment_ga_slot()
const {
return experiment_ga_slot_.value(); }
2188 void set_enroll_experiment_id(
int x) {
2191 int enroll_experiment_id()
const {
return enroll_experiment_id_.value(); }
2193 void set_report_unload_time(
bool x) {
2196 bool report_unload_time()
const {
2197 return report_unload_time_.value();
2200 void set_implicit_cache_ttl_ms(int64 x) {
2203 int64 implicit_cache_ttl_ms()
const {
2204 return implicit_cache_ttl_ms_.value();
2207 void set_load_from_file_cache_ttl_ms(int64 x) {
2208 set_option(x, &load_from_file_cache_ttl_ms_);
2210 int64 load_from_file_cache_ttl_ms()
const {
2211 return load_from_file_cache_ttl_ms_.value();
2213 bool load_from_file_cache_ttl_ms_was_set()
const {
2214 return load_from_file_cache_ttl_ms_.was_set();
2217 void set_x_header_value(
const StringPiece& p) {
2220 const GoogleString& x_header_value()
const {
2224 void set_distributed_rewrite_key(
const StringPiece& p) {
2225 set_option(p.as_string(), &distributed_rewrite_key_);
2227 const GoogleString& distributed_rewrite_key()
const {
2228 return distributed_rewrite_key_.value();
2231 void set_distribute_fetches(
bool x) {
2234 bool distribute_fetches()
const {
2235 return distribute_fetches_.value();
2238 void set_distributed_rewrite_servers(
const StringPiece& p) {
2239 set_option(p.as_string(), &distributed_rewrite_servers_);
2241 const GoogleString& distributed_rewrite_servers()
const {
2242 return distributed_rewrite_servers_.value();
2245 void set_distributed_rewrite_timeout_ms(
const int64 x) {
2246 set_option(x, &distributed_rewrite_timeout_ms_);
2248 int64 distributed_rewrite_timeout_ms()
const {
2249 return distributed_rewrite_timeout_ms_.value();
2252 void set_avoid_renaming_introspective_javascript(
bool x) {
2253 set_option(x, &avoid_renaming_introspective_javascript_);
2255 bool avoid_renaming_introspective_javascript()
const {
2256 return avoid_renaming_introspective_javascript_.value();
2259 int64 blink_max_html_size_rewritable()
const {
2260 return blink_max_html_size_rewritable_.value();
2262 void set_blink_max_html_size_rewritable(int64 x) {
2263 set_option(x, &blink_max_html_size_rewritable_);
2266 void set_critical_line_config(
const StringPiece& p) {
2267 set_option(GoogleString(p.data(), p.size()), &critical_line_config_);
2269 const GoogleString& critical_line_config()
const {
2270 return critical_line_config_.value();
2273 void set_forbid_all_disabled_filters(
bool x) {
2274 set_option(x, &forbid_all_disabled_filters_);
2276 bool forbid_all_disabled_filters()
const {
2277 return forbid_all_disabled_filters_.value();
2280 bool reject_blacklisted()
const {
return reject_blacklisted_.value(); }
2281 void set_reject_blacklisted(
bool x) {
2285 HttpStatus::Code reject_blacklisted_status_code()
const {
2286 return static_cast<HttpStatus::Code
>(
2287 reject_blacklisted_status_code_.value());
2289 void set_reject_blacklisted_status_code(HttpStatus::Code x) {
2290 set_option(static_cast<int>(x), &reject_blacklisted_status_code_);
2293 bool support_noscript_enabled()
const {
2294 return support_noscript_enabled_.value();
2296 void set_support_noscript_enabled(
bool x) {
2300 bool enable_extended_instrumentation()
const {
2301 return enable_extended_instrumentation_.value();
2303 void set_enable_extended_instrumentation(
bool x) {
2304 set_option(x, &enable_extended_instrumentation_);
2307 bool use_experimental_js_minifier()
const {
2308 return use_experimental_js_minifier_.value();
2310 void set_use_experimental_js_minifier(
bool x) {
2311 set_option(x, &use_experimental_js_minifier_);
2314 void set_max_combined_css_bytes(int64 x) {
2317 int64 max_combined_css_bytes()
const {
2318 return max_combined_css_bytes_.value();
2321 void set_max_combined_js_bytes(int64 x) {
2324 int64 max_combined_js_bytes()
const {
2325 return max_combined_js_bytes_.value();
2328 void set_pre_connect_url(
const StringPiece& p) {
2329 set_option(GoogleString(p.data(), p.size()), &pre_connect_url_);
2331 const GoogleString& pre_connect_url()
const {
2332 return pre_connect_url_.value();
2334 void set_property_cache_http_status_stability_threshold(
int x) {
2335 set_option(x, &property_cache_http_status_stability_threshold_);
2337 int property_cache_http_status_stability_threshold()
const {
2338 return property_cache_http_status_stability_threshold_.value();
2341 void set_max_rewrite_info_log_size(
int x) {
2344 int max_rewrite_info_log_size()
const {
2345 return max_rewrite_info_log_size_.value();
2348 void set_enable_aggressive_rewriters_for_mobile(
bool x) {
2349 set_option(x, &enable_aggressive_rewriters_for_mobile_);
2351 bool enable_aggressive_rewriters_for_mobile()
const {
2352 return enable_aggressive_rewriters_for_mobile_.value();
2355 void set_allow_logging_urls_in_log_record(
bool x) {
2356 set_option(x, &allow_logging_urls_in_log_record_);
2358 bool allow_logging_urls_in_log_record()
const {
2359 return allow_logging_urls_in_log_record_.value();
2362 void set_allow_options_to_be_set_by_cookies(
bool x) {
2363 set_option(x, &allow_options_to_be_set_by_cookies_);
2365 bool allow_options_to_be_set_by_cookies()
const {
2366 return allow_options_to_be_set_by_cookies_.value();
2369 void set_non_cacheables_for_cache_partial_html(
const StringPiece& p) {
2370 set_option(p.as_string(), &non_cacheables_for_cache_partial_html_);
2372 const GoogleString& non_cacheables_for_cache_partial_html()
const {
2373 return non_cacheables_for_cache_partial_html_.value();
2376 void set_no_transform_optimized_images(
bool x) {
2377 set_option(x, &no_transform_optimized_images_);
2379 bool no_transform_optimized_images()
const {
2380 return no_transform_optimized_images_.value();
2383 void set_access_control_allow_origins(
const StringPiece& p) {
2384 set_option(p.as_string(), &access_control_allow_origins_);
2386 const GoogleString& access_control_allow_origins()
const {
2387 return access_control_allow_origins_.value();
2390 void set_hide_referer_using_meta(
bool x) {
2393 bool hide_referer_using_meta()
const {
2394 return hide_referer_using_meta_.value();
2397 void set_max_low_res_image_size_bytes(int64 x) {
2398 set_option(x, &max_low_res_image_size_bytes_);
2400 int64 max_low_res_image_size_bytes()
const {
2401 return max_low_res_image_size_bytes_.value();
2404 void set_max_low_res_to_full_res_image_size_percentage(
int x) {
2405 set_option(x, &max_low_res_to_full_res_image_size_percentage_);
2407 int max_low_res_to_full_res_image_size_percentage()
const {
2408 return max_low_res_to_full_res_image_size_percentage_.value();
2411 void set_serve_rewritten_webp_urls_to_any_agent(
bool x) {
2412 set_option(x, &serve_rewritten_webp_urls_to_any_agent_);
2414 bool serve_rewritten_webp_urls_to_any_agent()
const {
2415 return serve_rewritten_webp_urls_to_any_agent_.value();
2418 void set_cache_fragment(
const StringPiece& p) {
2421 const GoogleString& cache_fragment()
const {
2422 return cache_fragment_.value();
2425 void set_sticky_query_parameters(StringPiece p) {
2426 set_option(p.as_string(), &sticky_query_parameters_);
2428 const GoogleString& sticky_query_parameters()
const {
2429 return sticky_query_parameters_.value();
2432 void set_option_cookies_duration_ms(int64 x) {
2435 int64 option_cookies_duration_ms()
const {
2436 return option_cookies_duration_ms_.value();
2439 bool mob_layout()
const {
return mob_layout_.value(); }
2440 bool mob_cxx_layout()
const {
return mob_cxx_layout_.value(); }
2441 void set_mob_cxx_layout(
bool x) {
set_option(x, &mob_cxx_layout_); }
2442 bool mob_logo()
const {
return mob_logo_.value(); }
2443 bool mob_nav()
const {
return mob_nav_.value(); }
2461 virtual void Merge(
const RewriteOptions& src);
2465 void Allow(
const StringPiece& wildcard_pattern) {
2467 allow_resources_.MakeWriteable()->Allow(wildcard_pattern);
2474 allow_resources_.MakeWriteable()->Disallow(wildcard_pattern);
2480 allow_when_inlining_resources_.MakeWriteable()->Allow(wildcard_pattern);
2494 allow_when_inlining_resources_.MakeWriteable()->Disallow(wildcard_pattern);
2531 FileLoadPolicy* file_load_policy() {
return &file_load_policy_; }
2532 const FileLoadPolicy* file_load_policy()
const {
return &file_load_policy_; }
2537 return allow_resources_->Match(url,
true );
2548 return allow_when_inlining_resources_->Match(
2555 retain_comments_.MakeWriteable()->Allow(comment);
2562 return retain_comments_->Match(comment,
false);
2568 lazyload_enabled_classes_.MakeWriteable()->Disallow(class_name);
2573 return lazyload_enabled_classes_->Match(class_name,
true);
2576 void set_override_caching_ttl_ms(int64 x) {
2579 int64 override_caching_ttl_ms()
const {
2580 return override_caching_ttl_ms_.value();
2587 override_caching_wildcard_.MakeWriteable()->Allow(wildcard);
2592 return override_caching_wildcard_->Match(url,
false);
2595 void AddRejectedUrlWildcard(
const GoogleString& wildcard) {
2596 AddRejectedHeaderWildcard(kRejectedRequestUrlKeyName, wildcard);
2599 void AddRejectedHeaderWildcard(
const StringPiece& header_name,
2600 const GoogleString& wildcard) {
2602 std::pair<FastWildcardGroupMap::iterator, bool> insert_result =
2603 rejected_request_map_.insert(std::make_pair(
2604 header_name, static_cast<FastWildcardGroup*>(NULL)));
2606 if (insert_result.second) {
2607 insert_result.first->second =
new FastWildcardGroup;
2609 insert_result.first->second->Allow(wildcard);
2612 void set_min_cache_ttl_ms(int64 x) {
2615 int64 min_cache_ttl_ms()
const {
2616 return min_cache_ttl_ms_.value();
2622 const RequestHeaders* request_headers)
const;
2627 virtual RewriteOptions*
Clone()
const;
2638 void ComputeSignatureLockHeld() SHARED_LOCKS_REQUIRED(cache_purge_mutex_);
2657 bool frozen()
const {
return frozen_; }
2663 bool frozen = frozen_;
2677 ThreadSystem::ScopedReader lock(cache_purge_mutex_.get());
2679 DCHECK(!signature_.empty());
2683 virtual GoogleString OptionsToString()
const;
2684 GoogleString FilterSetToString(
const FilterSet& filter_set)
const;
2685 GoogleString EnabledFiltersToString()
const;
2709 static const PropertyBase* LookupOptionByName(StringPiece option_name);
2721 return all_options_;
2730 const Hasher*
hasher()
const {
return &hasher_; }
2732 const SHA1Signature* sha1signature()
const {
return &sha1signature_; }
2734 ThreadSystem* thread_system()
const {
return thread_system_; }
2753 typedef T ValueType;
2757 virtual bool was_set()
const {
return was_set_; }
2759 void set(
const T& val) {
2764 void set_default(
const T& val) {
2770 const T& value()
const {
return value_; }
2771 T& mutable_value() { was_set_ =
true;
return value_; }
2779 DCHECK(option_name() == src->option_name());
2780 MergeHelper(static_cast<const OptionTemplateBase*>(src));
2786 if (src->was_set_ || !was_set_) {
2787 value_ = src->value_;
2788 was_set_ = src->was_set_;
2794 property_ = property;
2800 value_ =
property->default_value();
2802 virtual const PropertyBase* property()
const {
return property_; }
2813 Property<T>*
property =
const_cast<Property<T>*
>(property_);
2814 property->set_default(val);
2826 Property<T>*
property =
const_cast<Property<T>*
>(property_);
2827 property->set_do_not_use_for_signature_computation(
true);
2833 const Property<T>* property_;
2848 GoogleString* error_detail) {
2857 virtual GoogleString Signature(
const Hasher*
hasher)
const {
2858 return RewriteOptions::OptionSignature(this->value(), hasher);
2861 virtual GoogleString ToString()
const {
2862 return RewriteOptions::ToString(this->value());
2866 DISALLOW_COPY_AND_ASSIGN(Option);
2871 template<
class RewriteOptionsSub
class,
class OptionClass>
2873 typename OptionClass::ValueType default_value,
2874 OptionClass RewriteOptionsSubclass::*offset,
2876 StringPiece option_name,
2878 const char* help_text,
2881 PropertyBase*
property =
2882 new PropertyLeaf<RewriteOptionsSubclass, OptionClass>(
2883 default_value, offset, id, option_name);
2884 property->set_scope(scope);
2885 property->set_help_text(help_text);
2886 property->set_safe_to_print(safe_to_print);
2887 properties->push_back(property);
2911 all_options_[index] = option;
2919 option->set(new_value);
2958 class CacheFragmentOption :
public Option<GoogleString> {
2960 virtual bool SetFromString(StringPiece value_string,
2961 GoogleString* error_detail);
2964 struct OptionIdCompare;
2970 enum MergeOverride { kNoAction, kDisablePreserve, kDisableFilter };
2974 class PropertyBase {
2976 PropertyBase(
const char*
id, StringPiece option_name)
2979 option_name_(option_name),
2981 do_not_use_for_signature_computation_(false),
2984 virtual ~PropertyBase();
2988 virtual void InitializeOption(RewriteOptions* options)
const = 0;
2990 void set_do_not_use_for_signature_computation(
bool x) {
2991 do_not_use_for_signature_computation_ = x;
2993 bool is_used_for_signature_computation()
const {
2994 return !do_not_use_for_signature_computation_;
3000 void set_help_text(
const char* x) { help_text_ = x; }
3001 const char* help_text()
const {
return help_text_; }
3003 void set_index(
int index) { index_ = index; }
3004 const char* id()
const {
return id_; }
3005 StringPiece option_name()
const {
return option_name_; }
3006 int index()
const {
return index_; }
3008 bool safe_to_print()
const {
return safe_to_print_; }
3009 void set_safe_to_print(
bool safe_to_print) {
3010 safe_to_print_ = safe_to_print;
3015 const char* help_text_;
3016 StringPiece option_name_;
3018 bool do_not_use_for_signature_computation_;
3019 bool safe_to_print_;
3022 DISALLOW_COPY_AND_ASSIGN(PropertyBase);
3028 template<
class ValueType>
3029 class Property :
public PropertyBase {
3035 Property(ValueType default_value,
3037 StringPiece option_name)
3038 : PropertyBase(id, option_name),
3039 default_value_(default_value) {
3042 void set_default(ValueType value) { default_value_ = value; }
3043 const ValueType& default_value()
const {
return default_value_; }
3046 ValueType default_value_;
3048 DISALLOW_COPY_AND_ASSIGN(Property);
3065 template<
class RewriteOptionsSub
class,
class OptionClass>
3066 class PropertyLeaf :
public Property<typename OptionClass::ValueType> {
3071 typedef OptionClass RewriteOptionsSubclass::*OptionOffset;
3072 typedef typename OptionClass::ValueType ValueType;
3074 PropertyLeaf(ValueType default_value,
3075 OptionOffset offset,
3077 StringPiece option_name)
3078 : Property<ValueType>(default_value, id, option_name),
3082 virtual void InitializeOption(RewriteOptions* options)
const {
3083 RewriteOptionsSubclass* options_subclass =
3084 static_cast<RewriteOptionsSubclass*
>(options);
3085 OptionClass& option = options_subclass->*offset_;
3086 option.set_property(
this);
3087 DCHECK_NE(-1, this->index()) <<
"Call Property::set_index first.";
3088 options->set_option_at(this->index(), &option);
3092 OptionOffset offset_;
3094 DISALLOW_COPY_AND_ASSIGN(PropertyLeaf);
3097 static Properties* properties_;
3098 static Properties* all_properties_;
3100 FRIEND_TEST(RewriteOptionsTest, ExperimentMergeTest);
3101 FRIEND_TEST(RewriteOptionsTest, LookupOptionByNameTest);
3104 bool HasRejectedHeader(
const StringPiece& header_name,
3105 const RequestHeaders* request_headers)
const;
3107 bool IsRejectedUrl(
const GoogleString& url)
const {
3108 return IsRejectedRequest(kRejectedRequestUrlKeyName, url);
3111 bool IsRejectedRequest(
const StringPiece& header_name,
3112 const StringPiece& value)
const {
3113 FastWildcardGroupMap::const_iterator it = rejected_request_map_.find(
3115 if (it != rejected_request_map_.end()) {
3116 return it->second->Match(value,
false);
3123 JavascriptLibraryIdentification* WriteableJavascriptLibraryIdentification();
3131 struct PrioritizeVisibleContentFamily {
3132 PrioritizeVisibleContentFamily(StringPiece url_pattern_string,
3133 int64 cache_time_ms_in,
3134 StringPiece non_cacheable_elements_in)
3135 : url_pattern(url_pattern_string),
3136 cache_time_ms(cache_time_ms_in),
3137 non_cacheable_elements(non_cacheable_elements_in.data(),
3138 non_cacheable_elements_in.size()) {}
3140 PrioritizeVisibleContentFamily*
Clone()
const {
3141 return new PrioritizeVisibleContentFamily(
3142 url_pattern.spec(), cache_time_ms, non_cacheable_elements);
3146 return StrCat(url_pattern.spec(),
";", Integer64ToString(cache_time_ms),
3147 ";", non_cacheable_elements);
3150 GoogleString ToString()
const {
3151 return StrCat(
"URL pattern: ", url_pattern.spec(),
", Cache time (ms): ",
3152 Integer64ToString(cache_time_ms),
", Non-cacheable: ",
3153 non_cacheable_elements);
3156 Wildcard url_pattern;
3157 int64 cache_time_ms;
3158 GoogleString non_cacheable_elements;
3163 struct UrlCacheInvalidationEntry {
3164 UrlCacheInvalidationEntry(StringPiece url_pattern_in,
3165 int64 timestamp_ms_in,
3166 bool ignores_metadata_and_pcache_in)
3167 : url_pattern(url_pattern_in),
3168 timestamp_ms(timestamp_ms_in),
3169 ignores_metadata_and_pcache(ignores_metadata_and_pcache_in) {}
3171 UrlCacheInvalidationEntry*
Clone()
const {
3172 return new UrlCacheInvalidationEntry(
3173 url_pattern.spec(), timestamp_ms, ignores_metadata_and_pcache);
3177 if (ignores_metadata_and_pcache) {
3180 return StrCat(url_pattern.spec(),
"@", Integer64ToString(timestamp_ms));
3183 GoogleString ToString()
const {
3185 url_pattern.spec(),
", ",
3186 (ignores_metadata_and_pcache ?
"STRICT" :
"REFERENCE"),
" @ ",
3187 Integer64ToString(timestamp_ms));
3190 Wildcard url_pattern;
3192 bool ignores_metadata_and_pcache;
3195 typedef std::vector<UrlCacheInvalidationEntry*>
3196 UrlCacheInvalidationEntryVector;
3197 typedef dense_hash_map<GoogleString, int64> UrlCacheInvalidationMap;
3202 typedef rde::hash_map<StringPiece,
const PropertyBase*,
3203 CaseFoldStringPieceHash, 6,
3204 CaseFoldStringPieceEqual> PropertyNameMap;
3218 template<
class OptionClass>
3219 static void AddRequestProperty(
typename OptionClass::ValueType default_value,
3220 OptionClass RewriteOptions::*offset,
3221 const char*
id,
bool safe_to_print) {
3223 NULL, safe_to_print, properties_);
3228 template<
class OptionClass>
3229 static void AddBaseProperty(
typename OptionClass::ValueType default_value,
3230 OptionClass RewriteOptions::*offset,
3232 StringPiece option_name,
3235 bool safe_to_print) {
3236 AddProperty(default_value, offset,
id, option_name, scope, help,
3237 safe_to_print, properties_);
3240 static void AddProperties();
3241 bool AddCommaSeparatedListToFilterSetState(
3242 const StringPiece& filters, FilterSet* set, MessageHandler* handler);
3243 static bool AddCommaSeparatedListToFilterSet(
3244 const StringPiece& filters, FilterSet* set, MessageHandler* handler);
3246 static void InitFilterIdToEnumArray();
3247 static void InitOptionIdToPropertyArray();
3248 static void InitOptionNameToPropertyArray();
3255 StringPiece error_detail, GoogleString* msg);
3260 StringPiece name, StringPiece value,
bool from_query,
3261 GoogleString* error_detail);
3265 static GoogleString OptionSignature(
bool x,
const Hasher* hasher) {
3266 return x ?
"T" :
"F";
3268 static GoogleString OptionSignature(
int x,
const Hasher* hasher) {
3269 return IntegerToString(x);
3271 static GoogleString OptionSignature(int64 x,
const Hasher* hasher) {
3272 return Integer64ToString(x);
3274 static GoogleString OptionSignature(
const GoogleString& x,
3275 const Hasher* hasher);
3277 const Hasher* hasher);
3278 static GoogleString OptionSignature(ResourceCategorySet x,
3279 const Hasher* hasher);
3280 static GoogleString OptionSignature(
const BeaconUrl& beacon_url,
3281 const Hasher* hasher);
3282 static GoogleString OptionSignature(
3283 const protobuf::MessageLite& proto,
3284 const Hasher* hasher);
3288 static GoogleString ToString(
bool x) {
3289 return x ?
"True" :
"False";
3291 static GoogleString ToString(
int x) {
3292 return IntegerToString(x);
3294 static GoogleString ToString(int64 x) {
3295 return Integer64ToString(x);
3297 static GoogleString ToString(
const GoogleString& x) {
3301 static GoogleString ToString(
const ResourceCategorySet &x);
3302 static GoogleString ToString(
const BeaconUrl& beacon_url);
3303 static GoogleString ToString(
const protobuf::MessageLite& proto);
3307 static bool PropertyLessThanByOptionName(PropertyBase* p1, PropertyBase* p2) {
3308 return StringCaseCompare(p1->option_name(), p2->option_name()) < 0;
3312 static bool OptionNameLessThanArg(OptionBase* option, StringPiece arg) {
3313 return StringCaseCompare(option->option_name(), arg) < 0;
3317 static bool CompareUrlCacheInvalidationEntry(UrlCacheInvalidationEntry* e1,
3318 UrlCacheInvalidationEntry* e2) {
3319 return e1->timestamp_ms < e2->timestamp_ms;
3323 static bool FilterEnumToIdAndNameEntryLessThanById(
3324 const FilterEnumToIdAndNameEntry* e1,
3325 const FilterEnumToIdAndNameEntry* e2) {
3326 return strcmp(e1->filter_id, e2->filter_id) < 0;
3331 static StringPiece GetEffectiveOptionName(StringPiece name);
3335 bool CheckBandwidthOption(
const Option<bool>& option)
const {
3337 return option.value();
3348 MergeOverride ComputeMergeOverride(
3350 const Option<bool>& src_preserve_option,
3351 const Option<bool>& preserve_option,
3352 const RewriteOptions& src);
3355 void ApplyMergeOverride(
3356 MergeOverride merge_override,
3358 Option<bool>* preserve_option);
3362 FilterSet enabled_filters_;
3363 FilterSet disabled_filters_;
3364 FilterSet forbidden_filters_;
3375 Option<RewriteLevel> level_;
3379 UrlCacheInvalidationEntryVector url_cache_invalidation_entries_;
3387 CopyOnWrite<PurgeSet> purge_set_ GUARDED_BY(cache_purge_mutex_);
3389 scoped_ptr<ThreadSystem::RWLock> cache_purge_mutex_;
3390 Option<int64> css_flatten_max_bytes_;
3391 Option<bool> cache_small_images_unrewritten_;
3392 Option<bool> no_transform_optimized_images_;
3395 Option<int64> image_resolution_limit_bytes_;
3396 Option<int64> css_image_inline_max_bytes_;
3397 Option<int64> css_inline_max_bytes_;
3398 Option<int64> css_outline_min_bytes_;
3401 Option<bool> css_preserve_urls_;
3402 Option<bool> js_preserve_urls_;
3403 Option<bool> image_preserve_urls_;
3405 Option<int64> image_inline_max_bytes_;
3406 Option<int64> js_inline_max_bytes_;
3407 Option<int64> js_outline_min_bytes_;
3408 Option<int64> progressive_jpeg_min_bytes_;
3410 Option<int64> max_html_cache_time_ms_;
3413 Option<int64> max_html_parse_bytes_;
3415 Option<int64> max_image_bytes_for_webp_in_css_;
3417 Option<int64> min_resource_cache_time_to_rewrite_ms_;
3418 Option<int64> idle_flush_time_ms_;
3419 Option<int64> flush_buffer_limit_bytes_;
3424 Option<int64> blocking_fetch_timeout_ms_;
3428 Option<int64> image_recompress_quality_;
3431 Option<int64> image_jpeg_recompress_quality_;
3432 Option<int64> image_jpeg_recompress_quality_for_small_screens_;
3433 Option<int64> image_jpeg_num_progressive_scans_;
3434 Option<int64> image_jpeg_num_progressive_scans_for_small_screens_;
3437 Option<int> image_limit_optimized_percent_;
3438 Option<int> image_limit_resize_area_percent_;
3439 Option<int> image_limit_rendered_area_percent_;
3442 Option<int64> image_webp_recompress_quality_;
3443 Option<int64> image_webp_recompress_quality_for_small_screens_;
3444 Option<int64> image_webp_timeout_ms_;
3446 Option<int> image_max_rewrites_at_once_;
3447 Option<int> max_url_segment_size_;
3448 Option<int> max_url_size_;
3449 Option<int> rewrite_deadline_ms_;
3453 Option<int> domain_shard_count_;
3455 Option<EnabledEnum> enabled_;
3457 Option<bool> distributable_;
3461 Option<bool> add_options_to_urls_;
3468 Option<bool> publicly_cache_mismatched_hashes_experimental_;
3471 Option<bool> in_place_rewriting_enabled_;
3473 Option<bool> in_place_wait_for_optimized_;
3476 Option<int> in_place_rewrite_deadline_ms_;
3479 Option<bool> in_place_preemptive_rewrite_css_;
3481 Option<bool> in_place_preemptive_rewrite_css_images_;
3484 Option<bool> in_place_preemptive_rewrite_images_;
3487 Option<bool> in_place_preemptive_rewrite_javascript_;
3493 Option<bool> private_not_vary_for_ie_;
3494 Option<bool> combine_across_paths_;
3495 Option<bool> log_background_rewrites_;
3496 Option<bool> log_rewrite_timing_;
3497 Option<bool> log_url_indices_;
3498 Option<bool> lowercase_html_names_;
3499 Option<bool> always_rewrite_css_;
3500 Option<bool> respect_vary_;
3501 Option<bool> respect_x_forwarded_proto_;
3502 Option<bool> flush_html_;
3506 Option<bool> serve_split_html_in_two_chunks_;
3509 Option<bool> serve_stale_if_fetch_error_;
3511 Option<bool> serve_ghost_click_buster_with_split_html_;
3513 Option<bool> serve_xhr_access_control_headers_;
3516 Option<bool> proactively_freshen_user_facing_request_;
3519 Option<int64> serve_stale_while_revalidate_threshold_sec_;
3521 Option<bool> enable_flush_early_critical_css_;
3523 Option<bool> use_selectors_for_critical_css_;
3528 Option<bool> default_cache_html_;
3533 Option<bool> modify_caching_headers_;
3537 Option<bool> lazyload_images_after_onload_;
3540 Option<GoogleString> lazyload_images_blank_url_;
3543 Option<bool> use_blank_image_for_inline_preview_;
3547 Option<bool> inline_only_critical_images_;
3550 Option<bool> critical_images_beacon_enabled_;
3553 Option<bool> client_domain_rewrite_;
3556 Option<bool> domain_rewrite_hyperlinks_;
3559 Option<bool> running_experiment_;
3562 Option<int> experiment_ga_slot_;
3565 Option<int> enroll_experiment_id_;
3569 Option<bool> increase_speed_tracking_;
3574 Option<bool> report_unload_time_;
3576 Option<bool> serve_rewritten_webp_urls_to_any_agent_;
3579 Option<bool> flush_more_resources_early_if_time_permits_;
3582 Option<bool> flush_more_resources_in_ie_and_firefox_;
3586 Option<int> max_prefetch_js_elements_;
3589 Option<bool> enable_defer_js_experimental_;
3592 Option<bool> disable_rewrite_on_no_transform_;
3595 Option<bool> disable_background_fetches_for_bots_;
3606 Option<bool> enable_cache_purge_;
3611 Option<bool> proactive_resource_freshening_;
3614 Option<bool> lazyload_highres_images_;
3618 Option<bool> avoid_renaming_introspective_javascript_;
3621 Option<bool> override_ie_document_mode_;
3624 Option<bool> test_instant_fetch_rewrite_deadline_;
3629 Option<bool> test_only_prioritize_critical_css_dont_apply_original_css_;
3636 Option<GoogleString> blocking_rewrite_key_;
3641 Option<int> beacon_reinstrument_time_sec_;
3645 Option<int> max_inlined_preview_images_index_;
3647 Option<int64> min_image_size_low_resolution_bytes_;
3649 Option<int64> max_image_size_low_resolution_bytes_;
3652 Option<int> rewrite_random_drop_percentage_;
3656 Option<bool> oblivious_pagespeed_urls_;
3659 Option<int64> finder_properties_cache_expiration_time_ms_;
3664 Option<int64> finder_properties_cache_refresh_time_ms_;
3667 Option<int64> experiment_cookie_duration_ms_;
3671 Option<int64> metadata_cache_staleness_threshold_ms_;
3674 Option<int64> metadata_input_errors_cache_ttl_ms_;
3678 Option<GoogleString> downstream_cache_purge_method_;
3681 Option<GoogleString> downstream_cache_purge_location_prefix_;
3685 Option<GoogleString> downstream_cache_rebeaconing_key_;
3692 Option<int64> downstream_cache_rewritten_percentage_threshold_;
3697 Option<int64> implicit_cache_ttl_ms_;
3703 Option<int64> load_from_file_cache_ttl_ms_;
3706 Option<int64> max_cacheable_response_content_length_;
3709 Option<int64> blink_blacklist_end_timestamp_ms_;
3711 Option<bool> persist_blink_blacklist_;
3715 Option<bool> preserve_url_relativity_;
3717 Option<GoogleString> ga_id_;
3719 Option<int64> blink_max_html_size_rewritable_;
3722 Option<int64> blink_html_change_detection_time_ms_;
3724 Option<bool> enable_blink_debug_dashboard_;
3726 Option<bool> enable_blink_html_change_detection_;
3728 Option<bool> enable_blink_html_change_detection_logging_;
3730 Option<bool> use_smart_diff_in_blink_;
3732 Option<bool> use_fallback_property_cache_values_;
3734 Option<bool> await_pcache_lookup_;
3736 Option<bool> enable_prioritizing_scripts_;
3738 Option<bool> rewrite_uncacheable_resources_;
3740 Option<GoogleString> critical_line_config_;
3743 Option<GoogleString> distributed_rewrite_key_;
3745 Option<GoogleString> distributed_rewrite_servers_;
3750 Option<bool> distribute_fetches_;
3753 Option<int64> distributed_rewrite_timeout_ms_;
3759 Option<bool> forbid_all_disabled_filters_;
3761 Option<bool> enable_aggressive_rewriters_for_mobile_;
3768 Option<bool> reject_blacklisted_;
3769 Option<int> reject_blacklisted_status_code_;
3774 Option<bool> support_noscript_enabled_;
3778 Option<bool> enable_extended_instrumentation_;
3780 Option<bool> use_experimental_js_minifier_;
3784 Option<int64> max_combined_css_bytes_;
3788 Option<int64> max_combined_js_bytes_;
3791 Option<GoogleString> pre_connect_url_;
3794 Option<int> property_cache_http_status_stability_threshold_;
3796 Option<int> max_rewrite_info_log_size_;
3802 Option<int64> override_caching_ttl_ms_;
3803 CopyOnWrite<FastWildcardGroup> override_caching_wildcard_;
3808 Option<int64> min_cache_ttl_ms_;
3811 Option<bool> allow_logging_urls_in_log_record_;
3814 Option<bool> allow_options_to_be_set_by_cookies_;
3817 Option<GoogleString> non_cacheables_for_cache_partial_html_;
3822 Option<GoogleString> access_control_allow_origins_;
3825 Option<bool> hide_referer_using_meta_;
3831 Option<int64> max_low_res_image_size_bytes_;
3832 Option<int> max_low_res_to_full_res_image_size_percentage_;
3835 Option<GoogleString> request_option_override_;
3838 Option<GoogleString> url_signing_key_;
3841 Option<bool> accept_invalid_signatures_;
3847 Option<GoogleString> sticky_query_parameters_;
3848 Option<int64> option_cookies_duration_ms_;
3852 CacheFragmentOption cache_fragment_;
3857 size_t initialized_options_;
3861 static const FilterEnumToIdAndNameEntry* filter_id_to_enum_array_[
3865 static PropertyNameMap* option_name_to_property_map_;
3868 static const PropertyBase** option_id_to_property_array_;
3876 bool options_uniqueness_checked_;
3878 bool need_to_store_experiment_data_;
3880 int experiment_percent_;
3881 std::vector<ExperimentSpec*> experiment_specs_;
3884 std::vector<NameValue*> custom_fetch_headers_;
3888 scoped_ptr<std::vector<ElementAttributeCategory> > url_valued_attributes_;
3890 Option<ResourceCategorySet> inline_unauthorized_resource_types_;
3892 Option<bool> mob_layout_;
3893 Option<bool> mob_cxx_layout_;
3894 Option<bool> mob_logo_;
3895 Option<bool> mob_nav_;
3897 CopyOnWrite<JavascriptLibraryIdentification>
3898 javascript_library_identification_;
3900 CopyOnWrite<DomainLawyer> domain_lawyer_;
3901 FileLoadPolicy file_load_policy_;
3903 CopyOnWrite<FastWildcardGroup> allow_resources_;
3904 CopyOnWrite<FastWildcardGroup> allow_when_inlining_resources_;
3905 CopyOnWrite<FastWildcardGroup> retain_comments_;
3906 CopyOnWrite<FastWildcardGroup> lazyload_enabled_classes_;
3910 CopyOnWrite<FastWildcardGroup> blocking_rewrite_referer_urls_;
3914 typedef std::map<StringPiece, FastWildcardGroup*> FastWildcardGroupMap;
3915 FastWildcardGroupMap rejected_request_map_;
3917 GoogleString signature_;
3919 SHA1Signature sha1signature_;
3921 ThreadSystem* thread_system_;
3935 scoped_ptr<ThreadSystem::ThreadId> last_thread_id_;
3937 DISALLOW_COPY_AND_ASSIGN(RewriteOptions);
void set_experiment_ga_slot(int x)
x should be between 1 and 5 inclusive.
Definition: rewrite_options.h:2183
int64 CssImageInlineMaxBytes() const
Retrieve the css image inlining threshold, but return 0 if it's disabled.
void AddUrlValuedAttribute(const StringPiece &element, const StringPiece &attribute, semantic_type::Category category)
EnabledEnum
Definition: rewrite_options.h:195
void DisallowWhenInlining(const StringPiece &wildcard_pattern)
Like Disallow(). See IsAllowedWhenInlining().
Definition: rewrite_options.h:2492
bool AdjustFiltersByCommaSeparatedList(const StringPiece &filters, MessageHandler *handler)
static const int64 kDefaultMaxCombinedCssBytes
Default maximum size of the combined CSS resource.
Definition: rewrite_options.h:697
static const PropertyBase * LookupOptionById(StringPiece option_id)
static void AddProperty(typename OptionClass::ValueType default_value, OptionClass RewriteOptionsSubclass::*offset, const char *id, StringPiece option_name, OptionScope scope, const char *help_text, bool safe_to_print, Properties *properties)
Adds a new Property to 'properties' (the last argument).
Definition: rewrite_options.h:2872
bool ClearSignatureForTesting()
Definition: rewrite_options.h:2662
bool SetupExperimentRewriters()
int64 idle_flush_time_ms() const
Definition: rewrite_options.h:1465
void DisableLazyloadForClassName(const StringPiece &class_name)
Adds a new class name for which lazyload should be disabled.
Definition: rewrite_options.h:2566
static bool Initialize(Properties **properties)
bool MatchesDownstreamCacheRebeaconingKey(StringPiece key) const
Definition: rewrite_options.h:1915
customized at directory level (.htaccess, <Directory>)
Definition: rewrite_options.h:487
bool ModificationOK() const
Definition: rewrite_options.h:485
void AddUrlCacheInvalidationEntry(StringPiece url_pattern, int64 timestamp_ms, bool ignores_metadata_and_pcache)
static bool IsValidOptionName(StringPiece name)
Determine if the given option name is valid/known.
static const int kDefaultMaxUrlSize
Definition: rewrite_options.h:658
static const int64 kDefaultExperimentCookieDurationMs
Definition: rewrite_options.h:690
void set_downstream_cache_purge_location_prefix(StringPiece p)
Definition: rewrite_options.h:1892
Definition: rewrite_options.h:446
Maps a filter's enum (kAddHead) to its id ("ah") and name ("Add Head").
Definition: rewrite_options.h:870
void Allow(const StringPiece &wildcard_pattern)
Definition: rewrite_options.h:2465
Definition: rewrite_options.h:550
bool OptionValue(StringPiece option_name, const char **id, bool *was_set, GoogleString *value) const
bool IsLazyloadEnabledForClassName(const StringPiece &class_name) const
Checks if lazyload images is enabled for the specified class.
Definition: rewrite_options.h:2572
Definition: rewrite_options.h:203
static bool Terminate(Properties **properties_handle)
void RetainComment(const StringPiece &comment)
Adds a new comment wildcard pattern to be retained.
Definition: rewrite_options.h:2553
bool IsAllowed(const StringPiece &url) const
Definition: rewrite_options.h:2536
int max_url_segment_size() const
Definition: rewrite_options.h:1483
bool InsertExperimentSpecInVector(ExperimentSpec *spec)
bool ImageOptimizationEnabled() const
std::pair< GoogleString, GoogleString > OptionStringPair
Definition: rewrite_options.h:543
Definition: rewrite_options.h:2842
Definition: rewrite_options.h:2751
virtual void DisallowTroublesomeResources()
static const char kAcceptInvalidSignatures[]
Definition: rewrite_options.h:212
static const char kCacheFlushFilename[]
Definition: rewrite_options.h:396
void DistributeFiltersByCommaSeparatedList(const StringPiece &filter_ids, MessageHandler *handler)
virtual bool trim_urls_in_css() const
Return false in a subclass if you want to disallow all URL trimming in CSS.
Definition: rewrite_options.h:1936
Option< BeaconUrl > beacon_url_
Protected option values so that derived class can modify.
Definition: rewrite_options.h:2951
void DisableAllFilters()
Set rewrite level to kPassThrough and explicitly disable all filters.
static Filter LookupFilter(const StringPiece &filter_name)
Convert the filter name to a Filter.
bool EnableFiltersByCommaSeparatedList(const StringPiece &filters, MessageHandler *handler)
static const char * FilterName(Filter filter)
ExperimentSpec * GetExperimentSpec(int id) const
static bool AddByNameToFilterSet(const StringPiece &option, FilterSet *set, MessageHandler *handler)
GoogleString PurgeSetString() const
Update kFirstFilter if you add something before this.
Definition: rewrite_options.h:107
static const int kDefaultExperimentSlot
Default Custom Variable slot in which to put Experiment information.
Definition: rewrite_options.h:704
void Modify()
Marks the config as modified.
virtual RewriteOptions * Clone() const
int64 flush_buffer_limit_bytes() const
How much accumulated HTML will result in PSA introducing a flush.
Definition: rewrite_options.h:1473
static bool ParseBeaconUrl(const StringPiece &in, BeaconUrl *out)
int64 cache_invalidation_timestamp() const
const DomainLawyer * domain_lawyer() const
Definition: rewrite_options.h:2528
Definition: rewrite_options.h:439
void set_cache_invalidation_timestamp_mutex(ThreadSystem::RWLock *lock)
Definition: rewrite_options.h:1427
static void MergeSubclassProperties(Properties *properties)
void set_domain_shard_count(int64 x)
Definition: rewrite_options.h:1523
int64 css_outline_min_bytes() const
Definition: rewrite_options.h:1244
void DisableFiltersRequiringScriptExecution()
Disables all filters that depend on executing custom javascript.
void set_global_default(const T &val)
Definition: rewrite_options.h:2812
bool IsUrlCacheInvalidationEntriesSorted() const
static const int64 kDefaultMetadataCacheStalenessThresholdMs
Definition: rewrite_options.h:694
virtual GoogleString ToExperimentString() const
static const int kOptionsVersion
Definition: rewrite_options.h:470
void MergeHelper(const OptionTemplateBase *src)
Definition: rewrite_options.h:2783
int64 ImageInlineMaxBytes() const
Retrieve the image inlining threshold, but return 0 if it's disabled.
void EnableFilter(Filter filter)
void GetEnabledFiltersRequiringScriptExecution(FilterVector *filters) const
Returns the set of enabled filters that require JavaScript for execution.
virtual void DisallowResourcesForProxy()
virtual GoogleString ToExperimentDebugString() const
std::vector< OptionBase * > OptionBaseVector
Convenience name for a set of rewrite options.
Definition: rewrite_options.h:575
OptionScope
Definition: rewrite_options.h:484
void Disallow(const StringPiece &wildcard_pattern)
Definition: rewrite_options.h:2472
Definition: javascript_library_identification.h:34
OptionSettingResult SetOptionFromName(StringPiece name, StringPiece value, GoogleString *msg)
static const int64 kDefaultFinderPropertiesCacheExpirationTimeMs
Default cache expiration value for finder properties in pcache.
Definition: rewrite_options.h:684
bool RegisterLibrary(SizeInBytes bytes, StringPiece md5_hash, StringPiece canonical_url)
Represents the content type of user-defined url-valued attributes.
Definition: rewrite_options.h:799
Option< GoogleString > x_header_value_
The value we put for the X-Mod-Pagespeed header. Default is our version.
Definition: rewrite_options.h:2954
void set_option(const T &new_value, OptionTemplateBase< T > *option)
Definition: rewrite_options.h:2918
static bool AddCommaSeparatedListToOptionSet(const StringPiece &options, OptionSet *set, MessageHandler *handler)
bool Distributable(const StringPiece &filter_id) const
int max_url_size() const
The maximum size of the entire URL. If '0', this is left unlimited.
Definition: rewrite_options.h:1496
virtual OptionSettingResult ParseAndSetOptionFromName1(StringPiece name, StringPiece arg, GoogleString *msg, MessageHandler *handler)
Definition: rewrite_options.h:811
Definition: rewrite_options.h:587
Definition: rewrite_options.h:720
void DoNotUseForSignatureComputation()
Definition: rewrite_options.h:2825
bool IsRetainedComment(const StringPiece &comment) const
Definition: rewrite_options.h:2561
void AddCustomFetchHeader(const StringPiece &name, const StringPiece &value)
Specify a header to insert when fetching subresources.
virtual bool SetFromString(StringPiece value_string, GoogleString *error_detail)=0
static const int kDefaultMaxInlinedPreviewImagesIndex
Definition: rewrite_options.h:676
static const char kAllow[]
Options that require special handling, e.g. non-scalar values.
Definition: rewrite_options.h:368
void set_property(const Property< T > *property)
The static properties of an Option are held in a Property<T>*.
Definition: rewrite_options.h:2793
static const char * FilterId(Filter filter)
Definition: file_load_policy.h:41
HttpOptions ComputeHttpOptions() const
bool RegisterLibrary(uint64 bytes, StringPiece md5_hash, StringPiece canonical_url)
Store size, md5 hash and canonical url for library recognition.
Definition: rewrite_options.h:1040
virtual ExperimentSpec * AddExperimentSpec(const StringPiece &spec, MessageHandler *handler)
const Hasher * hasher() const
Returns the hasher used for signatures and URLs to purge.
Definition: rewrite_options.h:2730
static const int64 kDefaultMaxCombinedJsBytes
Default maximum size of the combined js resource generated by JsCombiner.
Definition: rewrite_options.h:700
std::set< GoogleString > FilterIdSet
Convenience name for a set of rewrite filter ids.
Definition: rewrite_options.h:531
customized at server level (e.g. VirtualHost)
Definition: rewrite_options.h:488
bool SetOptionFromNameAndLog(StringPiece name, StringPiece value, MessageHandler *handler)
customized at process level only (command-line flags)
Definition: rewrite_options.h:489
static const char kLibrary[]
3-argument ones:
Definition: rewrite_options.h:392
virtual void Merge(const RewriteOptions &src)
void DisableAllFiltersNotExplicitlyEnabled()
void SetDefaultRewriteLevel(RewriteLevel level)
Definition: rewrite_options.h:934
void PurgeUrl(StringPiece url, int64 timestamp_ms)
Purge a cache entry for an exact URL, not a wildcard.
static const int64 kDefaultDistributedTimeoutMs
Default time to wait for a distributed rewrite to return.
Definition: rewrite_options.h:672
GoogleString SafeEnabledOptionsToString() const
virtual bool SetExperimentState(int id)
void SoftEnableFilterForTesting(Filter filter)
Definition: domain_lawyer.h:47
void Merge(Properties *properties)
const OptionBaseVector & all_options() const
Definition: rewrite_options.h:2720
Filter
Definition: rewrite_options.h:106
virtual RewriteOptions * NewOptions() const
Make an empty options object of the same type as this.
OptionSettingResult SetOptionFromQuery(StringPiece name, StringPiece value)
static int NumFilterIds()
bool IsUrlCacheValid(StringPiece url, int64 time_ms, bool search_wildcards) const
Pagespeed runs normally. Can be overridden via query param.
Definition: rewrite_options.h:200
static const int kDefaultMaxUrlSegmentSize
Definition: rewrite_options.h:666
virtual void SetRequiredExperimentFilters()
Enables filters needed by Experiment regardless of experiment.
bool DisableFiltersByCommaSeparatedList(const StringPiece &filters, MessageHandler *handler)
void SetExperimentStateStr(const StringPiece &experiment_index)
void AllowWhenInlining(const StringPiece &wildcard_pattern)
Like Allow(). See IsAllowedWhenInlining().
Definition: rewrite_options.h:2478
static const int kDefaultRewriteDeadlineMs
Default time to wait for rewrite before returning original resource.
Definition: rewrite_options.h:669
void InitializeOptions(const Properties *properties)
void AddOverrideCacheTtl(const StringPiece &wildcard)
Definition: rewrite_options.h:2585
void set_default_x_header_value(const StringPiece &x_header_value)
Definition: rewrite_options.h:2933
static const int64 kDefaultMaxImageSizeLowResolutionBytes
Definition: rewrite_options.h:682
bool IsCacheTtlOverridden(const StringPiece &url) const
Is the cache TTL overridden for the given url?
Definition: rewrite_options.h:2591
static const StringPiece LookupOptionNameById(StringPiece option_id)
bool UpdateCachePurgeSet(const CopyOnWrite< PurgeSet > &purge_set) LOCKS_EXCLUDED(cache_purge_mutex_.get())
static const char kCustomFetchHeader[]
2-argument ones:
Definition: rewrite_options.h:382
virtual bool SetFromString(StringPiece value_string, GoogleString *error_detail)
Sets value_ from value_string.
Definition: rewrite_options.h:2847
OptionSettingResult
Used for return value of SetOptionFromName.
Definition: rewrite_options.h:607
static const char kDistributableFilters[]
For experimentation.
Definition: rewrite_options.h:372
Temporary and will be removed soon.
Definition: rewrite_options.h:136
void DistributeFilter(const StringPiece &filter_id)
static const int64 kDefaultMinImageSizeLowResolutionBytes
Definition: rewrite_options.h:679
as above, but fail startup if included in vhost
Definition: rewrite_options.h:490
static Filter LookupFilterById(const StringPiece &filter_id)
GoogleString GetExperimentStateStr() const
bool UpdateCacheInvalidationTimestampMs(int64 timestamp_ms) LOCKS_EXCLUDED(cache_purge_mutex_.get())
static const char kNullOption[]
The option name you have when you don't have an option name.
Definition: rewrite_options.h:430
Definition: rewrite_options.h:198
void AllowOnlyWhenInlining(const StringPiece &wildcard_pattern)
Definition: rewrite_options.h:2486
void ForceEnableFilter(Filter filter)
ExperimentSpec(const StringPiece &spec, const RewriteOptions *options, MessageHandler *handler)
bool IsAllowedWhenInlining(const StringPiece &url) const
Definition: rewrite_options.h:2547
bool SetOptionsFromName(const OptionSet &option_set, MessageHandler *handler)
Definition: rewrite_options.h:582
const JavascriptLibraryIdentification * javascript_library_identification() const
Definition: rewrite_options.h:1048
bool ForbidFiltersByCommaSeparatedList(const StringPiece &filters, MessageHandler *handler)
Definition: rewrite_options.h:594
void UrlValuedAttribute(int index, StringPiece *element, StringPiece *attribute, semantic_type::Category *category) const
int id() const
Accessors.
Definition: rewrite_options.h:742
void Merge(const ExperimentSpec &spec)
void EnableExtendCacheFilters()
bool AvailableExperimentId(int id)
Definition: rewrite_options.h:83
bool IsRequestDeclined(const GoogleString &url, const RequestHeaders *request_headers) const
bool IsEqual(const RewriteOptions &that) const
RewriteLevel
Definition: rewrite_options.h:577
Definition: rewrite_options.h:599
const GoogleString & signature() const
Returns the computed signature.
Definition: rewrite_options.h:2669
int size() const
Returns the number of properties.
Definition: rewrite_options.h:834
void set_option_at(int index, OptionBase *option)
Definition: rewrite_options.h:2910
bool has_cache_invalidation_timestamp_ms() const
bool ClearSignatureWithCaution()
static const int64 kDefaultFinderPropertiesCacheRefreshTimeMs
Default cache refresh value for finder properties in pcache.
Definition: rewrite_options.h:686
virtual ExperimentSpec * Clone()
Return a ExperimentSpec with all the same information as this one.
static const int kHashBytes
Number of bytes used for signature hashing.
Definition: rewrite_options.h:473
static bool ParseFromString(StringPiece value_string, bool *value)
static const int kCachePurgeBytes
Number of bytes capacity in the URL invalidation set.
Definition: rewrite_options.h:476
virtual void Merge(const OptionBase *src)
Definition: rewrite_options.h:2778
Definition: rewrite_options.h:603
static const Filter kFirstFilter
Used for enumerating over all entries in the Filter enum.
Definition: rewrite_options.h:525
void ComputeSignature() LOCKS_EXCLUDED(cache_purge_mutex_.get())
int64 MaxImageInlineMaxBytes() const
The larger of ImageInlineMaxBytes and CssImageInlineMaxBytes.