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