Making WordPress.org


Ignore:
Timestamp:
09/25/2017 07:09:46 PM (7 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.