Diff
Modified: trunk/Source/WebKit/ChangeLog (231849 => 231850)
--- trunk/Source/WebKit/ChangeLog 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Source/WebKit/ChangeLog 2018-05-16 17:19:17 UTC (rev 231850)
@@ -1,3 +1,29 @@
+2018-05-16 Sihui Liu <sihui_...@apple.com>
+
+ Session cookies aren't reliably set when using default WKWebSiteDataStore
+ https://bugs.webkit.org/show_bug.cgi?id=185624
+ <rdar://problem/39111626>
+
+ Reviewed by Geoffrey Garen.
+
+ Session cookies of default session were set in UI Process when there was no process pool,
+ but they were not synced (or synced slowly to) Network Process. To make these cookies visible
+ as soon as they were set through API, we could manually set those cookies in Network Process
+ during its initilization.
+
+ * NetworkProcess/mac/RemoteNetworkingContext.mm:
+ (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
+ * UIProcess/API/APIHTTPCookieStore.cpp:
+ (API::HTTPCookieStore::cookies):
+ (API::HTTPCookieStore::setCookie):
+ (API::HTTPCookieStore::deleteCookie):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::ensureNetworkProcess):
+ (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::clearPendingCookies):
+ * UIProcess/WebsiteData/WebsiteDataStore.h:
+
2018-05-16 Chris Nardi <cna...@chromium.org>
Remove Document#selectedStylesheetSet/preferredStylesheetSet
Modified: trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm (231849 => 231850)
--- trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm 2018-05-16 17:19:17 UTC (rev 231850)
@@ -36,6 +36,7 @@
#import "WebsiteDataStoreParameters.h"
#import <WebCore/NetworkStorageSession.h>
#import <WebCore/ResourceError.h>
+#import <pal/SessionID.h>
#import <wtf/MainThread.h>
using namespace WebCore;
@@ -45,8 +46,12 @@
void RemoteNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&& parameters)
{
auto sessionID = parameters.networkSessionParameters.sessionID;
- if (NetworkStorageSession::storageSession(sessionID))
+ if (auto* session = NetworkStorageSession::storageSession(sessionID)) {
+ ASSERT(parameters.pendingCookies.isEmpty() || sessionID == PAL::SessionID::defaultSessionID());
+ for (const auto& cookie : parameters.pendingCookies)
+ session->setCookie(cookie);
return;
+ }
String base;
if (SessionTracker::getIdentifierBase().isNull())
Modified: trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp (231849 => 231850)
--- trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp 2018-05-16 17:19:17 UTC (rev 231850)
@@ -52,7 +52,7 @@
unregisterForNewProcessPoolNotifications();
}
-void HTTPCookieStore::cookies(Function<void (const Vector<WebCore::Cookie>&)>&& completionHandler)
+void HTTPCookieStore::cookies(Function<void(const Vector<WebCore::Cookie>&)>&& completionHandler)
{
auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
if (!pool) {
@@ -59,8 +59,7 @@
Vector<WebCore::Cookie> allCookies;
if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID())
allCookies = WebCore::NetworkStorageSession::defaultStorageSession().getAllCookies();
- else
- allCookies = m_owningDataStore->pendingCookies();
+ allCookies.appendVector(m_owningDataStore->pendingCookies());
callOnMainThread([completionHandler = WTFMove(completionHandler), allCookies]() {
completionHandler(allCookies);
@@ -78,7 +77,8 @@
{
auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
if (!pool) {
- if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID())
+ // FIXME: pendingCookies used for defaultSession because session cookies cannot be propagated to Network Process with uiProcessCookieStorageIdentifier.
+ if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID() && !cookie.session)
WebCore::NetworkStorageSession::defaultStorageSession().setCookie(cookie);
else
m_owningDataStore->addPendingCookie(cookie);
@@ -99,10 +99,11 @@
{
auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
if (!pool) {
- if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID())
+ if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID() && !cookie.session)
WebCore::NetworkStorageSession::defaultStorageSession().deleteCookie(cookie);
else
m_owningDataStore->removePendingCookie(cookie);
+
callOnMainThread([completionHandler = WTFMove(completionHandler)]() {
completionHandler();
});
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (231849 => 231850)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-05-16 17:19:17 UTC (rev 231850)
@@ -429,8 +429,10 @@
NetworkProcessProxy& WebProcessPool::ensureNetworkProcess(WebsiteDataStore* withWebsiteDataStore)
{
if (m_networkProcess) {
- if (withWebsiteDataStore)
+ if (withWebsiteDataStore) {
m_networkProcess->send(Messages::NetworkProcess::AddWebsiteDataStore(withWebsiteDataStore->parameters()), 0);
+ withWebsiteDataStore->clearPendingCookies();
+ }
return *m_networkProcess;
}
@@ -523,8 +525,15 @@
m_websiteDataStore->websiteDataStore().networkProcessDidCrash();
}
- if (withWebsiteDataStore)
+ if (m_websiteDataStore) {
+ m_networkProcess->send(Messages::NetworkProcess::AddWebsiteDataStore(m_websiteDataStore->websiteDataStore().parameters()), 0);
+ m_websiteDataStore->websiteDataStore().clearPendingCookies();
+ }
+
+ if (withWebsiteDataStore) {
m_networkProcess->send(Messages::NetworkProcess::AddWebsiteDataStore(withWebsiteDataStore->parameters()), 0);
+ withWebsiteDataStore->clearPendingCookies();
+ }
return *m_networkProcess;
}
@@ -1168,9 +1177,11 @@
ASSERT(page.websiteDataStore().parameters().networkSessionParameters.sessionID == sessionID);
sendToNetworkingProcess(Messages::NetworkProcess::AddWebsiteDataStore(page.websiteDataStore().parameters()));
page.process().send(Messages::WebProcess::AddWebsiteDataStore(WebsiteDataStoreParameters::privateSessionParameters(sessionID)), 0);
+ page.websiteDataStore().clearPendingCookies();
} else if (sessionID != PAL::SessionID::defaultSessionID()) {
sendToNetworkingProcess(Messages::NetworkProcess::AddWebsiteDataStore(page.websiteDataStore().parameters()));
page.process().send(Messages::WebProcess::AddWebsiteDataStore(page.websiteDataStore().parameters()), 0);
+ page.websiteDataStore().clearPendingCookies();
#if ENABLE(INDEXED_DATABASE)
if (!page.websiteDataStore().resolvedIndexedDatabaseDirectory().isEmpty())
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (231849 => 231850)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2018-05-16 17:19:17 UTC (rev 231850)
@@ -1523,6 +1523,11 @@
{
m_pendingCookies.remove(cookie);
}
+
+void WebsiteDataStore::clearPendingCookies()
+{
+ m_pendingCookies.clear();
+}
#if !PLATFORM(COCOA)
WebsiteDataStoreParameters WebsiteDataStore::parameters()
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (231849 => 231850)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2018-05-16 17:19:17 UTC (rev 231850)
@@ -160,6 +160,7 @@
Vector<WebCore::Cookie> pendingCookies() const;
void addPendingCookie(const WebCore::Cookie&);
void removePendingCookie(const WebCore::Cookie&);
+ void clearPendingCookies();
void enableResourceLoadStatisticsAndSetTestingCallback(Function<void (const String&)>&& callback);
Modified: trunk/Tools/ChangeLog (231849 => 231850)
--- trunk/Tools/ChangeLog 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Tools/ChangeLog 2018-05-16 17:19:17 UTC (rev 231850)
@@ -1,3 +1,17 @@
+2018-05-16 Sihui Liu <sihui_...@apple.com>
+
+ Session cookies aren't reliably set when using default WKWebSiteDataStore
+ https://bugs.webkit.org/show_bug.cgi?id=185624
+ <rdar://problem/39111626>
+
+ Reviewed by Geoffrey Garen.
+
+ Modified and enabled WebKit.WKHTTPCookieStoreWithoutProcessPool.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
+ (-[CookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+ (TEST):
+
2018-05-16 Valerie R Young <vale...@bocoup.com>
test262/Runner.pm: save to supplied expectation file if supplied
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm (231849 => 231850)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm 2018-05-16 16:20:26 UTC (rev 231849)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm 2018-05-16 17:19:17 UTC (rev 231850)
@@ -376,62 +376,101 @@
@implementation CookieUIDelegate
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
{
- EXPECT_STREQ("cookie:cookiename=cookievalue", message.UTF8String);
+ EXPECT_STREQ("cookie:PersistentCookieName=CookieValue; SessionCookieName=CookieValue", message.UTF8String);
finished = true;
completionHandler();
}
@end
-// FIXME: This should be removed once <rdar://problem/35344202> is resolved and bots are updated.
-#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MAX_ALLOWED <= 101301) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MAX_ALLOWED <= 110102)
TEST(WebKit, WKHTTPCookieStoreWithoutProcessPool)
{
- NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:[NSDictionary dictionaryWithObjectsAndKeys:@"127.0.0.1", NSHTTPCookieDomain, @"/", NSHTTPCookiePath, @"cookiename", NSHTTPCookieName, @"cookievalue", NSHTTPCookieValue, [NSDate distantFuture], NSHTTPCookieExpires, nil]];
+ RetainPtr<NSHTTPCookie> sessionCookie = [NSHTTPCookie cookieWithProperties:@{
+ NSHTTPCookiePath: @"/",
+ NSHTTPCookieName: @"SessionCookieName",
+ NSHTTPCookieValue: @"CookieValue",
+ NSHTTPCookieDomain: @"127.0.0.1",
+ }];
+ RetainPtr<NSHTTPCookie> persistentCookie = [NSHTTPCookie cookieWithProperties:@{
+ NSHTTPCookiePath: @"/",
+ NSHTTPCookieName: @"PersistentCookieName",
+ NSHTTPCookieValue: @"CookieValue",
+ NSHTTPCookieDomain: @"127.0.0.1",
+ NSHTTPCookieExpires: [NSDate distantFuture],
+ }];
NSString *alertCookieHTML = @"<script>alert('cookie:'+document.cookie);</script>";
-
+
+ // NonPersistentDataStore
+ RetainPtr<WKWebsiteDataStore> ephemeralStoreWithCookies = [WKWebsiteDataStore nonPersistentDataStore];
+
finished = false;
- WKWebsiteDataStore *ephemeralStoreWithCookies = [WKWebsiteDataStore nonPersistentDataStore];
- [ephemeralStoreWithCookies.httpCookieStore setCookie:cookie completionHandler:^ {
+ [ephemeralStoreWithCookies.get().httpCookieStore setCookie:persistentCookie.get() completionHandler:^{
WKWebsiteDataStore *ephemeralStoreWithIndependentCookieStorage = [WKWebsiteDataStore nonPersistentDataStore];
[ephemeralStoreWithIndependentCookieStorage.httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *cookies) {
- ASSERT_EQ(cookies.count, 0u);
-
- WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
- configuration.websiteDataStore = ephemeralStoreWithCookies;
- WKWebView *view = [[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration];
- view.UIDelegate = [[CookieUIDelegate alloc] init];
+ ASSERT_EQ(0u, cookies.count);
+ finished = true;
+ }];
+ }];
+ TestWebKitAPI::Util::run(&finished);
- [view loadHTMLString:alertCookieHTML baseURL:[NSURL URLWithString:@"http://127.0.0.1/"]];
+ finished = false;
+ [ephemeralStoreWithCookies.get().httpCookieStore setCookie:sessionCookie.get() completionHandler:^{
+ [ephemeralStoreWithCookies.get().httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *cookies) {
+ ASSERT_EQ(2u, cookies.count);
+ finished = true;
}];
}];
TestWebKitAPI::Util::run(&finished);
+
+ finished = false;
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ configuration.get().websiteDataStore = ephemeralStoreWithCookies.get();
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+ auto delegate = adoptNS([[CookieUIDelegate alloc] init]);
+ webView.get().UIDelegate = delegate.get();
+ [webView loadHTMLString:alertCookieHTML baseURL:[NSURL URLWithString:@"http://127.0.0.1"]];
+ TestWebKitAPI::Util::run(&finished);
+
+ finished = false;
+ [ephemeralStoreWithCookies.get().httpCookieStore deleteCookie:sessionCookie.get() completionHandler:^{
+ [ephemeralStoreWithCookies.get().httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *cookies) {
+ ASSERT_EQ(1u, cookies.count);
+ finished = true;
+ }];
+ }];
+ TestWebKitAPI::Util::run(&finished);
- // FIXME: Get this to work on iOS. <rdar://problem/32260156>
-#if !PLATFORM(IOS)
+ // DefaultDataStore
+ auto defaultStore = [WKWebsiteDataStore defaultDataStore];
finished = false;
- WKWebsiteDataStore *defaultStore = [WKWebsiteDataStore defaultDataStore];
- [defaultStore.httpCookieStore setCookie:cookie completionHandler:^ {
+ [defaultStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:[] {
+ finished = true;
+ }];
+ TestWebKitAPI::Util::run(&finished);
+
+ finished = false;
+ [defaultStore.httpCookieStore setCookie:persistentCookie.get() completionHandler:^{
[defaultStore.httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *cookies) {
- ASSERT_EQ(cookies.count, 1u);
-
- WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
- configuration.websiteDataStore = defaultStore;
- WKWebView *view = [[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration];
- view.UIDelegate = [[CookieUIDelegate alloc] init];
-
- [view loadHTMLString:alertCookieHTML baseURL:[NSURL URLWithString:@"http://127.0.0.1/"]];
+ ASSERT_EQ(1u, cookies.count);
+ finished = true;
}];
}];
TestWebKitAPI::Util::run(&finished);
-
- [defaultStore.httpCookieStore deleteCookie:cookie completionHandler:^ {
+
+ finished = false;
+ [defaultStore.httpCookieStore setCookie:sessionCookie.get() completionHandler:^{
[defaultStore.httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *cookies) {
- ASSERT_EQ(cookies.count, 0u);
+ ASSERT_EQ(2u, cookies.count);
finished = true;
}];
}];
TestWebKitAPI::Util::run(&finished);
-#endif
+
+ finished = false;
+ configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ configuration.get().websiteDataStore = defaultStore;
+ webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+ webView.get().UIDelegate = delegate.get();
+ [webView loadHTMLString:alertCookieHTML baseURL:[NSURL URLWithString:@"http://127.0.0.1"]];
+ TestWebKitAPI::Util::run(&finished);
}
-#endif // (PLATFORM(MAC) && __MAC_OS_X_VERSION_MAX_ALLOWED <= 101301) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MAX_ALLOWED <= 110102)
#endif