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

Reply via email to