Page Speed Optimization Libraries
1.2.24.1
|
00001 // Copyright 2010 Google Inc. All Rights Reserved. 00014 00015 #ifndef NET_INSTAWEB_HTTP_PUBLIC_USER_AGENT_MATCHER_H_ 00016 #define NET_INSTAWEB_HTTP_PUBLIC_USER_AGENT_MATCHER_H_ 00017 00018 #include "net/instaweb/util/public/basictypes.h" 00019 #include "net/instaweb/util/public/re2.h" 00020 #include "net/instaweb/util/public/string_util.h" 00021 #include "net/instaweb/util/public/fast_wildcard_group.h" 00022 00023 namespace net_instaweb { 00024 00025 class RequestHeaders; 00026 00034 class UserAgentMatcher { 00035 public: 00036 enum BlinkRequestType { 00037 kBlinkWhiteListForDesktop, 00038 kBlinkBlackListForDesktop, 00039 kBlinkWhiteListForMobile, 00040 kDoesNotSupportBlinkForMobile, 00041 kNullOrEmpty, 00042 kDoesNotSupportBlink, 00043 }; 00044 00045 enum PrefetchMechanism { 00046 kPrefetchNotSupported, 00047 kPrefetchLinkRelSubresource, 00048 kPrefetchImageTag, 00049 kPrefetchObjectTag, 00050 kPrefetchLinkScriptTag, 00051 }; 00052 00053 UserAgentMatcher(); 00054 virtual ~UserAgentMatcher(); 00055 00056 bool IsIe(const StringPiece& user_agent) const; 00057 bool IsIe6(const StringPiece& user_agent) const; 00058 bool IsIe7(const StringPiece& user_agent) const; 00059 bool IsIe6or7(const StringPiece& user_agent) const { 00060 return IsIe6(user_agent) || IsIe7(user_agent); 00061 }; 00062 bool IsIe9(const StringPiece& user_agent) const; 00063 00064 virtual bool SupportsImageInlining(const StringPiece& user_agent) const; 00065 00068 virtual BlinkRequestType GetBlinkRequestType( 00069 const char* user_agent, const RequestHeaders* request_headers) const; 00070 00072 PrefetchMechanism GetPrefetchMechanism(const StringPiece& user_agent) const; 00073 00074 bool SupportsJsDefer(const StringPiece& user_agent, bool allow_mobile) const; 00075 bool SupportsWebp(const StringPiece& user_agent) const; 00076 00081 bool SupportsDnsPrefetchUsingRelPrefetch(const StringPiece& user_agent) const; 00082 bool SupportsDnsPrefetch(const StringPiece& user_agent) const; 00083 00084 virtual bool IsMobileUserAgent(const StringPiece& user_agent) const; 00085 virtual bool IsMobileRequest( 00086 const StringPiece& user_agent, 00087 const RequestHeaders* request_headers) const; 00088 00089 virtual bool IsAndroidUserAgent(const StringPiece& user_agent) const; 00090 00093 virtual bool GetChromeBuildNumber(const StringPiece& user_agent, int* major, 00094 int* minor, int* build, int* patch) const; 00095 00096 virtual bool SupportsSplitHtml(const StringPiece& user_agent, 00097 bool allow_mobile) const; 00098 00099 private: 00100 FastWildcardGroup supports_image_inlining_; 00101 FastWildcardGroup blink_desktop_whitelist_; 00102 FastWildcardGroup blink_desktop_blacklist_; 00103 FastWildcardGroup blink_mobile_whitelist_; 00104 FastWildcardGroup supports_webp_; 00105 FastWildcardGroup mobile_user_agents_; 00106 FastWildcardGroup supports_prefetch_link_rel_subresource_; 00107 FastWildcardGroup supports_prefetch_image_tag_; 00108 FastWildcardGroup supports_prefetch_link_script_tag_; 00109 FastWildcardGroup supports_dns_prefetch_; 00110 00111 const RE2 chrome_version_pattern_; 00112 00113 DISALLOW_COPY_AND_ASSIGN(UserAgentMatcher); 00114 }; 00115 00116 } 00117 00118 #endif ///< NET_INSTAWEB_HTTP_PUBLIC_USER_AGENT_MATCHER_H_