001    /*
002     * Copyright 2006 Google Inc.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package com.google.gwt.user.client;
017    
018    import com.google.gwt.core.client.JavaScriptObject;
019    
020    /**
021     * Provides access to browser cookies stored on the client.  Because of browser
022     * restrictions, you will only be able to access cookies associated with the
023     * current page's domain.
024     */
025    public class Cookies {
026    
027      /**
028       * Gets the cookie associated with the given key.
029       * 
030       * @param key the key of the cookie to be retrieved
031       * @return the cookie's value.
032       */
033      public native String getCookie(String key) /*-{
034        var cookies = this.@com.google.gwt.user.client.Cookies::loadCookies()();
035        var value = cookies[key];
036        if (value)
037          return value;
038        else
039          return null;
040      }-*/;
041    
042      native JavaScriptObject loadCookies() /*-{
043        var cookies = {};
044    
045        var docCookie = $doc.cookie;
046        if (docCookie && docCookie != '') {
047          var crumbs = docCookie.split('; ');
048          for (var i = 0; i < crumbs.length; ++i) {
049            var parts = crumbs[i].split("=");
050            if (parts.length == 2) {
051              cookies[parts[0]] = unescape(parts[1]);
052            }
053          }
054        }
055    
056        return cookies;
057      }-*/;
058    }