1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
package Parse::HTTP::UserAgent::Base::IS;
$Parse::HTTP::UserAgent::Base::IS::VERSION = '0.43';
use strict;
use warnings;
use Parse::HTTP::UserAgent::Constants qw(:all);
sub _is_opera_pre {
my($self, $moz) = @_;
return index( $moz, 'Opera') != NO_IMATCH;
}
sub _is_opera_post {
my($self, $extra) = @_;
return $extra && $extra->[0] eq 'Opera';
}
sub _is_opera_ff { # opera faking as firefox
my($self, $extra) = @_;
return $extra
&& @{$extra} == OPERA_FAKER_EXTRA_SIZE
&& $extra->[2] eq 'Opera';
}
sub _is_safari {
my($self, $extra, $others) = @_;
my $str = $self->[UA_STRING];
# epiphany?
return index( $str , 'Chrome' ) != NO_IMATCH ? 0 # faker
: index( $str , 'Android' ) != NO_IMATCH ? 0 # faker
: $extra && index( $extra->[0] , 'AppleWebKit' ) != NO_IMATCH ? 1
: @{$others} && index( $others->[LAST_ELEMENT], 'Safari' ) != NO_IMATCH ? 1
: 0
;
}
sub _is_chrome {
my($self, $extra, $others) = @_;
my $chx = $others->[1] || return;
my($chrome, $safari) = split RE_WHITESPACE, $chx;
return if ! ( $chrome && $safari);
return index( $chrome , 'Chrome' ) != NO_IMATCH &&
index( $safari , 'Safari' ) != NO_IMATCH &&
( $extra && index( $extra->[0], 'AppleWebKit') != NO_IMATCH);
}
sub _is_android {
my($self, $thing, $others) = @_;
my $has_android = grep { index( lc $_, 'android' ) != NO_IMATCH } @{ $thing };
my $has_safari = grep { index( lc $_, 'safari' ) != NO_IMATCH } @{ $others };
if ( $has_android && $has_safari ) {
return 1;
}
if ( @{ $others } == 0
&& @{ $thing } > 0
&& $thing->[-1]
&& index( $thing->[-1], 'AppleWebKit' ) != NO_IMATCH
) {
# More stupidity: ua string is missing a closing paren
my($part, @rest) = split m{(AppleWebKit)}xms, $thing->[-1];
$thing->[-1] = $part;
@{ $others } = map { $self->trim( $_ ) }
split m{ (\QKHTML, like Gecko\E) }xms,
join q{}, @rest;
return 1;
}
return;
}
sub _is_ff {
my($self, $extra) = @_;
return if ! $extra || ! $extra->[1];
my $moz_with_name = $extra->[1] eq 'Mozilla' && $extra->[2];
return $moz_with_name
? $extra->[2] =~ RE_FIREFOX_NAMES && do { $extra->[1] = $extra->[2] }
: $extra->[1] =~ RE_FIREFOX_NAMES
;
}
sub _is_suspicious_ff {
my($self, $extra) = @_;
return if ref $extra ne 'ARRAY'
|| @{ $extra } != 1
|| index( lc $extra->[0], 'firefox/' ) == NO_IMATCH;
return 1;
}
sub _is_gecko {
return index(shift->[UA_STRING], 'Gecko/') != NO_IMATCH;
}
sub _is_generic { #TODO: this is actually a parser
my($self, @args) = @_;
return 1 if $self->_generic_name_version( @args ) ||
$self->_generic_compatible( @args ) ||
$self->_generic_moz_thing( @args );
return;
}
sub _is_netscape {
my($self, $moz, $thing, $extra, $compatible, @others) = @_;
my $rv = index($moz, 'Mozilla/') != NO_IMATCH &&
$moz ne 'Mozilla/4.0' &&
! $compatible &&
! $extra &&
! @others &&
( @{$thing} && $thing->[LAST_ELEMENT] ne 'Sun' ) && # hotjava
index($thing->[0], 'http://') == NO_IMATCH # robot
;
return $rv;
}
sub _is_docomo {
my($self, $moz) = @_;
return index(lc $moz, 'docomo') != NO_IMATCH;
}
sub _is_strength {
my $self = shift;
my $s = shift || return;
$s = $self->trim( $s );
return $s if $s eq 'U' || $s eq 'I' || $s eq 'N';
return;
}
sub _is_emacs {
my($self, $moz) = @_;
return index( $moz, 'Emacs-W3/') != NO_IMATCH;
}
sub _is_moz_only {
my($self, $moz, $thing, $extra, $compatible, @others) = @_;
return $moz && ! @{ $thing } && ! $extra && ! @others;
}
sub _is_hotjava {
my($self, $moz, $thing, $extra, $compatible, @others) = @_;
my @hot = @{ $thing };
return @hot == 2 && $hot[1] eq 'Sun';
}
sub _is_generic_bogus_ie {
my($self, $extra) = @_;
my $rv = $extra
&& $extra->[0]
&& index( $extra->[0], 'compatible' ) != NO_IMATCH
&& $extra->[1]
&& $extra->[1] eq 'MSIE';
return $rv;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Parse::HTTP::UserAgent::Base::IS - Base class
=head1 VERSION
version 0.43
=head1 DESCRIPTION
Internal module.
=head1 DEPRECATION NOTICE
This module is B<DEPRECATED>. Please use L<HTTP::BrowserDetect> instead.
=head1 SEE ALSO
L<Parse::HTTP::UserAgent>.
=head1 AUTHOR
Burak Gursoy
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2009 by Burak Gursoy.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|