Index: src/wp-includes/vars.php
===================================================================
--- src/wp-includes/vars.php	(revision 33773)
+++ src/wp-includes/vars.php	(working copy)
@@ -16,7 +16,7 @@
  */
 
 global $pagenow,
-	$is_lynx, $is_gecko, $is_winIE, $is_macIE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone, $is_IE,
+	$is_lynx, $is_gecko, $is_winIE, $is_macIE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone, $is_IE, $is_edge,
 	$is_apache, $is_IIS, $is_iis7, $is_nginx;
 
 // On which page are we ?
@@ -48,11 +48,13 @@
 unset($self_matches);
 
 // Simple browser detection
-$is_lynx = $is_gecko = $is_winIE = $is_macIE = $is_opera = $is_NS4 = $is_safari = $is_chrome = $is_iphone = false;
+$is_lynx = $is_gecko = $is_winIE = $is_macIE = $is_opera = $is_NS4 = $is_safari = $is_chrome = $is_edge = $is_iphone = false;
 
 if ( isset($_SERVER['HTTP_USER_AGENT']) ) {
 	if ( strpos($_SERVER['HTTP_USER_AGENT'], 'Lynx') !== false ) {
 		$is_lynx = true;
+	} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Edge') !== false ) {
+		$is_edge = true;
 	} elseif ( stripos($_SERVER['HTTP_USER_AGENT'], 'chrome') !== false ) {
 		if ( stripos( $_SERVER['HTTP_USER_AGENT'], 'chromeframe' ) !== false ) {
 			$is_admin = is_admin();
@@ -114,34 +116,3 @@
  * @global bool $is_iis7
  */
 $is_iis7 = $is_IIS && intval( substr( $_SERVER['SERVER_SOFTWARE'], strpos( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/' ) + 14 ) ) >= 7;
-
-/**
- * Test if the current browser runs on a mobile device (smart phone, tablet, etc.)
- *
- * @staticvar bool $is_mobile
- *
- * @return bool
- */
-function wp_is_mobile() {
-	static $is_mobile = null;
-
-	if ( isset( $is_mobile ) ) {
-		return $is_mobile;
-	}
-
-	if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
-		$is_mobile = false;
-	} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
-		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
-		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
-		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
-		|| strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
-		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false
-		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false ) {
-			$is_mobile = true;
-	} else {
-		$is_mobile = false;
-	}
-
-	return $is_mobile;
-}
Index: src/wp-includes/functions.php
===================================================================
--- src/wp-includes/functions.php	(revision 33773)
+++ src/wp-includes/functions.php	(working copy)
@@ -4995,3 +4995,34 @@
 	</script>
 	<?php
 }
+
+/**
+ * Test if the current browser runs on a mobile device (smart phone, tablet, etc.)
+ *
+ * @staticvar bool $is_mobile
+ *
+ * @return bool
+ */
+function wp_is_mobile() {
+	static $is_mobile = null;
+
+	if ( isset( $is_mobile ) ) {
+		return $is_mobile;
+	}
+
+	if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
+		$is_mobile = false;
+	} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
+		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
+		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
+		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
+		|| strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
+		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false
+		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false ) {
+			$is_mobile = true;
+	} else {
+		$is_mobile = false;
+	}
+
+	return $is_mobile;
+}
Index: tests/phpunit/tests/vars.php
===================================================================
--- tests/phpunit/tests/vars.php	(revision 0)
+++ tests/phpunit/tests/vars.php	(working copy)
@@ -0,0 +1,144 @@
+<?php
+
+// test behaviour of wp-includes/vars.php
+/**
+ * @group vars
+ */
+class Tests_Vars extends WP_UnitTestCase {
+
+	/**
+	 * @ticket 20014
+	 * @ticket 33193
+	 * @dataProvider userAgentData
+	 */
+	public function testUserAgentDetection( $name, $user_agent, array $expected ) {
+
+		$_SERVER['HTTP_USER_AGENT'] = $user_agent;
+
+		require ABSPATH . '/wp-includes/vars.php';
+
+		$conditionals = array(
+			'is_lynx',
+			'is_gecko',
+			'is_winIE',
+			'is_macIE',
+			'is_opera',
+			'is_NS4',
+			'is_safari',
+			'is_chrome',
+			'is_iphone',
+			'is_IE',
+			'is_edge',
+		);
+
+		foreach ( $conditionals as $cond ) {
+			if ( in_array( $cond, $expected ) ) {
+				$this->assertTrue( $$cond, sprintf( '%s() should be true for %s', $cond, $name ) );
+			} else {
+				$this->assertFalse( $$cond, sprintf( '%s() should be false for %s', $cond, $name ) );
+			}
+		}
+
+	}
+
+	public function userAgentData() {
+		return array(
+			array(
+				// https://udger.com/resources/ua-list/browser-detail?browser=Microsoft%20Edge
+				'Edge - Windows',
+				'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136',
+				array( 'is_edge' ),
+			),
+			array(
+				'IE11 - Windows',
+				'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
+				array( 'is_IE', 'is_winIE' ),
+			),
+			array(
+				// https://github.com/gorhill/uMatrix/wiki/Latest-user-agent-strings
+				'Firefox - Windows',
+				'Mozilla/5.0 (Windows NT 5.1; rv:39.0) Gecko/20100101 Firefox/39.0',
+				array( 'is_gecko' ),
+			),
+			array(
+				// https://github.com/gorhill/uMatrix/wiki/Latest-user-agent-strings
+				'Firefox - Linux',
+				'Mozilla/5.0 (X11; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0',
+				array( 'is_gecko' ),
+			),
+			array(
+				// https://github.com/gorhill/uMatrix/wiki/Latest-user-agent-strings
+				'Firefox - OS X',
+				'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:39.0) Gecko/20100101 Firefox/39.0',
+				array( 'is_gecko' ),
+			),
+			array(
+				// https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference
+				'Firefox - Android phone',
+				'Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0',
+				array( 'is_gecko' ),
+			),
+			array(
+				// https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference
+				'Firefox - Android tablet',
+				'Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0',
+				array( 'is_gecko' ),
+			),
+			array(
+				// https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference
+				'Firefox - Firefox OS phone',
+				'Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0',
+				array( 'is_gecko' ),
+			),
+			array(
+				// https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference
+				'Firefox - Firefox OS tablet',
+				'Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0',
+				array( 'is_gecko' ),
+			),
+			array(
+				// https://developer.chrome.com/multidevice/user-agent
+				'Chrome - Android phone',
+				'Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19',
+				array( 'is_chrome' ),
+			),
+			array(
+				// https://developer.chrome.com/multidevice/user-agent
+				'Chrome - Android tablet',
+				'Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/535.19',
+				array( 'is_chrome' ),
+			),
+			array(
+				// https://github.com/gorhill/uMatrix/wiki/Latest-user-agent-strings
+				'Chrome - Windows',
+				'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
+				array( 'is_chrome' ),
+			),
+			array(
+				// https://github.com/gorhill/uMatrix/wiki/Latest-user-agent-strings
+				'Chrome - OS X',
+				'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36',
+				array( 'is_chrome' ),
+			),
+			array(
+				// https://github.com/gorhill/uMatrix/wiki/Latest-user-agent-strings
+				'Lynx',
+				'Lynx/2.8.3dev.6 libwww-FM/2.14',
+				array( 'is_lynx' ),
+			),
+			array(
+				// https://udger.com/resources/ua-list/browser-detail?browser=Safari
+				'Safari - OS X',
+				'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/600.3.10 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.10',
+				array( 'is_safari' ),
+			),
+			array(
+				// http://www.useragentstring.com/pages/Safari/
+				'Safari - iOS',
+				'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25',
+				array( 'is_safari', 'is_iphone' ),
+			),
+		);
+	}
+
+}
