Hey Joel, Would you take a look at this patch, against the trunk at r5321, which switches Window.Location's decode methods to use URL.decodeComponent instead of just URL.decode? It also adds some testing in WindowTest to make sure the decoding goes as expected.
This should fix issue 2941. Thanks! -- Alex Rudnick swe, gwt, atl --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
Index: user/test/com/google/gwt/user/client/WindowTest.java =================================================================== --- user/test/com/google/gwt/user/client/WindowTest.java (revision 5321) +++ user/test/com/google/gwt/user/client/WindowTest.java (working copy) @@ -116,6 +116,11 @@ assertEquals(map.get("d").get(0), "d=d"); assertEquals(map.get("f").get(0), "2"); assertEquals(map.get("f").get(1), "1"); + + // Values escaped with hex codes should work too. + map = Window.Location.buildListParamMap( + "?foo=bar%20baz%3aqux"); + assertEquals(map.get("foo").get(0), "bar baz:qux"); } /** Index: user/src/com/google/gwt/user/client/Window.java =================================================================== --- user/src/com/google/gwt/user/client/Window.java (revision 5321) +++ user/src/com/google/gwt/user/client/Window.java (working copy) @@ -270,7 +270,7 @@ values = new ArrayList<String>(); out.put(kv[0], values); } - values.add(kv.length > 1 ? URL.decode(kv[1]) : ""); + values.add(kv.length > 1 ? URL.decodeComponent(kv[1]) : ""); } } @@ -292,7 +292,7 @@ for (String kvPair : qs.split("&")) { String[] kv = kvPair.split("=", 2); if (kv.length > 1) { - paramMap.put(kv[0], URL.decode(kv[1])); + paramMap.put(kv[0], URL.decodeComponent(kv[1])); } else { paramMap.put(kv[0], ""); }