Branch Coverage

blib/lib/HTTP/BrowserDetect.pm
Criterion Covered Total %
branch 744 848 87.7


line true false branch
488 2 7149 unless (defined $user_agent)
492 7149 2 defined $user_agent ? :
517 5442 45124 unless $self->{'os_tests'}
541 5695 24900 unless $self->{'robot_tests'}
554 4367 19963 unless $self->{'version_tests'}
564 7151 15039 unless $self->{'device_tests'}
571 0 1 if (defined $user_agent) { }
643 30 7121 if ($ua =~ m[edge/([\d\.]+)]) { }
944 6177 elsif ($ua =~ m[trident/([\w\.\d]*)]) { }
732 5445 elsif (index($ua, 'gecko') != -1 and index($ua, 'like gecko') == -1) { }
2532 2913 elsif ($ua =~ m[applewebkit/([\d.\+]+)] and not $tests->{'edgehtml'}) { }
138 2775 elsif ($ua =~ m[presto/([\d.]+)]) { }
12 2763 elsif ($ua =~ m[khtml/([\d.]+)]) { }
654 660 72 if ($ua =~ /\([^)]*rv:([\w.\d]*)/)
673 12 7139 if (index($ua, 'galeon') != -1) { }
6 7133 elsif (index($ua, 'epiphany') != -1) { }
24 7109 elsif ($ua =~ m[(?:edg|edga|edgios)/[\d.]+]) { }
30 7079 elsif ($ua =~ m[edge/[\d.]+]) { }
636 6443 elsif ($ua =~ m[ (firebird|iceweasel|phoenix|namoroka|firefox|fxios) \/ ( [^.]* ) # Major version number is everything before first dot \. # The first dot ( [\d]* ) # Minor version nnumber is digits after first dot ]ox and index($ua, 'not firefox') == -1) { }
264 6179 elsif ($ua =~ m[opera|opr\/]) { }
1730 4449 elsif ($tests->{'trident'} or index($ua, 'msie') != -1 or index($ua, 'microsoft internet explorer') != -1) { }
12 4437 elsif (index($ua, 'brave') != -1) { }
72 4365 elsif (index($ua, 'silk') != -1) { }
6 4359 elsif (index($ua, 'samsungbrowser') != -1) { }
336 4023 elsif (index($ua, 'ucbrowser') != -1) { }
1362 2661 elsif (index($ua, 'chrome/') != -1 or index($ua, 'crios') != -1) { }
42 2619 elsif (index($ua, 'blackberry') != -1 or index($ua, 'bb10') != -1 or index($ua, 'rim tablet os') != -1) { }
972 1647 elsif (index($ua, 'safari') != -1 or index($ua, 'applewebkit') != -1) { }
0 1647 elsif (index($ua, 'neoplanet') != -1) { }
0 1647 elsif (index($ua, 'webtv') != -1) { }
6 1641 elsif (index($ua, 'nintendo 3ds') != -1) { }
0 1641 elsif (index($ua, 'nintendo dsi') != -1) { }
42 1599 elsif (index($ua, 'playstation 3') != -1 or index($ua, 'playstation portable') != -1 or index($ua, 'netfront') != -1) { }
6 1593 elsif (index($ua, 'browsex') != -1) { }
18 1575 elsif (index($ua, 'polaris') != -1) { }
168 1407 elsif (index($ua, 'mozilla') != -1 and index($ua, 'compatible') == -1) { }
12 1395 elsif (index($ua, 'staroffice') != -1) { }
6 1389 elsif (index($ua, 'icab') != -1) { }
6 1383 elsif (index($ua, 'lotus-notes') != -1) { }
24 1359 elsif (index($ua, 'konqueror') != -1) { }
6 1353 elsif (index($ua, 'lynx') != -1) { }
6 1347 elsif (index($ua, 'elinks') != -1) { }
12 1335 elsif (index($ua, 'links') != -1) { }
0 1335 elsif (index($ua, 'mosaic') != -1) { }
6 1329 elsif (index($ua, 'emacs') != -1) { }
30 1299 elsif (index($ua, 'obigo') != -1) { }
54 1245 elsif (index($ua, 'teleca') != -1) { }
36 1209 elsif (index($ua, 'libcurl') != -1 or $ua =~ /^curl/) { }
6 1203 elsif (index($ua, 'puf/') != -1) { }
6 1197 elsif (index($ua, 'applecoremedia/') != -1) { }
6 1191 elsif (index($ua, 'androiddownloadmanager') != -1) { }
12 1179 elsif (index($ua, 'dalvik') != -1) { }
6 1173 elsif (index($ua, 'apple-pubsub') != -1) { }
6 1167 elsif (index($ua, 'imagesearcherpro') != -1) { }
713 6 630 $1 eq 'fxios' ? :
734 42 1688 if (index($ua, "aol") != -1 or index($ua, "america online browser") != -1)
792 12 1350 if (index($ua, "chromium") != -1)
810 276 696 if (index($ua, " mobile safari/") != -1 or index($ua, "mobilesafari") != -1)
815 18 954 if (index($ua, "puffin") != -1)
826 0 0 if index($ua, "2.") != -1
865 108 60 if (index($ua, 'netscape') != -1 or not $tests->{'gecko'}) { }
6 54 elsif (index($ua, 'seamonkey') != -1) { }
951 5984 1167 if defined $browser
956 456 6695 if index($ua, "x11") != -1
957 1086 6065 if index($ua, ".net clr") != -1
959 18 7133 if (index($ua, "realplayer") != -1)
976 12 6 if ($ua =~ m[realplayer/([\d+\.]+)]) { }
6 0 elsif ($ua =~ /realplayer\s(\w+)/) { }
980 12 0 if defined $self->{'minor'}
987 18 7133 if (index($ua, "(r1 ") != -1)
994 456 906 if ($self->android and index($ua, "; wv)") > 0 or $self->chrome and $self->android and $self->browser_major >= 30)
1053 18 8634 if (index($ua, 'libwww-perl') != -1 or index($ua, 'lwp-') != -1) { }
12 8622 elsif (index($ua, 'slurp') != -1) { }
6 8616 elsif (index($ua, 'yahoo') != -1 and index($ua, 'jp.co.yahoo') == -1) { }
6 8610 elsif (index($ua, 'msnbot-mobile') != -1) { }
0 8610 elsif (index($ua, 'bingbot-mobile') != -1) { }
6 8604 elsif (index($ua, 'msnbot') != -1) { }
30 8574 elsif (index($ua, 'binglocalsearch') != -1 or index($ua, 'bingbot') != -1 or index($ua, 'bingpreview') != -1) { }
6 8568 elsif (index($ua, 'microsoft office existence discovery') != -1) { }
6 8562 elsif (index($ua, 'ahrefsbot') != -1) { }
0 8562 elsif (index($ua, 'altavista') != -1) { }
12 8550 elsif (index($ua, 'apache-httpclient') != -1) { }
6 8544 elsif ($ua =~ /\( *\) *\{ *\: *\; */) { }
0 8544 elsif (index($ua, 'ask jeeves/teoma') != -1) { }
18 8526 elsif (index($ua, 'baiduspider') != -1) { }
36 8490 elsif (index($ua, 'libcurl') != -1 or $ua =~ /^curl/) { }
6 8484 elsif (index($ua, 'facebookexternalhit') != -1) { }
6 8478 elsif (index($ua, 'getright') != -1) { }
12 8466 elsif (index($ua, 'adsbot-google') != -1) { }
6 8460 elsif (index($ua, 'mediapartners-google') != -1) { }
6 8454 elsif (index($ua, 'google favicon') != -1) { }
6 8448 elsif (index($ua, 'googlebot-image') != -1) { }
6 8442 elsif (index($ua, 'googlebot-news') != -1) { }
6 8436 elsif (index($ua, 'googlebot-video') != -1) { }
18 8418 elsif (index($ua, 'googlebot-mobile') != -1) { }
36 8382 elsif (index($ua, 'googlebot') != -1) { }
6 8376 elsif ($ua =~ /go.*package http/) { }
6 8370 elsif ($ua =~ /^http_request/) { }
0 8370 elsif ($ua =~ /^http_request/) { }
6 8364 elsif (index($ua, 'indy library') != -1) { }
0 8364 elsif (index($ua, 'infoseek') != -1) { }
6 8358 elsif (index($ua, 'ips-agent') != -1) { }
0 8358 elsif (index($ua, 'lecodechecker') != -1) { }
11 8347 elsif (index($ua, 'linkchecker') != -1) { }
0 8347 elsif (index($ua, 'lycos') != -1) { }
12 8335 elsif (index($ua, 'mechanize') != -1) { }
6 8329 elsif (index($ua, 'mj12bot/') != -1) { }
18 8311 elsif (index($ua, 'nutch') != -1) { }
6 8305 elsif (index($ua, 'puf/') != -1) { }
0 8305 elsif (index($ua, 'scooter') != -1) { }
6 8299 elsif (index($ua, 'special_archiver') != -1) { }
12 8287 elsif (index($ua, 'wget') == 0) { }
6 8281 elsif (index($ua, 'yandexbot') != -1) { }
6 8275 elsif (index($ua, 'yandeximages') != -1) { }
6 8269 elsif (index($ua, 'headlesschrome') != -1) { }
42 8227 elsif ($ua =~ /^java/ and not $self->{'browser'}) { }
0 8227 elsif (index($ua, 'jdk') != -1) { }
6 8221 elsif (index($ua, 'jakarta commons-httpclient') != -1) { }
6 8215 elsif (index($ua, 'google-http-java-client') != -1) { }
6 8209 elsif (index($ua, 'researchscan.comsys.rwth-aachen.de') != -1) { }
1056 18 0 index($ua, 'libwww-perl') != -1 ? :
1262 48 245430 if (index($ua, lc $match) != -1)
1271 22 8623 if ($browser_tests->{'applecoremedia'} or $browser_tests->{'dalvik'} or $browser_tests->{'adm'})
1277 491 8161 if ($r) { }
0 8161 elsif ($ua =~ /seek (?! mo (?: toolbar )? \s+ \d+\.\d+ )/x) { }
42 8119 elsif ($ua =~ /search (?! [\w\s]* toolbar \b | bar \b | erpro \b )/x) { }
245 7874 elsif ($self->{'user_agent'} =~ m[([\w /\.\-]+)[ \;\(\)]*\+https?\:]i) { }
1281 443 48 unless ($id)
1285 491 0 unless (exists $robot_tests->{'robot_id'})
1292 269 222 unless defined $robot_fragment
1318 7832 199655 if ($ROBOT_FRAGMENT_EXCEPTIONS{$fragment})
1320 0 7832 unless $ROBOT_FRAGMENT_EXCEPTIONS{$fragment}
1321 7 7825 if (index($ua, $exception) != -1)
1327 311 207169 if (index($ua, $fragment) != -1)
1335 598 8054 if (exists $robot_tests->{'robot'} and $robot_tests->{'robot'} eq "unknown")
1340 1089 7563 if (defined $robot_fragment)
1345 1017 72 if ($self->{'user_agent'} =~ m[\s* # Beginning whitespace ([\w .:,\-\@\/]* # Words before fragment $robot_fragment # Match the fragment [\w .:,\-\@\/]*) # Words after fragment ]xi)
1354 36 276 if ($self->{'user_agent'} eq $full_string and $self->{'user_agent'} =~ m[\/.*\/] and $self->{'user_agent'} =~ m[ ([\w]* # Words before fragment $robot_fragment # Match the fragment (\/[\d\.]+)? # Version [\w]*) # Beta stuff ]xi)
1371 652 365 if ($full_string and $full_string =~ s[[/ \.v]*(\d+)(\.\d+)?([\.\w]*)$][]) { }
1381 353 664 unless (defined $self->{'robot_string'})
1387 6117 2535 if (not exists $self->{'robot_version'})
1407 0 7146 if (index($ua, "16bit") != -1)
1413 2958 4188 if (index($ua, "win") != -1)
1414 12 2946 if (index($ua, 'win16') != -1 or index($ua, 'windows 3') != -1 or index($ua, 'windows 16-bit') != -1) { }
72 2874 elsif (index($ua, 'win95') != -1 or index($ua, 'windows 95') != -1) { }
30 2844 elsif (index($ua, 'win 9x 4.90') != -1 or index($ua, 'windows me') != -1) { }
24 2820 elsif (index($ua, 'win98') != -1 or index($ua, 'windows 98') != -1) { }
12 2808 elsif (index($ua, 'windows 2000') != -1) { }
12 2796 elsif (index($ua, 'windows ce') != -1) { }
54 2742 elsif (index($ua, 'windows phone') != -1) { }
1420 6 6 if (index($ua, 'windows 3.1') != -1) { }
1462 6 48 if (index($ua, 'windows phone os 7.0') != -1) { }
12 36 elsif (index($ua, 'windows phone os 7.5') != -1) { }
12 24 elsif (index($ua, 'windows phone 8.0') != -1) { }
18 6 elsif (index($ua, 'windows phone 8.1') != -1) { }
6 0 elsif (index($ua, 'windows phone 10.0') != -1) { }
1480 3798 3348 if (index($ua, "nt") != -1)
1481 90 3708 if (index($ua, 'nt 5.0') != -1 or index($ua, 'nt5') != -1) { }
984 2724 elsif (index($ua, 'nt 5.1') != -1) { }
126 2598 elsif (index($ua, 'nt 5.2') != -1) { }
204 2394 elsif (index($ua, 'nt 6.0') != -1) { }
966 1428 elsif (index($ua, 'nt 6.1') != -1) { }
96 1332 elsif (index($ua, 'nt 6.2') != -1) { }
78 1254 elsif (index($ua, 'nt 6.3') != -1) { }
30 1224 elsif (index($ua, 'nt 10.0') != -1) { }
54 1170 elsif (index($ua, 'winnt') != -1 or index($ua, 'windows nt') != -1 or index($ua, 'nt4') != -1 or index($ua, 'nt3') != -1) { }
1536 2844 4302 if ($os) { }
462 3840 elsif (index($ua, 'macintosh') != -1 or index($ua, 'mac_') != -1) { }
378 3462 elsif (index($ua, 'ipod') != -1 or index($ua, 'iphone') != -1 or index($ua, 'ipad') != -1) { }
966 2496 elsif (index($ua, 'android') != -1) { }
492 2004 elsif (index($ua, 'inux') != -1) { }
42 1962 elsif ($tests->{'x11'} and index($ua, 'cros') != -1) { }
6 1956 elsif (index($ua, 'amiga') != -1) { }
6 1950 elsif (index($ua, 'os/2') != -1) { }
6 1944 elsif (index($ua, 'solaris') != -1) { }
0 1944 elsif (index($ua, 'samsung') == -1 and index($ua, 'sun') != -1) { }
0 1944 elsif (index($ua, 'irix') != -1) { }
0 1944 elsif (index($ua, 'hp-ux') != -1) { }
0 1944 elsif (index($ua, 'aix') != -1) { }
0 1944 elsif ($ua =~ /\bsco\b/ or index($ua, 'unix_sv') != -1) { }
0 1944 elsif (index($ua, 'unix_system_v') != -1) { }
0 1944 elsif ($ua =~ /\bncr\b/) { }
0 1944 elsif (index($ua, 'reliantunix') != -1) { }
0 1944 elsif (index($ua, 'dec') != -1 or index($ua, 'osf1') != -1 or index($ua, 'declpha') != -1 or index($ua, 'alphaserver') != -1 or index($ua, 'ultrix') != -1 or index($ua, 'alphastation') != -1) { }
0 1944 elsif (index($ua, 'sinix') != -1) { }
30 1914 elsif (index($ua, 'bsd') != -1) { }
12 1902 elsif ($tests->{'x11'}) { }
0 1902 elsif (index($ua, 'vax') != -1 or index($ua, 'openvms') != -1) { }
12 1890 elsif (index($ua, 'bb10') != -1) { }
6 1884 elsif (index($ua, 'rim tablet os') != -1) { }
6 1878 elsif (index($ua, 'playstation 3') != -1) { }
6 1872 elsif (index($ua, 'playstation portable') != -1) { }
54 1818 elsif (index($ua, 'windows') != -1) { }
18 1800 elsif (index($ua, 'win32') != -1) { }
144 1656 elsif ($self->{'user_agent'} =~ /(brew)|(\bbmp\b)/i) { }
1540 0 2844 if index($ua, "win32") != -1
1546 438 24 if (index($ua, 'mac os x') != -1) { }
1553 0 462 if (index($ua, '68k') != -1 or index($ua, '68000') != -1) { }
126 336 elsif (index($ua, 'ppc') != -1 or index($ua, 'powerpc') != -1) { }
1603 0 0 if index($ua, "i86") != -1
1604 0 0 if index($ua, "sunos 4") != -1
1605 0 0 if index($ua, "sunos 5") != -1
1611 0 0 if index($ua, "irix5") != -1
1612 0 0 if index($ua, "irix6") != -1
1618 0 0 if index($ua, "09.") != -1
1619 0 0 if index($ua, "10.") != -1
1625 0 0 if index($ua, "aix 1") != -1
1626 0 0 if index($ua, "aix 2") != -1
1627 0 0 if index($ua, "aix 3") != -1
1628 0 0 if index($ua, "aix 4") != -1
1665 30 0 if ($self->{'user_agent'} =~ /(\w*bsd\w*)/i)
1669 30 0 if index($ua, "freebsd") != -1
1708 102 42 if ($1) { }
1724 12 6 if (not $os and $browser_tests->{'firefox'} and index($ua, "fennec") == -1 and $self->mobile || $self->tablet)
1733 2460 4686 if ($os and not $os_string)
1748 531 1996 if (not defined $os) { }
24 1972 elsif ($os eq 'winphone') { }
190 1782 elsif ($os eq 'macosx') { }
171 1611 elsif ($os eq 'ios') { }
22 1589 elsif ($os eq 'chromeos') { }
454 1135 elsif ($os eq 'android') { }
6 1129 elsif ($os eq 'firefoxos') { }
71 1058 elsif ($os eq 'brew') { }
1753 24 0 if ($ua =~ /windows phone (?:os )?(\d+)(\.?\d*)([\.\d]*)/)
1758 158 32 if ($ua =~ /os x (\d+)[\._](\d+)[\._]?(\d*)/)
1759 135 23 length $3 ? :
1763 170 1 if ($ua =~ / os (\d+)[\._ ](\d+)[\._ ]?(\d*)/)
1764 119 51 length $3 ? :
1768 22 0 if ($ua =~ / cros \S* (\d+)(\.?\d*)([\.\d]*)/)
1773 442 12 if ($ua =~ /android (\d+)(\.?\d*)([\w\-\.]*)[\;\)]/)
1778 6 0 if ($ua =~ m[firefox/(\d+)(\.?\d*)([\.\d]*)])
1783 55 16 if ($ua =~ /(brew|\bbmp) (\d+)(\.?\d*)([\.\d]*)/)
1812 264 6844 if (defined $browser and $browser eq 'opera') { }
1883 4961 elsif ($ua =~ m[\b compatible; \s* [\w\-]* [/\s] ( [0-9]+ ) (?: .([0-9]+) (\S*) )? ;]x) { }
956 4005 elsif (not $browser) { }
24 3981 elsif ($browser_tests->{'edge'}) { }
952 3029 elsif ($browser_tests->{'safari'}) { }
6 3023 elsif ($browser_tests->{'fxios'}) { }
100 2923 elsif ($browser_tests->{'ie'}) { }
6 2917 elsif ($browser eq 'n3ds') { }
6 2911 elsif ($browser eq 'browsex') { }
6 2905 elsif ($ua =~ m[netscape6/(\d+)\.(\d+)([\d.]*)]) { }
12 2893 elsif ($browser eq 'brave') { }
18 2875 elsif ($browser eq 'chrome' and $ua =~ m[crios/(\d+)\.(\d+)([\d.]*)]) { }
6 2869 elsif ($browser eq 'pubsub' and $ua =~ m[apple-pubsub/(\d+)\.?(\d+)?([\d.]*)]) { }
78 2791 elsif ($browser eq 'obigo' and $self->{'user_agent'} =~ m[(obigo[\w\-]*|teleca)[\/ ]\w(\d+)(\w*)]i) { }
6 2785 elsif ($browser eq 'polaris' and $ua =~ m[polaris[ \/](\d+)\.?(\d+)?([\d\.]*)]) { }
335 2450 elsif ($browser eq 'ucbrowser' and $ua =~ m[ucbrowser[\/ ]*(\d+)\.?(\d+)?([\d\.]*)]) { }
6 4888 elsif ($browser eq 'samsung' and $ua =~ m[samsungbrowser/(\d+)\.(\d+)\s]) { }
1822 90 174 if ($ua =~ m[\AOpera.*\sVersion/(\d*)\.(\d*)\z]i) { }
48 126 elsif ($ua =~ m[\bOPR/(\d+)\.(\d+)]i) { }
126 0 elsif ($ua =~ m[Opera[ /](\d+).(\d+)]i) { }
1849 24 0 unless defined $major
1857 874 78 if (do { $ua =~ m[ safari/ ( \d+ (?: \.\d+ )* ) ]x }) { }
66 12 elsif ($ua =~ m[applewebkit\/([\d\.]{1,})]xi) { }
1870 874 0 if (my($safari_build, $safari_minor) = split(/\./, $1, 3))
1873 808 66 if defined $safari_minor
1877 66 0 if (my($safari_build, $safari_minor) = split(/\./, $1, 3))
1880 54 12 if $safari_minor
1891 18 82 if ($ua =~ /\b msie \s ( [0-9\.]+ ) (?: [a-z]+ [a-z0-9]* )? ;/x) { }
71 11 elsif ($ua =~ /\b rv: ( [0-9\.]+ ) \b/x) { }
1903 6 0 if ($ua =~ m[Nintendo 3DS;.*\sVersion/(\d*)\.(\d*)]i)
1909 6 0 if ($ua =~ /BrowseX \((\d+)\.(\d+)([\d.]*)/i)
1931 12 0 if ($ua =~ m[brave/(\d+)\.(\d+)([\d.]*)])
1976 2462 4646 if (not defined $major and defined $self->{'browser_string'})
1978 2265 197 if ($version_index != -1)
1981 2253 12 if ($version_str =~ m[/(\d+)\.(\d+)([\w.]*)])
1990 1170 5938 unless (defined $major)
1991 24 1146 if ($ua =~ m[version/(\d+)\.(\d+)([\w.]*)])
2000 1146 5962 unless (defined $major)
2017 324 6784 unless (defined $major)
2019 0 324 if ($ua =~ m[[A-Za-z]+/(\d+)\;])
2026 485 6623 unless $major
2027 4639 2469 unless $minor
2028 2867 4241 if defined $beta and $beta eq ""
2032 168 6940 if ($browser_tests->{'netscape'})
2035 12 156 if $major == 2
2036 18 150 if $major == 3
2037 24 144 if $major == 4
2038 114 54 if $major >= 4
2039 6 162 if $major == 4 and $minor == 5
2040 96 72 if $major == 4 and ".$minor" >= "0.5" or $major >= 5
2043 6 162 if defined $beta and index($beta, "gold") != -1
2045 84 84 if $major == 5 or $major == 6
2047 90 78 if $major >= 5
2049 6 162 if ($browser eq "seamonkey")
2060 1708 5400 if ($browser_tests->{'ie'})
2061 23 1685 if $major == 3
2062 35 1673 if $major == 4
2063 1673 35 if $major >= 4
2064 71 1637 if $major == 5
2065 1638 70 if $major >= 5
2066 24 1684 if $major == 5 and $minor == 5
2067 1591 117 if ".$minor" >= "0.5" or $major >= 6
2068 388 1320 if $major == 6
2069 319 1389 if $major == 7
2070 604 1104 if $major == 8
2071 113 1595 if $major == 9
2072 66 1642 if $major == 10
2073 71 1637 if $major == 11
2082 41 7067 if ($browser_tests->{'aol'})
2085 6 35 if index($ua, "aol 3.0") != -1 or $version_tests->{'ie3'}
2088 0 41 if index($ua, "aol 4.0") != -1 or $version_tests->{'ie4'}
2089 0 41 if index($ua, "aol 5.0") != -1
2090 6 35 if index($ua, "aol 6.0") != -1
2091 0 41 if index($ua, "navio") != -1
2094 264 6844 if ($browser_tests->{'opera'})
2095 6 258 if index($ua, "opera 3") != -1 or index($ua, "opera/3") != -1
2097 0 264 if index($ua, "opera 4") != -1 or index($ua, "opera/4") != -1 and index($ua, "nintendo dsi") == -1
2101 0 264 if index($ua, "opera 5") != -1 or index($ua, "opera/5") != -1
2104 12 252 if index($ua, "opera 6") != -1 or index($ua, "opera/6") != -1
2107 30 234 if index($ua, "opera 7") != -1 or index($ua, "opera/7") != -1
2132 54 8168 if (index($ua, 'windows phone') != -1) { }
972 7196 elsif (index($ua, 'android') != -1 or index($ua, 'silk-accelerated') != -1) { }
42 7154 elsif (index($ua, 'blackberry') != -1 or index($ua, 'bb10') != -1 or index($ua, 'rim tablet os') != -1) { }
18 7136 elsif (index($ua, 'ipod') != -1) { }
156 6980 elsif (index($ua, 'ipad') != -1) { }
204 6776 elsif (index($ua, 'iphone') != -1) { }
6 6770 elsif (index($ua, 'webos') != -1) { }
12 6758 elsif (index($ua, 'kindle') != -1) { }
0 6758 elsif (index($ua, 'audrey') != -1) { }
0 6758 elsif (index($ua, 'i-opener') != -1) { }
0 6758 elsif (index($ua, 'avantgo') != -1) { }
0 6758 elsif (index($ua, 'palmos') != -1) { }
6 6752 elsif (index($ua, 'playstation 3') != -1) { }
6 6746 elsif (index($ua, 'playstation portable') != -1) { }
6 6740 elsif (index($ua, 'nintendo dsi') != -1) { }
6 6734 elsif (index($ua, 'nintendo 3ds') != -1) { }
582 6152 elsif ($browser_tests->{'obigo'} or $browser_tests->{'ucbrowser'} or index($ua, 'up.browser') != -1 or index($ua, 'nokia') != -1 and index($ua, 'windows phone') == -1 or index($ua, 'alcatel') != -1 or $ua =~ /\bbrew\b/ or $ua =~ /\bbmp\b/ or index($ua, 'ericsson') != -1 or index($ua, 'sie-') == 0 or index($ua, 'wmlib') != -1 or index($ua, ' wap') != -1 or index($ua, 'wap ') != -1 or index($ua, 'wap/') != -1 or index($ua, '-wap') != -1 or index($ua, 'wap-') != -1 or index($ua, 'wap') == 0 or index($ua, 'wapper') != -1 or index($ua, 'zetor') != -1) { }
2262 7891 331 unless ($device_tests->{'tablet'})
2316 276 7946 if ($browser_tests->{'ucbrowser'} and $self->{'user_agent'} =~ m[ucweb/2.0\s*\(([^\;\)]*\;){3,4}\s*([^\;\)]*?)\s*\)]i) { }
12 7934 elsif ($ua =~ m[^(\bmot-[^ /]+)]) { }
108 7826 elsif ($browser_tests->{'obigo'} || index($ua, 'brew') != -1 and $self->{'user_agent'} =~ m[\d+x\d+ ([\d\w\- ]+?)( \S+\/\S+)*$]i) { }
18 7808 elsif ($ua =~ m[windows phone os [^\)]+ iemobile/[^;]+; ([^;]+; [^;\)]+)]g) { }
12 7796 elsif ($ua =~ m[windows phone [^\)]+ iemobile/[^;]+; arm; touch; ([^;]+; [^;\)]+)]g) { }
18 7778 elsif ($ua =~ m[windows phone 8[^\)]+ iemobile/[^;]+; ([^;]+; [^;\)]+)]g) { }
12 7766 elsif ($ua =~ /bb10; ([^;\)]+)/g) { }
6 7760 elsif ($ua =~ /blackberry ([\w.]+)/) { }
18 7742 elsif ($ua =~ m[blackberry(\d+)/]) { }
12 7730 elsif ($ua =~ /silk-accelerated/) { }
906 6824 elsif ($self->{'user_agent'} =~ /android .*\; ([^;]*) build/i) { }
114 6710 elsif ($self->{'user_agent'} =~ m[\b((alcatel|huawei|lg|nokia|samsung|sonyericsson)[\w\-]*)/]i) { }
6 6704 elsif ($self->{'user_agent'} =~ /CrKey/) { }
558 6146 elsif ($device) { }
2372 54 852 if ($model =~ /^KF/ or $model =~ /kindle fire/i) { }
78 774 elsif ($device_tests->{'tablet'}) { }
2401 2076 6146 if ($device) { }
2409 2070 6152 if ($device_string)
2418 0 1705 unless defined $self->{'user_agent'}
2424 0 1673 unless defined $self->{'user_agent'}
2431 1871 363 unless exists $self->{'robot_string'}
2438 603 285 unless exists $self->{'robot_string'}
2451 0 0 $self->robot ? :
546 0 $self->{'robot_tests'}{'robot_id'} ? :
2457 0 415 unless exists $self->{'robot_string'}
2458 415 0 if ($self->{'robot_version'}) { }
2469 106 0 if (defined $major) { }
2470 105 1 if (defined $minor) { }
2503 0 4148 unless defined $self->{'user_agent'}
2504 1247 2901 unless $self->{'os_tests'}
2511 0 4101 unless defined $self->{'user_agent'}
2512 84 4017 unless $self->{'os_tests'}
2518 2527 1451 unless exists $self->{'os_version'}
2519 1912 2066 if ($self->{'os_version'}) { }
2530 469 535 defined $major ? :
2554 0 0 unless $self->{'version_tests'}
2566 76 634 if ($self->gecko) { }
2576 234 714 unless $self->{'version_tests'}
2578 948 0 defined $self->{'major'} ? :
2583 257 893 unless $self->{'version_tests'}
2591 143 826 unless $self->{'version_tests'}
2602 919 0 defined $major ? :
2631 5 1 defined $major ? :
2659 650 4723 if ($self->safari)
2663 455 195 if ($ua =~ m[ version/ ( \d+ ) # Major version number is everything before first dot ( \. \d+ )? # Minor version number is first dot and following digits ]x)
2676 146 49 if ($ua =~ m[ safari/ ( \d+ (?: \.\d+ )* ) ]x)
2679 101 45 unless ($version)
2688 92 369 if $self->_cmp_versions($build, $maybe_build) >= 0
2693 6 95 if $ua =~ m[safari/12x]
2696 3 137 unless defined $version
2699 2 135 if $minor =~ s/(\D.*)//
2701 2 135 $beta ? :
2705 1721 3051 unless $self->{'version_tests'}
2716 4306 4713 if @a == 0 or $a[0] < $b[0]
2717 3273 1440 if @b == 0 or $b[0] < $a[0]
2729 188 1165 $self->engine_string eq 'MSIE' ? :
200 1353 !$self->engine_string ? :
2737 740 4798 if ($self->gecko)
2741 978 3820 if ($self->trident)
2745 558 3262 if ($self->ie)
2749 32 3230 if ($self->edgelegacy)
2753 2632 598 if ($self->webkit)
2757 140 458 if ($self->presto)
2761 53 405 if ($self->netfront)
2765 16 389 if ($self->khtml)
2776 1290 288 $self->{'engine_version'} && $self->{'engine_version'} =~ /^(\d+(\.\d+)?)/ ? :
2783 1588 602 $self->{'engine_version'} && $self->{'engine_version'} =~ /^(\d+)/ ? :
2790 1508 585 $self->{'engine_version'} && $self->{'engine_version'} =~ /^\d+(\.\d+)/ ? :
2797 1103 302 $self->{'engine_version'} && $self->{'engine_version'} =~ /^\d+\.\d+([\.\d\+]*)/ ? :
2803 137 598 unless $self->{'version_tests'}
2826 0 4129 unless exists $self->{'device'}
2833 1071 763 unless exists $self->{'device_string'}
2845 255 1553 if ($self->safari)
2846 8 247 if ($self->major == 1 and $self->{'user_agent'} =~ /\s ( [a-z]{2} ) \)/msx)
2850 147 100 if ($self->{'user_agent'} =~ /\s ([a-z]{2})-([A-Za-z]{2})/msx)
2855 3 1650 if ($self->aol and $self->{'user_agent'} =~ /;([A-Z]{2})_([A-Z]{2})\)/)
2860 342 1308 if ($self->{'user_agent'} =~ /\b([a-z]{2})-([A-Za-z]{2})\b/msx)
2864 23 1285 if ($self->{'user_agent'} =~ /\[([a-z]{2})\]/msx)
2868 1141 144 if ($self->{'user_agent'} =~ /\(([^)]+)\)/msx)
2873 147 4712 if ($part =~ /^\s*([a-z]{2})\s*$/ and not $self->webview && $1 eq 'wv')
2891 1738 0 if $value
2894 1734 20 if $value
2897 0 1926 unless $self->{'device_tests'}
2898 373 1553 unless $self->{'os_tests'}
2899 482 1444 unless $self->{'robot_tests'}
2900 231 1695 unless $self->{'version_tests'}
2903 1120 3191 if $value
2906 3853 0 if $value
2909 762 0 if $value
2912 1982 449 if $value
2917 547 1379 if $self->device
2925 1 27 unless $self->{'robot_tests'}
2941 0 0 if $self->chrome and $self->browser_major and $self->browser_major >= 41
2947 0 0 if $self->opera and $self->browser_major and $self->browser_major == 40 || $self->browser_major >= 42