summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Granvik <jonas@granvik.me>2015-01-12 12:44:34 +0200
committerArtur Signell <artur@vaadin.com>2015-01-12 18:44:36 +0000
commitb412ae97a659919b928fc28a3cb6500d75d514b2 (patch)
tree3ef1ee17b26a99435a6255f1279cefe37f665735
parente20f6fd54ae4b350ea654807b98fe442e546d1a8 (diff)
downloadvaadin-framework-b412ae97a659919b928fc28a3cb6500d75d514b2.tar.gz
vaadin-framework-b412ae97a659919b928fc28a3cb6500d75d514b2.zip
Add option to disable sending v-loc parameter in init request (#14460).
Change-Id: Ie17e0621400c3397dc19b386974e231b6f82944c
-rw-r--r--WebContent/VAADIN/vaadinBootstrap.js8
-rw-r--r--server/src/com/vaadin/server/BootstrapHandler.java6
-rw-r--r--server/src/com/vaadin/server/Constants.java1
-rw-r--r--server/src/com/vaadin/server/DefaultDeploymentConfiguration.java21
-rw-r--r--server/src/com/vaadin/server/DeploymentConfiguration.java9
-rw-r--r--server/src/com/vaadin/server/Page.java6
-rw-r--r--server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java5
-rw-r--r--server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java6
-rw-r--r--uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParameters.java36
-rw-r--r--uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParametersTest.java35
-rw-r--r--uitest/src/com/vaadin/tests/components/AbstractTestUI.java5
11 files changed, 135 insertions, 3 deletions
diff --git a/WebContent/VAADIN/vaadinBootstrap.js b/WebContent/VAADIN/vaadinBootstrap.js
index 53b213e110..89514dbcc2 100644
--- a/WebContent/VAADIN/vaadinBootstrap.js
+++ b/WebContent/VAADIN/vaadinBootstrap.js
@@ -136,7 +136,7 @@
params += extraParams;
}
- params += '&' + vaadin.getBrowserDetailsParameters(appId);
+ params += '&' + vaadin.getBrowserDetailsParameters(appId, getConfig('sendUrlsAsParameters'));
var r;
try {
@@ -270,7 +270,7 @@
ws.pendingApps = null;
}
},
- getBrowserDetailsParameters: function(parentElementId) {
+ getBrowserDetailsParameters: function(parentElementId, sendUrlsAsParameters) {
// Screen height and width
var params = 'v-sh=' + window.screen.height;
params += '&v-sw=' + window.screen.width;
@@ -327,7 +327,9 @@
}
// Location
- params += '&v-loc=' + encodeURIComponent(location.href);
+ if (sendUrlsAsParameters !== false) {
+ params += '&v-loc=' + encodeURIComponent(location.href);
+ }
// Window name
if (window.name) {
diff --git a/server/src/com/vaadin/server/BootstrapHandler.java b/server/src/com/vaadin/server/BootstrapHandler.java
index e74f6d7c45..a9343a7e03 100644
--- a/server/src/com/vaadin/server/BootstrapHandler.java
+++ b/server/src/com/vaadin/server/BootstrapHandler.java
@@ -681,6 +681,12 @@ public abstract class BootstrapHandler extends SynchronizedRequestHandler {
appConfig.put(ApplicationConstants.SERVICE_URL, serviceUrl);
}
+ boolean sendUrlsAsParameters = vaadinService
+ .getDeploymentConfiguration().isSendUrlsAsParameters();
+ if (!sendUrlsAsParameters) {
+ appConfig.put("sendUrlsAsParameters", false);
+ }
+
return appConfig;
}
diff --git a/server/src/com/vaadin/server/Constants.java b/server/src/com/vaadin/server/Constants.java
index 02a992a882..8036490333 100644
--- a/server/src/com/vaadin/server/Constants.java
+++ b/server/src/com/vaadin/server/Constants.java
@@ -136,6 +136,7 @@ public interface Constants {
static final String SERVLET_PARAMETER_UI_PROVIDER = "UIProvider";
static final String SERVLET_PARAMETER_LEGACY_PROPERTY_TOSTRING = "legacyPropertyToString";
static final String SERVLET_PARAMETER_SYNC_ID_CHECK = "syncIdCheck";
+ static final String SERVLET_PARAMETER_SENDURLSASPARAMETERS = "sendUrlsAsParameters";
// Configurable parameter names
static final String PARAMETER_VAADIN_RESOURCES = "Resources";
diff --git a/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java b/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java
index 22d5210eaa..b26e048431 100644
--- a/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java
+++ b/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java
@@ -59,6 +59,8 @@ public class DefaultDeploymentConfiguration extends
*/
public static final boolean DEFAULT_SYNC_ID_CHECK = true;
+ public static final boolean DEFAULT_SEND_URLS_AS_PARAMETERS = true;
+
private final Properties initParameters;
private boolean productionMode;
private boolean xsrfProtectionEnabled;
@@ -69,6 +71,7 @@ public class DefaultDeploymentConfiguration extends
private final Class<?> systemPropertyBaseClass;
private LegacyProperyToStringMode legacyPropertyToStringMode;
private boolean syncIdCheck;
+ private boolean sendUrlsAsParameters;
/**
* Create a new deployment configuration instance.
@@ -93,6 +96,7 @@ public class DefaultDeploymentConfiguration extends
checkPushMode();
checkLegacyPropertyToString();
checkSyncIdCheck();
+ checkSendUrlsAsParameters();
}
private void checkLegacyPropertyToString() {
@@ -258,6 +262,16 @@ public class DefaultDeploymentConfiguration extends
/**
* {@inheritDoc}
* <p>
+ * The default value is <code>true</code>.
+ */
+ @Override
+ public boolean isSendUrlsAsParameters() {
+ return sendUrlsAsParameters;
+ }
+
+ /**
+ * {@inheritDoc}
+ * <p>
* The default mode is {@link PushMode#DISABLED}.
*/
@Override
@@ -347,6 +361,13 @@ public class DefaultDeploymentConfiguration extends
Boolean.toString(DEFAULT_SYNC_ID_CHECK)).equals("true");
}
+ private void checkSendUrlsAsParameters() {
+ sendUrlsAsParameters = getApplicationOrSystemProperty(
+ Constants.SERVLET_PARAMETER_SENDURLSASPARAMETERS,
+ Boolean.toString(DEFAULT_SEND_URLS_AS_PARAMETERS)).equals(
+ "true");
+ }
+
private Logger getLogger() {
return Logger.getLogger(getClass().getName());
}
diff --git a/server/src/com/vaadin/server/DeploymentConfiguration.java b/server/src/com/vaadin/server/DeploymentConfiguration.java
index 3c20518c39..968ec7c0c3 100644
--- a/server/src/com/vaadin/server/DeploymentConfiguration.java
+++ b/server/src/com/vaadin/server/DeploymentConfiguration.java
@@ -111,6 +111,15 @@ public interface DeploymentConfiguration extends Serializable {
public int getHeartbeatInterval();
/**
+ * Returns whether the sending of URL's as GET and POST parameters in
+ * requests with content-type <code>application/x-www-form-urlencoded</code>
+ * is enabled or not.
+ *
+ * @return <code>false</code> if set to false or <code>true</code> otherwise
+ */
+ public boolean isSendUrlsAsParameters();
+
+ /**
* Returns whether a session should be closed when all its open UIs have
* been idle for longer than its configured maximum inactivity time.
* <p>
diff --git a/server/src/com/vaadin/server/Page.java b/server/src/com/vaadin/server/Page.java
index 3ddf4862b2..74d79ade50 100644
--- a/server/src/com/vaadin/server/Page.java
+++ b/server/src/com/vaadin/server/Page.java
@@ -939,6 +939,12 @@ public class Page implements Serializable {
* @return The browser location URI.
*/
public URI getLocation() {
+ if (location == null
+ && !uI.getSession().getConfiguration().isSendUrlsAsParameters()) {
+ throw new IllegalStateException("Location is not available as the "
+ + Constants.SERVLET_PARAMETER_SENDURLSASPARAMETERS
+ + " parameter is configured as false");
+ }
return location;
}
diff --git a/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java b/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java
index 7370bd3fac..0518bea650 100644
--- a/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java
+++ b/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java
@@ -153,5 +153,10 @@ public class AbstractDeploymentConfigurationTest {
return null;
}
+ @Override
+ public boolean isSendUrlsAsParameters() {
+ return DefaultDeploymentConfiguration.DEFAULT_SEND_URLS_AS_PARAMETERS;
+ }
+
}
}
diff --git a/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java b/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java
index 8eceaea53f..ddee23a9ec 100644
--- a/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java
+++ b/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java
@@ -21,6 +21,7 @@ public class MockDeploymentConfiguration extends
private Map<String, String> applicationOrSystemProperty = new HashMap<String, String>();
private LegacyProperyToStringMode legacyPropertyToStringMode = LegacyProperyToStringMode.DISABLED;
private boolean syncIdCheckEnabled = true;
+ private boolean sendUrlsAsParameters = true;
@Override
public boolean isProductionMode() {
@@ -119,4 +120,9 @@ public class MockDeploymentConfiguration extends
this.legacyPropertyToStringMode = legacyPropertyToStringMode;
}
+ @Override
+ public boolean isSendUrlsAsParameters() {
+ return sendUrlsAsParameters;
+ }
+
}
diff --git a/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParameters.java b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParameters.java
new file mode 100644
index 0000000000..d398ead622
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParameters.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.applicationservlet;
+
+import com.vaadin.launcher.CustomDeploymentConfiguration;
+import com.vaadin.launcher.CustomDeploymentConfiguration.Conf;
+import com.vaadin.server.Constants;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+
+@CustomDeploymentConfiguration({ @Conf(name = Constants.SERVLET_PARAMETER_SENDURLSASPARAMETERS, value = "false") })
+public class DisableSendUrlAsParameters extends AbstractTestUIWithLog {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ try {
+ log("Init location: " + getPage().getLocation());
+ } catch (IllegalStateException e) {
+ log("Init location exception: " + e.getMessage());
+ }
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParametersTest.java b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParametersTest.java
new file mode 100644
index 0000000000..f10f281646
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParametersTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.applicationservlet;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class DisableSendUrlAsParametersTest extends SingleBrowserTest {
+
+ @Test
+ public void testInitLocation() {
+ openTestURL();
+
+ String logRow = getLogRow(0);
+
+ Assert.assertEquals(
+ "1. Init location exception: Location is not available as the sendUrlsAsParameters parameter is configured as false",
+ logRow);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/AbstractTestUI.java b/uitest/src/com/vaadin/tests/components/AbstractTestUI.java
index 3a7d42e29c..dba055a65a 100644
--- a/uitest/src/com/vaadin/tests/components/AbstractTestUI.java
+++ b/uitest/src/com/vaadin/tests/components/AbstractTestUI.java
@@ -46,6 +46,11 @@ public abstract class AbstractTestUI extends UI {
}
protected void warnIfWidgetsetMaybeNotCompiled() {
+ // Can't check location if sendUrlAsParameters is disabled
+ if (!getSession().getConfiguration().isSendUrlsAsParameters()) {
+ return;
+ }
+
// Ignore if using debug mode
String query = getPage().getLocation().getQuery();
if (query != null && query.matches(".*[&?]gwt\\.codesvr.*")) {