File Coverage

blib/lib/Woothee/Browser.pm
Criterion Covered Total %
statement 113 118 95.7
branch 44 54 81.4
condition 6 9 66.6
subroutine 13 13 100.0
pod 0 8 0.0
total 176 202 87.1


line stmt bran cond sub pod time code
1             package Woothee::Browser;
2              
3 6     6   32 use strict;
  6         9  
  6         147  
4 6     6   51 use warnings;
  6         11  
  6         129  
5 6     6   22 use Carp;
  6         11  
  6         262  
6              
7 6     6   1932 use Woothee::Util qw/update_map update_category update_version update_os/;
  6         11  
  6         335  
8 6     6   33 use Woothee::DataSet qw/dataset/;
  6         9  
  6         8256  
9              
10             our $VERSION = "1.8.0";
11              
12             sub challenge_msie {
13 555     555 0 770 my ($ua,$result) = @_;
14              
15 555 100 100     3372 return 0 if index($ua, "compatible; MSIE") < 0 and index($ua, "Trident/") < 0 and index($ua, "IEMobile");
      66        
16              
17 66         98 my $version;
18 66 100 33     495 if ($ua =~ m{MSIE ([.0-9]+);}o) {
    50          
    0          
19 45         114 $version = $1;
20             } elsif ($ua =~ m{Trident/([.0-9]+);}o and $ua =~ m{ rv:([.0-9]+)}o) {
21 21         56 $version = $1;
22             } elsif ($ua =~ m{IEMobile/([.0-9]+);}o) {
23 0         0 $version = $1;
24             } else {
25 0         0 $version = Woothee::DataSet->const('VALUE_UNKNOWN');
26             }
27 66         153 update_map($result, dataset('MSIE'));
28 66         175 update_version($result, $version);
29 66         188 return 1;
30             }
31              
32             sub challenge_yandex_browser {
33 480     480 0 693 my ($ua, $result) = @_;
34              
35 480 100       1333 return 0 if index($ua, "YaBrowser/") < 0;
36              
37 6         22 my $version = Woothee::DataSet->const('VALUE_UNKNOWN');
38              
39 6 50       54 if ($ua =~ m{YaBrowser/([.0-9]+)}o) {
40 6         21 $version = $1;
41             }
42 6         19 update_map($result, dataset('YaBrowser'));
43 6         20 update_version($result, $version);
44 6         21 return 1;
45             }
46              
47             sub challenge_vivaldi {
48 489     489 0 758 my ($ua, $result) = @_;
49              
50 489 100       1457 return 0 if index($ua, "Vivaldi/") < 0;
51              
52 9         26 my $version = Woothee::DataSet->const('VALUE_UNKNOWN');
53              
54 9 50       64 if ($ua =~ m{Vivaldi/([.0-9]+)}o) {
55 9         24 $version = $1;
56             }
57 9         23 update_map($result, dataset('Vivaldi'));
58 9         27 update_version($result, $version);
59 9         30 return 1;
60             }
61              
62             sub challenge_safari_chrome { # and Opera(blink)
63 474     474 0 763 my ($ua,$result) = @_;
64              
65 474 100       1450 return 0 if index($ua, "Safari/") < 0;
66              
67 75         260 my $version = Woothee::DataSet->const('VALUE_UNKNOWN');
68              
69 75 100       268 if ($ua =~ m{Edge/([.0-9]+)}o) {
70             # MS Edge
71 3         13 $version = $1;
72 3         9 update_map($result, dataset("Edge"));
73 3         11 update_version($result, $version);
74 3         10 return 1;
75             }
76              
77 72 100       220 if ($ua =~ m{FxiOS/([.0-9]+)}o) {
78             # Firefox for iOS
79 3         9 $version = $1;
80 3         9 update_map($result, dataset("Firefox"));
81 3         11 update_version($result, $version);
82 3         10 return 1;
83             }
84              
85 69 100       374 if ($ua =~ m{(?:Chrome|CrMo|CriOS)/([.0-9]+)}o) {
86             # Opera (blink)
87 33 100       116 if ($ua =~ m{OPR/([.0-9]+)}o) {
88 9         24 $version = $1;
89 9         28 update_map($result, dataset("Opera"));
90 9         30 update_version($result, $version);
91 9         31 return 1;
92             }
93              
94             #WebView
95 24 100       88 if (index($ua, "wv") > -1) {
96 3         11 return 0;
97             }
98              
99             # Chrome
100 21         52 $version = $1;
101 21         57 update_map($result, dataset("Chrome"));
102 21         64 update_version($result, $version);
103 21         69 return 1;
104             }
105              
106             # Safari
107 36 100       187 if ($ua =~ m{Version/([.0-9]+)}o) {
108 30         77 $version = $1;
109             }
110 36         95 update_map($result, dataset("Safari"));
111 36         121 update_version($result, $version);
112 36         107 return 1;
113             }
114              
115             sub challenge_firefox {
116 402     402 0 587 my ($ua,$result) = @_;
117              
118 402 100       1164 return 0 if index($ua, "Firefox/") < 0;
119              
120 27         36 my $version;
121 27 50       162 if ($ua =~ m{Firefox/([.0-9]+)}o) {
122 27         70 $version = $1;
123             }
124             else {
125 0         0 $version = Woothee::DataSet->const('VALUE_UNKNOWN');
126             }
127 27         72 update_map($result, dataset("Firefox"));
128 27         76 update_version($result, $version);
129 27         79 return 1;
130             }
131              
132             sub challenge_opera {
133 375     375 0 557 my ($ua,$result) = @_;
134              
135 375 100       997 return 0 if index($ua, "Opera") < 0;
136              
137 30         58 my $version;
138 30 100       229 if ($ua =~ m{Version/([.0-9]+)}o) {
    50          
139 12         33 $version = $1;
140             }
141             elsif ($ua =~ m{Opera[/ ]([.0-9]+)}o) {
142 18         51 $version = $1;
143             }
144             else {
145 0         0 $version = Woothee::DataSet->const('VALUE_UNKNOWN');
146             }
147 30         83 update_map($result, dataset("Opera"));
148 30         109 update_version($result, $version);
149 30         91 return 1;
150             }
151              
152             sub challenge_webview {
153 345     345 0 504 my ($ua,$result) = @_;
154              
155              
156 345         884 my $version = Woothee::DataSet->const('VALUE_UNKNOWN');
157              
158             # iOS
159 345 100       1401 if ($ua =~ m{iP(hone;|ad;|od) .*like Mac OS X}o) {
    100          
160 9 50       33 return 0 if index($ua, "Safari/") > -1;
161              
162 9 100       35 if ($ua =~ m{Version/([.0-9]+)}o) {
163 3         11 $version = $1;
164             }
165              
166 9         28 update_version($result, $version);
167 9         21 update_map($result, dataset("Webview"));
168 9         29 return 1;
169             }
170             elsif (index($ua, "wv") > -1) { #WebView
171 3 50       35 if ($ua =~ m{Version/([.0-9]+)}o) {
172 3         11 $version = $1;
173             }
174              
175 3         11 update_version($result, $version);
176 3         14 update_map($result, dataset("Webview"));
177 3         10 return 1;
178             }
179              
180 333         701 return 0;
181             }
182              
183              
184             sub challenge_sleipnir {
185 168     168 0 246 my ($ua,$result) = @_;
186              
187 168 100       509 return 0 if index($ua, "Sleipnir/") < 0;
188              
189 3         5 my $version;
190 3 50       23 if ($ua =~ m{Sleipnir/([.0-9]+)}o) {
191 3         8 $version = $1;
192             }
193             else {
194 0         0 $version = Woothee::DataSet->const('VALUE_UNKNOWN');
195             }
196 3         16 update_map($result, dataset("Sleipnir"));
197 3         26 update_version($result, $version);
198              
199             # Sleipnir's user-agent doesn't contain Windows version, so put 'Windows UNKNOWN Ver'.
200             # Sleipnir is IE component browser, so for Windows only.
201 3         10 my $win = dataset("Win");
202 3         10 update_category($result, $win->{Woothee::DataSet->const('KEY_CATEGORY')});
203 3         12 update_os($result, $win->{Woothee::DataSet->const('KEY_NAME')});
204              
205 3         8 return 1;
206             }
207              
208             1;
209              
210             __END__