diff -r d912b027a9bb javafx-ui-webnode/src/com/sun/webpane/webkit/network/Cookie.java --- a/javafx-ui-webnode/src/com/sun/webpane/webkit/network/Cookie.java Thu Aug 11 11:10:02 2011 +0200 +++ b/javafx-ui-webnode/src/com/sun/webpane/webkit/network/Cookie.java Fri Aug 12 21:16:51 2011 +0400 @@ -330,6 +330,9 @@ String D = host1.substring(lengthDiff); if (version > 0) { + if (H.endsWith(".")) { + H = H.substring(0, H.length() - 1); + } // RFC 2965 cookies have stricter rules return (H.indexOf('.') == -1 && D.equalsIgnoreCase(domain)); } else { diff -r d912b027a9bb javafx-ui-webnode/src/com/sun/webpane/webkit/network/CookieManager.java --- a/javafx-ui-webnode/src/com/sun/webpane/webkit/network/CookieManager.java Thu Aug 11 11:10:02 2011 +0200 +++ b/javafx-ui-webnode/src/com/sun/webpane/webkit/network/CookieManager.java Fri Aug 12 21:16:51 2011 +0400 @@ -4,13 +4,20 @@ */ package com.sun.webpane.webkit.network; +import java.util.Set; +import java.util.HashSet; +import java.util.ListIterator; import java.io.IOException; import java.net.URI; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import static java.lang.String.format; /** * @@ -18,6 +25,9 @@ */ public class CookieManager extends java.net.CookieHandler { + private static final Logger logger = + Logger.getLogger(CookieManager.class.getName()); + private CookieStorage store = null; private CookieFilter filter = null; @@ -123,9 +133,31 @@ l.add(sb.toString()); ret.put("Cookie", l); } + + if (logger.isLoggable(Level.FINE)) { + logger.fine(format("get(), uri: %s%n%s", uri, + toString(ret, "Cookie"))); + } return ret; } + private static String toString(Map> map, + String... keys) + { + Set keySet = new HashSet(Arrays.asList(keys)); + StringBuilder sb = new StringBuilder(); + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + if (keySet.contains(key)) { + sb.append(entry.getKey()).append(format(":%n")); + for (String value : entry.getValue()) { + sb.append(" ").append(value).append(format("%n")); + } + } + } + return sb.toString(); + } + private static boolean contains(List l, Cookie cookie) { for (Cookie c : l) { if (c.getName().equals(cookie.getName())) { @@ -151,6 +183,10 @@ @Override public void put(URI uri, Map> headers) throws IOException { + if (logger.isLoggable(Level.FINE)) { + logger.fine(format("put(), uri: %s%n%s", uri, + toString(headers, "Set-Cookie", "Set-Cookie2"))); + } // pre-condition check if (uri == null || headers == null) { throw new IllegalArgumentException("Argument is null"); @@ -179,7 +215,10 @@ continue; } List cookies = null; - for (String h : entry.getValue()) { + ListIterator it = + entry.getValue().listIterator(entry.getValue().size()); + while (it.hasPrevious()) { + String h = it.previous(); cookies = Cookie.parse(uri, h); if (cookies != null) { for (Cookie c : cookies) { @@ -297,11 +336,12 @@ // header; RFC 2965 requires a leading $Version="1" string while Netscape // does not. // The workaround here is to add a $Version="1" string in advance - if (cookies.indexOf(cookie) == 0 && cookie.getVersion() > 0) { - cookieHeader.add("$Version=\"1\""); - } - - cookieHeader.add(cookie.toString()); +// if (cookies.indexOf(cookie) == 0 && cookie.getVersion() > 0) { +// cookieHeader.add("$Version=\"1\""); +// } +// +// cookieHeader.add(cookie.toString()); + cookieHeader.add(cookie.getName() + "=" + cookie.getValue()); } return cookieHeader; }