Frank Kobzik has uploaded a new change for review.

Change subject: engine: Fixes in non plugin console invocation
......................................................................

engine: Fixes in non plugin console invocation

This patch introduces minor fixes in non plugin console invocation mainly
related to internet explorer.

Changes in backend:
 - mapping of attachment servlet changed to "console.vv", since IE ignores
   Attachment header
 - no-cache header changed to max-age=0 header. With no-cache header IE fails
   to download the file if https is used
 - assume UTF-8 as the encoding of the incoming request in the attachment
   servlet

Changes in frontend:
 - added spice plugin detection for IE

Change-Id: I7fe6fbf274a9ac215e8f6593cc000f778a431928
Signed-off-by: Frantisek Kobzik <fkob...@redhat.com>
---
M 
backend/manager/modules/root/src/main/java/org/ovirt/engine/core/GetAttachmentServlet.java
M backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpicePlugin.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
8 files changed, 73 insertions(+), 44 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/13332/1

diff --git 
a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/GetAttachmentServlet.java
 
b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/GetAttachmentServlet.java
index d6324ec..9c69ca5 100644
--- 
a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/GetAttachmentServlet.java
+++ 
b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/GetAttachmentServlet.java
@@ -17,6 +17,7 @@
 
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
+        request.setCharacterEncoding("UTF-8");
         String contentType = request.getParameter("contenttype");
         String fileName = request.getParameter("filename");
         Boolean cache = Boolean.parseBoolean(request.getParameter("cache"));
@@ -33,7 +34,7 @@
         response.setHeader("Content-Disposition", "attachment; 
filename*='UTF-8'" + 
URLEncoder.encode(StringEscapeUtils.unescapeHtml(fileName), "UTF-8"));
 
         if (!cache) {
-            response.setHeader("Cache-Control", "no-cache, must-revalidate"); 
//disable caching HTTP/1.1
+            response.setHeader("Cache-Control", "max-age=0, must-revalidate"); 
//disable caching HTTP/1.1
             response.setHeader("Expires", "Sat, 26 Jul 1997 05:00:00 GMT"); 
//disable caching HTTP/1.0
         }
 
