From 5215e7f7244fd06d76d21fe34b8a18aab0f9be4a Mon Sep 17 00:00:00 2001 From: agisboye Date: Sun, 15 Dec 2024 23:25:17 +0100 Subject: [PATCH 1/3] Add public initializer to HTTPCookieStorage --- Sources/FoundationNetworking/HTTPCookieStorage.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index 8f78c6ca8c..9363cf8a7f 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -67,6 +67,13 @@ open class HTTPCookieStorage: NSObject, @unchecked Sendable { private let syncQ = DispatchQueue(label: "org.swift.HTTPCookieStorage.syncQ") private let isEphemeral: Bool + + public init() { + _allCookies = [:] + cookieAcceptPolicy = .always + isEphemeral = true + super.init() + } private init(cookieStorageName: String, isEphemeral: Bool = false) { _allCookies = [:] From 84104a724806234c36bd2d9d66437bff7f505c48 Mon Sep 17 00:00:00 2001 From: agisboye Date: Thu, 19 Dec 2024 20:18:17 +0100 Subject: [PATCH 2/3] Disable cookie storage when using empty initializer --- .../HTTPCookieStorage.swift | 7 +++++++ Tests/Foundation/TestHTTPCookieStorage.swift | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index 9363cf8a7f..c012aa3ac5 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -67,11 +67,13 @@ open class HTTPCookieStorage: NSObject, @unchecked Sendable { private let syncQ = DispatchQueue(label: "org.swift.HTTPCookieStorage.syncQ") private let isEphemeral: Bool + private let isStorageDisabled: Bool public init() { _allCookies = [:] cookieAcceptPolicy = .always isEphemeral = true + isStorageDisabled = true super.init() } @@ -79,6 +81,7 @@ open class HTTPCookieStorage: NSObject, @unchecked Sendable { _allCookies = [:] cookieAcceptPolicy = .always self.isEphemeral = isEphemeral + isStorageDisabled = false super.init() if !isEphemeral { let bundlePath = Bundle.main.bundlePath @@ -176,6 +179,8 @@ open class HTTPCookieStorage: NSObject, @unchecked Sendable { same name, domain and path, if any. */ open func setCookie(_ cookie: HTTPCookie) { + guard !isStorageDisabled else { return } + self.syncQ.sync { guard cookieAcceptPolicy != .never else { return } @@ -309,6 +314,8 @@ open class HTTPCookieStorage: NSObject, @unchecked Sendable { in accordance with policy settings. */ open func setCookies(_ cookies: [HTTPCookie], for url: URL?, mainDocumentURL: URL?) { + guard !isStorageDisabled else { return } + //if the cookieAcceptPolicy is `never` we don't have anything to do guard cookieAcceptPolicy != .never else { return } diff --git a/Tests/Foundation/TestHTTPCookieStorage.swift b/Tests/Foundation/TestHTTPCookieStorage.swift index ecd46fa7bd..69ff182ff2 100644 --- a/Tests/Foundation/TestHTTPCookieStorage.swift +++ b/Tests/Foundation/TestHTTPCookieStorage.swift @@ -81,6 +81,23 @@ class TestHTTPCookieStorage: XCTestCase { checkCookieDomainMatching(for: .shared) checkCookieDomainMatching(for: .groupContainer("test")) } + + func test_emptyInitializer() { + let storage = HTTPCookieStorage() + let url = URL(string: "https://swift.org") + let simpleCookie = HTTPCookie(properties: [ + .name: "TestCookie1", + .value: "Test @#$%^$&*99", + .path: "/", + .domain: "swift.org", + ])! + + storage.setCookie(simpleCookie) + XCTAssertEqual(storage.cookies!.count, 0) + + storage.setCookies([simpleCookie], for: url, mainDocumentURL: nil) + XCTAssertEqual(storage.cookies!.count, 0) + } func cookieStorage(for type: StorageType) -> HTTPCookieStorage { switch type { From b84c874810fdaec0e14bab8d79f42da83a330cd8 Mon Sep 17 00:00:00 2001 From: agisboye Date: Mon, 13 Jan 2025 09:34:29 +0100 Subject: [PATCH 3/3] Add override --- Sources/FoundationNetworking/HTTPCookieStorage.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index c012aa3ac5..eb632e43a7 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -69,7 +69,7 @@ open class HTTPCookieStorage: NSObject, @unchecked Sendable { private let isEphemeral: Bool private let isStorageDisabled: Bool - public init() { + public override init() { _allCookies = [:] cookieAcceptPolicy = .always isEphemeral = true