Page MenuHomePhorge

No OneTemporary

diff --git a/program/lib/Roundcube/rcube_browser.php b/program/lib/Roundcube/rcube_browser.php
index 206a35d7d..580f3b021 100644
--- a/program/lib/Roundcube/rcube_browser.php
+++ b/program/lib/Roundcube/rcube_browser.php
@@ -1,104 +1,114 @@
<?php
/**
+-----------------------------------------------------------------------+
| This file is part of the Roundcube Webmail client |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Class representing the client browser's properties |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
/**
* Provide details about the client's browser based on the User-Agent header
*
* @package Framework
* @subpackage Utils
*/
class rcube_browser
{
/** @var float $ver Browser version */
public $ver = 0;
/** @var bool $win Browser OS is Windows */
public $win = false;
/** @var bool $mac Browser OS is Mac */
public $mac = false;
/** @var bool $linux Browser OS is Linux */
public $linux = false;
/** @var bool $unix Browser OS is Unix */
public $unix = false;
/** @var bool $webkit Browser uses WebKit engine */
public $webkit = false;
/** @var bool $opera Browser is Opera */
public $opera = false;
/** @var bool $chrome Browser is Chrome */
public $chrome = false;
/** @var bool $ie Browser is Internet Explorer */
public $ie = false;
+ /** @var bool $edge Browser is Edge */
+ public $edge = false;
+
/** @var bool $safari Browser is Safari */
public $safari = false;
/** @var bool $mz Browser is Mozilla Firefox */
public $mz = false;
/** @var string $lang Language code */
public $lang = 'en';
/**
* Object construstor
*/
public function __construct()
{
$HTTP_USER_AGENT = strtolower($_SERVER['HTTP_USER_AGENT']);
// Operating system detection
$this->win = strpos($HTTP_USER_AGENT, 'win') != false;
$this->mac = strpos($HTTP_USER_AGENT, 'mac') != false;
$this->linux = strpos($HTTP_USER_AGENT, 'linux') != false;
$this->unix = strpos($HTTP_USER_AGENT, 'unix') != false;
// Engine detection
$this->webkit = strpos($HTTP_USER_AGENT, 'applewebkit') !== false;
$this->opera = strpos($HTTP_USER_AGENT, 'opera') !== false || ($this->webkit && strpos($HTTP_USER_AGENT, 'opr/') !== false);
- $this->chrome = !$this->opera && strpos($HTTP_USER_AGENT, 'chrome') !== false;
- $this->ie = !$this->opera && (strpos($HTTP_USER_AGENT, 'compatible; msie') !== false || strpos($HTTP_USER_AGENT, 'trident/') !== false);
- $this->safari = !$this->opera && !$this->chrome && ($this->webkit || strpos($HTTP_USER_AGENT, 'safari') !== false);
- $this->mz = !$this->ie && !$this->safari && !$this->chrome && !$this->opera && strpos($HTTP_USER_AGENT, 'mozilla') !== false;
+ $this->edge = strpos($HTTP_USER_AGENT, 'edge/') !== false;
+ $this->ie = !$this->opera && !$this->edge && (strpos($HTTP_USER_AGENT, 'compatible; msie') !== false || strpos($HTTP_USER_AGENT, 'trident/') !== false);
+ $this->chrome = !$this->opera && !$this->edge && strpos($HTTP_USER_AGENT, 'chrome') !== false;
+ $this->safari = !$this->opera && !$this->chrome && !$this->edge
+ && ($this->webkit || strpos($HTTP_USER_AGENT, 'safari') !== false);
+ $this->mz = !$this->ie && !$this->edge && !$this->safari && !$this->chrome && !$this->opera
+ && strpos($HTTP_USER_AGENT, 'mozilla') !== false;
// Version detection
- if ($this->opera) {
- if (preg_match('/(opera|opr)\/([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
- $this->ver = (float) $regs[2];
- }
+ if ($this->edge && preg_match('/edge\/([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
+ $this->ver = (float) $regs[1];
+ }
+ else if ($this->opera && preg_match('/(opera|opr)(\s*|\/)([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
+ $this->ver = (float) $regs[3];
+ }
+ else if ($this->safari && preg_match('/(version|safari)\/([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
+ $this->ver = (float) $regs[1];
}
- else if (preg_match('/(chrome|msie|version|khtml)(\s*|\/)([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
+ else if (preg_match('/(chrome|khtml|version)(\s*|\/)([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
$this->ver = (float) $regs[3];
}
else if (preg_match('/rv:([0-9.]+)/', $HTTP_USER_AGENT, $regs)) {
$this->ver = (float) $regs[1];
}
// Language code
if (preg_match('/ ([a-z]{2})-([a-z]{2})/', $HTTP_USER_AGENT, $regs)) {
$this->lang = $regs[1];
}
}
}
diff --git a/tests/Framework/Browser.php b/tests/Framework/Browser.php
index 2f9ff297d..9d6c1bbaa 100644
--- a/tests/Framework/Browser.php
+++ b/tests/Framework/Browser.php
@@ -1,189 +1,211 @@
<?php
/**
* Test class to test rcube_browser class
*
* @package Tests
*/
class Framework_Browser extends PHPUnit_Framework_TestCase
{
/**
* Class constructor
*/
function test_class()
{
$object = new rcube_browser();
$this->assertInstanceOf('rcube_browser', $object, "Class constructor");
}
/**
* @dataProvider browsers
*/
- function test_browser($useragent, $opera, $chrome, $ie, $ns, $safari, $mz)
+ function test_browser($useragent, $opera, $chrome, $ie, $edge, $ns, $safari, $mz)
{
$object = $this->getBrowser($useragent);
$this->assertEquals($opera, $object->opera, 'Check for Opera failed');
$this->assertEquals($chrome, $object->chrome, 'Check for Chrome failed');
$this->assertEquals($ie, $object->ie, 'Check for IE failed');
+ $this->assertEquals($edge, $object->edge, 'Check for Edge failed');
$this->assertEquals($safari, $object->safari, 'Check for Safari failed');
$this->assertEquals($mz, $object->mz, 'Check for MZ failed');
}
/**
* @dataProvider os
*/
function test_os($useragent, $windows, $linux, $unix, $mac)
{
$object = $this->getBrowser($useragent);
$this->assertEquals($windows, $object->win, 'Check Result of Windows');
$this->assertEquals($linux, $object->linux, 'Check Result of Linux');
$this->assertEquals($mac, $object->mac, 'Check Result of Mac');
$this->assertEquals($unix, $object->unix, 'Check Result of Unix');
}
/**
* @dataProvider versions
*/
function test_version($useragent, $version)
{
$object = $this->getBrowser($useragent);
$this->assertEquals($version, $object->ver);
}
function versions()
{
return $this->extractDataSet(array('version'));
}
private function extractDataSet($keys)
{
$keys = array_merge(array('useragent'), $keys);
$browser = $this->useragents();
$extracted = array();
foreach ($browser as $label => $data) {
foreach($keys as $key) {
$extracted[$data['useragent']][] = $data[$key];
}
}
return $extracted;
}
function lang()
{
return $this->extractDataSet(array('lang'));
}
function browsers()
{
- return $this->extractDataSet(array('isOpera','isChrome','isIE','isNS','isSafari','isMZ'));
+ return $this->extractDataSet(array('isOpera', 'isChrome', 'isIE', 'isEdge', 'isNS', 'isSafari', 'isMZ'));
}
function useragents()
{
return array(
- 'WIN: Mozilla Firefox ' => array(
- 'useragent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1',
- 'version' => '1.8',
- 'isWin' => true,
- 'isLinux' => false,
- 'isMac' => false,
- 'isUnix' => false,
- 'isOpera' => false,
- 'isChrome' => false,
- 'isIE' => false,
- 'isSafari' => false,
- 'isMZ' => true,
- 'lang' => 'en-US',
- ),
+ 'WIN: Mozilla Firefox ' => array(
+ 'useragent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1',
+ 'version' => '1.8',
+ 'isWin' => true,
+ 'isLinux' => false,
+ 'isMac' => false,
+ 'isUnix' => false,
+ 'isOpera' => false,
+ 'isChrome' => false,
+ 'isIE' => false,
+ 'isEdge' => false,
+ 'isSafari' => false,
+ 'isMZ' => true,
+ 'lang' => 'en-US',
+ ),
'LINUX: Bon Echo ' => array(
- 'useragent' => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20070222 BonEcho/2.0.0.1',
- 'version' => '1.8',
- 'isWin' => false,
- 'isLinux' => true,
- 'isMac' => false,
- 'isUnix' => false,
- 'isOpera' => false,
- 'isChrome' => false,
- 'isIE' => false,
- 'isSafari' => false,
- 'isMZ' => true,
- 'lang' => 'en-US',
- ),
+ 'useragent' => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20070222 BonEcho/2.0.0.1',
+ 'version' => '1.8',
+ 'isWin' => false,
+ 'isLinux' => true,
+ 'isMac' => false,
+ 'isUnix' => false,
+ 'isOpera' => false,
+ 'isChrome' => false,
+ 'isIE' => false,
+ 'isEdge' => false,
+ 'isSafari' => false,
+ 'isMZ' => true,
+ 'lang' => 'en-US',
+ ),
'Chrome Mac' => array(
- 'useragent' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.461.0 Safari/534.3',
- 'version' => '6',
- 'isWin' => false,
- 'isLinux' => false,
- 'isMac' => true,
- 'isUnix' => false,
- 'isOpera' => false,
- 'isChrome' => true,
- 'isIE' => false,
- 'isSafari' => false,
- 'isMZ' => false,
- 'lang' => 'en-US',
- ),
+ 'useragent' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.461.0 Safari/534.3',
+ 'version' => '6',
+ 'isWin' => false,
+ 'isLinux' => false,
+ 'isMac' => true,
+ 'isUnix' => false,
+ 'isOpera' => false,
+ 'isChrome' => true,
+ 'isIE' => false,
+ 'isEdge' => false,
+ 'isSafari' => false,
+ 'isMZ' => false,
+ 'lang' => 'en-US',
+ ),
'IE 11' => array(
- 'useragent' => 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko',
- 'version' => '11.0',
- 'isWin' => true,
- 'isLinux' => false,
- 'isMac' => false,
- 'isUnix' => false,
- 'isOpera' => false,
- 'isChrome' => false,
- 'isIE' => true,
- 'isSafari' => false,
- 'isMZ' => false,
- 'lang' => '',
- ),
+ 'useragent' => 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko',
+ 'version' => '11.0',
+ 'isWin' => true,
+ 'isLinux' => false,
+ 'isMac' => false,
+ 'isUnix' => false,
+ 'isOpera' => false,
+ 'isChrome' => false,
+ 'isIE' => true,
+ 'isEdge' => false,
+ 'isSafari' => false,
+ 'isMZ' => false,
+ 'lang' => '',
+ ),
'Opera 15' => array(
- 'useragent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36 OPR/15.0.1147.24',
- 'version' => '15.0',
- 'isWin' => true,
- 'isLinux' => false,
- 'isMac' => false,
- 'isUnix' => false,
- 'isOpera' => true,
- 'isChrome' => false,
- 'isIE' => false,
- 'isSafari' => false,
- 'isMZ' => false,
- 'lang' => '',
- ),
+ 'useragent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36 OPR/15.0.1147.24',
+ 'version' => '15.0',
+ 'isWin' => true,
+ 'isLinux' => false,
+ 'isMac' => false,
+ 'isUnix' => false,
+ 'isOpera' => true,
+ 'isChrome' => false,
+ 'isIE' => false,
+ 'isEdge' => false,
+ 'isSafari' => false,
+ 'isMZ' => false,
+ 'lang' => '',
+ ),
+
+ 'Edge 14' => array(
+ 'useragent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931',
+ 'version' => '14.14931',
+ 'isWin' => true,
+ 'isLinux' => false,
+ 'isMac' => false,
+ 'isUnix' => false,
+ 'isOpera' => false,
+ 'isChrome' => false,
+ 'isIE' => false,
+ 'isEdge' => true,
+ 'isSafari' => false,
+ 'isMZ' => false,
+ 'lang' => '',
+ ),
);
}
function os()
{
return $this->extractDataSet(array('isWin', 'isLinux', 'isUnix', 'isMac'));
}
/**
* @param string $useragent
* @return rcube_browser
*/
private function getBrowser($useragent)
{
/** @var $object rcube_browser */
$_SERVER['HTTP_USER_AGENT'] = $useragent;
$object = new rcube_browser();
return $object;
}
}

File Metadata

Mime Type
text/x-diff
Expires
Mon, Aug 25, 5:56 PM (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
257732
Default Alt Text
(15 KB)

Event Timeline