Making WordPress.org


Ignore:
Timestamp:
09/25/2017 07:09:46 PM (9 years ago)
Author:
coffee2code
Message:

Browse Happy API: Improve detection of Opera and add detection of Opera Mini.

  • Detects modern desktop Opera user-agents (previously misidentified as Chrome)
  • Detects Opera Mini user-agents
  • Fix to identify Linux as platform for Linux Opera
  • Adds more Opera-related user-agents for unit testing

TODO: Separately notify about the 12.x branch and desktop versions of Opera (the latest of which is 47), and maybe eventually Opera Mini.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/api.wordpress.org/public_html/core/browse-happy/1.0/parse.php

    r5962 r5963  
    4040
    4141        if ( preg_match(
    42                 '/^.+?(?P<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|RIM Tablet OS|PlayBook)(?: NT)*(?: [ix]?[0-9._]+)*(;|\))/im',
     42                '/^.+?(?P<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|RIM Tablet OS|PlayBook)(?: (NT|zvav))*(?: [ix]?[0-9._]+)*(;|\))/im',
    4343                $user_agent,
    4444                $regs
     
    5757
    5858        preg_match_all(
    59                 '%(?P<name>Trident|Camino|Kindle|Firefox|(?:Mobile )?Safari|MSIE|RockMelt|AppleWebKit|Chrome|IEMobile|Opera|Version)(?:[/ ])(?P<version>[0-9.]+)%im',
     59                '%(?P<name>Opera Mini|Opera|OPR|Trident|Camino|Kindle|Firefox|(?:Mobile )?Safari|MSIE|RockMelt|AppleWebKit|Chrome|IEMobile|Version)(?:[/ ])(?P<version>[0-9.]+)%im',
    6060                $user_agent,
    6161                $result,
     
    7070        }
    7171
    72         if ( 'AppleWebKit' == $result['name'][0] ) {
     72        // Opera
     73        if (
     74                false !== ( $key = array_search( 'Opera Mini', $result['name'] ) )
     75        ||
     76                false !== ( $key = array_search( 'Opera', $result['name'] ) )
     77        ||
     78                false !== ( $key = array_search( 'OPR', $result['name'] ) )
     79        ) {
     80                $data['name'] = $result['name'][ $key ];
     81                if ( 'OPR' === $data['name'] ) {
     82                        $data['name'] = 'Opera';
     83                } elseif ( 'Opera Mini' === $data['name'] ) {
     84                        $data['mobile'] = true;
     85                }
     86                $data['version'] = $result['version'][ $key ];
     87        } elseif ( 'AppleWebKit' == $result['name'][0] ) {
    7388                if ( $key = array_search( 'Mobile Safari', $result['name'] ) ) {
    7489                        $data['name'] = 'Mobile Safari';
     
    88103                        $data['name'] = 'webkit';
    89104                }
    90                 $data['version'] = $result['version'][ $key ];
    91         } elseif ( $key = array_search( 'Opera', $result['name'] ) ) {
    92                 $data['name'] = $result['name'][ $key ];
    93105                $data['version'] = $result['version'][ $key ];
    94106        } elseif ( 'MSIE' == $result['name'][0] ) {
Note: See TracChangeset for help on using the changeset viewer.