| // Copyright 2013 Google Inc. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "pagespeed/kernel/base/basictypes.h" |
| #include "pagespeed/kernel/base/gtest.h" |
| #include "pagespeed/kernel/base/scoped_ptr.h" |
| #include "pagespeed/kernel/base/string_util.h" |
| #include "pagespeed/kernel/http/user_agent_matcher.h" |
| #include "pagespeed/kernel/http/user_agent_matcher_test_base.h" |
| |
| namespace net_instaweb { |
| |
| const char UserAgentMatcherTestBase::kAcceptHeaderValueMobile[] = |
| "text/html,application/vnd.wap.xhtml+xml"; |
| const char UserAgentMatcherTestBase::kAcceptHeaderValueNonMobile[] = |
| "text/html"; |
| const char UserAgentMatcherTestBase::kALCATELMobileUserAgent[] = |
| "ALCATEL_one_touch_310A/1.0 Profile/MIDP-2.0 " |
| "Configuration/CLDC-1.1 ObigoInternetBrowser/Q03C"; |
| const char UserAgentMatcherTestBase::kAlcatelUserAgent[] = |
| "Alcatel_one_touch_214/1.0 ObigoInternetBrowser/Q03C"; |
| const char UserAgentMatcherTestBase::kAmoiUserAgent[] = |
| "Amoi 8512/R18.0 NF-Browser/3.3"; |
| const char UserAgentMatcherTestBase::kAndroidChrome18UserAgent[] = |
| // webp broken |
| "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) " |
| "AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile " |
| "Safari/535.19"; |
| const char UserAgentMatcherTestBase::kAndroidChrome21UserAgent[] = |
| // webp fixed (string is a hack) |
| "Mozilla/5.0 (Linux; Android 4.1.4; Galaxy Nexus Build/IMM76B) " |
| "AppleWebKit/535.19 (KHTML, like Gecko) Chrome/21.0.1025.133 Mobile " |
| "Safari/535.19"; |
| const char UserAgentMatcherTestBase::kAndroidHCUserAgent[] = |
| "Mozilla/5.0 (Linux; U; Android 3.2; en-us; Sony Tablet S Build/THMAS11000)" |
| " AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13"; |
| const char UserAgentMatcherTestBase::kAndroidICSUserAgent[] = |
| "Mozilla/5.0 (Linux; U; Android 4.0.1; en-us; Galaxy Nexus Build/ICL27) " |
| "AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"; |
| const char UserAgentMatcherTestBase::kAndroidNexusSUserAgent[] = |
| "Mozilla/5.0 (Linux; U; Android 2.3.3; en-gb; Nexus S Build/GRI20)" |
| "AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"; |
| const char UserAgentMatcherTestBase::kBenqUserAgent[] = |
| "BENQ-A500"; |
| const char UserAgentMatcherTestBase::kBlackBerryOS5UserAgent[] = |
| "BlackBerry9000/5.0.0.93 Profile/MIDP-2.0 Configuration/CLDC-1.1 " |
| "VendorID/179"; |
| const char UserAgentMatcherTestBase::kBlackBerryOS6UserAgent[] = |
| "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.11+ " |
| "(KHTML, like Gecko) Version/6.0.0.141 Mobile Safari/534.11+"; |
| const char UserAgentMatcherTestBase::kChrome12UserAgent[] = // webp capable |
| "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_4) " |
| "AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30"; |
| const char UserAgentMatcherTestBase::kChrome15UserAgent[] = // Not webp capable |
| "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) " |
| "AppleWebKit/534.13 (KHTML, like Gecko) Chrome/15.0.597.19 Safari/534.13"; |
| const char UserAgentMatcherTestBase::kChrome18UserAgent[] = // webp capable |
| "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) " |
| "AppleWebKit/534.13 (KHTML, like Gecko) Chrome/18.0.597.19 Safari/534.13"; |
| const char UserAgentMatcherTestBase::kChrome9UserAgent[] = // Not webp capable |
| "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) " |
| "AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.19 Safari/534.13"; |
| const char UserAgentMatcherTestBase::kChrome31UserAgent[] = // No animated WebP |
| "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) " |
| "Chrome/31.0.1650.16 Safari/537.36"; |
| const char UserAgentMatcherTestBase::kChrome32UserAgent[] = // Animated WebP |
| "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 " |
| "(KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36"; |
| const char UserAgentMatcherTestBase::kChrome37UserAgent[] = |
| "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) " |
| "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.122 Safari/537.36"; |
| const char UserAgentMatcherTestBase::kChrome41UserAgent[] = |
| "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)" |
| " Chrome/41.0.2227.0 Safari/537.36"; |
| const char UserAgentMatcherTestBase::kChrome42UserAgent[] = |
| "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)" |
| " Chrome/42.0.2302.4 Safari/537.36"; |
| const char UserAgentMatcherTestBase::kChromeUserAgent[] = |
| "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) " |
| "AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13"; |
| const char UserAgentMatcherTestBase::kCompalUserAgent[] = |
| "Compal-A618"; |
| const char UserAgentMatcherTestBase::kCriOS31UserAgent[] = |
| "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) " |
| "AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/31.0.1650.18 Mobile/11B511 " |
| "Safari/8536.25 (37014222-1F1D-4117-89B3-699D5C10628A)"; |
| const char UserAgentMatcherTestBase::kCriOS32UserAgent[] = |
| "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) " |
| "AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/32.0.1700.21 " |
| "Mobile/11B554a Safari/9537.53 (A7BED55D-B09E-484F-B2FE-5E4952E9B87E)"; |
| const char UserAgentMatcherTestBase::kCriOS48UserAgent[] = |
| "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) " |
| "AppleWebKit/601.1 (KHTML, like Gecko) CriOS/48.0.2564.87 " |
| "Mobile/13C75 Safari/601.1.46"; |
| const char UserAgentMatcherTestBase::kDoCoMoMobileUserAgent[] = |
| "DoCoMo/1.0/D505iS/c20/TB/W20H10"; |
| const char UserAgentMatcherTestBase::kFirefox1UserAgent[] = |
| "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) " |
| "Gecko/20060909 Firefox/1.5.0.7 MG (Novarra-Vision/6.1)"; |
| const char UserAgentMatcherTestBase::kFirefox3UserAgent[] = |
| "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) " |
| "Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"; |
| const char UserAgentMatcherTestBase::kFirefox42AndroidUserAgent[] = |
| "Mozilla/5.0 (Android 5.0.1; Mobile; rv:42.0) Gecko/42.0 Firefox/42.0"; |
| const char UserAgentMatcherTestBase::kFirefox5UserAgent[] = |
| "Mozilla/5.0 (X11; U; Linux i586; de; rv:5.0) Gecko/20100101 Firefox/5.0"; |
| const char UserAgentMatcherTestBase::kFirefoxMobileUserAgent[] = |
| "Mozilla/5.0 (Android; Mobile; rv:38.0) Gecko/38.0 Firefox/38.0"; |
| const char UserAgentMatcherTestBase::kFirefoxNokiaN800[] = |
| // This is a tablet. |
| "Mozilla/5.0 (X11; U; Linux armv6l; en-US; rv:1.9a6pre) Gecko/20070810 " |
| "Firefox/3.0a1 Tablet browser 0.1.16 RX-34_2007SE_4.2007.38-2"; |
| const char UserAgentMatcherTestBase::kFirefoxUserAgent[] = |
| "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) " |
| "Gecko/20100101 Firefox/27.0"; |
| const char UserAgentMatcherTestBase::kFLYUserAgent[] = |
| "FLY-2040i/BSI AU.Browser/2.0 QO3C1 MMP/1.0"; |
| const char UserAgentMatcherTestBase::kGenericAndroidUserAgent[] = |
| "Android"; |
| const char UserAgentMatcherTestBase::kGooglebotUserAgent[] = |
| "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"; |
| // Google ads bot user agents, used to check ads policy compliance. |
| // See https://support.google.com/adwords/answer/2404197?hl=en#exclude |
| const char UserAgentMatcherTestBase::kGoogleAdsBotUserAgent[] = |
| "AdsBot-Google"; |
| const char UserAgentMatcherTestBase::kGoogleAdsBotMobileUserAgent[] = |
| "AdsBot-Google-Mobile"; |
| const char UserAgentMatcherTestBase::kGooglePlusUserAgent[] = |
| "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google " |
| "(+https://developers.google.com/+/web/snippet/)"; |
| const char UserAgentMatcherTestBase::kIe6UserAgent[] = |
| "Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1;" |
| " .NET CLR 2.0.50727)"; |
| const char UserAgentMatcherTestBase::kIe7UserAgent[] = |
| "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"; |
| const char UserAgentMatcherTestBase::kIe8UserAgent[] = |
| "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;" |
| " Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729;" |
| " .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2;" |
| " .NET4.0C; .NET4.0E; FDM)"; |
| const char UserAgentMatcherTestBase::kIe9UserAgent[] = |
| "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))"; |
| const char UserAgentMatcherTestBase::kIe10UserAgent[] = |
| "Mozilla/5.0 (Windows; U; MSIE 10.0; WIndows NT 9.0; en-US))"; |
| const char UserAgentMatcherTestBase::kIPadTabletUserAgent[] = |
| "Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, " |
| "like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25"; |
| const char UserAgentMatcherTestBase::kIPadUserAgent[] = |
| "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) " |
| "AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 " |
| "Mobile/7B334b Safari/531.21.10"; |
| const char UserAgentMatcherTestBase::kIPadChrome28UserAgent[] = |
| "Mozilla/5.0 (iPad; CPU OS 613 like Mac OS X) AppleWebKit/536.26 (KHTML " |
| "like Gecko) CriOS/28.0.1500.12 Mobile/10B329 Safari/8536.25"; |
| const char UserAgentMatcherTestBase::kIPadChrome29UserAgent[] = |
| "Mozilla/5.0 (iPad; CPU OS 613 like Mac OS X) AppleWebKit/536.26 (KHTML " |
| "like Gecko) CriOS/29.0.1547.11 Mobile/10B329 Safari/8536.25"; |
| const char UserAgentMatcherTestBase::kIPadChrome36UserAgent[] = |
| "Mozilla/5.0 (iPad; CPU OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 " |
| "(KHTML, like Gecko) CriOS/36.0.1985.49 Mobile/11D201 Safari/9537.53"; |
| const char UserAgentMatcherTestBase::kIPhone4Safari[] = |
| "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46" |
| " (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3"; |
| const char UserAgentMatcherTestBase::kIPhoneChrome21UserAgent[] = |
| // no webp on iOS |
| "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X; en-us) " |
| "AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/21.0.1180.82 " |
| "Mobile/10A523 Safari/7534.48.3"; |
| const char UserAgentMatcherTestBase::kIPhoneChrome36UserAgent[] = |
| "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) " |
| "AppleWebKit/537.51.2 (KHTML, like Gecko) CriOS/36.0.1985.49 " |
| "Mobile/11D257 Safari/9537.53"; |
| const char UserAgentMatcherTestBase::kIPhoneUserAgent[] = |
| "Apple iPhone OS v2.1.1 CoreMedia v1.0.0.5F138"; |
| const char UserAgentMatcherTestBase::kIPodSafari[] = |
| "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)" |
| " AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2" |
| " Safari/6533.18.5"; |
| const char UserAgentMatcherTestBase::kiUserAgent[] = |
| "i-mobile318"; |
| const char UserAgentMatcherTestBase::kJMobileUserAgent[] = |
| "J-PHONE/3.0/J-SA05"; |
| const char UserAgentMatcherTestBase::kKDDIMobileUserAgent[] = |
| "KDDI-CA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0"; |
| const char UserAgentMatcherTestBase::kKindleTabletUserAgent[] = |
| "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire " |
| "Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 " |
| "Mobile Safari/533.1"; |
| const char UserAgentMatcherTestBase::kKWCMobileUserAgent[] = |
| "KWC-E2000/1003 UP.Browser/7.2.6.1.475 (GUI) MMP/2.0"; |
| const char UserAgentMatcherTestBase::kLENOVOUserAgent[] = |
| "LENOVO-E307_ENG_RUS_FLY/(2006.05.10)S276/WAP1.2.1"; |
| const char UserAgentMatcherTestBase::kLGEMobileUserAgent[] = |
| "LGE-AX300/1.0 UP.Browser/6.2.3.8 (GUI) MMP/2.0"; |
| const char UserAgentMatcherTestBase::kLGEUserAgent[] = |
| "LGE-CU8188"; |
| const char UserAgentMatcherTestBase::kLGMIDPMobileUserAgent[] = |
| "LG-A225/V100 Obigo/WAP2.0 Profile/MIDP-2.1 Configuration/CLDC-1.1"; |
| const char UserAgentMatcherTestBase::kLGUPBrowserMobileUserAgent[] = |
| "LG8500/1.0 UP.Browser/6.2.3.9 (GUI) MMP/2.0"; |
| const char UserAgentMatcherTestBase::kLGUserAgent[] = |
| "LG-B2000"; |
| const char UserAgentMatcherTestBase::kMOTMobileUserAgent[] = |
| "MOT-1.2.0/11.03 UP.Browser/4.1.27a"; |
| const char UserAgentMatcherTestBase::kMozillaMobileUserAgent[] = |
| "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; " |
| "SDA/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1)"; |
| const char UserAgentMatcherTestBase::kMozillaUserAgent[] = |
| "Mozilla/1.22 (compatible; MMEF20; Cellphone; Sony CMD-Z5)"; |
| const char UserAgentMatcherTestBase::kNECUserAgent[] = |
| "NEC-E122/1.0 TMT-Mobile-Internet-Browser/1.1.14.20 (GUI)"; |
| const char UserAgentMatcherTestBase::kNexus10ChromeUserAgent[] = |
| "Mozilla/5.0 (Linux; Android 4.2.2; Nexus 10 Build/JDQ39) AppleWebKit/" |
| "537.31 (KHTML, like Gecko) Chrome/26.0.1408.0 Safari/537.31"; |
| const char UserAgentMatcherTestBase::kNexus6Chrome44UserAgent[] = |
| "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LVY48E) " |
| "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile " |
| "Safari/537.36"; |
| const char UserAgentMatcherTestBase::kNexus7ChromeUserAgent[] = |
| "Mozilla/5.0 (Linux; Android 4.2; Nexus 7 Build/JOP32C) AppleWebKit/535.19" |
| "(KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"; |
| const char UserAgentMatcherTestBase::kNokiaMobileUserAgent[] = |
| "Nokia6600/1.0 (2.33.0) SymbianOS/7.0s Series60/2.0 " |
| "Profile/MIDP-2.0 Configuration/CLDC-1.0"; |
| const char UserAgentMatcherTestBase::kNokiaUserAgent[] = |
| "Nokia2355/1.0 (JN100V0200.nep) UP.Browser/6.2.2.1.c.1.108 (GUI) MMP/2.0"; |
| const char UserAgentMatcherTestBase::kOpera1101UserAgent[] = |
| // Not webp capable |
| "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01"; |
| const char UserAgentMatcherTestBase::kOpera1110UserAgent[] = // webp capable |
| "Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10"; |
| const char UserAgentMatcherTestBase::kOpera5UserAgent[] = |
| "Opera/5.0 (SunOS 5.8 sun4u; U) [en]"; |
| const char UserAgentMatcherTestBase::kOpera8UserAgent[] = |
| "Opera/8.01 (J2ME/MIDP; Opera Mini/1.1.2666/1724; en; U; ssr)"; |
| const char UserAgentMatcherTestBase::kOpera18UserAgent[] = |
| "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 " |
| "(KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"; |
| const char UserAgentMatcherTestBase::kOpera19UserAgent[] = |
| "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 " |
| "(KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36 OPR/19.0.1326.56"; |
| const char UserAgentMatcherTestBase::kOperaMiniMobileUserAgent[] = |
| "Opera/8.01 (J2ME/MIDP; Opera Mini/1.1.4821/hifi/tmobile/uk; " |
| "Motorola V3; en; U; ssr)"; |
| const char UserAgentMatcherTestBase::kOperaMobi9[] = |
| "Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en)"; |
| const char UserAgentMatcherTestBase::kOperaMobilMobileUserAgent[] = |
| "Opera/9.80 (Android 4.0.4; Linux; Opera Mobi/ADR-1104201100; U; ru) " |
| "Presto/2.7.81 Version/11.00"; |
| const char UserAgentMatcherTestBase::kOperaWithFirefoxUserAgent[] = |
| "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera " |
| "12.14"; |
| const char UserAgentMatcherTestBase::kPanasonicMobileUserAgent[] = |
| "Panasonic-G60/1.0 UP.Browser/6.1.0.6 " |
| "MMP/1.0 UP.Browser/6.1.0.6 (GUI) MMP/1.0"; |
| const char UserAgentMatcherTestBase::kPGUserAgent[] = |
| "PG-1610/R01"; |
| const char UserAgentMatcherTestBase::kPHILIPSUserAgent[] = |
| "PHILIPS 330 / Obigo Internet Browser 2.0"; |
| const char UserAgentMatcherTestBase::kportalmmmMobileUserAgent[] = |
| "portalmmm/2.0 6120(c100;TB)"; |
| const char UserAgentMatcherTestBase::kPSPUserAgent[] = |
| "Mozilla/4.0 (PSP (PlayStation Portable); 2.00)"; |
| const char UserAgentMatcherTestBase::kRoverUserAgent[] = |
| "Rover 3.5 (RIM Handheld; Mobitex; OS v. 2.1)"; |
| const char UserAgentMatcherTestBase::kSafariUserAgent[] = |
| "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.51.22 " |
| "(KHTML, like Gecko) Version/5.1.1 Safari/534.51.22"; |
| const char UserAgentMatcherTestBase::kSafari6UserAgent[] = |
| "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.25 " |
| "(KHTML, like Gecko) Version/6.0 Safari/536.25"; |
| const char UserAgentMatcherTestBase::kSafari9UserAgent[] = |
| "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/601.6.17 " |
| "(KHTML, like Gecko) Version/9.1.1 Safari/601.6.17"; |
| const char UserAgentMatcherTestBase::kSAGEMMobileUserAgent[] = |
| "SAGEM-my202C/Orange1.0 UP.Browser/5.0.5.6 (GUI)"; |
| const char UserAgentMatcherTestBase::kSAGEMUserAgent[] = |
| "SAGEM-942"; |
| const char UserAgentMatcherTestBase::kSAMSUNGMobileUserAgent[] = |
| "SAMSUNG-B2700/SXIB1 SHP/VPP/R5 NetFront/3.4 SMM-MMS/1.2.0 " |
| "profile/MIDP-2.0 configuration/CLDC-1.1"; |
| const char UserAgentMatcherTestBase::kSCHMobileUserAgent[] = |
| "SCH-A850 UP.Browser/6.2.3.2 (GUI) MMP/2.0"; |
| const char UserAgentMatcherTestBase::kSCHUserAgent[] = |
| "SCH-U350/1.0 NetFront/3.0.22.2.18 (GUI) MMP/2.0"; |
| const char UserAgentMatcherTestBase::kSECMobileUserAgent[] = |
| "SEC-scha310 UP.Browser/4.1.26c3"; |
| const char UserAgentMatcherTestBase::kSGHUserAgent[] = |
| "SGH-Z230"; |
| const char UserAgentMatcherTestBase::kSHARPMobileUserAgent[] = |
| "SHARP-TQ-GX10/0.0 Profile/MIDP-1.0 Configuration/CLDC-1.0 " |
| "UP.Browser/6.1.0.2.129 (GUI) MMP/1.0"; |
| const char UserAgentMatcherTestBase::kSHARPUserAgent[] = |
| "SHARP-TQ-GX15"; |
| const char UserAgentMatcherTestBase::kSIEMobileUserAgent[] = |
| "SIE-2128/24 UP.Browser/5.0.3.3 (GUI)"; |
| const char UserAgentMatcherTestBase::kSIEUserAgent[] = |
| "SIE-A40"; |
| const char UserAgentMatcherTestBase::kSilkDesktopUserAgent[] = |
| "Mozilla/5.0 (PlayStation Vita 2.10) AppleWebKit/536.26 (KHTML, " |
| "like Gecko) Silk/3.2"; |
| const char UserAgentMatcherTestBase::kSilkTabletUserAgent[] = |
| "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Silk/1.0.22.153_10033210) " |
| "AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 " |
| "Silk-Accelerated=true"; |
| const char UserAgentMatcherTestBase::kSoftBankMobileUserAgent[] = |
| "SoftBank/1.0/705NK/NKJ001 Series60/3.0 NokiaN73/3.0650 " |
| "Profile/MIDP-2.0 Configuration/CLDC-1.1"; |
| const char UserAgentMatcherTestBase::kSpiceUserAgent[] = |
| "Spice M6800 Opera/9.80 (MTK; Nucleus; U; en-US) Presto/2.4.18 " |
| "Version/10.00"; |
| const char UserAgentMatcherTestBase::kTIANYUUserAgent[] = |
| "TIANYU-KTOUCH/B2012"; |
| const char UserAgentMatcherTestBase::kVodafoneMobileUserAgent[] = |
| "Vodafone/1.0/0Vodafone710/B616 Browser/Obigo-Browser/Q04A " |
| "MMS/Obigo-MMS/Q04A SyncML/HW-SyncML/1.0 Java/QVM/4.1 Profile/MIDP-2.0 " |
| "Configuration/CLDC-1.1"; |
| // http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx |
| const char UserAgentMatcherTestBase::kWindowsPhoneUserAgent[] = |
| "Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; " |
| "Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 928) like iPhone OS 7_0_3 " |
| "Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537"; |
| const char UserAgentMatcherTestBase::kWinWAPUserAgent[] = |
| "WinWAP/1.3 (1.3.0.0;WinCE;PPC2003)"; |
| const char UserAgentMatcherTestBase::kXWapProfileHeaderValue[] = |
| "http://foo.bar.xml"; |
| const char UserAgentMatcherTestBase::kXWapProfile[] = |
| "x-wap-profile"; |
| const char UserAgentMatcherTestBase::kYourWapUserAgent[] = |
| "YourWap Ericsson 380/2.63"; |
| const char UserAgentMatcherTestBase::kZTEMobileUserAgent[] = |
| "ZTE-C705/1.0 UP.Browser/4.1.27a2"; |
| const char UserAgentMatcherTestBase::XT907UserAgent[] = |
| "Mozilla/5.0 (Linux; Android 4.1.1; XT907 Build/9.8.1Q_27-2) AppleWebKit" |
| "/537.25 (KHTML, like Gecko) Chrome/26.0.1376.1 Mobile Safari/537.25"; |
| const char UserAgentMatcherTestBase::kTestingWebp[] = |
| "webp"; |
| const char UserAgentMatcherTestBase::kTestingWebpLosslessAlpha[] = |
| "webp-la"; |
| const char UserAgentMatcherTestBase::kTestingWebpAnimated[] = |
| "webp-animated"; |
| |
| // The user-agent strings for IE 11 seen below were all actual UA strings |
| // observed in the real world. Yes, the asterisks are actually in the UA. |
| const char* const |
| UserAgentMatcherTestBase::kIe11UserAgents[] = { |
| "Windows-RSS-Platform/2.0 (IE 11.0; Windows NT 6.1)", |
| "Mozilla/5.0 (compatible; IE 11.0; Win32; Trident/7.0)", |
| "Mozilla/5.0 (Windows NT 6.1; WOW64; ***********; rv:11.0) like Gecko", |
| "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko", |
| }; |
| |
| const char* const UserAgentMatcherTestBase::kMobileUserAgents[] = { |
| UserAgentMatcherTestBase::kALCATELMobileUserAgent, |
| UserAgentMatcherTestBase::kAlcatelUserAgent, |
| UserAgentMatcherTestBase::kAndroidChrome21UserAgent, |
| UserAgentMatcherTestBase::kAndroidICSUserAgent, |
| UserAgentMatcherTestBase::kAndroidICSUserAgent, |
| UserAgentMatcherTestBase::kAndroidNexusSUserAgent, |
| UserAgentMatcherTestBase::kDoCoMoMobileUserAgent, |
| UserAgentMatcherTestBase::kIPhone4Safari, |
| UserAgentMatcherTestBase::kIPhoneChrome21UserAgent, |
| UserAgentMatcherTestBase::kIPhoneUserAgent, |
| UserAgentMatcherTestBase::kIPodSafari, |
| UserAgentMatcherTestBase::kJMobileUserAgent, |
| UserAgentMatcherTestBase::kKDDIMobileUserAgent, |
| UserAgentMatcherTestBase::kKWCMobileUserAgent, |
| UserAgentMatcherTestBase::kLGEMobileUserAgent, |
| UserAgentMatcherTestBase::kLGMIDPMobileUserAgent, |
| UserAgentMatcherTestBase::kLGUPBrowserMobileUserAgent, |
| UserAgentMatcherTestBase::kMOTMobileUserAgent, |
| UserAgentMatcherTestBase::kMozillaMobileUserAgent, |
| UserAgentMatcherTestBase::kNokiaMobileUserAgent, |
| UserAgentMatcherTestBase::kOperaMiniMobileUserAgent, |
| UserAgentMatcherTestBase::kOperaMobi9, |
| UserAgentMatcherTestBase::kOperaMobilMobileUserAgent, |
| UserAgentMatcherTestBase::kPanasonicMobileUserAgent, |
| UserAgentMatcherTestBase::kPHILIPSUserAgent, |
| UserAgentMatcherTestBase::kportalmmmMobileUserAgent, |
| UserAgentMatcherTestBase::kSAGEMMobileUserAgent, |
| UserAgentMatcherTestBase::kSAMSUNGMobileUserAgent, |
| UserAgentMatcherTestBase::kSCHMobileUserAgent, |
| UserAgentMatcherTestBase::kSECMobileUserAgent, |
| UserAgentMatcherTestBase::kSHARPMobileUserAgent, |
| UserAgentMatcherTestBase::kSIEMobileUserAgent, |
| UserAgentMatcherTestBase::kSoftBankMobileUserAgent, |
| UserAgentMatcherTestBase::kVodafoneMobileUserAgent, |
| UserAgentMatcherTestBase::kZTEMobileUserAgent, |
| UserAgentMatcherTestBase::kGoogleAdsBotMobileUserAgent |
| }; |
| |
| const char* const UserAgentMatcherTestBase::kDesktopUserAgents[] = { |
| "not a mobile", |
| UserAgentMatcherTestBase::kAmoiUserAgent, |
| UserAgentMatcherTestBase::kBenqUserAgent, |
| UserAgentMatcherTestBase::kCompalUserAgent, |
| UserAgentMatcherTestBase::kFirefoxNokiaN800, |
| UserAgentMatcherTestBase::kFLYUserAgent, |
| UserAgentMatcherTestBase::kiUserAgent, |
| UserAgentMatcherTestBase::kLENOVOUserAgent, |
| UserAgentMatcherTestBase::kLGEUserAgent, |
| UserAgentMatcherTestBase::kLGUserAgent, |
| UserAgentMatcherTestBase::kMozillaUserAgent, |
| UserAgentMatcherTestBase::kNECUserAgent, |
| UserAgentMatcherTestBase::kOpera1101UserAgent, |
| UserAgentMatcherTestBase::kPGUserAgent, |
| UserAgentMatcherTestBase::kRoverUserAgent, |
| UserAgentMatcherTestBase::kSafariUserAgent, |
| UserAgentMatcherTestBase::kSAGEMUserAgent, |
| UserAgentMatcherTestBase::kSCHUserAgent, |
| UserAgentMatcherTestBase::kSGHUserAgent, |
| UserAgentMatcherTestBase::kSHARPUserAgent, |
| UserAgentMatcherTestBase::kSIEUserAgent, |
| UserAgentMatcherTestBase::kSpiceUserAgent, |
| UserAgentMatcherTestBase::kTIANYUUserAgent, |
| UserAgentMatcherTestBase::kWinWAPUserAgent, |
| UserAgentMatcherTestBase::kYourWapUserAgent, |
| UserAgentMatcherTestBase::kGoogleAdsBotUserAgent |
| }; |
| |
| const char* const UserAgentMatcherTestBase::kTabletUserAgents[] = { |
| UserAgentMatcherTestBase::kGenericAndroidUserAgent, |
| UserAgentMatcherTestBase::kIPadTabletUserAgent, |
| UserAgentMatcherTestBase::kIPadUserAgent, |
| UserAgentMatcherTestBase::kKindleTabletUserAgent, |
| UserAgentMatcherTestBase::kNexus7ChromeUserAgent, |
| UserAgentMatcherTestBase::kSilkTabletUserAgent |
| }; |
| |
| const char* const |
| UserAgentMatcherTestBase::kImageInliningSupportedUserAgents[] = { |
| "", // Empty user agent. |
| UserAgentMatcherTestBase::kAndroidChrome21UserAgent, |
| UserAgentMatcherTestBase::kAndroidHCUserAgent, |
| UserAgentMatcherTestBase::kAndroidICSUserAgent, |
| UserAgentMatcherTestBase::kChromeUserAgent, |
| UserAgentMatcherTestBase::kFirefoxUserAgent, |
| UserAgentMatcherTestBase::kIe9UserAgent, |
| UserAgentMatcherTestBase::kIe10UserAgent, |
| UserAgentMatcherTestBase::kIPhoneUserAgent, |
| UserAgentMatcherTestBase::kOpera8UserAgent, |
| UserAgentMatcherTestBase::kSafariUserAgent, |
| UserAgentMatcherTestBase::kIe11UserAgents[0], |
| UserAgentMatcherTestBase::kIe11UserAgents[1], |
| UserAgentMatcherTestBase::kIe11UserAgents[2], |
| UserAgentMatcherTestBase::kIe11UserAgents[3], |
| UserAgentMatcherTestBase::kGoogleAdsBotUserAgent, |
| UserAgentMatcherTestBase::kGoogleAdsBotMobileUserAgent, |
| }; |
| |
| const char* const UserAgentMatcherTestBase::kSplitHtmlSupportedUserAgents[] = { |
| UserAgentMatcherTestBase::kChromeUserAgent, |
| UserAgentMatcherTestBase::kFirefoxUserAgent, |
| UserAgentMatcherTestBase::kIe10UserAgent, |
| UserAgentMatcherTestBase::kSafariUserAgent, |
| }; |
| |
| const char* const |
| UserAgentMatcherTestBase::kSplitHtmlUnSupportedUserAgents[] = { |
| UserAgentMatcherTestBase::kAndroidChrome21UserAgent, |
| UserAgentMatcherTestBase::kFirefox1UserAgent, |
| UserAgentMatcherTestBase::kFirefox3UserAgent, |
| UserAgentMatcherTestBase::kIe6UserAgent, |
| UserAgentMatcherTestBase::kIe8UserAgent, |
| UserAgentMatcherTestBase::kIe9UserAgent, |
| UserAgentMatcherTestBase::kIe11UserAgents[0], |
| UserAgentMatcherTestBase::kIe11UserAgents[1], |
| UserAgentMatcherTestBase::kIe11UserAgents[2], |
| UserAgentMatcherTestBase::kIe11UserAgents[3], |
| UserAgentMatcherTestBase::kNokiaUserAgent, |
| UserAgentMatcherTestBase::kOpera5UserAgent, |
| UserAgentMatcherTestBase::kPSPUserAgent, |
| }; |
| |
| const int UserAgentMatcherTestBase::kIe11UserAgentsArraySize = |
| arraysize(kIe11UserAgents); |
| const int UserAgentMatcherTestBase::kMobileUserAgentsArraySize = |
| arraysize(kMobileUserAgents); |
| const int UserAgentMatcherTestBase::kDesktopUserAgentsArraySize = |
| arraysize(kDesktopUserAgents); |
| const int UserAgentMatcherTestBase::kTabletUserAgentsArraySize = |
| arraysize(kTabletUserAgents); |
| const int UserAgentMatcherTestBase::kImageInliningSupportedUserAgentsArraySize = |
| arraysize(kImageInliningSupportedUserAgents); |
| const int UserAgentMatcherTestBase::kSplitHtmlSupportedUserAgentsArraySize = |
| arraysize(kSplitHtmlSupportedUserAgents); |
| const int UserAgentMatcherTestBase::kSplitHtmlUnSupportedUserAgentsArraySize = |
| arraysize(kSplitHtmlUnSupportedUserAgents); |
| |
| UserAgentMatcherTestBase::UserAgentMatcherTestBase() { |
| user_agent_matcher_.reset(new UserAgentMatcher()); |
| } |
| |
| bool UserAgentMatcherTestBase::IsMobileUserAgent( |
| const StringPiece& user_agent) { |
| return user_agent_matcher_->GetDeviceTypeForUA(user_agent) == |
| UserAgentMatcher::kMobile; |
| } |
| |
| bool UserAgentMatcherTestBase::IsDesktopUserAgent( |
| const StringPiece& user_agent) { |
| return user_agent_matcher_->GetDeviceTypeForUA(user_agent) == |
| UserAgentMatcher::kDesktop; |
| } |
| |
| bool UserAgentMatcherTestBase::IsTabletUserAgent( |
| const StringPiece& user_agent) { |
| return user_agent_matcher_->GetDeviceTypeForUA(user_agent) == |
| UserAgentMatcher::kTablet; |
| } |
| |
| void UserAgentMatcherTestBase::VerifyGetDeviceTypeForUA() { |
| for (int i = 0; i < kMobileUserAgentsArraySize; ++i) { |
| EXPECT_TRUE(IsMobileUserAgent(kMobileUserAgents[i])) |
| << "\"" << kMobileUserAgents[i] << "\"" |
| << " not detected as mobile user agent."; |
| } |
| |
| for (int i = 0; i < kDesktopUserAgentsArraySize; ++i) { |
| EXPECT_TRUE(IsDesktopUserAgent(kDesktopUserAgents[i])) |
| << "\"" << kDesktopUserAgents[i] << "\"" |
| << " not detected as desktop user agent."; |
| } |
| |
| for (int i = 0; i < kTabletUserAgentsArraySize; ++i) { |
| EXPECT_TRUE(IsTabletUserAgent(kTabletUserAgents[i])) |
| << "\"" << kTabletUserAgents[i] << "\"" |
| << " not detected as tablet user agent."; |
| } |
| } |
| |
| void UserAgentMatcherTestBase::VerifyImageInliningSupport() { |
| for (int i = 0; |
| i < kImageInliningSupportedUserAgentsArraySize; |
| ++i) { |
| EXPECT_TRUE(user_agent_matcher_->SupportsImageInlining( |
| kImageInliningSupportedUserAgents[i])) |
| << "\"" << kImageInliningSupportedUserAgents[i] |
| << "\" not detected as a user agent that supports image inlining"; |
| } |
| EXPECT_FALSE(user_agent_matcher_->SupportsImageInlining( |
| "random user agent")); |
| } |
| |
| void UserAgentMatcherTestBase::VerifySplitHtmlSupport() { |
| for (int i = 0; |
| i < kSplitHtmlSupportedUserAgentsArraySize; |
| ++i) { |
| EXPECT_TRUE(user_agent_matcher_->SupportsSplitHtml( |
| kSplitHtmlSupportedUserAgents[i], |
| false)) |
| << "\"" << kSplitHtmlSupportedUserAgents[i] |
| << "\"" << " not detected as a user agent that supports split-html"; |
| } |
| // Allow-mobile case. |
| EXPECT_TRUE(user_agent_matcher_->SupportsSplitHtml( |
| kAndroidChrome21UserAgent, true)); |
| for (int i = 0; |
| i < kSplitHtmlUnSupportedUserAgentsArraySize; |
| ++i) { |
| EXPECT_FALSE(user_agent_matcher_->SupportsSplitHtml( |
| kSplitHtmlUnSupportedUserAgents[i], |
| false)) |
| << "\"" << kSplitHtmlUnSupportedUserAgents[i] |
| << "\" detected incorrectly as a user agent that supports split-html"; |
| } |
| } |
| |
| void UserAgentMatcherTestBase::VerifyMobilizationSupport() { |
| EXPECT_TRUE(user_agent_matcher_->SupportsMobilization( |
| kAndroidChrome18UserAgent)); |
| EXPECT_FALSE(user_agent_matcher_->SupportsMobilization( |
| kAndroidHCUserAgent)); |
| EXPECT_TRUE(user_agent_matcher_->SupportsMobilization( |
| kIPhone4Safari)); |
| EXPECT_FALSE(user_agent_matcher_->SupportsMobilization( |
| kIPhoneChrome21UserAgent));; |
| EXPECT_FALSE(user_agent_matcher_->SupportsMobilization( |
| kBlackBerryOS6UserAgent)); |
| EXPECT_TRUE(user_agent_matcher_->SupportsMobilization( |
| kFirefoxUserAgent)); |
| EXPECT_TRUE(user_agent_matcher_->SupportsMobilization( |
| kFirefoxMobileUserAgent)); |
| EXPECT_TRUE(user_agent_matcher_->SupportsMobilization( |
| kChrome42UserAgent)); |
| EXPECT_FALSE(user_agent_matcher_->SupportsMobilization( |
| kOperaMiniMobileUserAgent)); |
| EXPECT_TRUE(user_agent_matcher_->SupportsMobilization( |
| kGoogleAdsBotUserAgent)); |
| EXPECT_TRUE(user_agent_matcher_->SupportsMobilization( |
| kGoogleAdsBotMobileUserAgent)); |
| } |
| |
| } // namespace net_instaweb |