Diff
Modified: trunk/Source/WebCore/PAL/ChangeLog (232311 => 232312)
--- trunk/Source/WebCore/PAL/ChangeLog 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebCore/PAL/ChangeLog 2018-05-30 22:11:54 UTC (rev 232312)
@@ -1,3 +1,13 @@
+2018-05-30 Andy Estes <[email protected]>
+
+ [Cocoa] Add an SPI to suppress connection termination errors from CFNetwork when network interfaces change
+ https://bugs.webkit.org/show_bug.cgi?id=186107
+ <rdar://problem/39338957>
+
+ Reviewed by Brady Eidson.
+
+ * pal/spi/cf/CFNetworkSPI.h: Declared new SPI.
+
2018-05-27 Dan Bernstein <[email protected]>
Reverted the changes made for https://webkit.org/b/186016
Modified: trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h (232311 => 232312)
--- trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h 2018-05-30 22:11:54 UTC (rev 232312)
@@ -140,6 +140,9 @@
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000)
@property (nullable, copy) NSSet *_suppressedAutoAddedHTTPHeaders;
#endif
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000)
+@property (copy) NSDictionary *_socketStreamProperties;
+#endif
@end
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000)
Modified: trunk/Source/WebKit/ChangeLog (232311 => 232312)
--- trunk/Source/WebKit/ChangeLog 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/ChangeLog 2018-05-30 22:11:54 UTC (rev 232312)
@@ -1,3 +1,36 @@
+2018-05-30 Andy Estes <[email protected]>
+
+ [Cocoa] Add an SPI to suppress connection termination errors from CFNetwork when network interfaces change
+ https://bugs.webkit.org/show_bug.cgi?id=186107
+ <rdar://problem/39338957>
+
+ Reviewed by Brady Eidson.
+
+ Added an SPI which configures a process pool's networking process to set the
+ kCFStreamPropertyAutoErrorOnSystemChange to NO on its NSURLSessionConfigurations.
+ This instructs CFNetwork to not terminate active connections when the system's
+ network interfaces change.
+
+ * NetworkProcess/NetworkProcess.h:
+ (WebKit::NetworkProcess::suppressesConnectionTerminationOnSystemChange const):
+ * NetworkProcess/NetworkProcessCreationParameters.cpp:
+ (WebKit::NetworkProcessCreationParameters::encode const):
+ (WebKit::NetworkProcessCreationParameters::decode):
+ * NetworkProcess/NetworkProcessCreationParameters.h:
+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+ (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
+ * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+ (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
+ * UIProcess/API/APIProcessPoolConfiguration.cpp:
+ (API::ProcessPoolConfiguration::copy):
+ * UIProcess/API/APIProcessPoolConfiguration.h:
+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
+ (-[_WKProcessPoolConfiguration suppressesConnectionTerminationOnSystemChange]):
+ (-[_WKProcessPoolConfiguration setSuppressesConnectionTerminationOnSystemChange:]):
+ * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+ (WebKit::WebProcessPool::platformInitializeNetworkProcess):
+
2018-05-30 Youenn Fablet <[email protected]>
Rename FromOrigin runtime flag to CrossOriginResourcePolicy and enable it by default
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (232311 => 232312)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-05-30 22:11:54 UTC (rev 232312)
@@ -115,6 +115,7 @@
#if PLATFORM(COCOA)
RetainPtr<CFDataRef> sourceApplicationAuditData() const;
void clearHSTSCache(WebCore::NetworkStorageSession&, WallTime modifiedSince);
+ bool suppressesConnectionTerminationOnSystemChange() const { return m_suppressesConnectionTerminationOnSystemChange; }
#endif
void findPendingDownloadLocation(NetworkDataTask&, ResponseCompletionHandler&&, const WebCore::ResourceResponse&);
@@ -289,6 +290,8 @@
// multiple requests to clear the cache can come in before previous requests complete, and we need to wait for all of them.
// In the future using WorkQueue and a counting semaphore would work, as would WorkQueue supporting the libdispatch concept of "work groups".
dispatch_group_t m_clearCacheDispatchGroup;
+
+ bool m_suppressesConnectionTerminationOnSystemChange { false };
#endif
#if ENABLE(CONTENT_EXTENSIONS)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp (232311 => 232312)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp 2018-05-30 22:11:54 UTC (rev 232312)
@@ -78,11 +78,10 @@
#endif
encoder << httpProxy;
encoder << httpsProxy;
-#if PLATFORM(COCOA)
IPC::encode(encoder, networkATSContext.get());
-#endif
encoder << cookieStoragePartitioningEnabled;
encoder << storageAccessAPIEnabled;
+ encoder << suppressesConnectionTerminationOnSystemChange;
#endif
#if USE(SOUP)
encoder << cookiePersistentStoragePath;
@@ -209,14 +208,14 @@
return false;
if (!decoder.decode(result.httpsProxy))
return false;
-#if PLATFORM(COCOA)
if (!IPC::decode(decoder, result.networkATSContext))
return false;
-#endif
if (!decoder.decode(result.cookieStoragePartitioningEnabled))
return false;
if (!decoder.decode(result.storageAccessAPIEnabled))
return false;
+ if (!decoder.decode(result.suppressesConnectionTerminationOnSystemChange))
+ return false;
#endif
#if USE(SOUP)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h (232311 => 232312)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h 2018-05-30 22:11:54 UTC (rev 232312)
@@ -90,11 +90,10 @@
#endif
String httpProxy;
String httpsProxy;
-#if PLATFORM(COCOA)
RetainPtr<CFDataRef> networkATSContext;
-#endif
bool cookieStoragePartitioningEnabled;
bool storageAccessAPIEnabled;
+ bool suppressesConnectionTerminationOnSystemChange;
#endif
#if USE(SOUP)
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (232311 => 232312)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2018-05-30 22:11:54 UTC (rev 232312)
@@ -101,6 +101,7 @@
WebCore::NetworkStorageSession::setCookieStoragePartitioningEnabled(parameters.cookieStoragePartitioningEnabled);
WebCore::NetworkStorageSession::setStorageAccessAPIEnabled(parameters.storageAccessAPIEnabled);
+ m_suppressesConnectionTerminationOnSystemChange = parameters.suppressesConnectionTerminationOnSystemChange;
// FIXME: Most of what this function does for cache size gets immediately overridden by setCacheModel().
// - memory cache size passed from UI process is always ignored;
@@ -140,7 +141,6 @@
// Disable NSURLCache.
auto urlCache(adoptNS([[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]));
[NSURLCache setSharedURLCache:urlCache.get()];
- return;
}
RetainPtr<CFDataRef> NetworkProcess::sourceApplicationAuditData() const
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm (232311 => 232312)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2018-05-30 22:11:54 UTC (rev 232312)
@@ -54,9 +54,10 @@
using namespace WebKit;
-#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000)
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000)
+// FIXME: Remove this once rdar://problem/40650244 is in a build.
@interface NSURLSessionConfiguration (WKStaging)
-@property (nullable, copy) NSSet *_suppressedAutoAddedHTTPHeaders;
+@property (copy) NSDictionary *_socketStreamProperties;
@end
#endif
@@ -701,6 +702,12 @@
setCollectsTimingData();
#endif
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000)
+ // FIXME: Replace @"kCFStreamPropertyAutoErrorOnSystemChange" with a constant from the SDK once rdar://problem/40650244 is in a build.
+ if (NetworkProcess::singleton().suppressesConnectionTerminationOnSystemChange())
+ configuration._socketStreamProperties = @{ @"kCFStreamPropertyAutoErrorOnSystemChange" : @(NO) };
+#endif
+
auto* storageSession = WebCore::NetworkStorageSession::storageSession(parameters.sessionID);
RELEASE_ASSERT(storageSession);
if (CFHTTPCookieStorageRef storage = storageSession->cookieStorage().get())
Modified: trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp (232311 => 232312)
--- trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp 2018-05-30 22:11:54 UTC (rev 232312)
@@ -134,6 +134,9 @@
#if ENABLE(WIFI_ASSERTIONS)
copy->m_wirelessContextIdentifier = this->m_wirelessContextIdentifier;
#endif
+#if PLATFORM(COCOA)
+ copy->m_suppressesConnectionTerminationOnSystemChange = this->m_suppressesConnectionTerminationOnSystemChange;
+#endif
return copy;
}
Modified: trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h (232311 => 232312)
--- trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h 2018-05-30 22:11:54 UTC (rev 232312)
@@ -152,6 +152,11 @@
void setWirelessContextIdentifier(unsigned wirelessContextIdentifier) { m_wirelessContextIdentifier = wirelessContextIdentifier; }
#endif
+#if PLATFORM(COCOA)
+ bool suppressesConnectionTerminationOnSystemChange() const { return m_suppressesConnectionTerminationOnSystemChange; }
+ void setSuppressesConnectionTerminationOnSystemChange(bool suppressesConnectionTerminationOnSystemChange) { m_suppressesConnectionTerminationOnSystemChange = suppressesConnectionTerminationOnSystemChange; }
+#endif
+
private:
bool m_shouldHaveLegacyDataStore { false };
@@ -195,6 +200,10 @@
#if ENABLE(WIFI_ASSERTIONS)
unsigned m_wirelessContextIdentifier { 0 };
#endif
+
+#if PLATFORM(COCOA)
+ bool m_suppressesConnectionTerminationOnSystemChange { false };
+#endif
};
} // namespace API
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h (232311 => 232312)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h 2018-05-30 22:11:54 UTC (rev 232312)
@@ -66,6 +66,7 @@
@property (nonatomic) BOOL processSwapsOnWindowOpenWithOpener WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic) BOOL tracksResourceLoadMilestones WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic) BOOL pageCacheEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+@property (nonatomic) BOOL suppressesConnectionTerminationOnSystemChange WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@end
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm (232311 => 232312)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm 2018-05-30 22:11:54 UTC (rev 232312)
@@ -292,6 +292,16 @@
_processPoolConfiguration->setCacheModel(WebKit::CacheModelPrimaryWebBrowser);
}
+- (BOOL)suppressesConnectionTerminationOnSystemChange
+{
+ return _processPoolConfiguration->suppressesConnectionTerminationOnSystemChange();
+}
+
+- (void)setSuppressesConnectionTerminationOnSystemChange:(BOOL)suppressesConnectionTerminationOnSystemChange
+{
+ _processPoolConfiguration->setSuppressesConnectionTerminationOnSystemChange(suppressesConnectionTerminationOnSystemChange);
+}
+
#if PLATFORM(IOS)
- (NSString *)CTDataConnectionServiceType
{
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (232311 => 232312)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2018-05-30 21:38:06 UTC (rev 232311)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2018-05-30 22:11:54 UTC (rev 232312)
@@ -318,6 +318,7 @@
parameters.cookieStoragePartitioningEnabled = cookieStoragePartitioningEnabled();
parameters.storageAccessAPIEnabled = storageAccessAPIEnabled();
+ parameters.suppressesConnectionTerminationOnSystemChange = m_configuration->suppressesConnectionTerminationOnSystemChange();
#if HAVE(CFNETWORK_STORAGE_PARTITIONING) && !RELEASE_LOG_DISABLED
parameters.logCookieInformation = [defaults boolForKey:WebKitLogCookieInformationDefaultsKey];