Page Speed Optimization Libraries  1.2.24.1
net/instaweb/http/public/user_agent_matcher.h
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_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines