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> Bug-Url: https://bugzilla.redhat.com/1052104 --- 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/24/23224/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 343faeb..ead6614 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 @@ -4,12 +4,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() { @@ -17,7 +19,7 @@ if (configurator.isClientLinuxFirefox()) { connectNativelyViaXPI(); - } else if (configurator.isClientWindowsExplorer()) { + } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) { connectNativelyViaActiveX(); } } @@ -201,7 +203,7 @@ public boolean detectBrowserPlugin() { if (configurator.isClientLinuxFirefox()) { return detectXpiPlugin(); - } else if (configurator.isClientWindowsExplorer()) { + } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) { return detectActiveXPlugin(); } @@ -246,6 +248,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()(); @@ -286,13 +297,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 { @@ -339,7 +347,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 e01fa8f..ae47856 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 @@ -222,9 +222,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$ @@ -233,9 +234,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; @@ -244,6 +246,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 990b92b2..360ee3d 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 @@ -11,6 +11,8 @@ public boolean canOpenVNCConsole(HasConsoleModel item); public boolean canOpenRDPConsole(HasConsoleModel item); + public boolean isIE11(); + public String determineProtocolMessage(HasConsoleModel item); public ConsoleProtocol determineConnectionProtocol(HasConsoleModel item); -- To view, visit http://gerrit.ovirt.org/23224 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I14760ddf688a29eb1c5ef896c20e194fdc7ed8ca Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Frank Kobzik <fkob...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches