changeset 1669:20cd55dd027f

Import from trunk. User custom cookiemanager instead of cookiestore. This allows cookie strings with spaces to be sent to the server unchanged.
author Deepak Bhole <dbhole@redhat.com>
date Tue, 25 Aug 2009 10:57:43 -0400
parents 66cdb266311e
children 9b85d9f17c40
files ChangeLog plugin/icedtea/sun/applet/PluginCookieInfoRequest.java plugin/icedtea/sun/applet/PluginCookieManager.java plugin/icedtea/sun/applet/PluginCookieStore.java plugin/icedtea/sun/applet/PluginMain.java
diffstat 5 files changed, 107 insertions(+), 119 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Aug 25 10:55:01 2009 -0400
+++ b/ChangeLog	Tue Aug 25 10:57:43 2009 -0400
@@ -1,3 +1,16 @@
+2009-08-25  Deepak Bhole <dbhole@redhat.com>
+
+	* plugin/icedtea/sun/applet/PluginCookieInfoRequest.java
+	(parseReturn): Store cookie info as a string rather than a list of
+	HttpCookie objects.
+	(getObject): Return the new cookie string.
+	* plugin/icedtea/sun/applet/PluginCookieManager.java: New file, extends
+	CookieManager as is set as the default cookie manager for the plugin.
+	* plugin/icedtea/sun/applet/PluginCookieStore.java : Deleted. New design
+	uses a custom cookiemanager rather than just a custom store.
+	* plugin/icedtea/sun/applet/PluginMain.java
+	(init): Wire in the new cookie manager.
+
 2009-08-25  Deepak Bhole <dbhole@redhat.com>
 
 	* rt/net/sourceforge/jnlp/resources/Messages.properties: Add new
--- a/plugin/icedtea/sun/applet/PluginCookieInfoRequest.java	Tue Aug 25 10:55:01 2009 -0400
+++ b/plugin/icedtea/sun/applet/PluginCookieInfoRequest.java	Tue Aug 25 10:57:43 2009 -0400
@@ -37,12 +37,6 @@
 
 package sun.applet;
 
