Reviewers: jgw, rjrjr,

Description:
This patch addresses issue 1574 (and apparently 1735 as well) by adding
a way to specify a path when removing a cookie (needed if the cookie was
set with a path).


http://code.google.com/p/google-web-toolkit/issues/detail?id=1574
http://code.google.com/p/google-web-toolkit/issues/detail?id=1735

Please review this at http://gwt-code-reviews.appspot.com/34805

Affected files:
   user/src/com/google/gwt/user/client/Cookies.java
   user/test/com/google/gwt/user/client/CookieTest.java


Index: user/test/com/google/gwt/user/client/CookieTest.java
===================================================================
--- user/test/com/google/gwt/user/client/CookieTest.java        (revision 5352)
+++ user/test/com/google/gwt/user/client/CookieTest.java        (working copy)
@@ -126,6 +126,44 @@
    }

    /**
+   * Test that removing cookies with a path works correctly.
+   *
+   * Note that we do not verify failure to remove a cookie set with a path
+   * but removed without one as browser behavior differs.
+   */
+  public void testRemoveCookiePath() {
+    // First clear all cookies
+    clearCookies();
+
+    // Set a few cookies
+    Cookies.setCookie("test1", "value1", null, null, "/", false);
+    Cookies.setCookie("test2", "value2", null, null, "/", false);
+    Cookies.setCookie("test3", "value3", null, null, "/", false);
+    Collection<String> cookies = Cookies.getCookieNames();
+    assertEquals(3, cookies.size());
+
+    // Remove a cookie
+    Cookies.removeCookie("test2", "/");
+    assertEquals("value1", Cookies.getCookie("test1"));
+    assertEquals(null, Cookies.getCookie("test2"));
+    assertEquals("value3", Cookies.getCookie("test3"));
+
+    // Remove another cookie
+    Cookies.removeCookie("test1", "/");
+    assertEquals(null, Cookies.getCookie("test1"));
+    assertEquals(null, Cookies.getCookie("test2"));
+    assertEquals("value3", Cookies.getCookie("test3"));
+
+    // Remove last cookie
+    Cookies.removeCookie("test3", "/");
+    assertEquals(null, Cookies.getCookie("test1"));
+    assertEquals(null, Cookies.getCookie("test2"));
+    assertEquals(null, Cookies.getCookie("test3"));
+    cookies = Cookies.getCookieNames();
+    assertEquals(0, cookies.size());
+  }
+
+  /**
     * Clear out all existing cookies.
     */
    private void clearCookies() {
Index: user/src/com/google/gwt/user/client/Cookies.java
===================================================================
--- user/src/com/google/gwt/user/client/Cookies.java    (revision 5352)
+++ user/src/com/google/gwt/user/client/Cookies.java    (working copy)
@@ -60,15 +60,28 @@
    }

    /**
-   * Removes the cookie associated with the given name.
+   * Removes the cookie associated with the given name, if no path was  
given
+   * when {...@link #setCookie} was called.
     *
     * @param name the name of the cookie to be removed
     */
    public static native void removeCookie(String name) /*-{
-    $doc.cookie = name + "=;expires=Fri, 02-Jan-1970 00:00:00 GMT";
+    $doc.cookie = encodeURIComponent(name) + "=;expires=Fri, 02-Jan-1970  
00:00:00 GMT";
    }-*/;

    /**
+   * Removes the cookie associated with the given name.
+   *
+   * @param name the name of the cookie to be removed
+   * @param path the path to be associated with this cookie (which should  
match
+   *    the path given in {...@link #setCookie})
+   */
+  public static native void removeCookie(String name, String path) /*-{
+    $doc.cookie = encodeURIComponent(name) + "=;path=" + path
+        + ";expires=Fri, 02-Jan-1970 00:00:00 GMT";
+  }-*/;
+
+  /**
     * Sets a cookie. The cookie will expire when the current browser  
session is
     * ended.
     *



--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to