00001
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/string_util.h"
00020 #include "net/instaweb/util/public/wildcard_group.h"
00021
00022 namespace net_instaweb {
00023
00031 class UserAgentMatcher {
00032 public:
00033 enum BlinkUserAgentType {
00034 kSupportsBlinkDesktop,
00035 kSupportsBlinkMobile,
00036 kDoesNotSupportBlink,
00037 };
00038
00039 UserAgentMatcher();
00040 virtual ~UserAgentMatcher();
00041
00042 bool IsIe(const StringPiece& user_agent) const;
00043 bool IsIe6(const StringPiece& user_agent) const;
00044 bool IsIe7(const StringPiece& user_agent) const;
00045 bool IsIe6or7(const StringPiece& user_agent) const {
00046 return IsIe6(user_agent) || IsIe7(user_agent);
00047 };
00048
00049 bool SupportsImageInlining(const StringPiece& user_agent) const;
00050
00053 BlinkUserAgentType GetBlinkUserAgentType(const char* user_agent,
00054 bool allow_mobile) const;
00055
00056 bool SupportsJsDefer(const StringPiece& user_agent) const;
00057 bool SupportsWebp(const StringPiece& user_agent) const;
00058
00066 bool IsMobileUserAgent(const StringPiece& user_agent) const;
00067 virtual bool IsAnyMobileUserAgent(const char* user_agent) const;
00068 private:
00069 WildcardGroup supports_image_inlining_;
00070 WildcardGroup supports_blink_desktop_;
00071 WildcardGroup supports_webp_;
00072 WildcardGroup mobile_user_agents_;
00073
00074 DISALLOW_COPY_AND_ASSIGN(UserAgentMatcher);
00075 };
00076
00077 }
00078
00079 #endif ///< NET_INSTAWEB_HTTP_PUBLIC_USER_AGENT_MATCHER_H_