| Index: third_party/google_input_tools/third_party/closure_library/closure/goog/useragent/useragent.js
|
| diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/useragent/useragent.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/useragent/useragent.js
|
| index 4220217df0ae56df8f9238b386ddf6ee1c0957bd..985c209a1a231b3c6c127d8fb935b6f6ef702eb9 100644
|
| --- a/third_party/google_input_tools/third_party/closure_library/closure/goog/useragent/useragent.js
|
| +++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/useragent/useragent.js
|
| @@ -17,6 +17,7 @@
|
| * @see <a href="http://www.useragentstring.com/">User agent strings</a>
|
| * For information on the browser brand (such as Safari versus Chrome), see
|
| * goog.userAgent.product.
|
| + * @author arv@google.com (Erik Arvidsson)
|
| * @see ../demos/useragent.html
|
| */
|
|
|
| @@ -24,6 +25,7 @@ goog.provide('goog.userAgent');
|
|
|
| goog.require('goog.labs.userAgent.browser');
|
| goog.require('goog.labs.userAgent.engine');
|
| +goog.require('goog.labs.userAgent.platform');
|
| goog.require('goog.labs.userAgent.util');
|
| goog.require('goog.string');
|
|
|
| @@ -35,6 +37,12 @@ goog.define('goog.userAgent.ASSUME_IE', false);
|
|
|
|
|
| /**
|
| + * @define {boolean} Whether we know at compile-time that the browser is EDGE.
|
| + */
|
| +goog.define('goog.userAgent.ASSUME_EDGE', false);
|
| +
|
| +
|
| +/**
|
| * @define {boolean} Whether we know at compile-time that the browser is GECKO.
|
| */
|
| goog.define('goog.userAgent.ASSUME_GECKO', false);
|
| @@ -74,6 +82,7 @@ goog.define('goog.userAgent.ASSUME_ANY_VERSION', false);
|
| */
|
| goog.userAgent.BROWSER_KNOWN_ =
|
| goog.userAgent.ASSUME_IE ||
|
| + goog.userAgent.ASSUME_EDGE ||
|
| goog.userAgent.ASSUME_GECKO ||
|
| goog.userAgent.ASSUME_MOBILE_WEBKIT ||
|
| goog.userAgent.ASSUME_WEBKIT ||
|
| @@ -121,6 +130,22 @@ goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ?
|
|
|
|
|
| /**
|
| + * Whether the user agent is Microsoft Edge.
|
| + * @type {boolean}
|
| + */
|
| +goog.userAgent.EDGE = goog.userAgent.BROWSER_KNOWN_ ?
|
| + goog.userAgent.ASSUME_EDGE :
|
| + goog.labs.userAgent.engine.isEdge();
|
| +
|
| +
|
| +/**
|
| + * Whether the user agent is MS Internet Explorer or MS Edge.
|
| + * @type {boolean}
|
| + */
|
| +goog.userAgent.EDGE_OR_IE = goog.userAgent.EDGE || goog.userAgent.IE;
|
| +
|
| +
|
| +/**
|
| * Whether the user agent is Gecko. Gecko is the rendering engine used by
|
| * Mozilla, Firefox, and others.
|
| * @type {boolean}
|
| @@ -259,82 +284,11 @@ goog.userAgent.PLATFORM_KNOWN_ =
|
|
|
|
|
| /**
|
| - * Initialize the goog.userAgent constants that define which platform the user
|
| - * agent is running on.
|
| - * @private
|
| - */
|
| -goog.userAgent.initPlatform_ = function() {
|
| - /**
|
| - * Whether the user agent is running on a Macintosh operating system.
|
| - * @type {boolean}
|
| - * @private
|
| - */
|
| - goog.userAgent.detectedMac_ = goog.string.contains(goog.userAgent.PLATFORM,
|
| - 'Mac');
|
| -
|
| - /**
|
| - * Whether the user agent is running on a Windows operating system.
|
| - * @type {boolean}
|
| - * @private
|
| - */
|
| - goog.userAgent.detectedWindows_ = goog.string.contains(
|
| - goog.userAgent.PLATFORM, 'Win');
|
| -
|
| - /**
|
| - * Whether the user agent is running on a Linux operating system.
|
| - * @type {boolean}
|
| - * @private
|
| - */
|
| - goog.userAgent.detectedLinux_ = goog.string.contains(goog.userAgent.PLATFORM,
|
| - 'Linux');
|
| -
|
| - /**
|
| - * Whether the user agent is running on a X11 windowing system.
|
| - * @type {boolean}
|
| - * @private
|
| - */
|
| - goog.userAgent.detectedX11_ = !!goog.userAgent.getNavigator() &&
|
| - goog.string.contains(goog.userAgent.getNavigator()['appVersion'] || '',
|
| - 'X11');
|
| -
|
| - // Need user agent string for Android/IOS detection
|
| - var ua = goog.userAgent.getUserAgentString();
|
| -
|
| - /**
|
| - * Whether the user agent is running on Android.
|
| - * @type {boolean}
|
| - * @private
|
| - */
|
| - goog.userAgent.detectedAndroid_ = !!ua &&
|
| - goog.string.contains(ua, 'Android');
|
| -
|
| - /**
|
| - * Whether the user agent is running on an iPhone.
|
| - * @type {boolean}
|
| - * @private
|
| - */
|
| - goog.userAgent.detectedIPhone_ = !!ua && goog.string.contains(ua, 'iPhone');
|
| -
|
| - /**
|
| - * Whether the user agent is running on an iPad.
|
| - * @type {boolean}
|
| - * @private
|
| - */
|
| - goog.userAgent.detectedIPad_ = !!ua && goog.string.contains(ua, 'iPad');
|
| -};
|
| -
|
| -
|
| -if (!goog.userAgent.PLATFORM_KNOWN_) {
|
| - goog.userAgent.initPlatform_();
|
| -}
|
| -
|
| -
|
| -/**
|
| * Whether the user agent is running on a Macintosh operating system.
|
| * @type {boolean}
|
| */
|
| goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ?
|
| - goog.userAgent.ASSUME_MAC : goog.userAgent.detectedMac_;
|
| + goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();
|
|
|
|
|
| /**
|
| @@ -342,15 +296,46 @@ goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ?
|
| * @type {boolean}
|
| */
|
| goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ?
|
| - goog.userAgent.ASSUME_WINDOWS : goog.userAgent.detectedWindows_;
|
| + goog.userAgent.ASSUME_WINDOWS :
|
| + goog.labs.userAgent.platform.isWindows();
|
| +
|
| +
|
| +/**
|
| + * Whether the user agent is Linux per the legacy behavior of
|
| + * goog.userAgent.LINUX, which considered ChromeOS to also be
|
| + * Linux.
|
| + * @return {boolean}
|
| + * @private
|
| + */
|
| +goog.userAgent.isLegacyLinux_ = function() {
|
| + return goog.labs.userAgent.platform.isLinux() ||
|
| + goog.labs.userAgent.platform.isChromeOS();
|
| +};
|
|
|
|
|
| /**
|
| * Whether the user agent is running on a Linux operating system.
|
| + *
|
| + * Note that goog.userAgent.LINUX considers ChromeOS to be Linux,
|
| + * while goog.labs.userAgent.platform considers ChromeOS and
|
| + * Linux to be different OSes.
|
| + *
|
| * @type {boolean}
|
| */
|
| goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ?
|
| - goog.userAgent.ASSUME_LINUX : goog.userAgent.detectedLinux_;
|
| + goog.userAgent.ASSUME_LINUX :
|
| + goog.userAgent.isLegacyLinux_();
|
| +
|
| +
|
| +/**
|
| + * @return {boolean} Whether the user agent is an X11 windowing system.
|
| + * @private
|
| + */
|
| +goog.userAgent.isX11_ = function() {
|
| + var navigator = goog.userAgent.getNavigator();
|
| + return !!navigator &&
|
| + goog.string.contains(navigator['appVersion'] || '', 'X11');
|
| +};
|
|
|
|
|
| /**
|
| @@ -358,7 +343,8 @@ goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ?
|
| * @type {boolean}
|
| */
|
| goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ?
|
| - goog.userAgent.ASSUME_X11 : goog.userAgent.detectedX11_;
|
| + goog.userAgent.ASSUME_X11 :
|
| + goog.userAgent.isX11_();
|
|
|
|
|
| /**
|
| @@ -366,7 +352,8 @@ goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ?
|
| * @type {boolean}
|
| */
|
| goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ?
|
| - goog.userAgent.ASSUME_ANDROID : goog.userAgent.detectedAndroid_;
|
| + goog.userAgent.ASSUME_ANDROID :
|
| + goog.labs.userAgent.platform.isAndroid();
|
|
|
|
|
| /**
|
| @@ -374,7 +361,8 @@ goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ?
|
| * @type {boolean}
|
| */
|
| goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ?
|
| - goog.userAgent.ASSUME_IPHONE : goog.userAgent.detectedIPhone_;
|
| + goog.userAgent.ASSUME_IPHONE :
|
| + goog.labs.userAgent.platform.isIphone();
|
|
|
|
|
| /**
|
| @@ -382,7 +370,8 @@ goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ?
|
| * @type {boolean}
|
| */
|
| goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ?
|
| - goog.userAgent.ASSUME_IPAD : goog.userAgent.detectedIPad_;
|
| + goog.userAgent.ASSUME_IPAD :
|
| + goog.labs.userAgent.platform.isIpad();
|
|
|
|
|
| /**
|
| @@ -394,26 +383,16 @@ goog.userAgent.determineVersion_ = function() {
|
| // All browsers have different ways to detect the version and they all have
|
| // different naming schemes.
|
|
|
| - // version is a string rather than a number because it may contain 'b', 'a',
|
| - // and so on.
|
| - var version = '', re;
|
| -
|
| if (goog.userAgent.OPERA && goog.global['opera']) {
|
| var operaVersion = goog.global['opera'].version;
|
| return goog.isFunction(operaVersion) ? operaVersion() : operaVersion;
|
| }
|
|
|
| - if (goog.userAgent.GECKO) {
|
| - re = /rv\:([^\);]+)(\)|;)/;
|
| - } else if (goog.userAgent.IE) {
|
| - re = /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/;
|
| - } else if (goog.userAgent.WEBKIT) {
|
| - // WebKit/125.4
|
| - re = /WebKit\/(\S+)/;
|
| - }
|
| -
|
| - if (re) {
|
| - var arr = re.exec(goog.userAgent.getUserAgentString());
|
| + // version is a string rather than a number because it may contain 'b', 'a',
|
| + // and so on.
|
| + var version = '';
|
| + var arr = goog.userAgent.getVersionRegexResult_();
|
| + if (arr) {
|
| version = arr ? arr[1] : '';
|
| }
|
|
|
| @@ -434,6 +413,31 @@ goog.userAgent.determineVersion_ = function() {
|
|
|
|
|
| /**
|
| + * @return {Array|undefined} The version regex matches from parsing the user
|
| + * agent string. These regex statements must be executed inline so they can
|
| + * be compiled out by the closure compiler with the rest of the useragent
|
| + * detection logic when ASSUME_* is specified.
|
| + * @private
|
| + */
|
| +goog.userAgent.getVersionRegexResult_ = function() {
|
| + var userAgent = goog.userAgent.getUserAgentString();
|
| + if (goog.userAgent.GECKO) {
|
| + return /rv\:([^\);]+)(\)|;)/.exec(userAgent);
|
| + }
|
| + if (goog.userAgent.EDGE) {
|
| + return /Edge\/([\d\.]+)/.exec(userAgent);
|
| + }
|
| + if (goog.userAgent.IE) {
|
| + return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(userAgent);
|
| + }
|
| + if (goog.userAgent.WEBKIT) {
|
| + // WebKit/125.4
|
| + return /WebKit\/(\S+)/.exec(userAgent);
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| * @return {number|undefined} Returns the document mode (for testing).
|
| * @private
|
| */
|
| @@ -520,7 +524,7 @@ goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
|
| * same as the given version.
|
| */
|
| goog.userAgent.isDocumentModeOrHigher = function(documentMode) {
|
| - return goog.userAgent.IE && goog.userAgent.DOCUMENT_MODE >= documentMode;
|
| + return goog.userAgent.DOCUMENT_MODE >= documentMode;
|
| };
|
|
|
|
|
| @@ -544,10 +548,10 @@ goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;
|
| */
|
| goog.userAgent.DOCUMENT_MODE = (function() {
|
| var doc = goog.global['document'];
|
| + var mode = goog.userAgent.getDocumentMode_();
|
| if (!doc || !goog.userAgent.IE) {
|
| return undefined;
|
| }
|
| - var mode = goog.userAgent.getDocumentMode_();
|
| return mode || (doc['compatMode'] == 'CSS1Compat' ?
|
| parseInt(goog.userAgent.VERSION, 10) : 5);
|
| })();
|
|
|