@@ -45,6 +46,7 @@
             response.getOutputStream().write(Base64.decodeBase64(content));
         } else if ("plain".equals(encodingType)) {
             content = StringEscapeUtils.unescapeHtml(content);
+
             response.getWriter().write(content);
 
             if (response.getWriter().checkError()) {
diff --git a/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml 
b/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml
index b65de10..70c46ed 100644
--- a/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml
+++ b/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml
@@ -54,7 +54,7 @@
   </servlet>
   <servlet-mapping>
     <servlet-name>GetAttachmentServlet</servlet-name>
-    <url-pattern>/getAttachment</url-pattern>
+    <url-pattern>/console.vv</url-pattern>
   </servlet-mapping>
 
   <!-- Documentation: -->
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 96a753d..64120c3 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
@@ -12,11 +12,9 @@
     public void Connect() {
         logger.warning("Connecting via spice..."); //$NON-NLS-1$
 
-        if ((cat.os.equalsIgnoreCase("Linux")) //$NON-NLS-1$
-                && (cat.browser.equalsIgnoreCase("Firefox"))) { //$NON-NLS-1$
+        if (isLinuxAndFirefox()) {
             connectNativelyViaXPI();
-        } else if ((cat.os.equalsIgnoreCase("Windows")) //$NON-NLS-1$
-                && (cat.browser.equalsIgnoreCase("Explorer"))) { //$NON-NLS-1$
+        } else if (isWindowsAndIE()) {
             connectNativelyViaActiveX();
         }
     }
@@ -189,7 +187,27 @@
                                                }-*/;
 
     @Override
-    public native boolean detectXpiPlugin() /*-{
+    public boolean detectBrowserPlugin() {
+        if (isLinuxAndFirefox()) {
+            return detectXpiPlugin();
+        } else if (isWindowsAndIE()) {
+            return detectActiveXPlugin();
+        }
+
+        return false;
+    }
+
+    private boolean isLinuxAndFirefox() {
+        return (cat.os.equalsIgnoreCase("Linux")) //$NON-NLS-1$
+                && (cat.browser.equalsIgnoreCase("Firefox"));//$NON-NLS-1$
+    }
+
+    private boolean isWindowsAndIE() {
+        return (cat.os.equalsIgnoreCase("Windows")) //$NON-NLS-1$
+                && (cat.browser.equalsIgnoreCase("Explorer")); //$NON-NLS-1$
+    }
+
+    private native boolean detectXpiPlugin() /*-{
                                             var pluginsFound = false;
                                             if (navigator.plugins && 
navigator.plugins.length > 0) {
                                             var daPlugins = [ "Spice" ];
@@ -212,6 +230,20 @@
                                             return pluginsFound;
                                             }-*/;
 
+    private native boolean detectActiveXPlugin() /*-{
+       var pluginObject = null;
+       try {
+           pluginObject = new ActiveXObject('SpiceX.OSpiceX');
+       } catch (e) {
+       }
+
+       if (pluginObject) {
+           return true;
+       } else {
+           return false;
+       }
+    }-*/;
+
     public native void connectNativelyViaActiveX() /*-{
                                                    var hostIp = 
th...@org.ovirt.engine.ui.common.uicommon.SpicePluginImpl::getHost()();
                                                    var port = 
th...@org.ovirt.engine.ui.common.uicommon.SpicePluginImpl::getPort()();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
index 435f73d..d3f7ca6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
@@ -1,6 +1,5 @@
 package org.ovirt.engine.ui.uicommonweb;
 
-import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
@@ -353,18 +352,6 @@
                 updateSpice64Version();
             }
         }
-    }
-
-    public boolean IsDisplayTypeSupported(DisplayType displayType) {
-        switch (displayType) {
-        case vnc:
-            return true;
-
-        case qxl:
-            return true;
-        }
-
-        return false;
     }
 
     public boolean isClientLinuxFirefox() {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
index 8c80a3b..787ad66 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
@@ -27,7 +27,7 @@
 
 public abstract class ConsoleModel extends EntityModel {
     public static final String EjectLabel = "[Eject]"; //$NON-NLS-1$
-    public static final String GET_ATTACHMENT_SERVLET_URL = "/getAttachment"; 
//$NON-NLS-1$
+    public static final String GET_ATTACHMENT_SERVLET_URL = "/console.vv"; 
//$NON-NLS-1$
 
     public enum ClientConsoleMode { Native, Plugin, Auto };
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpicePlugin.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpicePlugin.java
index 0e44cc5..01cad5e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpicePlugin.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpicePlugin.java
@@ -1,11 +1,7 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
-/**
- * Marking interface
- *
- */
 public interface ISpicePlugin extends ISpice {
 
-    public boolean detectXpiPlugin();
+    public boolean detectBrowserPlugin();
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
index 2c41aa9..9f95886 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
@@ -5,7 +5,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.ovirt.engine.ui.uicommonweb.Configurator;
 import org.ovirt.engine.core.common.action.ChangeDiskCommandParameters;
 import org.ovirt.engine.core.common.action.HibernateVmParameters;
 import org.ovirt.engine.core.common.action.RunVmParams;
@@ -24,8 +23,8 @@
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
-import 
org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters;
 import org.ovirt.engine.core.common.queries.GetConfigurationValueParameters;
+import 
org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters;
 import org.ovirt.engine.core.common.queries.GetVmByVmIdParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
@@ -37,6 +36,7 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.BaseCommandTarget;
+import org.ovirt.engine.ui.uicommonweb.Configurator;
 import org.ovirt.engine.ui.uicommonweb.ILogger;
 import org.ovirt.engine.ui.uicommonweb.TypeResolver;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
@@ -62,6 +62,7 @@
 
     private SpiceMenu menu;
     private ISpice privatespice;
+    private ClientConsoleMode consoleMode;
 
     public ISpice getspice() {
         return privatespice;
@@ -99,21 +100,25 @@
      *
      */
     private void setSpiceImplementation() {
-        ClientConsoleMode consoleMode =
+        consoleMode =
                 ClientConsoleMode.valueOf((String) 
AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.ClientConsoleModeDefault));
 
-        if (ClientConsoleMode.Native.equals(consoleMode)) { //$NON-NLS-1$
-            setspice((ISpice) 
TypeResolver.getInstance().Resolve(ISpiceNative.class));
-        } else if (ClientConsoleMode.Plugin.equals(consoleMode)) { 
//$NON-NLS-1$
-            setspice((ISpice) 
TypeResolver.getInstance().Resolve(ISpicePlugin.class));
-        } else {
-            ISpicePlugin pluginSpice = (ISpicePlugin) 
TypeResolver.getInstance().Resolve(ISpicePlugin.class);
-
-            if (pluginSpice.detectXpiPlugin()) {
-                setspice(pluginSpice);
-            } else {
+        switch (consoleMode) {
+            case Native:
                 setspice((ISpice) 
TypeResolver.getInstance().Resolve(ISpiceNative.class));
-            }
+                break;
+            case Plugin:
+                setspice((ISpice) 
TypeResolver.getInstance().Resolve(ISpicePlugin.class));
+                break;
+            default:
+                ISpicePlugin pluginSpice = (ISpicePlugin) 
TypeResolver.getInstance().Resolve(ISpicePlugin.class);
+
+                if (pluginSpice.detectBrowserPlugin()) {
+                    setspice(pluginSpice);
+                } else {
+                    setspice((ISpice) 
TypeResolver.getInstance().Resolve(ISpiceNative.class));
+                }
+            break;
         }
     }
 
@@ -251,11 +256,20 @@
         }
     }
 
+    private boolean isSpiceSupportedByClient() {
+        if (consoleMode == ClientConsoleMode.Plugin) {
+            return getConfigurator().isClientWindownsExplorer() || 
getConfigurator().isClientLinuxFirefox();
+        }
+
+        // in Native and Auto mode, we support all client types
+        return true;
+    }
+
     @Override
     protected void UpdateActionAvailability() {
         super.UpdateActionAvailability();
 
-        
getConnectCommand().setIsExecutionAllowed(getConfigurator().IsDisplayTypeSupported(DisplayType.qxl)
+        getConnectCommand().setIsExecutionAllowed(isSpiceSupportedByClient()
                 && !getIsConnected() && getEntity() != null && 
getEntity().getDisplayType() != DisplayType.vnc
                 && IsVmConnectReady());
     }
@@ -400,7 +414,6 @@
                         ConstantsManager.getInstance()
                                 .getMessages()
                                 
.pressKeyToReleaseCursor(releaseCursorKeysTranslated))));
-
 
         // setup spice proxy - for now always the default
         String spiceProxy = (String) 
AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.SpiceProxyDefault);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
index 924dd33..1fa6465 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
@@ -101,8 +101,7 @@
     {
         super.UpdateActionAvailability();
 
-        
getConnectCommand().setIsExecutionAllowed(getConfigurator().IsDisplayTypeSupported(DisplayType.vnc)
-                && getEntity() != null
+        getConnectCommand().setIsExecutionAllowed(getEntity() != null
                 && getEntity().getDisplayType() == DisplayType.vnc
                 && (getEntity().getStatus() == VMStatus.PoweringUp || 
getEntity().getStatus() == VMStatus.Up
                         || getEntity().getStatus() == VMStatus.RebootInProgress


--
To view, visit http://gerrit.ovirt.org/13332
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7fe6fbf274a9ac215e8f6593cc000f778a431928
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