blob: 421deb382a8c2512e445ab436ac407793346bb57 [file] [log] [blame]
// 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