Changes Window.Location to use URL.decodeComponent instead of URL.decode;
adds a test to make sure the decoding is working properly. Fixes issue 2941.
review by: jgw
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5322 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/Window.java b/user/src/com/google/gwt/user/client/Window.java
index 872ac69..7b6b25b 100644
--- a/user/src/com/google/gwt/user/client/Window.java
+++ b/user/src/com/google/gwt/user/client/Window.java
@@ -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], "");
}
diff --git a/user/test/com/google/gwt/user/client/WindowTest.java b/user/test/com/google/gwt/user/client/WindowTest.java
index b0e0ea6..41f82fa 100644
--- a/user/test/com/google/gwt/user/client/WindowTest.java
+++ b/user/test/com/google/gwt/user/client/WindowTest.java
@@ -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");
}
/**