You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by im...@apache.org on 2008/04/09 07:49:06 UTC

svn commit: r646193 - in /myfaces/orchestra/trunk/core/src: main/java/org/apache/myfaces/orchestra/requestParameterProvider/ test/java/org/apache/myfaces/orchestra/requestParameterProvider/

Author: imario
Date: Tue Apr  8 22:49:05 2008
New Revision: 646193

URL: http://svn.apache.org/viewvc?rev=646193&view=rev
Log:
ORCHESTRA-21: deal with relative urls too

Modified:
    myfaces/orchestra/trunk/core/src/main/java/org/apache/myfaces/orchestra/requestParameterProvider/RequestParameterProviderManager.java
    myfaces/orchestra/trunk/core/src/test/java/org/apache/myfaces/orchestra/requestParameterProvider/TestRequestParameterProviderManager.java

Modified: myfaces/orchestra/trunk/core/src/main/java/org/apache/myfaces/orchestra/requestParameterProvider/RequestParameterProviderManager.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core/src/main/java/org/apache/myfaces/orchestra/requestParameterProvider/RequestParameterProviderManager.java?rev=646193&r1=646192&r2=646193&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core/src/main/java/org/apache/myfaces/orchestra/requestParameterProvider/RequestParameterProviderManager.java (original)
+++ myfaces/orchestra/trunk/core/src/main/java/org/apache/myfaces/orchestra/requestParameterProvider/RequestParameterProviderManager.java Tue Apr  8 22:49:05 2008
@@ -25,8 +25,10 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 /**
  * The manager which manage all the attached providers and add their fields to the url.
@@ -51,7 +53,7 @@
 
     private static final String PAGE_LINK_SEP = "#";
 
-    private static final String SCHEME_HTTP = "http";
+    private static final Set SCHEMES_TO_EXCLUDE = new HashSet();
 
     private static final String PAGE_PARAMETER_SEP = "?";
     private static final String PARAMETER_SEP = "&";
@@ -63,6 +65,13 @@
     // should not be...
     private transient List providers;
 
+    static
+    {
+        SCHEMES_TO_EXCLUDE.add("javascript");
+        SCHEMES_TO_EXCLUDE.add("ftp");
+        SCHEMES_TO_EXCLUDE.add("mailto");
+    }
+
     private RequestParameterProviderManager()
     {
     }
@@ -127,11 +136,15 @@
             return url;
         }
 
-        if (url.length() < SCHEME_HTTP.length()
-                || !url.substring(0,SCHEME_HTTP.length()).equalsIgnoreCase(SCHEME_HTTP))
+        int pos = url.indexOf(":");
+        if (pos > 0)
         {
-            // not http (or https, we just check for http, https would match that too)
-            return url;
+            String probablyScheme = url.substring(0, pos);
+            if (SCHEMES_TO_EXCLUDE.contains(probablyScheme))
+            {
+                // a scheme we know to not encode to
+                return url;
+            }
         }
 
         StringBuffer sb = new StringBuffer();

Modified: myfaces/orchestra/trunk/core/src/test/java/org/apache/myfaces/orchestra/requestParameterProvider/TestRequestParameterProviderManager.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core/src/test/java/org/apache/myfaces/orchestra/requestParameterProvider/TestRequestParameterProviderManager.java?rev=646193&r1=646192&r2=646193&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core/src/test/java/org/apache/myfaces/orchestra/requestParameterProvider/TestRequestParameterProviderManager.java (original)
+++ myfaces/orchestra/trunk/core/src/test/java/org/apache/myfaces/orchestra/requestParameterProvider/TestRequestParameterProviderManager.java Tue Apr  8 22:49:05 2008
@@ -52,6 +52,8 @@
         assertEquals("http://domain/path?FIELD=VALUE#22", man.encodeAndAttachParameters("http://domain/path#22"));
         assertEquals("http://domain/path?ab=cd&FIELD=VALUE#22", man.encodeAndAttachParameters("http://domain/path?ab=cd#22"));
         assertEquals("javascript:anyMethod(anyUrl)", man.encodeAndAttachParameters("javascript:anyMethod(anyUrl)"));
+        assertEquals("relative/url?FIELD=VALUE", man.encodeAndAttachParameters("relative/url"));
+        assertEquals("useless:/url?FIELD=VALUE", man.encodeAndAttachParameters("useless:/url"));
         assertEquals("#", man.encodeAndAttachParameters("#"));
     }
 }