Changeset 274186 in webkit
- Timestamp:
- Mar 9, 2021, 4:40:08 PM (6 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/NetworkProcess.cpp (modified) (2 diffs)
-
NetworkProcess/NetworkProcessCreationParameters.cpp (modified) (4 diffs)
-
NetworkProcess/NetworkProcessCreationParameters.h (modified) (2 diffs)
-
UIProcess/Network/NetworkProcessProxy.cpp (modified) (2 diffs)
-
UIProcess/Network/NetworkProcessProxy.h (modified) (1 diff)
-
UIProcess/WebsiteData/WebsiteDataStore.cpp (modified) (2 diffs)
-
UIProcess/WebsiteData/WebsiteDataStore.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r274176 r274186 1 2021-03-09 Alex Christensen <achristensen@webkit.org> 2 3 REGRESSION (r272376): [iOS] ASSERTION FAILED: sessionID.isEphemeral() || !path.isEmpty() in WebKit::NetworkProcess::swServerForSession 4 https://bugs.webkit.org/show_bug.cgi?id=222713 5 6 Reviewed by Geoff Garen. 7 8 Because NetworkProcess::CreateNetworkConnectionToWebProcess is sent with SendOption::DispatchMessageEvenWhenWaitingForSyncReply, it is possible 9 for two messages of type NetworkProcess::AddWebsiteDataStore and two messages of type NetworkProcess::CreateNetworkConnectionToWebProcess to be in the queue, 10 but the second NetworkProcess::CreateNetworkConnectionToWebProcess jumps to the front of the line while the UI process is waiting for the reply to the first. 11 Then, when calling NetworkProcess::swServerForSession we expect the session's parameters to have been initialized in the network process already, but we cut 12 ahead of the parameter initialization message. This is a realistically rare condition that can only be hit when using SPI, but it is hit in the 13 ResourceLoadStatistics.StoreSuspension API test. To fix this, we send the WebsiteDataStoreParameters from each WebsiteDataStore in the NetworkProcessCreationParameters. 14 To avoid doing extra work, we introduce an early return in NetworkProcessProxy::addSession if we have already added parameters from this session to the network process. 15 16 * NetworkProcess/NetworkProcess.cpp: 17 (WebKit::NetworkProcess::initializeNetworkProcess): 18 (WebKit::NetworkProcess::addSessionStorageQuotaManager): 19 * NetworkProcess/NetworkProcessCreationParameters.cpp: 20 (WebKit::NetworkProcessCreationParameters::encode const): 21 (WebKit::NetworkProcessCreationParameters::decode): 22 * NetworkProcess/NetworkProcessCreationParameters.h: 23 * UIProcess/Network/NetworkProcessProxy.cpp: 24 (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess): 25 (WebKit::NetworkProcessProxy::addSession): 26 * UIProcess/Network/NetworkProcessProxy.h: 27 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 28 (WebKit::WebsiteDataStore::parametersFromEachWebsiteDataStore): 29 * UIProcess/WebsiteData/WebsiteDataStore.h: 30 1 31 2021-03-09 Chris Dumez <cdumez@apple.com> 2 32 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r274174 r274186 354 354 registerURLSchemeAsNoAccess(scheme); 355 355 356 for (auto&& websiteDataStoreParameters : WTFMove(parameters.websiteDataStoreParameters)) 357 addWebsiteDataStore(WTFMove(websiteDataStoreParameters)); 358 356 359 RELEASE_LOG(Process, "%p - NetworkProcess::initializeNetworkProcess: Presenting processPID=%d", this, WebCore::presentingApplicationPID()); 357 360 } … … 431 434 if (isNewEntry) 432 435 SandboxExtension::consumePermanently(cacheRootPathHandle); 436 else 437 ASSERT_NOT_REACHED(); 433 438 } 434 439 -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp
r271537 r274186 29 29 #include "ArgumentCoders.h" 30 30 #include "WebCoreArgumentCoders.h" 31 #include "WebsiteDataStoreParameters.h" 31 32 32 33 #if PLATFORM(COCOA) … … 37 38 38 39 NetworkProcessCreationParameters::NetworkProcessCreationParameters() = default; 40 NetworkProcessCreationParameters::~NetworkProcessCreationParameters() = default; 41 NetworkProcessCreationParameters::NetworkProcessCreationParameters(NetworkProcessCreationParameters&&) = default; 42 NetworkProcessCreationParameters& NetworkProcessCreationParameters::operator=(NetworkProcessCreationParameters&&) = default; 39 43 40 44 void NetworkProcessCreationParameters::encode(IPC::Encoder& encoder) const … … 69 73 encoder << enablePrivateClickMeasurement; 70 74 encoder << enablePrivateClickMeasurementDebugMode; 75 encoder << websiteDataStoreParameters; 71 76 } 72 77 … … 139 144 return false; 140 145 146 Optional<Vector<WebsiteDataStoreParameters>> websiteDataStoreParameters; 147 decoder >> websiteDataStoreParameters; 148 if (!websiteDataStoreParameters) 149 return false; 150 result.websiteDataStoreParameters = WTFMove(*websiteDataStoreParameters); 151 141 152 return true; 142 153 } -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h
r271537 r274186 44 44 namespace WebKit { 45 45 46 struct WebsiteDataStoreParameters; 47 46 48 struct NetworkProcessCreationParameters { 47 49 NetworkProcessCreationParameters(); 50 NetworkProcessCreationParameters(NetworkProcessCreationParameters&&); 51 ~NetworkProcessCreationParameters(); 52 NetworkProcessCreationParameters& operator=(NetworkProcessCreationParameters&&); 48 53 49 54 void encode(IPC::Encoder&) const; … … 83 88 bool enablePrivateClickMeasurement { true }; 84 89 bool enablePrivateClickMeasurementDebugMode { false }; 90 91 Vector<WebsiteDataStoreParameters> websiteDataStoreParameters; 85 92 }; 86 93 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r273941 r274186 159 159 SandboxExtension::createHandleForTemporaryFile(emptyString(), SandboxExtension::Type::ReadWrite, parameters.tempDirectoryExtensionHandle); 160 160 #endif 161 parameters.websiteDataStoreParameters = WebsiteDataStore::parametersFromEachWebsiteDataStore(); 162 WebsiteDataStore::forEachWebsiteDataStore([this](auto& websiteDataStore) { 163 addSession(websiteDataStore, SendParametersToNetworkProcess::No); 164 }); 161 165 WebProcessPool::platformInitializeNetworkProcess(parameters); 162 166 send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0); … … 1328 1332 } 1329 1333 1330 void NetworkProcessProxy::addSession(WebsiteDataStore& store) 1331 { 1332 m_websiteDataStores.add(store); 1333 1334 if (canSendMessage()) 1334 void NetworkProcessProxy::addSession(WebsiteDataStore& store, SendParametersToNetworkProcess sendParametersToNetworkProcess) 1335 { 1336 auto addResult = m_websiteDataStores.add(store); 1337 if (!addResult.isNewEntry) 1338 return; 1339 1340 if (canSendMessage() && sendParametersToNetworkProcess == SendParametersToNetworkProcess::Yes) 1335 1341 send(Messages::NetworkProcess::AddWebsiteDataStore { store.parameters() }, 0); 1336 1342 auto sessionID = store.sessionID(); -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r274172 r274186 222 222 #endif 223 223 224 void addSession(WebsiteDataStore&); 224 enum class SendParametersToNetworkProcess : bool { No, Yes }; 225 void addSession(WebsiteDataStore&, SendParametersToNetworkProcess); 225 226 void removeSession(WebsiteDataStore&); 226 227 -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r274130 r274186 209 209 if (!m_networkProcess) { 210 210 m_networkProcess = networkProcessForSession(m_sessionID); 211 m_networkProcess->addSession(*this );211 m_networkProcess->addSession(*this, NetworkProcessProxy::SendParametersToNetworkProcess::Yes); 212 212 } 213 213 … … 1911 1911 } 1912 1912 1913 Vector<WebsiteDataStoreParameters> WebsiteDataStore::parametersFromEachWebsiteDataStore() 1914 { 1915 Vector<WebsiteDataStoreParameters> parameters; 1916 parameters.reserveInitialCapacity(allDataStores().size()); 1917 for (auto* dataStore : allDataStores().values()) 1918 parameters.uncheckedAppend(dataStore->parameters()); 1919 return parameters; 1920 } 1921 1913 1922 WebsiteDataStoreParameters WebsiteDataStore::parameters() 1914 1923 { -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
r273941 r274186 259 259 260 260 WebsiteDataStoreParameters parameters(); 261 static Vector<WebsiteDataStoreParameters> parametersFromEachWebsiteDataStore(); 261 262 262 263 void flushCookies(CompletionHandler<void()>&&);
Note:
See TracChangeset
for help on using the changeset viewer.