Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** @suppress {duplicate} */ | 7 /** @suppress {duplicate} */ |
| 8 var remoting = remoting || {}; | 8 var remoting = remoting || {}; |
| 9 | 9 |
| 10 /** @enum {string} */ | |
| 11 remoting.Os = { | |
| 12 WINDOWS: 'Windows', | |
| 13 LINUX: 'Linux', | |
| 14 MAC: 'Mac', | |
| 15 CHROMEOS: 'ChromeOS', | |
| 16 UNKNOWN: 'Unknown' | |
| 17 }; | |
| 18 | |
| 19 /** | |
| 20 * @typedef {{ | |
| 21 * os_name: remoting.Os, | |
| 22 * os_version: string, | |
| 23 * cpu: string, | |
| 24 * chrome_version: string | |
|
Jamie
2015/06/06 01:05:41
I realize this is mostly copy/paste, but you might
kelvinp
2015/06/06 02:09:54
Done.
| |
| 25 * }} | |
| 26 */ | |
| 27 remoting.SystemInfo; | |
| 28 | |
| 29 (function() { | |
| 30 | |
| 10 /** | 31 /** |
| 11 * Returns full Chrome version. | 32 * Returns full Chrome version. |
| 12 * @return {string?} | 33 * @return {string?} |
| 13 */ | 34 */ |
| 14 remoting.getChromeVersion = function() { | 35 remoting.getChromeVersion = function() { |
| 15 var match = new RegExp('Chrome/([0-9.]*)').exec(navigator.userAgent); | 36 return remoting.getSystemInfo().chrome_version; |
| 16 if (match && (match.length >= 2)) { | |
| 17 return match[1]; | |
| 18 } | |
| 19 return null; | |
| 20 }; | 37 }; |
| 21 | 38 |
| 22 /** | 39 /** |
| 23 * Returns Chrome major version. | |
| 24 * @return {number} | |
| 25 */ | |
| 26 remoting.getChromeMajorVersion = function() { | |
| 27 var match = new RegExp('Chrome/([0-9]+)\.').exec(navigator.userAgent); | |
| 28 if (match && (match.length >= 2)) { | |
| 29 return parseInt(match[1], 10); | |
| 30 } | |
| 31 return 0; | |
| 32 }; | |
| 33 | |
| 34 /** | |
| 35 * Tests whether we are running on Mac. | 40 * Tests whether we are running on Mac. |
| 36 * | 41 * |
| 37 * @return {boolean} True if the platform is Mac. | 42 * @return {boolean} True if the platform is Mac. |
| 38 */ | 43 */ |
| 39 remoting.platformIsMac = function() { | 44 remoting.platformIsMac = function() { |
| 40 return navigator.platform.indexOf('Mac') != -1; | 45 return remoting.getSystemInfo().os_name === remoting.Os.MAC; |
| 41 } | 46 }; |
| 42 | 47 |
| 43 /** | 48 /** |
| 44 * Tests whether we are running on Windows. | 49 * Tests whether we are running on Windows. |
| 45 * | 50 * |
| 46 * @return {boolean} True if the platform is Windows. | 51 * @return {boolean} True if the platform is Windows. |
| 47 */ | 52 */ |
| 48 remoting.platformIsWindows = function() { | 53 remoting.platformIsWindows = function() { |
| 49 return (navigator.platform.indexOf('Win32') != -1) || | 54 return remoting.getSystemInfo().os_name === remoting.Os.WINDOWS; |
| 50 (navigator.platform.indexOf('Win64') != -1); | 55 }; |
| 51 } | |
| 52 | 56 |
| 53 /** | 57 /** |
| 54 * Tests whether we are running on Linux. | 58 * Tests whether we are running on Linux. |
| 55 * | 59 * |
| 56 * @return {boolean} True if the platform is Linux. | 60 * @return {boolean} True if the platform is Linux. |
| 57 */ | 61 */ |
| 58 remoting.platformIsLinux = function() { | 62 remoting.platformIsLinux = function() { |
| 59 return (navigator.platform.indexOf('Linux') != -1) && | 63 return remoting.getSystemInfo().os_name === remoting.Os.LINUX; |
| 60 !remoting.platformIsChromeOS(); | 64 }; |
| 61 } | |
| 62 | 65 |
| 63 /** | 66 /** |
| 64 * Tests whether we are running on ChromeOS. | 67 * Tests whether we are running on ChromeOS. |
| 65 * | 68 * |
| 66 * @return {boolean} True if the platform is ChromeOS. | 69 * @return {boolean} True if the platform is ChromeOS. |
| 67 */ | 70 */ |
| 68 remoting.platformIsChromeOS = function() { | 71 remoting.platformIsChromeOS = function() { |
| 69 return navigator.userAgent.match(/\bCrOS\b/) != null; | 72 return remoting.getSystemInfo().os_name === remoting.Os.CHROMEOS; |
| 70 } | 73 }; |
| 74 | |
| 75 /** | |
| 76 * @return {?remoting.SystemInfo} | |
| 77 */ | |
| 78 remoting.getSystemInfo = function() { | |
|
kelvinp
2015/06/06 00:48:47
mainly copied from remoting.ServerLogEntry.extract
| |
| 79 var userAgent = remoting.getUserAgent(); | |
| 80 | |
| 81 /** @type {remoting.SystemInfo} */ | |
| 82 var result = { | |
| 83 chrome_version: '', | |
| 84 os_name: remoting.Os.UNKNOWN, | |
| 85 os_version: '', | |
| 86 cpu: '' | |
| 87 }; | |
| 88 | |
| 89 // See platform_unittest.js for sample user agent strings. | |
| 90 var chromeVersion = new RegExp('Chrome/([0-9.]*)').exec(userAgent); | |
| 91 if (chromeVersion && chromeVersion.length >= 2) { | |
| 92 result.chrome_version = chromeVersion[1]; | |
| 93 } | |
| 94 | |
| 95 var match = new RegExp('Windows NT ([0-9\\.]*)').exec(userAgent); | |
| 96 if (match && (match.length >= 2)) { | |
| 97 result.os_name = remoting.Os.WINDOWS; | |
| 98 result.os_version = match[1]; | |
| 99 return result; | |
| 100 } | |
| 101 | |
| 102 match = new RegExp('Linux ([a-zA-Z0-9_]*)').exec(userAgent); | |
| 103 if (match && (match.length >= 2)) { | |
| 104 result.os_name = remoting.Os.LINUX; | |
| 105 result.os_version = ''; | |
| 106 result.cpu = match[1]; | |
| 107 return result; | |
| 108 } | |
| 109 | |
| 110 match = new RegExp('([a-zA-Z]*) Mac OS X ([0-9_]*)').exec(userAgent); | |
| 111 if (match && (match.length >= 3)) { | |
| 112 result.os_name = remoting.Os.MAC; | |
| 113 result.os_version = match[2].replace(/_/g, '.'); | |
| 114 result.cpu = match[1]; | |
| 115 return result; | |
| 116 } | |
| 117 | |
| 118 match = new RegExp('CrOS ([a-zA-Z0-9_]*) ([0-9.]*)').exec(userAgent); | |
| 119 if (match && (match.length >= 3)) { | |
| 120 result.os_name = remoting.Os.CHROMEOS; | |
| 121 result.os_version = match[2]; | |
| 122 result.cpu = match[1]; | |
| 123 return result; | |
| 124 } | |
| 125 return null; | |
| 126 }; | |
| 127 | |
| 128 /** | |
| 129 * To be overwritten by unit test. | |
| 130 * | |
| 131 * @return {!string} | |
| 132 */ | |
| 133 remoting.getUserAgent = function() { | |
| 134 return navigator.userAgent; | |
| 135 }; | |
| 136 | |
| 137 })(); | |
| 138 | |
| OLD | NEW |