Frank Kobzik has uploaded a new change for review. Change subject: frontend: Fix Spice ActiveX for IE 11 ......................................................................
frontend: Fix Spice ActiveX for IE 11 This patch provides quick fix of SPICE plugin invocation for Internet Explorer 11. Since IE 11 doesn't report itself as MSIE anymore and doesn't support old IE DOM API, couple of small adjustments were needed. Change-Id: I14760ddf688a29eb1c5ef896c20e194fdc7ed8ca Signed-off-by: Frantisek Kobzik <fkob...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/ClientAgentType.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java 4 files changed, 40 insertions(+), 12 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/00/23100/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/ClientAgentType.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/ClientAgentType.java index b828095..1ba6037 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/ClientAgentType.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/ClientAgentType.java @@ -15,6 +15,18 @@ 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 = th...@org.ovirt.engine.ui.common.uicommon.ClientAgentType::getOS()() == "Windows"; + var containsTrident = navigator.userAgent != undefined && navigator.userAgent.indexOf("Trident") != -1; + var versionIs11 = th...@org.ovirt.engine.ui.common.uicommon.ClientAgentType::version == 11; + + return isWindows && containsTrident && versionIs11; + }-*/; + public boolean isIE() { return "explorer".equalsIgnoreCase(browser); //$NON-NLS-1$ } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java index df93835..cefa59d 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java @@ -6,12 +6,14 @@ import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.ui.uicommonweb.Configurator; +import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; import org.ovirt.engine.ui.uicommonweb.TypeResolver; import org.ovirt.engine.ui.uicommonweb.models.vms.ISpicePlugin; public class SpicePluginImpl extends AbstractSpice implements ISpicePlugin { private static Logger logger = Logger.getLogger(SpicePluginImpl.class.getName()); private final Configurator configurator = (Configurator) TypeResolver.getInstance().resolve(Configurator.class); + private final ConsoleUtils cu = (ConsoleUtils) TypeResolver.getInstance().resolve(ConsoleUtils.class); @Override public void connect() { @@ -19,7 +21,7 @@ if (configurator.isClientLinuxFirefox()) { connectNativelyViaXPI(); - } else if (configurator.isClientWindowsExplorer()) { + } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) { connectNativelyViaActiveX(); } } @@ -219,7 +221,7 @@ public boolean detectBrowserPlugin() { if (configurator.isClientLinuxFirefox()) { return detectXpiPlugin(); - } else if (configurator.isClientWindowsExplorer()) { + } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) { return detectActiveXPlugin(); } @@ -264,6 +266,15 @@ }-*/; public native void connectNativelyViaActiveX() /*-{ + // helper for attaching callbacks for ie 11 + function attachEventIe11Safe(object, eventName, callbackFn) { + if($wnd.document.attachEvent) { // ie < 11 + object.attachEvent(eventName, callbackFn); + } else { + object.addEventListener(eventName, callbackFn, false); + } + } + var hostIp = th...@org.ovirt.engine.ui.common.uicommon.SpicePluginImpl::getHost()(); var port = th...@org.ovirt.engine.ui.common.uicommon.SpicePluginImpl::getPort()(); var fullScreen = th...@org.ovirt.engine.ui.common.uicommon.SpicePluginImpl::isFullScreen()(); @@ -303,13 +314,10 @@ //alert("Trust Store ["+trustStore+"]"); th...@org.ovirt.engine.ui.common.uicommon.SpicePluginImpl::loadActiveX(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)(id,codebase,spiceCabOjectClassId); - var client = $wnd.document.getElementById(id); - client.attachEvent('onreadystatechange', onReadyStateChange); - client.attachEvent('onmenuitemselected', onMenuItemSelected); - + attachEventIe11Safe(client, 'onreadystatechange', onReadyStateChange); + attachEventIe11Safe(client, 'onmenuitemselected', onMenuItemSelected); tryToConnect(); - function tryToConnect() { if (client.readyState == 4) { try { @@ -356,7 +364,7 @@ client.Proxy = ''; } - client.attachEvent('ondisconnected', onDisconnected); + attachEventIe11Safe(client, 'ondisconnected', onDisconnected); client.connect(); connectedeve...@org.ovirt.engine.ui.uicompat.Event::raise(Ljava/lang/Object;Lorg/ovirt/engine/ui/uicompat/EventArgs;)(model, null); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java index 978d8cd..7ff8bba 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java @@ -57,9 +57,10 @@ public boolean isBrowserPluginSupported(ConsoleProtocol protocol) { switch (protocol) { case SPICE: - if ((clientAgentType.os.equalsIgnoreCase("Windows")) //$NON-NLS-1$ + if ((clientAgentType.os.equalsIgnoreCase("Windows") //$NON-NLS-1$ && (clientAgentType.browser.equalsIgnoreCase("Explorer")) //$NON-NLS-1$ - && (clientAgentType.version >= 7.0)) { + && (clientAgentType.version >= 7.0)) + || clientAgentType.isIE11()) { return true; } else if ((clientAgentType.os.equalsIgnoreCase("Linux")) //$NON-NLS-1$ && (clientAgentType.browser.equalsIgnoreCase("Firefox")) //$NON-NLS-1$ @@ -68,9 +69,10 @@ } return false; case RDP: - if ((clientAgentType.os.equalsIgnoreCase("Windows"))//$NON-NLS-1$ + if ((clientAgentType.os.equalsIgnoreCase("Windows")//$NON-NLS-1$ && (clientAgentType.browser.equalsIgnoreCase("Explorer"))//$NON-NLS-1$ - && (clientAgentType.version >= 7.0)) { + && (clientAgentType.version >= 7.0)) + || clientAgentType.isIE11()) { return true; } return false; @@ -79,6 +81,10 @@ } } + public boolean isIE11() { + return clientAgentType.isIE11(); + } + private native String getUserAgentString() /*-{ var userAgent = navigator.userAgent; return userAgent; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java index ad888ca..6733cab 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java @@ -10,6 +10,8 @@ public boolean isBrowserPluginSupported(ConsoleProtocol protocol); + public boolean isIE11(); + public boolean isSpiceProxyDefined(VM vm); public boolean isWebSocketProxyDefined(); -- To view, visit http://gerrit.ovirt.org/23100 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I14760ddf688a29eb1c5ef896c20e194fdc7ed8ca Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Frank Kobzik <fkob...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches