Changeset 250351 in webkit
- Timestamp:
- Sep 25, 2019 12:16:36 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r250349 r250351 1 2019-09-25 Alex Christensen <achristensen@webkit.org> 2 3 Replace WebsiteDataStoreParameters::privateSessionParameters with re-initializing all sessions immediately upon NetworkProcess resumption 4 https://bugs.webkit.org/show_bug.cgi?id=202211 5 6 Reviewed by Tim Horton. 7 8 Re-adding an ephemeral session after a NetworkProcess crash based on guessing that all its parameters are empty was added in r227590 with a test. 9 That test passes even when that re-adding code is removed because we re-add all sessions with parameters from the UIProcess when we restart a NetworkProcess. 10 I move the addition of non-default sessions to the initialization message instead of messages after the initialization message to remove race conditions that 11 might cause loads to happen before the NetworkProcess has received its second message from the UIProcess. I also add a unit test to verify that session 12 resumption also works with non-default persistent WebsiteDataStores. 13 14 * NetworkProcess/NetworkProcess.cpp: 15 (WebKit::NetworkProcess::initializeNetworkProcess): 16 * NetworkProcess/NetworkProcessCreationParameters.cpp: 17 (WebKit::NetworkProcessCreationParameters::encode const): 18 (WebKit::NetworkProcessCreationParameters::decode): 19 * NetworkProcess/NetworkProcessCreationParameters.h: 20 * NetworkProcess/NetworkResourceLoader.cpp: 21 (WebKit::NetworkResourceLoader::startNetworkLoad): 22 * NetworkProcess/NetworkSessionCreationParameters.cpp: 23 (WebKit::NetworkSessionCreationParameters::privateSessionParameters): Deleted. 24 * NetworkProcess/NetworkSessionCreationParameters.h: 25 * Shared/WebsiteDataStoreParameters.cpp: 26 (WebKit::WebsiteDataStoreParameters::privateSessionParameters): Deleted. 27 * Shared/WebsiteDataStoreParameters.h: 28 (WebKit::WebsiteDataStoreParameters::legacyPrivateSessionParameters): Deleted. 29 * UIProcess/WebProcessPool.cpp: 30 (WebKit::WebProcessPool::ensureNetworkProcess): 31 1 32 2019-09-25 Alex Christensen <achristensen@webkit.org> 2 33 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r250346 r250351 323 323 auto sessionID = parameters.defaultDataStoreParameters.networkSessionParameters.sessionID; 324 324 setSession(sessionID, NetworkSession::create(*this, WTFMove(parameters.defaultDataStoreParameters.networkSessionParameters))); 325 for (auto&& parameters : WTFMove(parameters.nonDefaultDataStoreParameters)) 326 addWebsiteDataStore(WTFMove(parameters)); 325 327 326 328 #if ENABLE(INDEXED_DATABASE) -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp
r250143 r250351 67 67 #endif 68 68 encoder << defaultDataStoreParameters; 69 encoder << nonDefaultDataStoreParameters; 69 70 #if USE(SOUP) 70 71 encoder.encodeEnum(cookieAcceptPolicy); … … 156 157 result.defaultDataStoreParameters = WTFMove(*defaultDataStoreParameters); 157 158 159 Optional<Vector<WebsiteDataStoreParameters>> nonDefaultDataStoreParameters; 160 decoder >> nonDefaultDataStoreParameters; 161 if (!nonDefaultDataStoreParameters) 162 return false; 163 result.nonDefaultDataStoreParameters = WTFMove(*nonDefaultDataStoreParameters); 164 158 165 #if USE(SOUP) 159 166 if (!decoder.decodeEnum(result.cookieAcceptPolicy)) -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h
r250143 r250351 83 83 84 84 WebsiteDataStoreParameters defaultDataStoreParameters; 85 Vector<WebsiteDataStoreParameters> nonDefaultDataStoreParameters; 85 86 86 87 #if USE(SOUP) -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
r250053 r250351 303 303 304 304 auto* networkSession = m_connection->networkSession(); 305 if (!networkSession && sessionID().isEphemeral()) {306 m_connection->networkProcess().addWebsiteDataStore(WebsiteDataStoreParameters::privateSessionParameters(sessionID()));307 networkSession = m_connection->networkProcess().networkSession(sessionID());308 }309 305 if (!networkSession) { 310 306 WTFLogAlways("Attempted to create a NetworkLoad with a session (id=%" PRIu64 ") that does not exist.", sessionID().toUInt64()); -
trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp
r250349 r250351 39 39 namespace WebKit { 40 40 41 NetworkSessionCreationParameters NetworkSessionCreationParameters::privateSessionParameters(const PAL::SessionID& sessionID)42 {43 return {44 sessionID45 , { }46 , AllowsCellularAccess::Yes47 #if PLATFORM(COCOA)48 , { }49 , { }50 , { }51 , false52 , { }53 , { }54 , { }55 , false56 #endif57 #if USE(SOUP)58 , { }59 , SoupCookiePersistentStorageType::Text60 #endif61 #if USE(CURL)62 , { }63 , { }64 #endif65 , { }66 , { }67 , false68 , false69 , { }70 , { }71 , { }72 , { }73 , { }74 , { }75 , { }76 , { }77 , { }78 };79 }80 81 41 void NetworkSessionCreationParameters::encode(IPC::Encoder& encoder) const 82 42 { -
trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h
r250349 r250351 58 58 void encode(IPC::Encoder&) const; 59 59 static Optional<NetworkSessionCreationParameters> decode(IPC::Decoder&); 60 static NetworkSessionCreationParameters privateSessionParameters(const PAL::SessionID&);61 60 62 61 PAL::SessionID sessionID { PAL::SessionID::defaultSessionID() }; -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp
r248734 r250351 151 151 } 152 152 153 WebsiteDataStoreParameters WebsiteDataStoreParameters::privateSessionParameters(PAL::SessionID sessionID)154 {155 ASSERT(sessionID.isEphemeral());156 return { { }, { }, { }, NetworkSessionCreationParameters::privateSessionParameters(sessionID)157 #if ENABLE(INDEXED_DATABASE)158 , { }, { }159 #if PLATFORM(IOS_FAMILY)160 , { }161 #endif162 #endif163 #if ENABLE(SERVICE_WORKER)164 , { }, { }165 #endif166 , { }, { }167 };168 }169 170 153 } // namespace WebKit -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h
r248734 r250351 47 47 ~WebsiteDataStoreParameters(); 48 48 49 static WebsiteDataStoreParameters legacyPrivateSessionParameters() { return privateSessionParameters(PAL::SessionID::legacyPrivateSessionID()); }50 static WebsiteDataStoreParameters privateSessionParameters(PAL::SessionID);51 52 49 void encode(IPC::Encoder&) const; 53 50 static Optional<WebsiteDataStoreParameters> decode(IPC::Decoder&); -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r250329 r250351 634 634 platformInitializeNetworkProcess(parameters); 635 635 636 // Make sure the network process knows about all the sessions that have been registered before it started. 637 for (auto& sessionID : m_sessionToPageIDsMap.keys()) { 638 if (auto* websiteDataStore = WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID)) 639 parameters.nonDefaultDataStoreParameters.append(websiteDataStore->parameters()); 640 } 641 636 642 // Initialize the network process. 637 643 networkProcess->send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0); … … 649 655 networkProcess->addSession(makeRef(*withWebsiteDataStore)); 650 656 withWebsiteDataStore->clearPendingCookies(); 651 }652 653 // Make sure the network process knows about all the sessions that have been registered before it started.654 for (auto& sessionID : m_sessionToPageIDsMap.keys()) {655 if (auto* websiteDataStore = WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID))656 networkProcess->addSession(*websiteDataStore);657 657 } 658 658 -
trunk/Tools/ChangeLog
r250350 r250351 1 2019-09-25 Alex Christensen <achristensen@webkit.org> 2 3 Replace WebsiteDataStoreParameters::privateSessionParameters with re-initializing all sessions immediately upon NetworkProcess resumption 4 https://bugs.webkit.org/show_bug.cgi?id=202211 5 6 Reviewed by Tim Horton. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm: 9 (checkRecoveryAfterCrash): 10 (TEST): 11 1 12 2019-09-25 Aakash Jain <aakash_jain@apple.com> 2 13 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm
r242339 r250351 30 30 #import "TestWKWebView.h" 31 31 #import <WebKit/WKProcessPoolPrivate.h> 32 #import <WebKit/WKWebsiteDataStorePrivate.h> 33 #import <WebKit/_WKWebsiteDataStoreConfiguration.h> 32 34 #import <wtf/RetainPtr.h> 33 35 … … 56 58 @end 57 59 58 TEST(WebKit, NetworkProcessCrashNonPersistentDataStore)60 static void checkRecoveryAfterCrash(WKWebsiteDataStore *dataStore) 59 61 { 60 62 NSURL *simple = [[NSBundle mainBundle] URLForResource:@"simple" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]; … … 62 64 63 65 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 64 [configuration setWebsiteDataStore: [WKWebsiteDataStore nonPersistentDataStore]];66 [configuration setWebsiteDataStore:dataStore]; 65 67 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 66 68 auto delegate = adoptNS([[CrashDelegate alloc] init]); … … 75 77 TestWebKitAPI::Util::run(&done); 76 78 } 79 80 TEST(WebKit, NetworkProcessCrashNonPersistentDataStore) 81 { 82 checkRecoveryAfterCrash([WKWebsiteDataStore nonPersistentDataStore]); 83 } 84 85 TEST(WebKit, NetworkProcessCrashNonDefaultPersistentDataStore) 86 { 87 checkRecoveryAfterCrash([[[WKWebsiteDataStore alloc] _initWithConfiguration:[[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]] autorelease]); 88 }
Note: See TracChangeset
for help on using the changeset viewer.