/// <summary> /// Update the jar with a collection cookies. /// </summary> /// <param name="collection">List of cookies to store.</param> /// <param name="uri">Uri cookies apply to.</param> public void Update(List <DreamCookie> collection, XUri uri) { if (collection == null) { throw new ArgumentNullException("collection"); } // process all cookies foreach (DreamCookie c in collection) { DreamCookie cookie = c; if (!string.IsNullOrEmpty(cookie.Name)) { string[] segments = null; if (uri != null) { // set default domain if needed if (string.IsNullOrEmpty(cookie.Domain)) { cookie = cookie.WithHostPort(uri.HostPort); } else if (!StringUtil.EqualsInvariantIgnoreCase(cookie.Domain, uri.HostPort)) { // domain doesn't match, ignore cookie continue; } // set default path if needed if (string.IsNullOrEmpty(cookie.Path)) { cookie = cookie.WithPath(uri.Path); segments = uri.Segments; } else { segments = cookie.Uri == null ? new string[0] : cookie.Uri.Segments; if (!uri.PathStartsWith(segments)) { // path doesn't match ignore cookie continue; } } } if (!string.IsNullOrEmpty(cookie.Path) && !string.IsNullOrEmpty(cookie.Domain)) { if (segments == null) { segments = cookie.Uri == null ? new string[0] : cookie.Uri.Segments; } if (cookie.Expired) { Delete(cookie, segments, 0); } else { Insert(cookie, segments, 0); } } } } }