// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_WEB_DOWNLOAD_DOWNLOAD_SESSION_COOKIE_STORAGE_H_
#define IOS_WEB_DOWNLOAD_DOWNLOAD_SESSION_COOKIE_STORAGE_H_
#include <Foundation/Foundation.h>
// Cookie Storage that only save cookies in memory. It assumes that all cookies
// set calls will have valid cookies and conform to the global cookies accept
// policy. This cookie store class expects setting & getting cookies methods
// calls and setting cookies accept policy calls. Other methods of the class are
// no op.
// This Cookie store is solely used by the download session, which will only
// retrieve cookies using `cookiesForURL:` when creating the retrieve request.
// After that these cookies are not useful, and it'll be safe to discard them
// and only have the version kept by the WebSiteDataStore internal cookie store.
// The reason why an instance of NSHTTPCookieStorage class (shared or newly
// created) can not be used directly in the download session is that it takes
// too long blocking UI thread when setting large number of cookies.
@interface DownloadSessionCookieStorage : NSHTTPCookieStorage
// Initialises the instance with the `cookies` and `cookieAcceptPolicy`. The
// `cookies` must be valid and without duplicates. If `cookiAcceptPolicy` is
// `NSHTTPCookieAcceptPolicyNever`, then no cookies are set.
- (instancetype)initWithCookies:(NSArray<NSHTTPCookie*>*)cookies
cookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)cookieAcceptPolicy
NS_DESIGNATED_INITIALIZER;
// Convenience initialiser identical to calling:
// [DownloadSessionCookieStorage alloc]
// initWithCookies:nil
// cookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
- (instancetype)init;
@end
#endif // IOS_WEB_DOWNLOAD_DOWNLOAD_SESSION_COOKIE_STORAGE_H_