package org.ovirt.engine.ui.common.uicommon; public class ClientAgentType { public String os; public String browser; public Float version; private String versionSearchString; public String platform; public ClientAgentType() { browser = getBrowser(); version = Float.parseFloat(getVersion()); os = getOS(); platform = getPlatform(); } /** * This hotfix function determines whether client browser is exactly IE 11. * It is used by the logic related to SPICE ActiveX plugin. */ public native boolean isIE11() /*-{ var isWindows = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::getOS()() == "Windows"; var containsTrident = navigator.userAgent != undefined && navigator.userAgent.indexOf("Trident") != -1; var versionIs11 = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::version == 11; return isWindows && containsTrident && versionIs11; }-*/; public boolean isIE() { return "explorer".equalsIgnoreCase(browser); //$NON-NLS-1$ } public boolean isFirefox() { return "firefox".equalsIgnoreCase(browser); //$NON-NLS-1$ } public native String getBrowser() /*-{ var data = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::getDataBrowser()(); var z = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::searchString(Ljava/lang/Object;)(data); return z; }-*/; public native Object searchString(Object data) /*-{ for ( var i = 0; i < data.length; i++) { var dataString = data[i].string; var dataProp = data[i].prop; this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::versionSearchString = data[i].versionSearch || data[i].identity; if (dataString) { if (dataString.indexOf(data[i].subString) != -1) return data[i].identity; } else if (dataProp) return data[i].identity; } }-*/; public native String getOS() /*-{ var dos = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::getdataOS()(); var os = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::searchString(Ljava/lang/Object;)(dos); return os || "an unknown OS"; }-*/; public native Object getDataBrowser() /*-{ dataBrowser = [ { string : navigator.userAgent, subString : "Chrome", identity : "Chrome" }, { string : navigator.userAgent, subString : "OmniWeb", versionSearch : "OmniWeb/", identity : "OmniWeb" }, { string : navigator.vendor, subString : "Apple", identity : "Safari", versionSearch : "Version" }, { prop : window.opera, identity : "Opera" }, { string : navigator.vendor, subString : "iCab", identity : "iCab" }, { string : navigator.vendor, subString : "KDE", identity : "Konqueror" }, { string : navigator.userAgent, subString : "Firefox", identity : "Firefox" }, { string : navigator.vendor, subString : "Camino", identity : "Camino" }, { // for newer Netscapes (6+) string : navigator.userAgent, subString : "Netscape", identity : "Netscape" }, { string : navigator.userAgent, subString : "MSIE", identity : "Explorer", versionSearch : "MSIE" }, { string : navigator.userAgent, subString : "Gecko", identity : "Mozilla", versionSearch : "rv" }, { // for older Netscapes (4-) string : navigator.userAgent, subString : "Mozilla", identity : "Netscape", versionSearch : "Mozilla" } ]; return dataBrowser; }-*/; public native Object getdataOS() /*-{ dataOS = [ { string : navigator.platform, subString : "Win", identity : "Windows" }, { string : navigator.platform, subString : "Mac", identity : "Mac" }, { string : navigator.userAgent, subString : "iPhone", identity : "iPhone/iPod" }, { string : navigator.platform, subString : "Linux", identity : "Linux" } ]; return dataOS; }-*/; public native String getVersion() /*-{ var z = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::searchVersion(Ljava/lang/Object;)(navigator.userAgent) || this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::searchVersion(Ljava/lang/Object;)(navigator.userAgent) || this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::searchVersion(Ljava/lang/Object;)(navigator.appVersion) || "0"; return z; }-*/; // cpuClass only works for Opera/Safari/Explorer public native String getCpuClass() /*-{ return navigator.cpuClass; }-*/; public native String getPlatform() /*-{ return navigator.platform; }-*/; public native String searchVersion(Object data) /*-{ var vss = this.@org.ovirt.engine.ui.common.uicommon.ClientAgentType::versionSearchString; var index = data.indexOf(vss); if (index == -1) return; var result = parseFloat(data.substring(index + vss.length + 1)); //GWT fails to return float, returning string instead. return result.toString(); }-*/; }