You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2020/02/17 21:03:00 UTC

[wicket] branch master updated: WICKET-6745: Deprecate (Ajax)ServerAndClientTimeFilter

This is an automated email from the ASF dual-hosted git repository.

papegaaij pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new 80c1b59  WICKET-6745: Deprecate (Ajax)ServerAndClientTimeFilter
80c1b59 is described below

commit 80c1b59ef6bd910c90cdad07b8f7d9960d5fb3b7
Author: Emond Papegaaij <em...@topicus.nl>
AuthorDate: Mon Feb 17 22:02:33 2020 +0100

    WICKET-6745: Deprecate (Ajax)ServerAndClientTimeFilter
---
 .../response/filter/AjaxServerAndClientTimeFilter.java    |  9 +++++++++
 .../wicket/response/filter/ServerAndClientTimeFilter.java |  9 +++++++++
 .../apache/wicket/examples/WicketExampleApplication.java  | 15 +++++++++++++++
 3 files changed, 33 insertions(+)

diff --git a/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java b/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java
index 8db3b90..898066e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java
@@ -49,7 +49,16 @@ import org.slf4j.LoggerFactory;
  * </pre>
  * 
  * @author jcompagner
+ * @deprecated This class has been deprecated for several reasons. The way it tries to measure
+ *             server and client times is very inaccurate. Modern browsers provide much better tools
+ *             to measure Javascript execution times. The measurements were written in a property
+ *             that has been deprecated for years and removed in modern browsers. Finally, rendering
+ *             the Javascript directly into the response makes it hard to support a strict CSP with
+ *             nonces. There is no real replacement for this class. Use the tools provided by the
+ *             browser. See {@code WicketExampleApplication} for a simple example of passing
+ *             rendering times to the browser via the {@code Server-Timing} header.
  */
+@Deprecated
 public class AjaxServerAndClientTimeFilter implements IResponseFilter
 {
 	private static Logger log = LoggerFactory.getLogger(AjaxServerAndClientTimeFilter.class);
diff --git a/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java b/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java
index 87e9732..51ada47 100644
--- a/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java
@@ -50,7 +50,16 @@ import org.slf4j.LoggerFactory;
  * </pre>
  * 
  * @author jcompagner
+ * @deprecated This class has been deprecated for several reasons. The way it tries to measure
+ *             server and client times is very inaccurate. Modern browsers provide much better tools
+ *             to measure Javascript execution times. The measurements were written in a property
+ *             that has been deprecated for years and removed in modern browsers. Finally, rendering
+ *             the Javascript directly into the response makes it hard to support a strict CSP with
+ *             nonces. There is no real replacement for this class. Use the tools provided by the
+ *             browser. See {@code WicketExampleApplication} for a simple example of passing
+ *             rendering times to the browser via the {@code Server-Timing} header.
  */
+@Deprecated
 public class ServerAndClientTimeFilter implements IResponseFilter
 {
 	private static final Logger log = LoggerFactory.getLogger(ServerAndClientTimeFilter.class);
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java b/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java
index 016276e..526c24f 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java
@@ -18,6 +18,10 @@ package org.apache.wicket.examples;
 
 import org.apache.wicket.csp.CSPDirective;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.cycle.IRequestCycleListener;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.resource.CssUrlReplacer;
 import org.apache.wicket.settings.SecuritySettings;
 import org.apache.wicket.util.crypt.ClassCryptFactory;
@@ -64,5 +68,16 @@ public abstract class WicketExampleApplication extends WebApplication
 				.add(CSPDirective.STYLE_SRC,
 						"https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css")
 				.add(CSPDirective.FONT_SRC, "https://maxcdn.bootstrapcdn.com");
+		
+		getRequestCycleListeners().add(new IRequestCycleListener()
+		{
+			@Override
+			public void onEndRequest(RequestCycle cycle)
+			{
+				((WebResponse) cycle.getResponse()).addHeader("Server-Timing",
+					"server;desc=\"Wicket rendering time\";dur="
+						+ (System.currentTimeMillis() - cycle.getStartTime()));
+			}
+		});
 	}
 }