-import java.net.HttpCookie;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.sun.jndi.toolkit.url.UrlUtil;
 
 /**
  * This class represents a request object for cookie information for a given URI
@@ -50,7 +44,7 @@
 
 public class PluginCookieInfoRequest extends PluginCallRequest {
 
-    List<HttpCookie> cookieObjects = new ArrayList<HttpCookie>();
+    String cookieString = new String();
 
     public PluginCookieInfoRequest(String message, String returnString) {
         super(message, returnString);
@@ -63,45 +57,11 @@
 
     	PluginDebug.debug ("PluginCookieInfoRequest GOT: " + cookieInfo);
 
-    	String encodedURI = cookieInfo.split(" ")[2];
-    	
     	// Skip the first 3 components. We are guaranteed 3 components, 
     	// so no index -1 to worry about
     	cookieInfo = cookieInfo.substring(cookieInfo.indexOf(' ')+1);
     	cookieInfo = cookieInfo.substring(cookieInfo.indexOf(' ')+1);
-    	cookieInfo = cookieInfo.substring(cookieInfo.indexOf(' ')+1);
-
-    	URI siteURI;
-    	try
-    	{
-    	    siteURI = new URI(UrlUtil.decode(encodedURI, "UTF-8"));
-    	} catch (Exception e)
-    	{
-    	    e.printStackTrace();
-    	    return;
-    	}
-
-    	if (cookieInfo != null && cookieInfo.length() > 0)
-    	{
-    	    String[] cookies = cookieInfo.split(";");
-
-    	    for (int i = 0; i < cookies.length; i++) 
-    	    {
-    	        ArrayList l = new ArrayList();
-
-    	        String cookie = cookies[i];
-    	        cookie = cookie.trim();
-    	        String cookieName = cookie.substring(0, cookie.indexOf("="));
-    	        String cookieValue = cookie.substring(cookie.indexOf("=")+1);
-
-    	        HttpCookie httpCookieObj = new HttpCookie(cookieName, cookieValue);
-    	        httpCookieObj.setPath(siteURI.getPath());
-    	        httpCookieObj.setVersion(0); // force v0
-
-    	        PluginDebug.debug("Adding cookie info COOKIEN=" + cookieName + " and COOKIEV=" + cookieValue);
-    	        cookieObjects.add(httpCookieObj);
-    	    }
-    	}
+    	cookieString = cookieInfo.substring(cookieInfo.indexOf(' ')+1);
 
         setDone(true);
     }
@@ -116,7 +76,7 @@
     	return message.startsWith(returnString);
     }
 
-    public List<HttpCookie> getObject() {
-    	return this.cookieObjects;
+    public String getObject() {
+    	return this.cookieString;
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugin/icedtea/sun/applet/PluginCookieManager.java	Tue Aug 25 10:57:43 2009 -0400
@@ -0,0 +1,88 @@
+/* PluginCookieManager -- Cookie manager for the plugin
+   Copyright (C) 2009  Red Hat
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+package sun.applet;
+
+import java.io.IOException;
+import java.net.CookieManager;
+import java.net.HttpCookie;
+import java.net.URI;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class PluginCookieManager extends CookieManager 
+{
+    public Map<String, List<String>> get(URI uri,
+			Map<String, List<String>> requestHeaders) throws IOException {
+		// pre-condition check
+		if (uri == null || requestHeaders == null) {
+			throw new IllegalArgumentException("Argument is null");
+		}
+
+		Map<String, List<String>> cookieMap = new java.util.HashMap<String, List<String>>();
+
+		String cookies = (String) PluginAppletViewer
+				.requestPluginCookieInfo(uri);
+		List<String> cookieHeader = new java.util.ArrayList<String>();
+
+		if (cookies != null && cookies.length() > 0)
+			cookieHeader.add(cookies);
+		
+		// Add anything else that mozilla didn't add
+        for (HttpCookie cookie : getCookieStore().get(uri)) {
+            // apply path-matches rule (RFC 2965 sec. 3.3.4)
+            if (pathMatches(uri.getPath(), cookie.getPath())) {
+            	cookieHeader.add(cookie.toString());
+            }
+        }
+
+		cookieMap.put("Cookie", cookieHeader);
+		return Collections.unmodifiableMap(cookieMap);
+	}
+
+    private boolean pathMatches(String path, String pathToMatchWith) {
+        if (path == pathToMatchWith)
+            return true;
+        if (path == null || pathToMatchWith == null)
+            return false;
+        if (path.startsWith(pathToMatchWith))
+            return true;
+
+        return false;
+    }
+}
--- a/plugin/icedtea/sun/applet/PluginCookieStore.java	Tue Aug 25 10:55:01 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/* PluginCookieStore -- Storage for cookie information
-   Copyright (C) 2009  Red Hat
-
-This file is part of IcedTea.
-
-IcedTea is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-IcedTea is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with IcedTea; see the file COPYING.  If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library.  Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module.  An independent module is a module which is not derived from
-or based on this library.  If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so.  If you do not wish to do so, delete this
-exception statement from your version. */
-
-package sun.applet;
-
-import java.net.HttpCookie;
-import java.net.URI;
-import java.util.List;
-
-import sun.net.www.protocol.http.InMemoryCookieStore;
-
-public class PluginCookieStore extends InMemoryCookieStore 
-{
-    public List<HttpCookie> get(URI uri)
-    {
-        List<HttpCookie> cookies;
-
-        // Try to fetch it from the plugin, but if something goes 
-        // wrong, fall back. Don't crash!
-        try
-        {
-            cookies = (List<HttpCookie>) PluginAppletViewer.requestPluginCookieInfo(uri);
-
-            // If cookies is null, something went wrong. Fall back.
-            if (cookies == null) throw new NullPointerException("Null cookie");
-
-        } catch (Exception e)
-        {
-            PluginDebug.debug("Unable to fetch cookie information from plugin. " +
-            		          "Falling back to default.");
-            e.printStackTrace();
-            cookies = super.get(uri);
-        }
-
-        PluginDebug.debug("Returning cookies " + cookies + " for site: " + uri);
-        
-        return cookies;
-    }
-}
--- a/plugin/icedtea/sun/applet/PluginMain.java	Tue Aug 25 10:55:01 2009 -0400
+++ b/plugin/icedtea/sun/applet/PluginMain.java	Tue Aug 25 10:57:43 2009 -0400
@@ -215,12 +215,12 @@
 		    System.err.println("Unable to set SSLSocketfactory (may _prevent_ access to sites that should be trusted)! Continuing anyway...");
 		    e.printStackTrace();
 		}
-        
+
 		// plug in a custom authenticator and proxy selector
         Authenticator.setDefault(new CustomAuthenticator());
         ProxySelector.setDefault(new PluginProxySelector());
         
-        CookieManager ckManager = new CookieManager(new PluginCookieStore(), null);
+        CookieManager ckManager = new PluginCookieManager();
         CookieHandler.setDefault(ckManager);
 	}