Changeset 267763 in webkit
- Timestamp:
- Sep 29, 2020, 2:43:46 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 88 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r267762 r267763 1 2020-09-29 Tim Horton <timothy_horton@apple.com>2 3 Enable the Web Share Level 2 feature wherever Web Share is enabled4 https://bugs.webkit.org/show_bug.cgi?id=2171055 6 Reviewed by Beth Dakin.7 8 No new tests; there are already tests that enable this.9 10 * Shared/WebPreferencesExperimental.yaml:11 12 2020-09-29 Aditya Keerthi <akeerthi@apple.com>13 14 [macCatalyst] Focus rings are not painted15 https://bugs.webkit.org/show_bug.cgi?id=21707316 <rdar://problem/46794111>17 18 Reviewed by Darin Adler.19 20 * UIProcess/Cocoa/WebProcessPoolCocoa.mm:21 (WebKit::WebProcessPool::platformInitializeWebProcess):22 23 Ensure that a default focus ring color is specified on macCatalyst.24 25 1 2020-09-29 Alex Christensen <achristensen@webkit.org> 26 27 Remove plist-based ResourceLoadStatistics storage, which has been replaced by database-based storage28 https://bugs.webkit.org/show_bug.cgi?id=21706329 30 Reviewed by John Wilander.31 32 * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:33 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:34 (WebKit::ResourceLoadStatisticsMemoryStore::setPersistentStorage): Deleted.35 (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageIfNeeded): Deleted.36 (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageImmediately): Deleted.37 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:38 * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp: Removed.39 * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h: Removed.40 * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:41 (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):42 (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData):43 * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:44 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:45 (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):46 (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):47 (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):48 (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk):49 (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):50 (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore): Deleted.51 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:52 * NetworkProcess/NetworkProcess.cpp:53 (WebKit::NetworkProcess::didClose):54 (WebKit::NetworkProcess::initializeNetworkProcess):55 (WebKit::NetworkProcess::setUseITPDatabase): Deleted.56 * NetworkProcess/NetworkProcess.h:57 (WebKit::NetworkProcess::isITPDatabaseEnabled const): Deleted.58 * NetworkProcess/NetworkProcess.messages.in:59 * NetworkProcess/NetworkProcessCreationParameters.cpp:60 (WebKit::NetworkProcessCreationParameters::encode const):61 (WebKit::NetworkProcessCreationParameters::decode):62 * NetworkProcess/NetworkProcessCreationParameters.h:63 * NetworkProcess/NetworkSession.cpp:64 (WebKit::NetworkSession::destroyResourceLoadStatistics):65 (WebKit::NetworkSession::flushAndDestroyPersistentStore): Deleted.66 * NetworkProcess/NetworkSession.h:67 * Shared/WebPreferencesInternal.yaml:68 * Sources.txt:69 * SourcesCocoa.txt:70 * UIProcess/API/C/WKPreferences.cpp:71 (WKPreferencesSetIsITPDatabaseEnabled): Deleted.72 (WKPreferencesGetIsITPDatabaseEnabled): Deleted.73 * UIProcess/API/C/WKPreferencesRef.h:74 * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:75 (WKWebsiteDataStoreStatisticsResetToConsistentState):76 (WKWebsiteDataStoreSetUseITPDatabase): Deleted.77 * UIProcess/API/C/WKWebsiteDataStoreRef.h:78 * UIProcess/API/Cocoa/WKPreferences.mm:79 (-[WKPreferences _isITPDatabaseEnabled]): Deleted.80 * UIProcess/API/Cocoa/WKPreferencesPrivate.h:81 * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:82 (-[WKWebsiteDataStore _setUseITPDatabase:completionHandler:]): Deleted.83 * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:84 * UIProcess/Cocoa/WebProcessPoolCocoa.mm:85 (WebKit::WebProcessPool::platformInitializeNetworkProcess):86 * UIProcess/Network/NetworkProcessProxy.cpp:87 (WebKit::NetworkProcessProxy::setUseITPDatabase): Deleted.88 * UIProcess/Network/NetworkProcessProxy.h:89 * UIProcess/WebsiteData/WebsiteDataStore.cpp:90 (WebKit::WebsiteDataStore::setUseITPDatabase): Deleted.91 * UIProcess/WebsiteData/WebsiteDataStore.h:92 * UIProcess/ios/ResourceLoadStatisticsPersistentStorageIOS.mm: Removed.93 * WebKit.xcodeproj/project.pbxproj:94 95 2020-09-29 Chris Dumez <cdumez@apple.com>96 97 Add stubs for AudioWorklet98 https://bugs.webkit.org/show_bug.cgi?id=21705999 100 Reviewed by Eric Carlson.101 102 Add experimental feature flag for AudioWorklet API.103 104 * Shared/WebPreferencesExperimental.yaml:105 106 2020-09-29 Per Arne Vollan <pvollan@apple.com>107 108 [macOS] Deny access to 'com.apple.awdd' in the WebContent sandbox109 https://bugs.webkit.org/show_bug.cgi?id=216975110 111 Reviewed by Darin Adler.112 113 This has already been done on iOS in <https://trac.webkit.org/changeset/254376>, and should be done on macOS as well.114 115 * WebProcess/com.apple.WebProcess.sb.in:116 117 2020-09-29 Carlos Garcia Campos <cgarcia@igalia.com>118 119 [GTK] Stop using the default website data store for the inspector120 https://bugs.webkit.org/show_bug.cgi?id=217034121 122 Reviewed by Michael Catanzaro.123 124 The GTK should never use the default website data store. Use a dedicated website data store for the inspector125 with its own configuration to store persistent data.126 127 * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:128 (WebKit::inspectorWebsiteDataStore):129 (WebKit::WebInspectorProxy::platformCreateFrontendPage):130 131 2020-09-28 Peng Liu <peng.liu6@apple.com>132 133 [Media in GPU Process] Use VideoLayerManager to manage layers of MediaPlayerPrivateRemote134 https://bugs.webkit.org/show_bug.cgi?id=216995135 136 Reviewed by Eric Carlson.137 138 This patch removes the remote hosting layer in the GPU process for video fullscreen and139 picture-in-picture. We don't need to keep a layer in the GPU process for video fullscreen140 and picture-in-picture because no rendering will be done for that layer. We don't need141 EnterFullscreen, ExitFullscreen and SetVideoFullscreenFrameFenced IPC messages after removing142 the layer because the RemoteMediaPlayerPrivateRemote in the web process can deal with143 the video presentation mode change.144 145 * GPUProcess/media/RemoteMediaPlayerProxy.h:146 * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:147 * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:148 (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):149 (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted.150 (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted.151 (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenFrameFenced): Deleted.152 Remove unused IPC messages after removing the remote hosting layer for video fullscreen153 and picture-in-picture.154 155 * GPUProcess/media/gstreamer/RemoteMediaPlayerProxyGStreamer.cpp:156 (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):157 (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted.158 (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted.159 Ditto.160 161 * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:162 (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):163 (WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote):164 (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):165 Remove the code related to the remote hosting layer for video fullscreen and picture-in-picture.166 (WebKit::MediaPlayerPrivateRemote::platformLayer const):167 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenLayer):168 Use VideoLayerManager to manage the layer.169 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Ditto.170 (WebKit::MediaPlayerPrivateRemote::requiresTextTrackRepresentation const): Ditto.171 (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Ditto.172 (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Ditto.173 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrameFenced): Deleted.174 * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:175 Need to move the Logger up in the data members so that other members can use it176 in the constructor, e.g., VideoLayerManager.177 178 * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:179 (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):180 (WebKit::MediaPlayerPrivateRemote::createVideoFullscreenLayer):181 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Deleted.182 (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Deleted.183 (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Deleted.184 Simplify the implementation by managing layers with VideoLayerManager.185 186 2020-09-28 Eric Carlson <eric.carlson@apple.com>187 188 [GPUP] Out-of-band TextTracks189 https://bugs.webkit.org/show_bug.cgi?id=217062190 <rdar://problem/68739969>191 192 Reviewed by Jer Noble.193 194 * GPUProcess/media/RemoteMediaPlayerProxy.cpp:195 (WebKit::RemoteMediaPlayerProxy::outOfBandTrackSources):196 * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h:197 (WebKit::RemoteMediaPlayerProxyConfiguration::encode const):198 (WebKit::RemoteMediaPlayerProxyConfiguration::decode):199 * Scripts/webkit/messages.py:200 * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:201 (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):202 * WebProcess/GPU/media/RemoteMediaPlayerManager.h:203 204 2020-09-28 Devin Rousso <drousso@apple.com>205 206 [iOS] unable to airplay directly loaded fullscreen video207 https://bugs.webkit.org/show_bug.cgi?id=216858208 <rdar://problem/68746321>209 210 Reviewed by Eric Carlson.211 212 It's possible that `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` is queried before a213 "real" `MediaPlayerPrivate` (i.e. not `NullMediaPlayerPrivate`) is initialized through one214 of the registered `MediaPlayerFactory` "engine"s. It's further possible that the value215 returned by `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` will change as the new216 "real" `MediaPlayerPrivate` may have different logic. In this case, the `MediaPlayer`217 doesn't update its client (and therefore nothing "up" the tree, including the client's218 clients) with the new `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` value, meaning219 that the old value will still be used.220 221 Add piping such that when the `MediaPlayerFactory` "engine" changes, the `MediaPlayer`222 notifies its client (which is further piped "up" the tree to the client's clients) which223 eventually causes `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` to be re-evaluated.224 225 * WebProcess/WebCoreSupport/WebChromeClient.h:226 * WebProcess/WebCoreSupport/WebChromeClient.cpp:227 (WebKit::WebChromeClient::playbackControlsMediaEngineChanged): Added.228 * WebProcess/cocoa/PlaybackSessionManager.h:229 * WebProcess/cocoa/PlaybackSessionManager.mm:230 (WebKit::PlaybackSessionManager::mediaEngineChanged): Added.231 232 * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:233 * UIProcess/API/Cocoa/WKWebViewTesting.mm:234 (-[WKWebView _wirelessVideoPlaybackDisabled]): Added.235 * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:236 * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:237 (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabled): Added.238 Create additional functions for piping data to tests.239 240 2020-09-28 Youenn Fablet <youenn@apple.com>241 242 Make sure our calls to AVCaptureDevice requestAccessForMediaType do processing on the main thread243 https://bugs.webkit.org/show_bug.cgi?id=216974244 245 Reviewed by Darin Adler.246 247 The completion handler to [AVCaptureDeviceClass requestAccessForMediaType:] may sometimes be called in a background thread on iOS.248 Make sure to hop to the main thread if that is the case.249 Also make sure to ref/weakref lambda captured variables.250 251 * UIProcess/Cocoa/UIDelegate.h:252 * UIProcess/Cocoa/UIDelegate.mm:253 (WebKit::requestAccessForMediaType):254 (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):255 256 2020-09-27 Lauro Moura <lmoura@igalia.com>257 258 REGRESSION(r267688) [GTK] Many compositing timeouts259 https://bugs.webkit.org/show_bug.cgi?id=217044260 261 Reviewed by Darin Adler.262 263 Especulative fix by adding missing finalize step to264 updateRendering (or calling isolatedUpdateRendering).265 266 Covered by existing tests.267 268 * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:269 (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):270 Call finalizeUpdateRendering.271 (WebKit::DrawingAreaCoordinatedGraphics::display): Ditto.272 * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp:273 (WebKit::LayerTreeHost::flushAndRenderLayers): Call274 isolatedUpdateRendering instead of updateRendering on the corePage().275 276 2020-09-25 Simon Fraser <simon.fraser@apple.com>277 278 WebKitLegacy should call Page::finalizeRenderingUpdate()279 https://bugs.webkit.org/show_bug.cgi?id=216958280 281 Reviewed by Tim Horton.282 283 dynamicViewportSizeUpdate() needs to call isolatedUpdateRendering() because it isn't followed284 by a finalizeRenderingUpdate().285 286 * WebProcess/WebPage/ios/WebPageIOS.mm:287 (WebKit::WebPage::dynamicViewportSizeUpdate):288 289 2020-09-27 Carlos Garcia Campos <cgarcia@igalia.com>290 291 [SOUP] WebSocket: cookies set in request don't appear in the inspector292 https://bugs.webkit.org/show_bug.cgi?id=217012293 294 Reviewed by Michael Catanzaro.295 296 Cookies are set by libsoup and we are notifying about the handshake being sent before the cookie header is added297 to the request.298 299 * NetworkProcess/soup/WebSocketTaskSoup.cpp:300 (WebKit::WebSocketTask::WebSocketTask): Connect to SoupMessage::starting to notify the web process the handshake301 request has been sent.302 303 2020-09-26 Carlos Garcia Campos <cgarcia@igalia.com>304 305 [SOUP] Do not set site for cookies twice in case of redirection306 https://bugs.webkit.org/show_bug.cgi?id=217010307 308 Reviewed by Michael Catanzaro.309 310 ResourceRequest::updateSoupMessage() already fills the same site information, but we are duplicating the code in311 NetworkDataTaskSoup::continueHTTPRedirection().312 313 * NetworkProcess/soup/NetworkDataTaskSoup.cpp:314 (WebKit::NetworkDataTaskSoup::continueHTTPRedirection): Do not set same site information here, it will be done315 again in NetworkDataTaskSoup::createRequest().316 317 2020-09-25 Hoa Dinh <dvh@apple.com>318 319 Add -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:] to provide a way to allow app link320 https://bugs.webkit.org/show_bug.cgi?id=216977321 322 Reviewed by Alex Christensen.323 324 The method -[WKWebView _loadRequest:shouldOpenExternalURLs:] would only allow opening external or not.325 It wasn't providing the ability to allow external URL but not app links.326 This patch adds -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]. The parameters value for327 shouldOpenExternalURLsPolicy has the same meaning than WebCore::ShouldOpenExternalURLsPolicy.328 329 * UIProcess/API/Cocoa/WKWebView.mm:330 (-[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]):331 * UIProcess/API/Cocoa/WKWebViewPrivate.h: Added enum _WKShouldOpenExternalURLsPolicy,332 333 2020-09-25 Alex Christensen <achristensen@webkit.org>334 335 Unreviewed, reverting r267608.336 337 Caused API test failures338 339 Reverted changeset:340 341 "Move NetworkProcessProxy ownership from WebProcessPool to342 WebsiteDataStore"343 https://bugs.webkit.org/show_bug.cgi?id=216041344 https://trac.webkit.org/changeset/267608345 346 2020-09-25 Tim Horton <timothy_horton@apple.com>347 348 Crunchyroll playback controls do not work on iPad with trackpad349 https://bugs.webkit.org/show_bug.cgi?id=217000350 <rdar://problem/66362029>351 352 Reviewed by Wenson Hsieh.353 354 * UIProcess/ios/WKContentViewInteraction.mm:355 (applicationIsKnownToIgnoreMouseEvents):356 Add it to the list.357 358 2020-09-25 Alex Christensen <achristensen@webkit.org>359 2 360 3 Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore … … 771 414 * WebProcess/Network/NetworkProcessConnectionInfo.h: 772 415 416 2020-09-29 Tim Horton <timothy_horton@apple.com> 417 418 Enable the Web Share Level 2 feature wherever Web Share is enabled 419 https://bugs.webkit.org/show_bug.cgi?id=217105 420 421 Reviewed by Beth Dakin. 422 423 No new tests; there are already tests that enable this. 424 425 * Shared/WebPreferencesExperimental.yaml: 426 427 2020-09-29 Aditya Keerthi <akeerthi@apple.com> 428 429 [macCatalyst] Focus rings are not painted 430 https://bugs.webkit.org/show_bug.cgi?id=217073 431 <rdar://problem/46794111> 432 433 Reviewed by Darin Adler. 434 435 * UIProcess/Cocoa/WebProcessPoolCocoa.mm: 436 (WebKit::WebProcessPool::platformInitializeWebProcess): 437 438 Ensure that a default focus ring color is specified on macCatalyst. 439 440 2020-09-29 Alex Christensen <achristensen@webkit.org> 441 442 Remove plist-based ResourceLoadStatistics storage, which has been replaced by database-based storage 443 https://bugs.webkit.org/show_bug.cgi?id=217063 444 445 Reviewed by John Wilander. 446 447 * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h: 448 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp: 449 (WebKit::ResourceLoadStatisticsMemoryStore::setPersistentStorage): Deleted. 450 (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageIfNeeded): Deleted. 451 (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageImmediately): Deleted. 452 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h: 453 * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp: Removed. 454 * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h: Removed. 455 * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp: 456 (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords): 457 (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData): 458 * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h: 459 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp: 460 (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore): 461 (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore): 462 (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession): 463 (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk): 464 (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent): 465 (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore): Deleted. 466 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h: 467 * NetworkProcess/NetworkProcess.cpp: 468 (WebKit::NetworkProcess::didClose): 469 (WebKit::NetworkProcess::initializeNetworkProcess): 470 (WebKit::NetworkProcess::setUseITPDatabase): Deleted. 471 * NetworkProcess/NetworkProcess.h: 472 (WebKit::NetworkProcess::isITPDatabaseEnabled const): Deleted. 473 * NetworkProcess/NetworkProcess.messages.in: 474 * NetworkProcess/NetworkProcessCreationParameters.cpp: 475 (WebKit::NetworkProcessCreationParameters::encode const): 476 (WebKit::NetworkProcessCreationParameters::decode): 477 * NetworkProcess/NetworkProcessCreationParameters.h: 478 * NetworkProcess/NetworkSession.cpp: 479 (WebKit::NetworkSession::destroyResourceLoadStatistics): 480 (WebKit::NetworkSession::flushAndDestroyPersistentStore): Deleted. 481 * NetworkProcess/NetworkSession.h: 482 * Shared/WebPreferencesInternal.yaml: 483 * Sources.txt: 484 * SourcesCocoa.txt: 485 * UIProcess/API/C/WKPreferences.cpp: 486 (WKPreferencesSetIsITPDatabaseEnabled): Deleted. 487 (WKPreferencesGetIsITPDatabaseEnabled): Deleted. 488 * UIProcess/API/C/WKPreferencesRef.h: 489 * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: 490 (WKWebsiteDataStoreStatisticsResetToConsistentState): 491 (WKWebsiteDataStoreSetUseITPDatabase): Deleted. 492 * UIProcess/API/C/WKWebsiteDataStoreRef.h: 493 * UIProcess/API/Cocoa/WKPreferences.mm: 494 (-[WKPreferences _isITPDatabaseEnabled]): Deleted. 495 * UIProcess/API/Cocoa/WKPreferencesPrivate.h: 496 * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: 497 (-[WKWebsiteDataStore _setUseITPDatabase:completionHandler:]): Deleted. 498 * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: 499 * UIProcess/Cocoa/WebProcessPoolCocoa.mm: 500 (WebKit::WebProcessPool::platformInitializeNetworkProcess): 501 * UIProcess/Network/NetworkProcessProxy.cpp: 502 (WebKit::NetworkProcessProxy::setUseITPDatabase): Deleted. 503 * UIProcess/Network/NetworkProcessProxy.h: 504 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 505 (WebKit::WebsiteDataStore::setUseITPDatabase): Deleted. 506 * UIProcess/WebsiteData/WebsiteDataStore.h: 507 * UIProcess/ios/ResourceLoadStatisticsPersistentStorageIOS.mm: Removed. 508 * WebKit.xcodeproj/project.pbxproj: 509 510 2020-09-29 Chris Dumez <cdumez@apple.com> 511 512 Add stubs for AudioWorklet 513 https://bugs.webkit.org/show_bug.cgi?id=217059 514 515 Reviewed by Eric Carlson. 516 517 Add experimental feature flag for AudioWorklet API. 518 519 * Shared/WebPreferencesExperimental.yaml: 520 521 2020-09-29 Per Arne Vollan <pvollan@apple.com> 522 523 [macOS] Deny access to 'com.apple.awdd' in the WebContent sandbox 524 https://bugs.webkit.org/show_bug.cgi?id=216975 525 526 Reviewed by Darin Adler. 527 528 This has already been done on iOS in <https://trac.webkit.org/changeset/254376>, and should be done on macOS as well. 529 530 * WebProcess/com.apple.WebProcess.sb.in: 531 532 2020-09-29 Carlos Garcia Campos <cgarcia@igalia.com> 533 534 [GTK] Stop using the default website data store for the inspector 535 https://bugs.webkit.org/show_bug.cgi?id=217034 536 537 Reviewed by Michael Catanzaro. 538 539 The GTK should never use the default website data store. Use a dedicated website data store for the inspector 540 with its own configuration to store persistent data. 541 542 * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp: 543 (WebKit::inspectorWebsiteDataStore): 544 (WebKit::WebInspectorProxy::platformCreateFrontendPage): 545 546 2020-09-28 Peng Liu <peng.liu6@apple.com> 547 548 [Media in GPU Process] Use VideoLayerManager to manage layers of MediaPlayerPrivateRemote 549 https://bugs.webkit.org/show_bug.cgi?id=216995 550 551 Reviewed by Eric Carlson. 552 553 This patch removes the remote hosting layer in the GPU process for video fullscreen and 554 picture-in-picture. We don't need to keep a layer in the GPU process for video fullscreen 555 and picture-in-picture because no rendering will be done for that layer. We don't need 556 EnterFullscreen, ExitFullscreen and SetVideoFullscreenFrameFenced IPC messages after removing 557 the layer because the RemoteMediaPlayerPrivateRemote in the web process can deal with 558 the video presentation mode change. 559 560 * GPUProcess/media/RemoteMediaPlayerProxy.h: 561 * GPUProcess/media/RemoteMediaPlayerProxy.messages.in: 562 * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm: 563 (WebKit::RemoteMediaPlayerProxy::prepareForPlayback): 564 (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted. 565 (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted. 566 (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenFrameFenced): Deleted. 567 Remove unused IPC messages after removing the remote hosting layer for video fullscreen 568 and picture-in-picture. 569 570 * GPUProcess/media/gstreamer/RemoteMediaPlayerProxyGStreamer.cpp: 571 (WebKit::RemoteMediaPlayerProxy::prepareForPlayback): 572 (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted. 573 (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted. 574 Ditto. 575 576 * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: 577 (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote): 578 (WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote): 579 (WebKit::MediaPlayerPrivateRemote::prepareForPlayback): 580 Remove the code related to the remote hosting layer for video fullscreen and picture-in-picture. 581 (WebKit::MediaPlayerPrivateRemote::platformLayer const): 582 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenLayer): 583 Use VideoLayerManager to manage the layer. 584 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Ditto. 585 (WebKit::MediaPlayerPrivateRemote::requiresTextTrackRepresentation const): Ditto. 586 (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Ditto. 587 (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Ditto. 588 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrameFenced): Deleted. 589 * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: 590 Need to move the Logger up in the data members so that other members can use it 591 in the constructor, e.g., VideoLayerManager. 592 593 * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm: 594 (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote): 595 (WebKit::MediaPlayerPrivateRemote::createVideoFullscreenLayer): 596 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Deleted. 597 (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Deleted. 598 (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Deleted. 599 Simplify the implementation by managing layers with VideoLayerManager. 600 601 2020-09-28 Eric Carlson <eric.carlson@apple.com> 602 603 [GPUP] Out-of-band TextTracks 604 https://bugs.webkit.org/show_bug.cgi?id=217062 605 <rdar://problem/68739969> 606 607 Reviewed by Jer Noble. 608 609 * GPUProcess/media/RemoteMediaPlayerProxy.cpp: 610 (WebKit::RemoteMediaPlayerProxy::outOfBandTrackSources): 611 * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h: 612 (WebKit::RemoteMediaPlayerProxyConfiguration::encode const): 613 (WebKit::RemoteMediaPlayerProxyConfiguration::decode): 614 * Scripts/webkit/messages.py: 615 * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp: 616 (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer): 617 * WebProcess/GPU/media/RemoteMediaPlayerManager.h: 618 619 2020-09-28 Devin Rousso <drousso@apple.com> 620 621 [iOS] unable to airplay directly loaded fullscreen video 622 https://bugs.webkit.org/show_bug.cgi?id=216858 623 <rdar://problem/68746321> 624 625 Reviewed by Eric Carlson. 626 627 It's possible that `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` is queried before a 628 "real" `MediaPlayerPrivate` (i.e. not `NullMediaPlayerPrivate`) is initialized through one 629 of the registered `MediaPlayerFactory` "engine"s. It's further possible that the value 630 returned by `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` will change as the new 631 "real" `MediaPlayerPrivate` may have different logic. In this case, the `MediaPlayer` 632 doesn't update its client (and therefore nothing "up" the tree, including the client's 633 clients) with the new `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` value, meaning 634 that the old value will still be used. 635 636 Add piping such that when the `MediaPlayerFactory` "engine" changes, the `MediaPlayer` 637 notifies its client (which is further piped "up" the tree to the client's clients) which 638 eventually causes `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` to be re-evaluated. 639 640 * WebProcess/WebCoreSupport/WebChromeClient.h: 641 * WebProcess/WebCoreSupport/WebChromeClient.cpp: 642 (WebKit::WebChromeClient::playbackControlsMediaEngineChanged): Added. 643 * WebProcess/cocoa/PlaybackSessionManager.h: 644 * WebProcess/cocoa/PlaybackSessionManager.mm: 645 (WebKit::PlaybackSessionManager::mediaEngineChanged): Added. 646 647 * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h: 648 * UIProcess/API/Cocoa/WKWebViewTesting.mm: 649 (-[WKWebView _wirelessVideoPlaybackDisabled]): Added. 650 * UIProcess/Cocoa/PlaybackSessionManagerProxy.h: 651 * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm: 652 (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabled): Added. 653 Create additional functions for piping data to tests. 654 655 2020-09-28 Youenn Fablet <youenn@apple.com> 656 657 Make sure our calls to AVCaptureDevice requestAccessForMediaType do processing on the main thread 658 https://bugs.webkit.org/show_bug.cgi?id=216974 659 660 Reviewed by Darin Adler. 661 662 The completion handler to [AVCaptureDeviceClass requestAccessForMediaType:] may sometimes be called in a background thread on iOS. 663 Make sure to hop to the main thread if that is the case. 664 Also make sure to ref/weakref lambda captured variables. 665 666 * UIProcess/Cocoa/UIDelegate.h: 667 * UIProcess/Cocoa/UIDelegate.mm: 668 (WebKit::requestAccessForMediaType): 669 (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): 670 671 2020-09-27 Lauro Moura <lmoura@igalia.com> 672 673 REGRESSION(r267688) [GTK] Many compositing timeouts 674 https://bugs.webkit.org/show_bug.cgi?id=217044 675 676 Reviewed by Darin Adler. 677 678 Especulative fix by adding missing finalize step to 679 updateRendering (or calling isolatedUpdateRendering). 680 681 Covered by existing tests. 682 683 * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp: 684 (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState): 685 Call finalizeUpdateRendering. 686 (WebKit::DrawingAreaCoordinatedGraphics::display): Ditto. 687 * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp: 688 (WebKit::LayerTreeHost::flushAndRenderLayers): Call 689 isolatedUpdateRendering instead of updateRendering on the corePage(). 690 691 2020-09-25 Simon Fraser <simon.fraser@apple.com> 692 693 WebKitLegacy should call Page::finalizeRenderingUpdate() 694 https://bugs.webkit.org/show_bug.cgi?id=216958 695 696 Reviewed by Tim Horton. 697 698 dynamicViewportSizeUpdate() needs to call isolatedUpdateRendering() because it isn't followed 699 by a finalizeRenderingUpdate(). 700 701 * WebProcess/WebPage/ios/WebPageIOS.mm: 702 (WebKit::WebPage::dynamicViewportSizeUpdate): 703 704 2020-09-27 Carlos Garcia Campos <cgarcia@igalia.com> 705 706 [SOUP] WebSocket: cookies set in request don't appear in the inspector 707 https://bugs.webkit.org/show_bug.cgi?id=217012 708 709 Reviewed by Michael Catanzaro. 710 711 Cookies are set by libsoup and we are notifying about the handshake being sent before the cookie header is added 712 to the request. 713 714 * NetworkProcess/soup/WebSocketTaskSoup.cpp: 715 (WebKit::WebSocketTask::WebSocketTask): Connect to SoupMessage::starting to notify the web process the handshake 716 request has been sent. 717 718 2020-09-26 Carlos Garcia Campos <cgarcia@igalia.com> 719 720 [SOUP] Do not set site for cookies twice in case of redirection 721 https://bugs.webkit.org/show_bug.cgi?id=217010 722 723 Reviewed by Michael Catanzaro. 724 725 ResourceRequest::updateSoupMessage() already fills the same site information, but we are duplicating the code in 726 NetworkDataTaskSoup::continueHTTPRedirection(). 727 728 * NetworkProcess/soup/NetworkDataTaskSoup.cpp: 729 (WebKit::NetworkDataTaskSoup::continueHTTPRedirection): Do not set same site information here, it will be done 730 again in NetworkDataTaskSoup::createRequest(). 731 732 2020-09-25 Hoa Dinh <dvh@apple.com> 733 734 Add -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:] to provide a way to allow app link 735 https://bugs.webkit.org/show_bug.cgi?id=216977 736 737 Reviewed by Alex Christensen. 738 739 The method -[WKWebView _loadRequest:shouldOpenExternalURLs:] would only allow opening external or not. 740 It wasn't providing the ability to allow external URL but not app links. 741 This patch adds -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]. The parameters value for 742 shouldOpenExternalURLsPolicy has the same meaning than WebCore::ShouldOpenExternalURLsPolicy. 743 744 * UIProcess/API/Cocoa/WKWebView.mm: 745 (-[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]): 746 * UIProcess/API/Cocoa/WKWebViewPrivate.h: Added enum _WKShouldOpenExternalURLsPolicy, 747 748 2020-09-25 Alex Christensen <achristensen@webkit.org> 749 750 Unreviewed, reverting r267608. 751 752 Caused API test failures 753 754 Reverted changeset: 755 756 "Move NetworkProcessProxy ownership from WebProcessPool to 757 WebsiteDataStore" 758 https://bugs.webkit.org/show_bug.cgi?id=216041 759 https://trac.webkit.org/changeset/267608 760 761 2020-09-25 Tim Horton <timothy_horton@apple.com> 762 763 Crunchyroll playback controls do not work on iPad with trackpad 764 https://bugs.webkit.org/show_bug.cgi?id=217000 765 <rdar://problem/66362029> 766 767 Reviewed by Wenson Hsieh. 768 769 * UIProcess/ios/WKContentViewInteraction.mm: 770 (applicationIsKnownToIgnoreMouseEvents): 771 Add it to the list. 772 773 2020-09-25 Alex Christensen <achristensen@webkit.org> 774 775 Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore 776 https://bugs.webkit.org/show_bug.cgi?id=216041 777 778 Reviewed by Brady Eidson. 779 780 This patch moves the things on WebProcessPool associated with NetworkProcessProxy ownership and moves them 781 to WebsiteDataStore. It's pretty mechanical, but it reaches its fingers into a lot of things. Some comments 782 on interesting parts are below. 783 784 Why am I doing this? I'm glad you asked. 785 786 WKWebView had a fundamental cookie problem before this change. It had a WKWebsiteDataStore that could point to a cookie store on disk 787 that could be used in multiple network processes at the same time. This led to problems with cookies being received over the network 788 in those different processes being unable to be shared until they were written to disk, something that does not happen immediately, especially 789 on iOS. This problem is even worse with session cookies, which should be kept in memory and never be written to disk. Those processes 790 did not use shared memory to share the cookies. They just didn't share them, which led to cookie incorrectness. This was unfortunately 791 the default configuration if you call [[WKWebView alloc] init] more than once, which many developers do. There was also occasional cookie 792 corruption and loss from multiple processes writing cookies to the same file. All these problems can be worked around by doing what Safari does: 793 manually setting the WKProcessPool of all WKWebViewConfigurations to the same process pool to only use one network process. This is not intuitive 794 or well documented, and even though I have spent the majority of WWDC labs for the last 3 years telling developers to do it, most developers do not. 795 The default behavior should not lead to cookie incorrectness, corruption, or loss. This accomplishes that. 796 797 A bigger problem that can't really be worked around well is what we were doing in our WKHTTPCookieStore API. Many developers call setCookie:completionHandler: 798 to "log in" the user by setting a cookie, then in the completion handler, they open a WKWebView to their page and expect the cookie to be sent. Before this 799 change, we would not know which process pool to set the cookie in so we would guess. If there were no process pools, we would start writing to disk and hope 800 it writes fast enough. We can't wait for it to complete because it causes hangs like rdar://problem/66961066. This solution allows to start the network 801 process of that WebsiteDataStore and set the cookie in that process. We now know that is the only process this WebsiteDataStore will ever use. Now, users 802 will be able to actually be logged in all the time in such apps. 803 804 * NetworkProcess/Cookies/WebCookieManager.cpp: 805 (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy): 806 (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy): 807 * NetworkProcess/Cookies/WebCookieManager.h: 808 * NetworkProcess/Cookies/WebCookieManager.messages.in: 809 * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp: 810 (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): 811 * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm: 812 (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): 813 * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp: 814 (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): 815 * NetworkProcess/NetworkProcess.cpp: 816 (WebKit::NetworkProcess::initializeNetworkProcess): 817 (WebKit::NetworkProcess::ensureSession): 818 (WebKit::NetworkProcess::storageSession const): 819 (WebKit::NetworkProcess::forEachNetworkStorageSession): 820 (WebKit::NetworkProcess::defaultStorageSession const): Deleted. 821 * NetworkProcess/NetworkProcess.h: 822 * NetworkProcess/NetworkProcessCreationParameters.cpp: 823 (WebKit::NetworkProcessCreationParameters::encode const): 824 (WebKit::NetworkProcessCreationParameters::decode): 825 * NetworkProcess/NetworkProcessCreationParameters.h: 826 * NetworkProcess/WebStorage/LocalStorageDatabase.cpp: 827 (WebKit::LocalStorageDatabase::close): 828 * NetworkProcess/cocoa/NetworkProcessCocoa.mm: 829 (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa): 830 (WebKit::saveCookies): 831 (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted. 832 * NetworkProcess/curl/NetworkProcessCurl.cpp: 833 (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted. 834 * NetworkProcess/mac/RemoteNetworkingContext.mm: 835 (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession): 836 * NetworkProcess/soup/NetworkProcessSoup.cpp: 837 (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted. 838 * Platform/IPC/Attachment.h: 839 * Shared/WebsiteDataStoreParameters.cpp: 840 (WebKit::WebsiteDataStoreParameters::encode const): 841 (WebKit::WebsiteDataStoreParameters::decode): 842 * Shared/WebsiteDataStoreParameters.h: 843 * UIProcess/API/APIHTTPCookieStore.cpp: 844 (API::HTTPCookieStore::HTTPCookieStore): 845 (API::HTTPCookieStore::~HTTPCookieStore): 846 (API::HTTPCookieStore::cookies): 847 (API::HTTPCookieStore::cookiesForURL): 848 (API::HTTPCookieStore::setCookies): 849 (API::HTTPCookieStore::deleteCookie): 850 (API::HTTPCookieStore::deleteAllCookies): 851 (API::HTTPCookieStore::setHTTPCookieAcceptPolicy): 852 (API::HTTPCookieStore::registerObserver): 853 (API::HTTPCookieStore::cookieManagerDestroyed): 854 (API::HTTPCookieStore::registerForNewProcessPoolNotifications): Deleted. 855 (API::HTTPCookieStore::unregisterForNewProcessPoolNotifications): Deleted. 856 * UIProcess/API/APIHTTPCookieStore.h: 857 * UIProcess/API/C/WKContext.cpp: 858 (WKContextSetUseSeparateServiceWorkerProcess): 859 (WKContextSetPrimaryWebsiteDataStore): 860 (WKContextGetCookieManager): Deleted. 861 (WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting): Deleted. 862 (WKContextTerminateNetworkProcess): Deleted. 863 (WKContextGetNetworkProcessIdentifier): Deleted. 864 * UIProcess/API/C/WKContext.h: 865 * UIProcess/API/C/WKContextPrivate.h: 866 * UIProcess/API/C/WKPage.cpp: 867 (WKPageGetWebsiteDataStore): 868 * UIProcess/API/C/WKPage.h: 869 * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: 870 (WKWebsiteDataStoreTerminateNetworkProcess): 871 (WKWebsiteDataStoreGetNetworkProcessIdentifier): 872 * UIProcess/API/C/WKWebsiteDataStoreRef.h: 873 * UIProcess/API/Cocoa/WKProcessPool.mm: 874 (-[WKProcessPool _setUseSeparateServiceWorkerProcess:]): 875 (-[WKProcessPool _terminateNetworkProcess]): Deleted. 876 (-[WKProcessPool _sendNetworkProcessWillSuspendImminently]): Deleted. 877 (-[WKProcessPool _sendNetworkProcessPrepareToSuspend:]): Deleted. 878 (-[WKProcessPool _sendNetworkProcessDidResume]): Deleted. 879 (-[WKProcessPool _networkProcessIdentifier]): Deleted. 880 (-[WKProcessPool _makeNextNetworkProcessLaunchFailForTesting]): Deleted. 881 (-[WKProcessPool _synthesizeAppIsBackground:]): Deleted. 882 (-[WKProcessPool _setAllowsAnySSLCertificateForServiceWorker:]): Deleted. 883 (-[WKProcessPool _networkProcessHasEntitlementForTesting:]): Deleted. 884 * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: 885 * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: 886 (-[WKWebsiteDataStore _networkProcessHasEntitlementForTesting:]): 887 (-[WKWebsiteDataStore _terminateNetworkProcess]): 888 (-[WKWebsiteDataStore _sendNetworkProcessPrepareToSuspend:]): 889 (-[WKWebsiteDataStore _sendNetworkProcessWillSuspendImminently]): 890 (-[WKWebsiteDataStore _sendNetworkProcessDidResume]): 891 (-[WKWebsiteDataStore _synthesizeAppIsBackground:]): 892 (-[WKWebsiteDataStore _networkProcessIdentifier]): 893 (+[WKWebsiteDataStore _makeNextNetworkProcessLaunchFailForTesting]): 894 * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: 895 * UIProcess/API/glib/WebKitCookieManager.cpp: 896 (_WebKitCookieManagerPrivate::cookieManager const): 897 (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate): 898 (webkitCookieManagerCreate): 899 (webkit_cookie_manager_set_persistent_storage): 900 (webkit_cookie_manager_set_accept_policy): 901 (webkit_cookie_manager_get_accept_policy): 902 (webkit_cookie_manager_add_cookie): 903 (webkit_cookie_manager_get_cookies): 904 (webkit_cookie_manager_delete_cookie): 905 * UIProcess/API/glib/WebKitWebContext.cpp: 906 (webkitWebContextConstructed): 907 (webkit_web_context_prefetch_dns): 908 * UIProcess/Automation/WebAutomationSession.cpp: 909 (WebKit::WebAutomationSession::addSingleCookie): 910 (WebKit::WebAutomationSession::deleteAllCookies): 911 * UIProcess/AuxiliaryProcessProxy.h: 912 * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h: 913 * UIProcess/Cocoa/WebProcessPoolCocoa.mm: 914 (WebKit::WebProcessPool::updateProcessSuppressionState): 915 (WebKit::WebProcessPool::platformInitialize): 916 (WebKit::WebProcessPool::platformInitializeNetworkProcess): 917 (WebKit::WebProcessPool::networkProcessHasEntitlementForTesting): Deleted. 918 (WebKit::WebProcessPool::xpcEndpointMessage const): Deleted. 919 (WebKit::WebProcessPool::sendNetworkProcessXPCEndpointToWebProcess): Deleted. 920 * UIProcess/Downloads/DownloadProxy.cpp: 921 (WebKit::DownloadProxy::cancel): 922 (WebKit::DownloadProxy::publishProgress): 923 (WebKit::DownloadProxy::didReceiveAuthenticationChallenge): 924 (WebKit::DownloadProxy::willSendRequest): 925 (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync): 926 * UIProcess/Downloads/DownloadProxyMap.cpp: 927 (WebKit::DownloadProxyMap::DownloadProxyMap): 928 (WebKit::DownloadProxyMap::applicationDidEnterBackground): 929 (WebKit::DownloadProxyMap::applicationWillEnterForeground): 930 (WebKit::DownloadProxyMap::createDownloadProxy): 931 (WebKit::DownloadProxyMap::downloadFinished): 932 (WebKit::DownloadProxyMap::invalidate): 933 * UIProcess/Downloads/DownloadProxyMap.h: 934 * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp: 935 (WebKit::LegacyCustomProtocolManagerProxy::startLoading): 936 (WebKit::LegacyCustomProtocolManagerProxy::stopLoading): 937 (WebKit::LegacyCustomProtocolManagerProxy::invalidate): 938 * UIProcess/Network/NetworkProcessProxy.cpp: 939 (WebKit::NetworkProcessProxy::allNetworkProcesses): 940 (WebKit::defaultProcess): 941 (WebKit::NetworkProcessProxy::defaultNetworkProcess): 942 (WebKit::NetworkProcessProxy::terminate): 943 (WebKit::NetworkProcessProxy::didTerminate): 944 (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess): 945 (WebKit::anyProcessPoolAlwaysRunsAtBackgroundPriority): 946 (WebKit::anyProcessPoolShouldTakeUIBackgroundAssertion): 947 (WebKit::NetworkProcessProxy::NetworkProcessProxy): 948 (WebKit::NetworkProcessProxy::~NetworkProcessProxy): 949 (WebKit::NetworkProcessProxy::getLaunchOptions): 950 (WebKit::NetworkProcessProxy::createDownloadProxy): 951 (WebKit::NetworkProcessProxy::networkProcessCrashed): 952 (WebKit::NetworkProcessProxy::didReceiveMessage): 953 (WebKit::NetworkProcessProxy::didClose): 954 (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge): 955 (WebKit::NetworkProcessProxy::didFinishLaunching): 956 (WebKit::NetworkProcessProxy::setDomainsWithUserInteraction): 957 (WebKit::NetworkProcessProxy::addSession): 958 (WebKit::NetworkProcessProxy::removeSession): 959 (WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID): 960 (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess): 961 (WebKit::anyProcessPoolHasForegroundWebProcesses): 962 (WebKit::anyProcessPoolHasBackgroundWebProcesses): 963 (WebKit::NetworkProcessProxy::updateProcessAssertion): 964 (WebKit::NetworkProcessProxy::hasSession const): Deleted. 965 * UIProcess/Network/NetworkProcessProxy.h: 966 * UIProcess/Network/NetworkProcessProxyCocoa.mm: 967 (WebKit::NetworkProcessProxy::XPCEventHandler::handleXPCEvent const): 968 * UIProcess/WebCookieManagerProxy.cpp: 969 (WebKit::WebCookieManagerProxy::WebCookieManagerProxy): 970 (WebKit::WebCookieManagerProxy::~WebCookieManagerProxy): 971 (WebKit::WebCookieManagerProxy::getHostnamesWithCookies): 972 (WebKit::WebCookieManagerProxy::deleteCookiesForHostnames): 973 (WebKit::WebCookieManagerProxy::deleteAllCookies): 974 (WebKit::WebCookieManagerProxy::deleteCookie): 975 (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince): 976 (WebKit::WebCookieManagerProxy::setCookies): 977 (WebKit::WebCookieManagerProxy::getAllCookies): 978 (WebKit::WebCookieManagerProxy::getCookies): 979 (WebKit::WebCookieManagerProxy::startObservingCookieChanges): 980 (WebKit::WebCookieManagerProxy::stopObservingCookieChanges): 981 (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy): 982 (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy): 983 (WebKit::WebCookieManagerProxy::supplementName): Deleted. 984 (WebKit::WebCookieManagerProxy::create): Deleted. 985 (WebKit::WebCookieManagerProxy::processPoolDestroyed): Deleted. 986 (WebKit::WebCookieManagerProxy::processDidClose): Deleted. 987 (WebKit::WebCookieManagerProxy::refWebContextSupplement): Deleted. 988 (WebKit::WebCookieManagerProxy::derefWebContextSupplement): Deleted. 989 * UIProcess/WebCookieManagerProxy.h: 990 (WebKit::WebCookieManagerProxy::create): 991 * UIProcess/WebPageProxy.cpp: 992 (WebKit::WebPageProxy::setControlledByAutomation): 993 (WebKit::WebPageProxy::disableServiceWorkerEntitlementInNetworkProcess): 994 (WebKit::WebPageProxy::clearServiceWorkerEntitlementOverride): 995 (WebKit::WebPageProxy::preconnectTo): 996 (WebKit::WebPageProxy::didCommitLoadForFrame): 997 (WebKit::WebPageProxy::logFrameNavigation): 998 (WebKit::WebPageProxy::dumpAdClickAttribution): 999 (WebKit::WebPageProxy::clearAdClickAttribution): 1000 (WebKit::WebPageProxy::setAdClickAttributionOverrideTimerForTesting): 1001 (WebKit::WebPageProxy::setAdClickAttributionConversionURLForTesting): 1002 (WebKit::WebPageProxy::markAdClickAttributionsAsExpiredForTesting): 1003 * UIProcess/WebProcessPool.cpp: 1004 (WebKit::WebProcessPool::urlSchemesWithCustomProtocolHandlers): 1005 (WebKit::WebProcessPool::WebProcessPool): 1006 (WebKit::WebProcessPool::~WebProcessPool): 1007 (WebKit::WebProcessPool::languageChanged): 1008 (WebKit::WebProcessPool::sendMemoryPressureEvent): 1009 (WebKit::WebProcessPool::networkProcessCrashed): 1010 (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess): 1011 (WebKit::WebProcessPool::removeFromServiceWorkerProcesses): 1012 (WebKit::WebProcessPool::tryTakePrewarmedProcess): 1013 (WebKit::WebProcessPool::initializeNewWebProcess): 1014 (WebKit::WebProcessPool::processDidFinishLaunching): 1015 (WebKit::WebProcessPool::createWebPage): 1016 (WebKit::WebProcessPool::updateServiceWorkerUserAgent): 1017 (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore): 1018 (WebKit::WebProcessPool::download): 1019 (WebKit::WebProcessPool::resumeDownload): 1020 (WebKit::WebProcessPool::registerURLSchemeAsSecure): 1021 (WebKit::WebProcessPool::registerURLSchemeAsBypassingContentSecurityPolicy): 1022 (WebKit::WebProcessPool::registerURLSchemeAsLocal): 1023 (WebKit::WebProcessPool::registerURLSchemeAsNoAccess): 1024 (WebKit::WebProcessPool::registerGlobalURLSchemeAsHavingCustomProtocolHandlers): 1025 (WebKit::WebProcessPool::unregisterGlobalURLSchemeAsHavingCustomProtocolHandlers): 1026 (WebKit::WebProcessPool::setCacheModel): 1027 (WebKit::WebProcessPool::setCacheModelSynchronouslyForTesting): 1028 (WebKit::WebProcessPool::createDownloadProxy): 1029 (WebKit::WebProcessPool::terminateServiceWorkers): 1030 (WebKit::WebProcessPool::serviceWorkerProcesses): 1031 (WebKit::WebProcessPool::updateProcessAssertions): 1032 (WebKit::WebProcessPool::isServiceWorkerPageID const): 1033 (WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess): 1034 (WebKit::WebProcessPool::hasServiceWorkerForegroundActivityForTesting const): 1035 (WebKit::WebProcessPool::hasServiceWorkerBackgroundActivityForTesting const): 1036 (WebKit::WebProcessPool::setLegacyCustomProtocolManagerClient): Deleted. 1037 (WebKit::WebProcessPool::networkingProcessConnection): Deleted. 1038 (WebKit::WebProcessPool::ensureNetworkProcess): Deleted. 1039 There seems to be a lot of code removal here, but most of it was duplicate code with 1040 WebsiteDataStore::parameters which is used instead. That which was not duplicate was 1041 moved to NetworkProcessProxy::sendCreationParametersToNewProcess. This was the hardest part of this patch. 1042 (WebKit::WebProcessPool::getNetworkProcessConnection): Deleted. 1043 (WebKit::WebProcessPool::networkProcessIdentifier): Deleted. 1044 (WebKit::WebProcessPool::synthesizeAppIsBackground): Deleted. 1045 (WebKit::WebProcessPool::sendSyncToNetworkingProcess): Deleted. 1046 (WebKit::WebProcessPool::clearCachedCredentials): Deleted. 1047 (WebKit::WebProcessPool::terminateNetworkProcess): Deleted. 1048 (WebKit::WebProcessPool::sendNetworkProcessPrepareToSuspendForTesting): Deleted. 1049 (WebKit::WebProcessPool::sendNetworkProcessWillSuspendImminentlyForTesting): Deleted. 1050 (WebKit::WebProcessPool::sendNetworkProcessDidResume): Deleted. 1051 (WebKit::WebProcessPool::flushCookies): Deleted. 1052 (WebKit::WebProcessPool::didCommitCrossSiteLoadWithDataTransfer): Deleted. 1053 * UIProcess/WebProcessPool.h: 1054 (WebKit::WebProcessPool::sendToNetworkingProcess): Deleted. 1055 (WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary): Deleted. 1056 * UIProcess/WebProcessProxy.cpp: 1057 (WebKit::WebProcessProxy::setWebsiteDataStore): 1058 (WebKit::WebProcessProxy::getNetworkProcessConnection): 1059 (WebKit::WebProcessProxy::didFinishLaunching): 1060 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: 1061 (WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting): 1062 (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToWebProcess): 1063 (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToAllWebProcesses): 1064 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 1065 (WebKit::WebsiteDataStore::forEachWebsiteDataStore): 1066 (WebKit::WebsiteDataStore::WebsiteDataStore): 1067 (WebKit::WebsiteDataStore::~WebsiteDataStore): 1068 (WebKit::WebsiteDataStore::registerWithSessionIDMap): 1069 (WebKit::WebsiteDataStore::existingDataStoreForSessionID): 1070 (WebKit::WebsiteDataStore::networkProcess): 1071 (WebKit::WebsiteDataStore::networkProcess const): 1072 (WebKit::WebsiteDataStore::fetchDataAndApply): 1073 (WebKit::WebsiteDataStore::removeData): 1074 (WebKit::WebsiteDataStore::setServiceWorkerTimeoutForTesting): 1075 (WebKit::WebsiteDataStore::resetServiceWorkerTimeoutForTesting): 1076 (WebKit::WebsiteDataStore::setMaxStatisticsEntries): 1077 (WebKit::WebsiteDataStore::setPruneEntriesDownTo): 1078 (WebKit::WebsiteDataStore::setGrandfatheringTime): 1079 (WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval): 1080 (WebKit::WebsiteDataStore::dumpResourceLoadStatistics): 1081 (WebKit::WebsiteDataStore::isPrevalentResource): 1082 (WebKit::WebsiteDataStore::isGrandfathered): 1083 (WebKit::WebsiteDataStore::setPrevalentResource): 1084 (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode): 1085 (WebKit::WebsiteDataStore::isVeryPrevalentResource): 1086 (WebKit::WebsiteDataStore::setVeryPrevalentResource): 1087 (WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval): 1088 (WebKit::WebsiteDataStore::setSubframeUnderTopFrameDomain): 1089 (WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder): 1090 (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameDomain): 1091 (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder): 1092 (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo): 1093 (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom): 1094 (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo): 1095 (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom): 1096 (WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo): 1097 (WebKit::WebsiteDataStore::clearPrevalentResource): 1098 (WebKit::WebsiteDataStore::resetParametersToDefaultValues): 1099 (WebKit::WebsiteDataStore::submitTelemetry): 1100 (WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent): 1101 (WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary): 1102 (WebKit::WebsiteDataStore::scheduleCookieBlockingUpdate): 1103 (WebKit::WebsiteDataStore::scheduleStatisticsAndDataRecordsProcessing): 1104 (WebKit::WebsiteDataStore::statisticsDatabaseHasAllTables): 1105 (WebKit::WebsiteDataStore::setLastSeen): 1106 (WebKit::WebsiteDataStore::domainIDExistsInDatabase): 1107 (WebKit::WebsiteDataStore::mergeStatisticForTesting): 1108 (WebKit::WebsiteDataStore::insertExpiredStatisticForTesting): 1109 (WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned): 1110 (WebKit::WebsiteDataStore::setIsRunningResourceLoadStatisticsTest): 1111 (WebKit::WebsiteDataStore::getAllStorageAccessEntries): 1112 (WebKit::WebsiteDataStore::setTimeToLiveUserInteraction): 1113 (WebKit::WebsiteDataStore::logUserInteraction): 1114 (WebKit::WebsiteDataStore::hasHadUserInteraction): 1115 (WebKit::WebsiteDataStore::isRelationshipOnlyInDatabaseOnce): 1116 (WebKit::WebsiteDataStore::clearUserInteraction): 1117 (WebKit::WebsiteDataStore::setGrandfathered): 1118 (WebKit::WebsiteDataStore::setUseITPDatabase): 1119 (WebKit::WebsiteDataStore::setCrossSiteLoadWithLinkDecorationForTesting): 1120 (WebKit::WebsiteDataStore::resetCrossSiteLoadsWithLinkDecorationForTesting): 1121 (WebKit::WebsiteDataStore::deleteCookiesForTesting): 1122 (WebKit::WebsiteDataStore::hasLocalStorageForTesting const): 1123 (WebKit::WebsiteDataStore::hasIsolatedSessionForTesting const): 1124 (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldDowngradeReferrerForTesting): 1125 (WebKit::WebsiteDataStore::setThirdPartyCookieBlockingMode): 1126 (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting): 1127 (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting): 1128 (WebKit::WebsiteDataStore::setResourceLoadStatisticsToSameSiteStrictCookiesForTesting): 1129 (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyHostCNAMEDomainForTesting): 1130 (WebKit::WebsiteDataStore::setResourceLoadStatisticsThirdPartyCNAMEDomainForTesting): 1131 (WebKit::WebsiteDataStore::syncLocalStorage): 1132 (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources): 1133 (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources): 1134 (WebKit::WebsiteDataStore::processPools const): 1135 (WebKit::WebsiteDataStore::allowSpecificHTTPSCertificateForHost): 1136 (WebKit::WebsiteDataStore::getNetworkProcessConnection): 1137 (WebKit::WebsiteDataStore::networkProcessCrashed): 1138 (WebKit::WebsiteDataStore::terminateNetworkProcess): 1139 (WebKit::WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting): 1140 (WebKit::WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting): 1141 (WebKit::WebsiteDataStore::sendNetworkProcessDidResume): 1142 (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled): 1143 (WebKit::WebsiteDataStore::setStatisticsTestingCallback): 1144 (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode): 1145 (WebKit::WebsiteDataStore::isResourceLoadStatisticsEphemeral const): 1146 (WebKit::WebsiteDataStore::setAdClickAttributionDebugMode): 1147 (WebKit::WebsiteDataStore::flushCookies): 1148 (WebKit::WebsiteDataStore::setAllowsAnySSLCertificateForWebSocket): 1149 (WebKit::WebsiteDataStore::clearCachedCredentials): 1150 (WebKit::WebsiteDataStore::parameters): 1151 (WebKit::WebsiteDataStore::getLocalStorageDetails): 1152 (WebKit::WebsiteDataStore::resetQuota): 1153 (WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting): 1154 (WebKit::WebsiteDataStore::renameOriginInWebsiteData): 1155 (WebKit::WebsiteDataStore::hasAppBoundSession const): 1156 (WebKit::WebsiteDataStore::clearAppBoundSession): 1157 (WebKit::WebsiteDataStore::forwardAppBoundDomainsToITPIfInitialized): 1158 (WebKit::WebsiteDataStore::setAppBoundDomainsForITP): 1159 (WebKit::WebsiteDataStore::updateBundleIdentifierInNetworkProcess): 1160 (WebKit::WebsiteDataStore::clearBundleIdentifierInNetworkProcess): 1161 (WebKit::WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting): 1162 (WebKit::WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting): 1163 (WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap): Deleted. 1164 (WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID): Deleted. 1165 (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations): Deleted. 1166 (WebKit::WebsiteDataStore::isAssociatedProcessPool const): Deleted. 1167 (WebKit::WebsiteDataStore::pendingCookies const): Deleted. 1168 (WebKit::WebsiteDataStore::addPendingCookie): Deleted. 1169 (WebKit::WebsiteDataStore::removePendingCookie): Deleted. 1170 (WebKit::WebsiteDataStore::clearPendingCookies): Deleted. 1171 (WebKit::WebsiteDataStore::didCreateNetworkProcess): Deleted. 1172 * UIProcess/WebsiteData/WebsiteDataStore.h: 1173 * UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp: 1174 (WebKit::WebsiteDataStore::setNetworkProxySettings): 1175 * UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp: 1176 (WebKit::WebsiteDataStore::platformSetNetworkParameters): 1177 (WebKit::WebsiteDataStore::setPersistentCredentialStorageEnabled): 1178 * UIProcess/glib/WebProcessProxyGLib.cpp: 1179 (WebKit::WebProcessProxy::platformGetLaunchOptions): 1180 * UIProcess/soup/WebCookieManagerProxySoup.cpp: 1181 (WebKit::WebCookieManagerProxy::setCookiePersistentStorage): 1182 * UIProcess/soup/WebProcessPoolSoup.cpp: 1183 (WebKit::WebProcessPool::platformInitializeNetworkProcess): 1184 (WebKit::WebProcessPool::setIgnoreTLSErrors): 1185 (WebKit::WebProcessPool::setNetworkProxySettings): 1186 * WebProcess/Network/NetworkProcessConnectionInfo.h: 1187 773 1188 2020-09-24 Dean Jackson <dino@apple.com> 774 1189 -
trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.cpp
r267618 r267763 33 33 #include <WebCore/Cookie.h> 34 34 #include <WebCore/CookieStorage.h> 35 #include <WebCore/HTTPCookieAcceptPolicy.h> 35 36 #include <WebCore/NetworkStorageSession.h> 36 37 #include <wtf/MainThread.h> … … 144 145 void WebCookieManager::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler) 145 146 { 146 platformSetHTTPCookieAcceptPolicy(policy );147 m_process.cookieAcceptPolicyChanged(policy);148 149 completionHandler();147 platformSetHTTPCookieAcceptPolicy(policy, [policy, process = makeRef(m_process), completionHandler = WTFMove(completionHandler)] () mutable { 148 process->cookieAcceptPolicyChanged(policy); 149 completionHandler(); 150 }); 150 151 } 151 152 152 void WebCookieManager::getHTTPCookieAcceptPolicy( CompletionHandler<void(HTTPCookieAcceptPolicy)>&& completionHandler)153 void WebCookieManager::getHTTPCookieAcceptPolicy(PAL::SessionID sessionID, CompletionHandler<void(HTTPCookieAcceptPolicy)>&& completionHandler) 153 154 { 154 completionHandler(m_process.defaultStorageSession().cookieAcceptPolicy()); 155 if (auto* storageSession = m_process.storageSession(sessionID)) 156 completionHandler(storageSession->cookieAcceptPolicy()); 157 else 158 completionHandler(HTTPCookieAcceptPolicy::Never); 155 159 } 156 160 -
trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.h
r267618 r267763 37 37 #include "SoupCookiePersistentStorageType.h" 38 38 #endif 39 40 OBJC_CLASS NSHTTPCookieStorage; 39 41 40 42 namespace WebCore { … … 80 82 void getCookies(PAL::SessionID, const URL&, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&&); 81 83 82 void platformSetHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy );83 void getHTTPCookieAcceptPolicy( CompletionHandler<void(WebCore::HTTPCookieAcceptPolicy)>&&);84 void platformSetHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy, CompletionHandler<void()>&&); 85 void getHTTPCookieAcceptPolicy(PAL::SessionID, CompletionHandler<void(WebCore::HTTPCookieAcceptPolicy)>&&); 84 86 85 87 void startObservingCookieChanges(PAL::SessionID); … … 89 91 }; 90 92 93 #if PLATFORM(COCOA) 94 void saveCookies(NSHTTPCookieStorage *, CompletionHandler<void()>&&); 95 #endif 96 91 97 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.messages.in
r267618 r267763 37 37 38 38 void SetHTTPCookieAcceptPolicy(enum:uint8_t WebCore::HTTPCookieAcceptPolicy policy) -> () Async 39 void GetHTTPCookieAcceptPolicy( ) -> (enum:uint8_t WebCore::HTTPCookieAcceptPolicy policy) Async39 void GetHTTPCookieAcceptPolicy(PAL::SessionID sessionID) -> (enum:uint8_t WebCore::HTTPCookieAcceptPolicy policy) Async 40 40 41 41 void StartObservingCookieChanges(PAL::SessionID sessionID) -
trunk/Source/WebKit/NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp
r267618 r267763 35 35 using namespace WebCore; 36 36 37 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy )37 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler) 38 38 { 39 39 CookieAcceptPolicy curlPolicy = CookieAcceptPolicy::OnlyFromMainDocumentDomain; … … 56 56 networkStorageSession.setCookieAcceptPolicy(curlPolicy); 57 57 }); 58 completionHandler(); 58 59 } 59 60 -
trunk/Source/WebKit/NetworkProcess/Cookies/mac/WebCookieManagerMac.mm
r267618 r267763 32 32 #import <WebCore/NetworkStorageSession.h> 33 33 #import <pal/spi/cf/CFNetworkSPI.h> 34 #import <wtf/CallbackAggregator.h> 34 35 #import <wtf/ProcessPrivilege.h> 35 36 … … 54 55 } 55 56 56 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy )57 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler) 57 58 { 58 59 ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies)); 59 60 61 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 60 62 [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:static_cast<NSHTTPCookieAcceptPolicy>(policy)]; 63 saveCookies([NSHTTPCookieStorage sharedHTTPCookieStorage], [callbackAggregator] { }); 61 64 62 65 m_process.forEachNetworkStorageSession([&] (const auto& networkStorageSession) { 63 66 if (auto cookieStorage = networkStorageSession.cookieStorage()) 64 67 CFHTTPCookieStorageSetCookieAcceptPolicy(cookieStorage.get(), toCFHTTPCookieStorageAcceptPolicy(policy)); 68 if (auto *storage = networkStorageSession.nsCookieStorage()) 69 saveCookies(storage, [callbackAggregator] { }); 65 70 }); 66 71 } -
trunk/Source/WebKit/NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp
r267618 r267763 38 38 using namespace WebCore; 39 39 40 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy )40 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler) 41 41 { 42 42 m_process.forEachNetworkStorageSession([policy] (auto& session) { 43 43 session.setCookieAcceptPolicy(policy); 44 44 }); 45 completionHandler(); 45 46 } 46 47 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r267750 r267763 174 174 175 175 #if USE(SOUP) 176 // FIXME: Do not use the default session ID. 176 177 DNSResolveQueueSoup::setGlobalDefaultSoupSessionAccessor([this]() -> SoupSession* { 177 178 return static_cast<NetworkSessionSoup&>(*networkSession(PAL::SessionID::defaultSessionID())).soupSession(); … … 339 340 setAdClickAttributionDebugMode(parameters.enableAdClickAttributionDebugMode); 340 341 341 SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsParameters.directoryExtensionHandle);342 343 auto sessionID = parameters.defaultDataStoreParameters.networkSessionParameters.sessionID;344 setSession(sessionID, NetworkSession::create(*this, WTFMove(parameters.defaultDataStoreParameters.networkSessionParameters)));345 346 SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);347 addSessionStorageQuotaManager(sessionID, parameters.defaultDataStoreParameters.perOriginStorageQuota, parameters.defaultDataStoreParameters.perThirdPartyOriginStorageQuota, parameters.defaultDataStoreParameters.cacheStorageDirectory, parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);348 349 #if ENABLE(INDEXED_DATABASE)350 addIndexedDatabaseSession(sessionID, parameters.defaultDataStoreParameters.indexedDatabaseDirectory, parameters.defaultDataStoreParameters.indexedDatabaseDirectoryExtensionHandle);351 #endif352 353 #if ENABLE(SERVICE_WORKER)354 bool serviceWorkerProcessTerminationDelayEnabled = true;355 addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);356 #endif357 358 m_storageManagerSet->add(sessionID, parameters.defaultDataStoreParameters.localStorageDirectory, parameters.defaultDataStoreParameters.localStorageDirectoryExtensionHandle);359 360 auto* defaultSession = networkSession(PAL::SessionID::defaultSessionID());361 auto* defaultStorageSession = defaultSession->networkStorageSession();362 for (const auto& cookie : parameters.defaultDataStoreParameters.pendingCookies)363 defaultStorageSession->setCookie(cookie);364 365 342 for (auto& supplement : m_supplements.values()) 366 343 supplement->initialize(parameters); … … 497 474 #endif 498 475 { 499 ASSERT(sessionID != PAL::SessionID::defaultSessionID());500 501 476 auto addResult = m_networkStorageSessions.add(sessionID, nullptr); 502 477 if (!addResult.isNewEntry) … … 513 488 if (sessionID.isEphemeral()) 514 489 storageSession = adoptCF(createPrivateStorageSession(cfIdentifier.get())); 515 else 490 else if (sessionID != PAL::SessionID::defaultSessionID()) 516 491 storageSession = WebCore::NetworkStorageSession::createCFStorageSessionForIdentifier(cfIdentifier.get()); 517 492 … … 536 511 WebCore::NetworkStorageSession* NetworkProcess::storageSession(const PAL::SessionID& sessionID) const 537 512 { 538 if (sessionID == PAL::SessionID::defaultSessionID())539 return &defaultStorageSession();540 513 return m_networkStorageSessions.get(sessionID); 541 514 } 542 515 543 WebCore::NetworkStorageSession& NetworkProcess::defaultStorageSession() const544 {545 if (!m_defaultNetworkStorageSession)546 m_defaultNetworkStorageSession = platformCreateDefaultStorageSession();547 return *m_defaultNetworkStorageSession;548 }549 550 516 void NetworkProcess::forEachNetworkStorageSession(const Function<void(WebCore::NetworkStorageSession&)>& functor) 551 517 { 552 functor(defaultStorageSession());553 518 for (auto& storageSession : m_networkStorageSessions.values()) 554 519 functor(*storageSession); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r267750 r267763 171 171 void forEachNetworkStorageSession(const Function<void(WebCore::NetworkStorageSession&)>&); 172 172 WebCore::NetworkStorageSession* storageSession(const PAL::SessionID&) const; 173 WebCore::NetworkStorageSession& defaultStorageSession() const;174 173 std::unique_ptr<WebCore::NetworkStorageSession> newTestingSession(const PAL::SessionID&); 175 174 #if PLATFORM(COCOA) … … 374 373 private: 375 374 void platformInitializeNetworkProcess(const NetworkProcessCreationParameters&); 376 std::unique_ptr<WebCore::NetworkStorageSession> platformCreateDefaultStorageSession() const;377 375 378 376 void didReceiveNetworkProcessMessage(IPC::Connection&, IPC::Decoder&); … … 543 541 HashMap<PAL::SessionID, std::unique_ptr<NetworkSession>> m_networkSessions; 544 542 HashMap<PAL::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>> m_networkStorageSessions; 545 mutable std::unique_ptr<WebCore::NetworkStorageSession> m_defaultNetworkStorageSession;546 543 547 544 RefPtr<StorageManagerSet> m_storageManagerSet; -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp
r267750 r267763 56 56 IPC::encode(encoder, networkATSContext.get()); 57 57 #endif 58 encoder << defaultDataStoreParameters;59 58 #if USE(SOUP) 60 59 encoder << cookieAcceptPolicy; … … 67 66 encoder << urlSchemesRegisteredAsNoAccess; 68 67 69 #if ENABLE(SERVICE_WORKER)70 encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle << shouldDisableServiceWorkerProcessTerminationDelay;71 #endif72 68 encoder << enableAdClickAttributionDebugMode; 73 69 } … … 114 110 #endif 115 111 116 Optional<WebsiteDataStoreParameters> defaultDataStoreParameters;117 decoder >> defaultDataStoreParameters;118 if (!defaultDataStoreParameters)119 return false;120 result.defaultDataStoreParameters = WTFMove(*defaultDataStoreParameters);121 122 112 #if USE(SOUP) 123 113 if (!decoder.decode(result.cookieAcceptPolicy)) … … 136 126 return false; 137 127 138 #if ENABLE(SERVICE_WORKER)139 if (!decoder.decode(result.serviceWorkerRegistrationDirectory))140 return false;141 142 Optional<SandboxExtension::Handle> serviceWorkerRegistrationDirectoryExtensionHandle;143 decoder >> serviceWorkerRegistrationDirectoryExtensionHandle;144 if (!serviceWorkerRegistrationDirectoryExtensionHandle)145 return false;146 result.serviceWorkerRegistrationDirectoryExtensionHandle = WTFMove(*serviceWorkerRegistrationDirectoryExtensionHandle);147 148 if (!decoder.decode(result.shouldDisableServiceWorkerProcessTerminationDelay))149 return false;150 #endif151 152 128 if (!decoder.decode(result.enableAdClickAttributionDebugMode)) 153 129 return false; -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h
r267750 r267763 28 28 #include "CacheModel.h" 29 29 #include "SandboxExtension.h" 30 #include "WebsiteDataStoreParameters.h"31 30 #include <WebCore/Cookie.h> 32 31 #include <wtf/ProcessID.h> … … 71 70 #endif 72 71 73 WebsiteDataStoreParameters defaultDataStoreParameters;74 75 72 #if USE(SOUP) 76 73 WebCore::HTTPCookieAcceptPolicy cookieAcceptPolicy { WebCore::HTTPCookieAcceptPolicy::AlwaysAccept }; … … 83 80 Vector<String> urlSchemesRegisteredAsNoAccess; 84 81 85 #if ENABLE(SERVICE_WORKER)86 String serviceWorkerRegistrationDirectory;87 SandboxExtension::Handle serviceWorkerRegistrationDirectoryExtensionHandle;88 bool shouldDisableServiceWorkerProcessTerminationDelay { false };89 #endif90 82 bool enableAdClickAttributionDebugMode { false }; 91 83 }; -
trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp
r267618 r267763 215 215 void LocalStorageDatabase::close() 216 216 { 217 ASSERT(!m_isClosed); 217 if (m_isClosed) 218 return; 218 219 m_isClosed = true; 219 220 -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm
r267618 r267763 34 34 #import "NetworkSessionCocoa.h" 35 35 #import "SandboxExtension.h" 36 #import "WebCookieManager.h" 36 37 #import <WebCore/NetworkStorageSession.h> 37 38 #import <WebCore/PublicSuffix.h> … … 79 80 SandboxExtension::consumePermanently(parameters.containerCachesDirectoryExtensionHandle); 80 81 SandboxExtension::consumePermanently(parameters.parentBundleDirectoryExtensionHandle); 81 #if ENABLE(INDEXED_DATABASE)82 SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.indexedDatabaseTempBlobDirectoryExtensionHandle);83 #endif84 82 #endif 85 83 … … 104 102 auto urlCache(adoptNS([[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil])); 105 103 [NSURLCache setSharedURLCache:urlCache.get()]; 106 }107 108 std::unique_ptr<WebCore::NetworkStorageSession> NetworkProcess::platformCreateDefaultStorageSession() const109 {110 return makeUnique<WebCore::NetworkStorageSession>(PAL::SessionID::defaultSessionID());111 104 } 112 105 … … 222 215 } 223 216 224 staticvoid saveCookies(NSHTTPCookieStorage *cookieStorage, CompletionHandler<void()>&& completionHandler)217 void saveCookies(NSHTTPCookieStorage *cookieStorage, CompletionHandler<void()>&& completionHandler) 225 218 { 226 219 ASSERT(RunLoop::isMain()); -
trunk/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp
r267618 r267763 40 40 } 41 41 42 std::unique_ptr<WebCore::NetworkStorageSession> NetworkProcess::platformCreateDefaultStorageSession() const43 {44 return makeUnique<WebCore::NetworkStorageSession>(PAL::SessionID::defaultSessionID());45 }46 47 42 void NetworkProcess::allowSpecificHTTPSCertificateForHost(const CertificateInfo& certificateInfo, const String& host) 48 43 { -
trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm
r267618 r267763 56 56 57 57 RetainPtr<CFHTTPCookieStorageRef> uiProcessCookieStorage; 58 if (!sessionID.isEphemeral() && !parameters.uiProcessCookieStorageIdentifier.isEmpty() )58 if (!sessionID.isEphemeral() && !parameters.uiProcessCookieStorageIdentifier.isEmpty() && parameters.networkSessionParameters.sessionID != PAL::SessionID::defaultSessionID()) 59 59 uiProcessCookieStorage = cookieStorageFromIdentifyingData(parameters.uiProcessCookieStorageIdentifier); 60 60 61 61 networkProcess.ensureSession(sessionID, parameters.networkSessionParameters.shouldUseTestingNetworkSession, makeString(base, '.', sessionID.toUInt64()), WTFMove(uiProcessCookieStorage)); 62 63 auto* session = networkProcess.storageSession(sessionID);64 for (const auto& cookie : parameters.pendingCookies)65 session->setCookie(cookie);66 62 67 63 networkProcess.setSession(sessionID, NetworkSession::create(networkProcess, WTFMove(parameters.networkSessionParameters))); -
trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessMainSoup.cpp
r267618 r267763 40 40 void platformFinalize() override 41 41 { 42 // FIXME: Is this still needed? We should probably destroy all existing sessions at this point instead. 42 43 // Needed to destroy the SoupSession and SoupCookieJar, e.g. to avoid 43 44 // leaking SQLite temporary journaling files. -
trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp
r267618 r267763 136 136 } 137 137 138 std::unique_ptr<WebCore::NetworkStorageSession> NetworkProcess::platformCreateDefaultStorageSession() const139 {140 return makeUnique<WebCore::NetworkStorageSession>(PAL::SessionID::defaultSessionID());141 }142 143 138 void NetworkProcess::setIgnoreTLSErrors(PAL::SessionID sessionID, bool ignoreTLSErrors) 144 139 { -
trunk/Source/WebKit/Platform/IPC/Attachment.h
r267618 r267763 96 96 size_t m_size; 97 97 #elif OS(DARWIN) 98 mach_port_name_t m_port ;99 mach_msg_type_name_t m_disposition ;98 mach_port_name_t m_port { 0 }; 99 mach_msg_type_name_t m_disposition { 0 }; 100 100 #elif OS(WINDOWS) 101 101 HANDLE m_handle { INVALID_HANDLE_VALUE }; -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp
r267618 r267763 41 41 encoder << uiProcessCookieStorageIdentifier; 42 42 encoder << cookieStoragePathExtensionHandle; 43 encoder << pendingCookies;44 43 45 44 #if ENABLE(INDEXED_DATABASE) 46 45 encoder << indexedDatabaseDirectory << indexedDatabaseDirectoryExtensionHandle; 47 #if PLATFORM(IOS_FAMILY)48 encoder << indexedDatabaseTempBlobDirectoryExtensionHandle;49 #endif50 46 #endif 51 47 … … 84 80 parameters.cookieStoragePathExtensionHandle = WTFMove(*cookieStoragePathExtensionHandle); 85 81 86 Optional<Vector<WebCore::Cookie>> pendingCookies;87 decoder >> pendingCookies;88 if (!pendingCookies)89 return WTF::nullopt;90 parameters.pendingCookies = WTFMove(*pendingCookies);91 92 82 #if ENABLE(INDEXED_DATABASE) 93 83 Optional<String> indexedDatabaseDirectory; … … 102 92 return WTF::nullopt; 103 93 parameters.indexedDatabaseDirectoryExtensionHandle = WTFMove(*indexedDatabaseDirectoryExtensionHandle); 104 105 #if PLATFORM(IOS_FAMILY)106 Optional<SandboxExtension::Handle> indexedDatabaseTempBlobDirectoryExtensionHandle;107 decoder >> indexedDatabaseTempBlobDirectoryExtensionHandle;108 if (!indexedDatabaseTempBlobDirectoryExtensionHandle)109 return WTF::nullopt;110 parameters.indexedDatabaseTempBlobDirectoryExtensionHandle = WTFMove(*indexedDatabaseTempBlobDirectoryExtensionHandle);111 #endif112 94 #endif 113 95 -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h
r267618 r267763 52 52 Vector<uint8_t> uiProcessCookieStorageIdentifier; 53 53 SandboxExtension::Handle cookieStoragePathExtensionHandle; 54 Vector<WebCore::Cookie> pendingCookies;55 54 NetworkSessionCreationParameters networkSessionParameters; 56 55 … … 58 57 String indexedDatabaseDirectory; 59 58 SandboxExtension::Handle indexedDatabaseDirectoryExtensionHandle; 60 #if PLATFORM(IOS_FAMILY)61 SandboxExtension::Handle indexedDatabaseTempBlobDirectoryExtensionHandle;62 #endif63 59 #endif 64 60 -
trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp
r267618 r267763 47 47 : m_owningDataStore(websiteDataStore) 48 48 { 49 if (!m_owningDataStore->processPoolForCookieStorageOperations())50 registerForNewProcessPoolNotifications();51 49 } 52 50 … … 56 54 ASSERT(!m_observedCookieManagerProxy); 57 55 ASSERT(!m_cookieManagerProxyObserver); 58 59 unregisterForNewProcessPoolNotifications();60 56 } 61 57 … … 82 78 void HTTPCookieStore::cookies(CompletionHandler<void(const Vector<WebCore::Cookie>&)>&& completionHandler) 83 79 { 84 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 85 if (!pool) { 86 Vector<WebCore::Cookie> allCookies; 87 if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID()) 88 allCookies = getAllDefaultUIProcessCookieStoreCookies(); 89 allCookies.appendVector(m_owningDataStore->pendingCookies()); 90 91 RunLoop::main().dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler), allCookies] () mutable { 92 filterAppBoundCookies(allCookies, WTFMove(completionHandler)); 93 }); 94 return; 95 } 96 97 auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>(); 98 cookieManager->getAllCookies(m_owningDataStore->sessionID(), [this, protectedThis = makeRef(*this), pool = WTFMove(pool), completionHandler = WTFMove(completionHandler)] (const Vector<WebCore::Cookie>& cookies) mutable { 80 auto& cookieManager = m_owningDataStore->networkProcess().cookieManager(); 81 cookieManager.getAllCookies(m_owningDataStore->sessionID(), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (const Vector<WebCore::Cookie>& cookies) mutable { 99 82 filterAppBoundCookies(cookies, WTFMove(completionHandler)); 100 83 }); … … 103 86 void HTTPCookieStore::cookiesForURL(WTF::URL&& url, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&& completionHandler) 104 87 { 105 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 106 if (!pool) 107 return completionHandler({ }); 108 109 auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>(); 110 cookieManager->getCookies(m_owningDataStore->sessionID(), url, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (Vector<WebCore::Cookie>&& cookies) mutable { 88 auto& cookieManager = m_owningDataStore->networkProcess().cookieManager(); 89 cookieManager.getCookies(m_owningDataStore->sessionID(), url, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (Vector<WebCore::Cookie>&& cookies) mutable { 111 90 filterAppBoundCookies(cookies, WTFMove(completionHandler)); 112 91 }); … … 116 95 { 117 96 filterAppBoundCookies(cookies, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (auto&& appBoundCookies) mutable { 118 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 119 if (!pool) { 120 for (auto& cookie : appBoundCookies) { 121 // FIXME: pendingCookies used for defaultSession because session cookies cannot be propagated to Network Process with uiProcessCookieStorageIdentifier. 122 if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID() && !cookie.session) 123 setCookieInDefaultUIProcessCookieStore(cookie); 124 else 125 m_owningDataStore->addPendingCookie(cookie); 126 } 127 128 RunLoop::main().dispatch(WTFMove(completionHandler)); 129 return; 130 } 131 132 auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>(); 133 cookieManager->setCookies(m_owningDataStore->sessionID(), appBoundCookies, [pool = WTFMove(pool), completionHandler = WTFMove(completionHandler)] () mutable { 134 completionHandler(); 135 }); 97 auto& cookieManager = m_owningDataStore->networkProcess().cookieManager(); 98 cookieManager.setCookies(m_owningDataStore->sessionID(), appBoundCookies, WTFMove(completionHandler)); 136 99 }); 137 100 } … … 139 102 void HTTPCookieStore::deleteCookie(const WebCore::Cookie& cookie, CompletionHandler<void()>&& completionHandler) 140 103 { 141 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 142 if (!pool) { 143 if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID() && !cookie.session) 144 deleteCookieFromDefaultUIProcessCookieStore(cookie); 145 else 146 m_owningDataStore->removePendingCookie(cookie); 147 148 RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler)] () mutable { 149 completionHandler(); 150 }); 151 return; 152 } 153 154 auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>(); 155 cookieManager->deleteCookie(m_owningDataStore->sessionID(), cookie, [pool = WTFMove(pool), completionHandler = WTFMove(completionHandler)]() mutable { 156 completionHandler(); 157 }); 104 auto& cookieManager = m_owningDataStore->networkProcess().cookieManager(); 105 cookieManager.deleteCookie(m_owningDataStore->sessionID(), cookie, WTFMove(completionHandler)); 158 106 } 159 107 160 108 void HTTPCookieStore::deleteAllCookies(CompletionHandler<void()>&& completionHandler) 161 109 { 162 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 163 if (!pool) { 164 if (!m_owningDataStore->sessionID().isEphemeral()) 165 deleteCookiesInDefaultUIProcessCookieStore(); 166 RunLoop::main().dispatch(WTFMove(completionHandler)); 167 return; 168 } 169 170 auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>(); 171 cookieManager->deleteAllCookies(m_owningDataStore->sessionID()); 110 auto& cookieManager = m_owningDataStore->networkProcess().cookieManager(); 111 cookieManager.deleteAllCookies(m_owningDataStore->sessionID()); 172 112 // FIXME: The CompletionHandler should be passed to WebCookieManagerProxy::deleteAllCookies. 173 113 RunLoop::main().dispatch(WTFMove(completionHandler)); … … 176 116 void HTTPCookieStore::setHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler) 177 117 { 178 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 179 if (!pool) { 180 if (!m_owningDataStore->sessionID().isEphemeral()) 181 setHTTPCookieAcceptPolicyInDefaultUIProcessCookieStore(policy); 182 RunLoop::main().dispatch(WTFMove(completionHandler)); 183 return; 184 } 185 186 auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>(); 187 cookieManager->setHTTPCookieAcceptPolicy(m_owningDataStore->sessionID(), policy, [completionHandler = WTFMove(completionHandler)] () mutable { 188 completionHandler(); 189 }); 118 auto& cookieManager = m_owningDataStore->networkProcess().cookieManager(); 119 cookieManager.setHTTPCookieAcceptPolicy(m_owningDataStore->sessionID(), policy, WTFMove(completionHandler)); 190 120 } 191 121 … … 228 158 m_cookieManagerProxyObserver = makeUnique<APIWebCookieManagerProxyObserver>(*this); 229 159 230 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 231 232 if (!pool) { 233 ASSERT(!m_observingUIProcessCookies); 234 235 // Listen for cookie notifications in the UIProcess in the meantime. 236 startObservingChangesToDefaultUIProcessCookieStore([this] () { 237 cookiesDidChange(); 238 }); 239 240 m_observingUIProcessCookies = true; 241 return; 242 } 243 244 m_observedCookieManagerProxy = pool->supplement<WebKit::WebCookieManagerProxy>(); 160 m_observedCookieManagerProxy = &m_owningDataStore->networkProcess().cookieManager(); 245 161 m_observedCookieManagerProxy->registerObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver); 246 162 } … … 277 193 { 278 194 m_observedCookieManagerProxy->unregisterObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver); 279 m_observedCookieManagerProxy = nullptr; 280 281 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 282 283 if (!pool) 284 return; 285 286 m_observedCookieManagerProxy = pool->supplement<WebKit::WebCookieManagerProxy>(); 195 m_observedCookieManagerProxy = &m_owningDataStore->networkProcess().cookieManager(); 287 196 m_observedCookieManagerProxy->registerObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver); 288 }289 290 void HTTPCookieStore::registerForNewProcessPoolNotifications()291 {292 ASSERT(!m_processPoolCreationListenerIdentifier);293 294 m_processPoolCreationListenerIdentifier = WebProcessPool::registerProcessPoolCreationListener([this](WebProcessPool& newProcessPool) {295 if (!m_owningDataStore->isAssociatedProcessPool(newProcessPool))296 return;297 298 // Now that an associated process pool exists, we need to flush the UI process cookie store299 // to make sure any changes are reflected within the new process pool.300 flushDefaultUIProcessCookieStore();301 newProcessPool.ensureNetworkProcess();302 303 if (m_cookieManagerProxyObserver) {304 m_observedCookieManagerProxy = newProcessPool.supplement<WebKit::WebCookieManagerProxy>();305 m_observedCookieManagerProxy->registerObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver);306 }307 unregisterForNewProcessPoolNotifications();308 });309 }310 311 void HTTPCookieStore::unregisterForNewProcessPoolNotifications()312 {313 if (m_processPoolCreationListenerIdentifier)314 WebProcessPool::unregisterProcessPoolCreationListener(m_processPoolCreationListenerIdentifier);315 316 m_processPoolCreationListenerIdentifier = 0;317 197 } 318 198 -
trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.h
r267618 r267763 84 84 HTTPCookieStore(WebKit::WebsiteDataStore&); 85 85 86 void registerForNewProcessPoolNotifications();87 void unregisterForNewProcessPoolNotifications();88 89 86 void flushDefaultUIProcessCookieStore(); 90 87 static Vector<WebCore::Cookie> getAllDefaultUIProcessCookieStoreCookies(); -
trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp
r267618 r267763 412 412 } 413 413 414 WKCookieManagerRef WKContextGetCookieManager(WKContextRef contextRef)415 {416 return WebKit::toAPI(WebKit::toImpl(contextRef)->supplement<WebKit::WebCookieManagerProxy>());417 }418 419 414 WKWebsiteDataStoreRef WKContextGetWebsiteDataStore(WKContextRef) 420 415 { … … 528 523 } 529 524 530 void WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(WKContextRef context, bool allows)531 {532 #if ENABLE(SERVICE_WORKER)533 WebKit::toImpl(context)->setAllowsAnySSLCertificateForServiceWorker(allows);534 #endif535 }536 537 525 WKDictionaryRef WKContextCopyPlugInAutoStartOriginHashes(WKContextRef contextRef) 538 526 { … … 576 564 } 577 565 578 void WKContextTerminateNetworkProcess(WKContextRef context)579 {580 WebKit::toImpl(context)->terminateNetworkProcess();581 }582 583 566 void WKContextTerminateServiceWorkers(WKContextRef context) 584 567 { 585 568 WebKit::toImpl(context)->terminateServiceWorkers(); 586 }587 588 ProcessID WKContextGetNetworkProcessIdentifier(WKContextRef contextRef)589 {590 return WebKit::toImpl(contextRef)->networkProcessIdentifier();591 569 } 592 570 … … 620 598 } 621 599 622 void WKContextSetUseSeparateServiceWorkerProcess(WKContextRef contextRef, bool useSeparateServiceWorkerProcess) 623 { 624 WebKit::toImpl(contextRef)->setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess); 625 } 626 627 void WKContextSetPrimaryWebsiteDataStore(WKContextRef contextRef, WKWebsiteDataStoreRef websiteDataStore) 628 { 629 WebKit::toImpl(contextRef)->setPrimaryDataStore(*WebKit::toImpl(websiteDataStore)); 630 } 600 void WKContextSetUseSeparateServiceWorkerProcess(WKContextRef, bool useSeparateServiceWorkerProcess) 601 { 602 WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess); 603 } 604 605 void WKContextSetPrimaryWebsiteDataStore(WKContextRef, WKWebsiteDataStoreRef) 606 { 607 } -
trunk/Source/WebKit/UIProcess/API/C/WKContext.h
r267618 r267763 169 169 170 170 WK_EXPORT WKApplicationCacheManagerRef WKContextGetApplicationCacheManager(WKContextRef context) WK_C_API_DEPRECATED_WITH_REPLACEMENT(WKWebsiteDataStoreGetDefaultDataStore); 171 WK_EXPORT WKCookieManagerRef WKContextGetCookieManager(WKContextRef context) WK_C_API_DEPRECATED;172 171 WK_EXPORT WKGeolocationManagerRef WKContextGetGeolocationManager(WKContextRef context); 173 172 WK_EXPORT WKIconDatabaseRef WKContextGetIconDatabase(WKContextRef context); -
trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h
r267618 r267763 84 84 WK_EXPORT void WKContextSetUsesNetworkProcess(WKContextRef, bool); 85 85 86 WK_EXPORT void WKContextTerminateNetworkProcess(WKContextRef);87 86 WK_EXPORT void WKContextTerminateServiceWorkers(WKContextRef); 88 89 WK_EXPORT void WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(WKContextRef, bool);90 87 91 88 typedef void (*WKContextInvalidMessageFunction)(WKStringRef messageName); … … 97 94 98 95 WK_EXPORT void WKContextPreconnectToServer(WKContextRef context, WKURLRef serverURL) WK_C_API_DEPRECATED; 99 100 WK_EXPORT WKProcessID WKContextGetNetworkProcessIdentifier(WKContextRef context);101 96 102 97 WK_EXPORT void WKContextAddSupportedPlugin(WKContextRef context, WKStringRef domain, WKStringRef name, WKArrayRef mimeTypes, WKArrayRef extensions); -
trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp
r267618 r267763 399 399 } 400 400 401 WKWebsiteDataStoreRef WKPageGetWebsiteDataStore(WKPageRef page) 402 { 403 return toAPI(&toImpl(page)->websiteDataStore()); 404 } 405 401 406 WKInspectorRef WKPageGetInspector(WKPageRef pageRef) 402 407 { -
trunk/Source/WebKit/UIProcess/API/C/WKPage.h
r267618 r267763 119 119 WK_EXPORT uint64_t WKPageGetRenderTreeSize(WKPageRef page); 120 120 121 WK_EXPORT WKWebsiteDataStoreRef WKPageGetWebsiteDataStore(WKPageRef page); 122 121 123 WK_EXPORT WKInspectorRef WKPageGetInspector(WKPageRef page); 122 124 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp
r267750 r267763 29 29 #include "APIArray.h" 30 30 #include "APIHTTPCookieStore.h" 31 #include "NetworkProcessProxy.h" 31 32 #include "ShouldGrandfatherStatistics.h" 32 33 #include "WKAPICast.h" … … 70 71 } 71 72 73 void WKWebsiteDataStoreTerminateNetworkProcess(WKWebsiteDataStoreRef dataStore) 74 { 75 WebKit::toImpl(dataStore)->terminateNetworkProcess(); 76 } 77 78 WKProcessID WKWebsiteDataStoreGetNetworkProcessIdentifier(WKWebsiteDataStoreRef dataStore) 79 { 80 return WebKit::toImpl(dataStore)->networkProcess().processIdentifier(); 81 } 82 72 83 void WKWebsiteDataStoreRemoveITPDataForDomain(WKWebsiteDataStoreRef dataStoreRef, WKStringRef host, void* context, WKWebsiteDataStoreRemoveITPDataForDomainFunction callback) 73 84 { -
trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h
r267750 r267763 30 30 #include <WebKit/WKDeprecated.h> 31 31 32 #if defined(WIN32) || defined(_WIN32) 33 typedef int WKProcessID; 34 #else 35 #include <unistd.h> 36 typedef pid_t WKProcessID; 37 #endif 38 32 39 #ifdef __cplusplus 33 40 extern "C" { … … 50 57 51 58 WK_EXPORT void WKWebsiteDataStoreClearCachedCredentials(WKWebsiteDataStoreRef dataStoreRef); 59 60 WK_EXPORT void WKWebsiteDataStoreClearCachedCredentials(WKWebsiteDataStoreRef dataStore); 61 WK_EXPORT void WKWebsiteDataStoreTerminateNetworkProcess(WKWebsiteDataStoreRef dataStore); 62 63 WK_EXPORT WKProcessID WKWebsiteDataStoreGetNetworkProcessIdentifier(WKWebsiteDataStoreRef dataStore); 52 64 53 65 WK_EXPORT bool WKWebsiteDataStoreGetResourceLoadStatisticsEnabled(WKWebsiteDataStoreRef dataStoreRef); -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm
r267618 r267763 407 407 } 408 408 409 - (void)_terminateNetworkProcess410 {411 _processPool->terminateNetworkProcess();412 }413 414 - (void)_sendNetworkProcessWillSuspendImminently415 {416 _processPool->sendNetworkProcessWillSuspendImminentlyForTesting();417 }418 419 - (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler420 {421 _processPool->sendNetworkProcessPrepareToSuspendForTesting([completionHandler = makeBlockPtr(completionHandler)] {422 completionHandler();423 });424 }425 426 - (void)_sendNetworkProcessDidResume427 {428 _processPool->sendNetworkProcessDidResume();429 }430 431 409 - (void)_terminateServiceWorkers 432 410 { … … 436 414 - (void)_setUseSeparateServiceWorkerProcess:(BOOL)useSeparateServiceWorkerProcess 437 415 { 438 _processPool->setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess); 439 } 440 441 - (pid_t)_networkProcessIdentifier 442 { 443 return _processPool->networkProcessIdentifier(); 416 WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess); 444 417 } 445 418 … … 466 439 { 467 440 _processPool->setShouldMakeNextWebProcessLaunchFailForTesting(true); 468 }469 470 - (void)_makeNextNetworkProcessLaunchFailForTesting471 {472 _processPool->setShouldMakeNextNetworkProcessLaunchFailForTesting(true);473 441 } 474 442 … … 561 529 } 562 530 563 - (void)_synthesizeAppIsBackground:(BOOL)background564 {565 _processPool->synthesizeAppIsBackground(background);566 }567 568 - (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows569 {570 #if ENABLE(SERVICE_WORKER)571 _processPool->setAllowsAnySSLCertificateForServiceWorker(allows);572 #endif573 }574 575 531 #if PLATFORM(IOS_FAMILY) 576 532 - (id <_WKGeolocationCoreLocationProvider>)_coreLocationProvider … … 603 559 completionHandler(createNSArray(activePagesOrigins).get()); 604 560 }); 605 }606 607 - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement608 {609 return _processPool->networkProcessHasEntitlementForTesting(entitlement);610 561 } 611 562 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h
r267618 r267763 88 88 89 89 // Test only. Should be called only while no web content processes are running. 90 - (void)_terminateNetworkProcess WK_API_AVAILABLE(macos(10.15), ios(13.0));91 - (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));92 - (void)_sendNetworkProcessWillSuspendImminently WK_API_AVAILABLE(macos(10.15), ios(13.0));93 - (void)_sendNetworkProcessDidResume WK_API_AVAILABLE(macos(10.15), ios(13.0));94 90 - (void)_terminateServiceWorkers WK_API_AVAILABLE(macos(10.14), ios(12.0)); 95 91 96 92 // Test only. 97 - (pid_t)_networkProcessIdentifier WK_API_AVAILABLE(macos(10.13), ios(11.0));98 93 - (pid_t)_prewarmedProcessIdentifier WK_API_AVAILABLE(macos(10.15), ios(13.0)); 99 94 … … 107 102 - (void)_syncNetworkProcessCookies WK_API_DEPRECATED_WITH_REPLACEMENT("WKHTTPCookieStore._flushCookiesToDiskWithCompletionHandler:", macos(10.13, WK_MAC_TBA), ios(11.0, WK_IOS_TBA)); 108 103 - (void)_makeNextWebProcessLaunchFailForTesting WK_API_AVAILABLE(macos(10.14), ios(12.0)); 109 - (void)_makeNextNetworkProcessLaunchFailForTesting WK_API_AVAILABLE(macos(10.14), ios(12.0));110 104 - (NSUInteger)_maximumSuspendedPageCount WK_API_AVAILABLE(macos(10.14.4), ios(12.2)); 111 105 - (NSUInteger)_processCacheCapacity WK_API_AVAILABLE(macos(10.14.4), ios(12.2)); … … 123 117 124 118 // Test only. 125 - (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows WK_API_AVAILABLE(macos(10.13.4), ios(11.3));126 119 - (void)_getActivePagesOriginsInWebProcessForTesting:(pid_t)pid completionHandler:(void(^)(NSArray<NSString *> *))completionHandler WK_API_AVAILABLE(macos(10.14.4), ios(12.2)); 127 - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement WK_API_AVAILABLE(macos(10.14.4), ios(12.2));128 120 - (void)_clearPermanentCredentialsForProtectionSpace:(NSURLProtectionSpace *)protectionSpace WK_API_AVAILABLE(macos(10.15), ios(13.0)); 129 121 130 122 @property (nonatomic, getter=_isCookieStoragePartitioningEnabled, setter=_setCookieStoragePartitioningEnabled:) BOOL _cookieStoragePartitioningEnabled WK_API_DEPRECATED("Partitioned cookies are no longer supported", macos(10.12.3, 10.14.4), ios(10.3, 12.2)); 131 - (void)_synthesizeAppIsBackground:(BOOL)background WK_API_AVAILABLE(macos(10.15), ios(13.0));132 123 133 124 // Test only. -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm
r267750 r267763 607 607 } 608 608 609 - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement 610 { 611 return _websiteDataStore->networkProcessHasEntitlementForTesting(entitlement); 612 } 613 609 614 - (id <_WKWebsiteDataStoreDelegate>)_delegate 610 615 { … … 658 663 } 659 664 665 - (void)_terminateNetworkProcess 666 { 667 _websiteDataStore->terminateNetworkProcess(); 668 } 669 670 - (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler 671 { 672 _websiteDataStore->sendNetworkProcessPrepareToSuspendForTesting([completionHandler = makeBlockPtr(completionHandler)] { 673 completionHandler(); 674 }); 675 } 676 677 - (void)_sendNetworkProcessWillSuspendImminently 678 { 679 _websiteDataStore->sendNetworkProcessWillSuspendImminentlyForTesting(); 680 681 } 682 683 - (void)_sendNetworkProcessDidResume 684 { 685 _websiteDataStore->sendNetworkProcessDidResume(); 686 } 687 688 - (void)_synthesizeAppIsBackground:(BOOL)background 689 { 690 _websiteDataStore->networkProcess().synthesizeAppIsBackground(background); 691 } 692 693 - (pid_t)_networkProcessIdentifier 694 { 695 return _websiteDataStore->networkProcess().processIdentifier(); 696 } 697 698 + (void)_makeNextNetworkProcessLaunchFailForTesting 699 { 700 WebKit::WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting(); 701 } 702 660 703 @end -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h
r267750 r267763 85 85 - (void)_renameOrigin:(NSURL *)oldName to:(NSURL *)newName forDataOfTypes:(NSSet<NSString *> *)dataTypes completionHandler:(void (^)(void))completionHandler; 86 86 87 - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 88 87 89 @property (nullable, nonatomic, weak) id <_WKWebsiteDataStoreDelegate> _delegate WK_API_AVAILABLE(macos(10.15), ios(13.0)); 88 90 @property (nonatomic, readonly, copy) _WKWebsiteDataStoreConfiguration *_configuration; 91 92 - (void)_terminateNetworkProcess WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 93 - (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 94 - (void)_sendNetworkProcessWillSuspendImminently WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 95 - (void)_sendNetworkProcessDidResume WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 96 - (void)_synthesizeAppIsBackground:(BOOL)background WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 97 - (pid_t)_networkProcessIdentifier WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 98 + (void)_makeNextNetworkProcessLaunchFailForTesting WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 89 99 90 100 @end -
trunk/Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp
r267618 r267763 22 22 #include "WebKitCookieManager.h" 23 23 24 #include "NetworkProcessProxy.h" 24 25 #include "SoupCookiePersistentStorageType.h" 25 26 #include "WebCookieManagerProxy.h" … … 57 58 58 59 struct _WebKitCookieManagerPrivate { 60 WebCookieManagerProxy& cookieManager() const 61 { 62 ASSERT(dataManager); 63 return webkitWebsiteDataManagerGetDataStore(dataManager).networkProcess().cookieManager(); 64 } 65 59 66 PAL::SessionID sessionID() const 60 67 { … … 65 72 ~_WebKitCookieManagerPrivate() 66 73 { 67 for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(dataManager)) 68 processPool->supplement<WebCookieManagerProxy>()->setCookieObserverCallback(sessionID(), nullptr); 74 cookieManager().setCookieObserverCallback(sessionID(), nullptr); 69 75 } 70 76 … … 140 146 WebKitCookieManager* manager = WEBKIT_COOKIE_MANAGER(g_object_new(WEBKIT_TYPE_COOKIE_MANAGER, nullptr)); 141 147 manager->priv->dataManager = dataManager; 142 for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager)) { 143 processPool->supplement<WebCookieManagerProxy>()->setCookieObserverCallback(manager->priv->sessionID(), [manager] { 144 g_signal_emit(manager, signals[CHANGED], 0); 145 }); 146 } 148 manager->priv->cookieManager().setCookieObserverCallback(manager->priv->sessionID(), [manager] { 149 g_signal_emit(manager, signals[CHANGED], 0); 150 }); 147 151 return manager; 148 152 } … … 174 178 return; 175 179 176 for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager)) 177 processPool->supplement<WebCookieManagerProxy>()->setCookiePersistentStorage(sessionID, String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage)); 180 manager->priv->cookieManager().setCookiePersistentStorage(sessionID, String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage)); 178 181 } 179 182 … … 193 196 g_return_if_fail(WEBKIT_IS_COOKIE_MANAGER(manager)); 194 197 195 for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager)) 196 processPool->supplement<WebCookieManagerProxy>()->setHTTPCookieAcceptPolicy(manager->priv->sessionID(), toHTTPCookieAcceptPolicy(policy), []() { }); 198 manager->priv->cookieManager().setHTTPCookieAcceptPolicy(manager->priv->sessionID(), toHTTPCookieAcceptPolicy(policy), []() { }); 197 199 } 198 200 … … 218 220 GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData)); 219 221 220 // The policy is the same in all process pools having the same session ID, so just ask any. 221 const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager); 222 if (processPools.isEmpty()) { 223 g_task_return_int(task.get(), WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY); 224 return; 225 } 226 227 processPools[0]->supplement<WebCookieManagerProxy>()->getHTTPCookieAcceptPolicy(manager->priv->sessionID(), [task = WTFMove(task)](WebCore::HTTPCookieAcceptPolicy policy) { 222 manager->priv->cookieManager().getHTTPCookieAcceptPolicy(manager->priv->sessionID(), [task = WTFMove(task)](WebCore::HTTPCookieAcceptPolicy policy) { 228 223 g_task_return_int(task.get(), toWebKitCookieAcceptPolicy(policy)); 229 224 }); … … 270 265 271 266 GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData)); 272 273 // Cookies are read/written from/to the same SQLite database on disk regardless 274 // of the process we access them from, so just use the first process pool. 275 const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager); 276 processPools[0]->supplement<WebCookieManagerProxy>()->setCookies(manager->priv->sessionID(), { WebCore::Cookie(cookie) }, [task = WTFMove(task)]() { 267 manager->priv->cookieManager().setCookies(manager->priv->sessionID(), { WebCore::Cookie(cookie) }, [task = WTFMove(task)]() { 277 268 g_task_return_boolean(task.get(), TRUE); 278 269 }); … … 321 312 322 313 GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData)); 323 324 // Cookies are read/written from/to the same SQLite database on disk regardless 325 // of the process we access them from, so just use the first process pool. 326 const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager); 327 processPools[0]->supplement<WebCookieManagerProxy>()->getCookies(manager->priv->sessionID(), URL(URL(), String::fromUTF8(uri)), [task = WTFMove(task)](const Vector<WebCore::Cookie>& cookies) { 314 manager->priv->cookieManager().getCookies(manager->priv->sessionID(), URL(URL(), String::fromUTF8(uri)), [task = WTFMove(task)](const Vector<WebCore::Cookie>& cookies) { 328 315 GList* cookiesList = nullptr; 329 316 for (auto& cookie : cookies) … … 379 366 380 367 GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData)); 381 382 // Cookies are read/written from/to the same SQLite database on disk regardless 383 // of the process we access them from, so just use the first process pool. 384 const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager); 385 processPools[0]->supplement<WebCookieManagerProxy>()->deleteCookie(manager->priv->sessionID(), WebCore::Cookie(cookie), [task = WTFMove(task)]() { 368 manager->priv->cookieManager().deleteCookie(manager->priv->sessionID(), WebCore::Cookie(cookie), [task = WTFMove(task)]() { 386 369 g_task_return_boolean(task.get(), TRUE); 387 370 }); -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp
r267618 r267763 403 403 404 404 priv->processPool = WebProcessPool::create(configuration); 405 priv->processPool->setPrimaryDataStore(webkitWebsiteDataManagerGetDataStore(priv->websiteDataManager.get()));406 405 priv->processPool->setUserMessageHandler([webContext](UserMessage&& message, CompletionHandler<void(UserMessage&&)>&& completionHandler) { 407 406 // Sink the floating ref. … … 411 410 }); 412 411 413 webkitWebsiteDataManagerAddProcessPool(priv->websiteDataManager.get(), *priv->processPool);414 415 412 priv->processModel = WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES; 416 413 … … 438 435 priv->processPool->setInjectedBundleClient(nullptr); 439 436 priv->processPool->setDownloadClient(makeUniqueRef<API::DownloadClient>()); 440 }441 442 if (priv->websiteDataManager) {443 webkitWebsiteDataManagerRemoveProcessPool(priv->websiteDataManager.get(), *priv->processPool);444 priv->websiteDataManager = nullptr;445 437 } 446 438 … … 1582 1574 g_return_if_fail(hostname); 1583 1575 1584 if (context->priv->dnsPrefetchedHosts.add(hostname).isNewEntry)1585 context->priv->processPool->sendToNetworkingProcess(Messages::NetworkProcess::PrefetchDNS(String::fromUTF8(hostname)));1576 auto& websiteDataStore = webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get()); 1577 websiteDataStore.networkProcess().send(Messages::NetworkProcess::PrefetchDNS(String::fromUTF8(hostname)), 0); 1586 1578 context->priv->dnsPrefetchHystereris.impulse(); 1587 1579 } -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp
r267618 r267763 760 760 auto proxySettings = webkitWebsiteDataManagerGetDataStore(contextDataManager).networkProxySettings(); 761 761 webkitWebsiteDataManagerGetDataStore(priv->websiteDataManager.get()).setNetworkProxySettings(WTFMove(proxySettings)); 762 webkitWebsiteDataManagerAddProcessPool(priv->websiteDataManager.get(), webkitWebContextGetProcessPool(priv->context.get()));763 762 } 764 763 … … 946 945 } 947 946 948 if (webView->priv->websiteDataManager) {949 webkitWebsiteDataManagerRemoveProcessPool(webView->priv->websiteDataManager.get(), webkitWebContextGetProcessPool(webView->priv->context.get()));950 webView->priv->websiteDataManager = nullptr;951 }952 953 947 if (webView->priv->currentScriptDialog) { 954 948 webkit_script_dialog_close(webView->priv->currentScriptDialog); -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp
r267618 r267763 96 96 97 97 struct _WebKitWebsiteDataManagerPrivate { 98 ~_WebKitWebsiteDataManagerPrivate()99 {100 ASSERT(processPools.isEmpty());101 }102 103 98 RefPtr<WebKit::WebsiteDataStore> websiteDataStore; 104 99 GUniquePtr<char> baseDataDirectory; … … 116 111 117 112 GRefPtr<WebKitCookieManager> cookieManager; 118 Vector<WebProcessPool*> processPools;119 113 }; 120 114 … … 495 489 if (priv->domCacheDirectory) 496 490 configuration->setCacheStorageDirectory(FileSystem::stringFromFileSystemRepresentation(priv->domCacheDirectory.get())); 497 priv->websiteDataStore = WebKit::WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID:: defaultSessionID());491 priv->websiteDataStore = WebKit::WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID::generatePersistentSessionID()); 498 492 priv->websiteDataStore->setIgnoreTLSErrors(priv->tlsErrorsPolicy == WEBKIT_TLS_ERRORS_POLICY_IGNORE); 499 493 } 500 494 501 495 return *priv->websiteDataStore; 502 }503 504 void webkitWebsiteDataManagerAddProcessPool(WebKitWebsiteDataManager* manager, WebProcessPool& processPool)505 {506 ASSERT(!manager->priv->processPools.contains(&processPool));507 manager->priv->processPools.append(&processPool);508 }509 510 void webkitWebsiteDataManagerRemoveProcessPool(WebKitWebsiteDataManager* manager, WebProcessPool& processPool)511 {512 ASSERT(manager->priv->processPools.contains(&processPool));513 manager->priv->processPools.removeFirst(&processPool);514 }515 516 const Vector<WebProcessPool*>& webkitWebsiteDataManagerGetProcessPools(WebKitWebsiteDataManager* manager)517 {518 return manager->priv->processPools;519 496 } 520 497 -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManagerPrivate.h
r267618 r267763 20 20 #pragma once 21 21 22 #include "WebProcessPool.h"23 22 #include "WebsiteDataStore.h" 24 23 25 24 WebKit::WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager*); 26 void webkitWebsiteDataManagerAddProcessPool(WebKitWebsiteDataManager*, WebKit::WebProcessPool&);27 void webkitWebsiteDataManagerRemoveProcessPool(WebKitWebsiteDataManager*, WebKit::WebProcessPool&);28 const Vector<WebKit::WebProcessPool*>& webkitWebsiteDataManagerGetProcessPools(WebKitWebsiteDataManager*);29 -
trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp
r267618 r267763 1393 1393 cookie.httpOnly = *httpOnly; 1394 1394 1395 WebCookieManagerProxy * cookieManager = m_processPool->supplement<WebCookieManagerProxy>();1396 cookieManager ->setCookies(page->websiteDataStore().sessionID(), { cookie }, [callback]() {1395 WebCookieManagerProxy& cookieManager = page->websiteDataStore().networkProcess().cookieManager(); 1396 cookieManager.setCookies(page->websiteDataStore().sessionID(), { cookie }, [callback]() { 1397 1397 callback->sendSuccess(); 1398 1398 }); … … 1410 1410 String host = activeURL.host().toString(); 1411 1411 1412 WebCookieManagerProxy * cookieManager = m_processPool->supplement<WebCookieManagerProxy>();1413 cookieManager ->deleteCookiesForHostnames(page->websiteDataStore().sessionID(), { host, domainByAddingDotPrefixIfNeeded(host) });1412 WebCookieManagerProxy& cookieManager = page->websiteDataStore().networkProcess().cookieManager(); 1413 cookieManager.deleteCookiesForHostnames(page->websiteDataStore().sessionID(), { host, domainByAddingDotPrefixIfNeeded(host) }); 1414 1414 1415 1415 return { }; -
trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h
r267618 r267763 49 49 50 50 void connect(); 51 v oid terminate();51 virtual void terminate(); 52 52 53 53 virtual ProcessThrottler& throttler() = 0; -
trunk/Source/WebKit/UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h
r267618 r267763 42 42 43 43 class LegacyCustomProtocolManagerClient final : public API::CustomProtocolManagerClient { 44 p rivate:44 public: 45 45 void startLoading(LegacyCustomProtocolManagerProxy&, LegacyCustomProtocolID, const WebCore::ResourceRequest&) final; 46 46 void stopLoading(LegacyCustomProtocolManagerProxy&, LegacyCustomProtocolID) final; 47 47 void invalidate(LegacyCustomProtocolManagerProxy&) final; 48 48 private: 49 49 HashMap<LegacyCustomProtocolID, RetainPtr<WKCustomProtocolLoader>> m_loaderMap; 50 50 }; -
trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
r267760 r267763 135 135 void WebProcessPool::updateProcessSuppressionState() 136 136 { 137 if (m_networkProcess) 138 m_networkProcess->setProcessSuppressionEnabled(processSuppressionEnabled()); 137 WebsiteDataStore::forEachWebsiteDataStore([enabled = processSuppressionEnabled()] (WebsiteDataStore& dataStore) { 138 dataStore.networkProcess().setProcessSuppressionEnabled(enabled); 139 }); 139 140 140 141 #if ENABLE(NETSCAPE_PLUGIN_API) … … 166 167 if (![[NSUserDefaults standardUserDefaults] boolForKey:@"WebKitSuppressMemoryPressureHandler"]) 167 168 installMemoryPressureHandler(); 168 169 setLegacyCustomProtocolManagerClient(makeUnique<LegacyCustomProtocolManagerClient>());170 169 171 170 #if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST) … … 494 493 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 495 494 496 {497 bool isSafari = false;498 bool isMiniBrowser = false;499 #if PLATFORM(IOS_FAMILY)500 isSafari = WebCore::IOSApplication::isMobileSafari();501 isMiniBrowser = WebCore::IOSApplication::isMiniBrowser();502 #elif PLATFORM(MAC)503 isSafari = WebCore::MacApplication::isSafari();504 isMiniBrowser = WebCore::MacApplication::isMiniBrowser();505 #endif506 if (isSafari || isMiniBrowser) {507 parameters.defaultDataStoreParameters.networkSessionParameters.httpProxy = URL(URL(), [defaults stringForKey:(NSString *)WebKit2HTTPProxyDefaultsKey]);508 parameters.defaultDataStoreParameters.networkSessionParameters.httpsProxy = URL(URL(), [defaults stringForKey:(NSString *)WebKit2HTTPSProxyDefaultsKey]);509 }510 }511 512 495 parameters.networkATSContext = adoptCF(_CFNetworkCopyATSContext()); 513 496 … … 521 504 522 505 parameters.enableAdClickAttributionDebugMode = [defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::adClickAttributionDebugModeEnabledKey().createCFString().get()]]; 523 524 parameters.defaultDataStoreParameters.networkSessionParameters.appHasRequestedCrossWebsiteTrackingPermission = hasRequestedCrossWebsiteTrackingPermission();525 506 } 526 507 … … 599 580 { 600 581 return !m_userObservablePageCounter.value() && !m_processSuppressionDisabledForPageCounter.value(); 601 }602 603 bool WebProcessPool::networkProcessHasEntitlementForTesting(const String& entitlement)604 {605 return WTF::hasEntitlement(ensureNetworkProcess().connection()->xpcConnection(), entitlement.utf8().data());606 582 } 607 583 … … 942 918 #endif 943 919 944 OSObjectPtr<xpc_object_t> WebProcessPool::xpcEndpointMessage() const945 {946 return m_endpointMessage;947 }948 949 void WebProcessPool::sendNetworkProcessXPCEndpointToWebProcess(OSObjectPtr<xpc_object_t> endpointMessage)950 {951 m_endpointMessage = endpointMessage;952 953 for (auto process : m_processes) {954 if (process->state() != AuxiliaryProcessProxy::State::Running)955 continue;956 if (!process->connection())957 continue;958 auto connection = process->connection()->xpcConnection();959 xpc_connection_send_message(connection, endpointMessage.get());960 }961 }962 963 920 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp
r267618 r267763 76 76 return; 77 77 78 if ( NetworkProcessProxy* networkProcess = m_processPool->networkProcess())79 networkProcess->send(Messages::NetworkProcess::CancelDownload(m_downloadID), 0);78 if (m_dataStore) 79 m_dataStore->networkProcess().send(Messages::NetworkProcess::CancelDownload(m_downloadID), 0); 80 80 } 81 81 … … 104 104 void DownloadProxy::publishProgress(const URL& URL) 105 105 { 106 if (!m_processPool) 107 return; 108 109 if (auto* networkProcess = m_processPool->networkProcess()) { 110 SandboxExtension::Handle handle; 111 bool createdSandboxExtension = SandboxExtension::createHandle(URL.fileSystemPath(), SandboxExtension::Type::ReadWrite, handle); 112 ASSERT_UNUSED(createdSandboxExtension, createdSandboxExtension); 113 networkProcess->send(Messages::NetworkProcess::PublishDownloadProgress(m_downloadID, URL, handle), 0); 114 } 106 if (!m_dataStore) 107 return; 108 109 SandboxExtension::Handle handle; 110 bool createdSandboxExtension = SandboxExtension::createHandle(URL.fileSystemPath(), SandboxExtension::Type::ReadWrite, handle); 111 ASSERT_UNUSED(createdSandboxExtension, createdSandboxExtension); 112 m_dataStore->networkProcess().send(Messages::NetworkProcess::PublishDownloadProgress(m_downloadID, URL, handle), 0); 115 113 } 116 114 #endif // PLATFORM(COCOA) … … 132 130 void DownloadProxy::didReceiveAuthenticationChallenge(AuthenticationChallenge&& authenticationChallenge, uint64_t challengeID) 133 131 { 134 if (!m_processPool) 135 return; 136 137 auto authenticationChallengeProxy = AuthenticationChallengeProxy::create(WTFMove(authenticationChallenge), challengeID, makeRef(*m_processPool->networkingProcessConnection()), nullptr); 138 132 if (!m_processPool || !m_dataStore) 133 return; 134 135 auto authenticationChallengeProxy = AuthenticationChallengeProxy::create(WTFMove(authenticationChallenge), challengeID, makeRef(*m_dataStore->networkProcess().connection()), nullptr); 139 136 m_processPool->downloadClient().didReceiveAuthenticationChallenge(*this, authenticationChallengeProxy.get()); 140 137 } … … 147 144 m_processPool->downloadClient().willSendRequest(*this, WTFMove(proposedRequest), redirectResponse, [this, protectedThis = makeRef(*this)](ResourceRequest&& newRequest) { 148 145 m_redirectChain.append(newRequest.url()); 149 150 if (!protectedThis->m_processPool) 146 if (!protectedThis->m_dataStore) 151 147 return; 152 153 auto* networkProcessProxy = protectedThis->m_processPool->networkProcess(); 154 if (!networkProcessProxy) 155 return; 156 157 networkProcessProxy->send(Messages::NetworkProcess::ContinueWillSendRequest(protectedThis->m_downloadID, newRequest), 0); 148 auto& networkProcessProxy = protectedThis->m_dataStore->networkProcess(); 149 networkProcessProxy.send(Messages::NetworkProcess::ContinueWillSendRequest(protectedThis->m_downloadID, newRequest), 0); 158 150 }); 159 151 } … … 180 172 return; 181 173 182 m_processPool->downloadClient().decideDestinationWithSuggestedFilename(*this, ResourceResponseBase::sanitizeSuggestedFilename(suggestedFilename), [this, protectedThis = makeRef(*this), downloadID = downloadID] (AllowOverwrite allowOverwrite, String destination) {174 m_processPool->downloadClient().decideDestinationWithSuggestedFilename(*this, ResourceResponseBase::sanitizeSuggestedFilename(suggestedFilename), [this, protectedThis = makeRef(*this), downloadID] (AllowOverwrite allowOverwrite, String destination) { 183 175 SandboxExtension::Handle sandboxExtensionHandle; 184 176 if (!destination.isNull()) 185 177 SandboxExtension::createHandle(destination, SandboxExtension::Type::ReadWrite, sandboxExtensionHandle); 186 178 187 if (!m_ processPool)179 if (!m_dataStore) 188 180 return; 189 190 if (auto* networkProcess = m_processPool->networkProcess()) 191 networkProcess->send(Messages::NetworkProcess::ContinueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite == AllowOverwrite::Yes), 0); 181 m_dataStore->networkProcess().send(Messages::NetworkProcess::ContinueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite == AllowOverwrite::Yes), 0); 192 182 }); 193 183 } -
trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp
r267618 r267763 45 45 46 46 DownloadProxyMap::DownloadProxyMap(NetworkProcessProxy& process) 47 : m_process( makeWeakPtr(process))47 : m_process(process) 48 48 #if PLATFORM(COCOA) 49 49 , m_shouldTakeAssertion(WTF::processHasEntitlement("com.apple.multitasking.systemappassertions")) … … 71 71 void DownloadProxyMap::applicationDidEnterBackground() 72 72 { 73 if (m_process) 74 m_process->send(Messages::NetworkProcess::ApplicationDidEnterBackground(), 0); 73 m_process.send(Messages::NetworkProcess::ApplicationDidEnterBackground(), 0); 75 74 } 76 75 77 76 void DownloadProxyMap::applicationWillEnterForeground() 78 77 { 79 if (m_process) 80 m_process->send(Messages::NetworkProcess::ApplicationWillEnterForeground(), 0); 78 m_process.send(Messages::NetworkProcess::ApplicationWillEnterForeground(), 0); 81 79 } 82 80 … … 93 91 94 92 ASSERT(!m_downloadNetworkingAssertion); 95 RELEASE_ASSERT(m_process); 96 m_downloadNetworkingAssertion = makeUnique<ProcessAssertion>(m_process->processIdentifier(), "WebKit downloads"_s, ProcessAssertionType::UnboundedNetworking); 93 m_downloadNetworkingAssertion = makeUnique<ProcessAssertion>(m_process.processIdentifier(), "WebKit downloads"_s, ProcessAssertionType::UnboundedNetworking); 97 94 98 95 RELEASE_LOG(ProcessSuspension, "UIProcess took 'WebKit downloads' assertions for UIProcess and NetworkProcess"); 99 96 } 100 97 101 m_process ->addMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadProxy->downloadID().downloadID(), downloadProxy.get());98 m_process.addMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadProxy->downloadID().downloadID(), downloadProxy.get()); 102 99 103 100 return downloadProxy; … … 110 107 RELEASE_LOG(Loading, "Removing download %" PRIu64 " from UIProcess DownloadProxyMap", downloadID.downloadID()); 111 108 112 // The DownloadProxy may be holding the last reference to the process pool.113 auto protectedProcessPool = makeRefPtr(m_process->processPool());114 115 109 ASSERT(m_downloads.contains(downloadID)); 116 110 117 m_process ->removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadID.downloadID());111 m_process.removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadID.downloadID()); 118 112 downloadProxy.invalidate(); 119 113 m_downloads.remove(downloadID); … … 134 128 download->processDidClose(); 135 129 download->invalidate(); 136 m_process ->removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), download->downloadID().downloadID());130 m_process.removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), download->downloadID().downloadID()); 137 131 } 138 132 … … 141 135 m_downloadNetworkingAssertion = nullptr; 142 136 RELEASE_LOG(ProcessSuspension, "UIProcess DownloadProxyMap invalidated - Released 'WebKit downloads' assertions for UIProcess and NetworkProcess"); 143 144 m_process = nullptr;145 137 } 146 138 -
trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h
r267618 r267763 72 72 void platformDestroy(); 73 73 74 WeakPtr<NetworkProcessProxy>m_process;74 NetworkProcessProxy& m_process; 75 75 HashMap<DownloadID, RefPtr<DownloadProxy>> m_downloads; 76 76 -
trunk/Source/WebKit/UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp
r267729 r267763 156 156 configuration->setServiceWorkerRegistrationDirectory(FileSystem::pathByAppendingComponent(baseDataDirectory, "serviceworkers")); 157 157 configuration->setDeviceIdHashSaltsStorageDirectory(FileSystem::pathByAppendingComponent(baseDataDirectory, "deviceidhashsalts")); 158 return WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID:: defaultSessionID());158 return WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID::generatePersistentSessionID()); 159 159 } 160 160 … … 176 176 auto websiteDataStore = inspectorWebsiteDataStore(); 177 177 auto& processPool = inspectorProcessPool(inspectionLevel()); 178 processPool.setPrimaryDataStore(websiteDataStore.get());179 178 180 179 auto pageConfiguration = API::PageConfiguration::create(); -
trunk/Source/WebKit/UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp
r267618 r267763 45 45 void LegacyCustomProtocolManagerProxy::startLoading(LegacyCustomProtocolID customProtocolID, const WebCore::ResourceRequest& request) 46 46 { 47 m_networkProcessProxy. processPool().customProtocolManagerClient().startLoading(*this, customProtocolID, request);47 m_networkProcessProxy.customProtocolManagerClient().startLoading(*this, customProtocolID, request); 48 48 } 49 49 50 50 void LegacyCustomProtocolManagerProxy::stopLoading(LegacyCustomProtocolID customProtocolID) 51 51 { 52 m_networkProcessProxy. processPool().customProtocolManagerClient().stopLoading(*this, customProtocolID);52 m_networkProcessProxy.customProtocolManagerClient().stopLoading(*this, customProtocolID); 53 53 } 54 54 55 55 void LegacyCustomProtocolManagerProxy::invalidate() 56 56 { 57 m_networkProcessProxy. processPool().customProtocolManagerClient().invalidate(*this);57 m_networkProcessProxy.customProtocolManagerClient().invalidate(*this); 58 58 } 59 59 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r267750 r267763 28 28 29 29 #include "APIContentRuleList.h" 30 #include "APICustomProtocolManagerClient.h" 30 31 #include "AuthenticationChallengeProxy.h" 31 32 #include "AuthenticationManager.h" … … 36 37 #include "LegacyCustomProtocolManagerProxyMessages.h" 37 38 #endif 39 #include "LegacyGlobalSettings.h" 38 40 #include "Logging.h" 39 41 #include "NetworkContentRuleListManagerMessages.h" … … 49 51 #include "StorageAccessStatus.h" 50 52 #include "WebCompiledContentRuleList.h" 53 #include "WebCookieManagerProxy.h" 51 54 #include "WebPageMessages.h" 52 55 #include "WebPageProxy.h" … … 59 62 #include "WebsiteData.h" 60 63 #include "WebsiteDataStoreClient.h" 64 #include "WebsiteDataStoreParameters.h" 61 65 #include <WebCore/ClientOrigin.h> 62 66 #include <WebCore/RegistrableDomain.h> 67 #include <wtf/CallbackAggregator.h> 63 68 #include <wtf/CompletionHandler.h> 64 69 … … 71 76 #endif 72 77 78 #if PLATFORM(COCOA) 79 #include "LegacyCustomProtocolManagerClient.h" 80 #endif 81 73 82 #define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, connection()) 74 83 … … 76 85 using namespace WebCore; 77 86 78 NetworkProcessProxy::NetworkProcessProxy(WebProcessPool& processPool) 79 : AuxiliaryProcessProxy(processPool.alwaysRunsAtBackgroundPriority()) 80 , m_processPool(processPool) 87 static HashSet<NetworkProcessProxy*>& networkProcessesSet() 88 { 89 RELEASE_ASSERT(RunLoop::isMain()); 90 static NeverDestroyed<HashSet<NetworkProcessProxy*>> set; 91 return set; 92 } 93 94 Vector<Ref<NetworkProcessProxy>> NetworkProcessProxy::allNetworkProcesses() 95 { 96 Vector<Ref<NetworkProcessProxy>> processes; 97 processes.reserveInitialCapacity(networkProcessesSet().size()); 98 for (auto* networkProcess : networkProcessesSet()) 99 processes.uncheckedAppend(*networkProcess); 100 return processes; 101 } 102 103 static RefPtr<NetworkProcessProxy>& defaultProcess() 104 { 105 static NeverDestroyed<RefPtr<NetworkProcessProxy>> process; 106 return process.get(); 107 } 108 109 Ref<NetworkProcessProxy> NetworkProcessProxy::defaultNetworkProcess() 110 { 111 if (!defaultProcess()) 112 defaultProcess() = NetworkProcessProxy::create(); 113 return *defaultProcess(); 114 } 115 116 void NetworkProcessProxy::terminate() 117 { 118 AuxiliaryProcessProxy::terminate(); 119 if (auto* connection = this->connection()) 120 connection->invalidate(); 121 didTerminate(); 122 } 123 124 void NetworkProcessProxy::didTerminate() 125 { 126 if (this == defaultProcess().get()) 127 defaultProcess() = nullptr; 128 } 129 130 void NetworkProcessProxy::sendCreationParametersToNewProcess() 131 { 132 ASSERT(RunLoop::isMain()); 133 134 // FIXME: This is a temporary workaround for apps using WebKit API on non-main threads. 135 // We should remove this once we enforce threading violation check on our APIs. 136 // https://bugs.webkit.org/show_bug.cgi?id=200246. 137 if (!RunLoop::isMain()) { 138 callOnMainRunLoopAndWait([this] { 139 sendCreationParametersToNewProcess(); 140 }); 141 } 142 143 NetworkProcessCreationParameters parameters; 144 parameters.urlSchemesRegisteredAsSecure = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsSecure()); 145 parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsBypassingContentSecurityPolicy()); 146 parameters.urlSchemesRegisteredAsLocal = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsLocal()); 147 parameters.urlSchemesRegisteredAsNoAccess = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsNoAccess()); 148 parameters.cacheModel = LegacyGlobalSettings::singleton().cacheModel(); 149 for (auto& scheme : WebProcessPool::urlSchemesWithCustomProtocolHandlers()) 150 parameters.urlSchemesRegisteredForCustomProtocols.append(scheme); 151 #if PLATFORM(IOS_FAMILY) 152 if (String cookieStorageDirectory = WebProcessPool::cookieStorageDirectory(); !cookieStorageDirectory.isEmpty()) 153 SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle); 154 if (String containerCachesDirectory = WebProcessPool::networkingCachesDirectory(); !containerCachesDirectory.isEmpty()) 155 SandboxExtension::createHandleForReadWriteDirectory(containerCachesDirectory, parameters.containerCachesDirectoryExtensionHandle); 156 if (String parentBundleDirectory = WebProcessPool::parentBundleDirectory(); !parentBundleDirectory.isEmpty()) 157 SandboxExtension::createHandle(parentBundleDirectory, SandboxExtension::Type::ReadOnly, parameters.parentBundleDirectoryExtensionHandle); 158 #endif 159 WebProcessPool::platformInitializeNetworkProcess(parameters); 160 send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0); 161 } 162 163 static bool anyProcessPoolAlwaysRunsAtBackgroundPriority() 164 { 165 for (auto* processPool : WebProcessPool::allProcessPools()) { 166 if (processPool->alwaysRunsAtBackgroundPriority()) 167 return true; 168 } 169 return false; 170 } 171 172 static bool anyProcessPoolShouldTakeUIBackgroundAssertion() 173 { 174 for (auto* processPool : WebProcessPool::allProcessPools()) { 175 if (processPool->shouldTakeUIBackgroundAssertion()) 176 return true; 177 } 178 return false; 179 } 180 181 NetworkProcessProxy::NetworkProcessProxy() 182 : AuxiliaryProcessProxy(anyProcessPoolAlwaysRunsAtBackgroundPriority()) 81 183 #if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER) 184 , m_customProtocolManagerClient(makeUniqueRef<LegacyCustomProtocolManagerClient>()) 82 185 , m_customProtocolManagerProxy(*this) 83 #endif 84 , m_throttler(*this, processPool.shouldTakeUIBackgroundAssertion()) 186 #else 187 , m_customProtocolManagerClient(makeUniqueRef<API::CustomProtocolManagerClient>()) 188 #endif 189 , m_throttler(*this, anyProcessPoolShouldTakeUIBackgroundAssertion()) 190 , m_cookieManager(WebCookieManagerProxy::create(*this)) 85 191 { 86 192 connect(); 193 sendCreationParametersToNewProcess(); 194 updateProcessAssertion(); 195 networkProcessesSet().add(this); 87 196 } 88 197 … … 99 208 if (m_downloadProxyMap) 100 209 m_downloadProxyMap->invalidate(); 210 networkProcessesSet().remove(this); 101 211 } 102 212 … … 106 216 AuxiliaryProcessProxy::getLaunchOptions(launchOptions); 107 217 108 if (processPool().shouldMakeNextNetworkProcessLaunchFailForTesting()) { 109 processPool().setShouldMakeNextNetworkProcessLaunchFailForTesting(false); 218 if (WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting()) 110 219 launchOptions.shouldMakeProcessLaunchFailForTesting = true; 111 }112 113 #if PLATFORM(PLAYSTATION)114 launchOptions.processPath = m_processPool.networkProcessPath();115 launchOptions.userId = m_processPool.userId();116 #endif117 220 } 118 221 … … 167 270 } 168 271 169 DownloadProxy& NetworkProcessProxy::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& resourceRequest, const FrameInfoData& frameInfo, WebPageProxy* originatingPage)272 DownloadProxy& NetworkProcessProxy::createDownloadProxy(WebsiteDataStore& dataStore, WebProcessPool& processPool, const ResourceRequest& resourceRequest, const FrameInfoData& frameInfo, WebPageProxy* originatingPage) 170 273 { 171 274 if (!m_downloadProxyMap) 172 275 m_downloadProxyMap = makeUnique<DownloadProxyMap>(*this); 173 276 174 return m_downloadProxyMap->createDownloadProxy(dataStore, m_processPool, resourceRequest, frameInfo, originatingPage);277 return m_downloadProxyMap->createDownloadProxy(dataStore, processPool, resourceRequest, frameInfo, originatingPage); 175 278 } 176 279 … … 238 341 clearCallbackStates(); 239 342 240 // Tell the network process manager to forget about this network process proxy. This will cause us to be deleted. 241 m_processPool.networkProcessCrashed(*this); 343 Ref<NetworkProcessProxy> protectedThis(*this); 344 for (auto* processPool : WebProcessPool::allProcessPools()) 345 processPool->networkProcessCrashed(*this); 346 for (auto& websiteDataStore : m_websiteDataStores) 347 websiteDataStore.networkProcessCrashed(*this); 242 348 } 243 349 … … 259 365 return; 260 366 261 if (m_processPool.dispatchMessage(connection, decoder))262 return;263 264 367 didReceiveNetworkProcessProxyMessage(connection, decoder); 265 368 } … … 275 378 void NetworkProcessProxy::didClose(IPC::Connection&) 276 379 { 277 auto protectedProcessPool = makeRef(m_processPool);278 279 380 if (m_downloadProxyMap) 280 381 m_downloadProxyMap->invalidate(); … … 332 433 } 333 434 334 if (!topOrigin || !m_processPool.isServiceWorkerPageID(pageID)) {335 processAuthenticationChallenge(sessionID, WTFMove(authenticationChallenge));336 return;337 }338 339 435 WebPageProxy::forMostVisibleWebPageIfAny(sessionID, *topOrigin, [this, weakThis = makeWeakPtr(this), sessionID, authenticationChallenge = WTFMove(authenticationChallenge), negotiatedLegacyTLS](auto* page) mutable { 340 436 if (!weakThis) … … 393 489 return; 394 490 } 395 396 #if PLATFORM(COCOA)397 if (m_processPool.processSuppressionEnabled())398 setProcessSuppressionEnabled(true);399 #endif400 491 401 492 #if PLATFORM(IOS_FAMILY) … … 1199 1290 void NetworkProcessProxy::setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain>&& domains) 1200 1291 { 1201 processPool().setDomainsWithUserInteraction(WTFMove(domains)); 1292 for (auto* processPool : WebProcessPool::allProcessPools()) 1293 processPool->setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain> { domains }); 1202 1294 } 1203 1295 #endif // ENABLE(RESOURCE_LOAD_STATISTICS) … … 1246 1338 } 1247 1339 1248 void NetworkProcessProxy::addSession( Ref<WebsiteDataStore>&& store)1249 { 1250 m_ sessionIDs.add(store->sessionID());1340 void NetworkProcessProxy::addSession(WebsiteDataStore& store) 1341 { 1342 m_websiteDataStores.add(store); 1251 1343 1252 1344 if (canSendMessage()) 1253 send(Messages::NetworkProcess::AddWebsiteDataStore { store ->parameters() }, 0);1254 auto sessionID = store ->sessionID();1345 send(Messages::NetworkProcess::AddWebsiteDataStore { store.parameters() }, 0); 1346 auto sessionID = store.sessionID(); 1255 1347 if (!sessionID.isEphemeral()) { 1256 1348 #if ENABLE(INDEXED_DATABASE) 1257 createSymLinkForFileUpgrade(store->resolvedIndexedDatabaseDirectory()); 1258 #endif 1259 } 1260 } 1261 1262 bool NetworkProcessProxy::hasSession(PAL::SessionID sessionID) const 1263 { 1264 return m_sessionIDs.contains(sessionID); 1265 } 1266 1267 void NetworkProcessProxy::removeSession(PAL::SessionID sessionID) 1268 { 1269 m_sessionIDs.remove(sessionID); 1349 createSymLinkForFileUpgrade(store.resolvedIndexedDatabaseDirectory()); 1350 #endif 1351 } 1352 } 1353 1354 void NetworkProcessProxy::removeSession(WebsiteDataStore& websiteDataStore) 1355 { 1356 m_websiteDataStores.remove(websiteDataStore); 1270 1357 1271 1358 if (canSendMessage()) 1272 send(Messages::NetworkProcess::DestroySession { sessionID}, 0);1359 send(Messages::NetworkProcess::DestroySession { websiteDataStore.sessionID() }, 0); 1273 1360 } 1274 1361 1275 1362 WebsiteDataStore* NetworkProcessProxy::websiteDataStoreFromSessionID(PAL::SessionID sessionID) 1276 1363 { 1277 if (sessionID == PAL::SessionID::defaultSessionID()) { 1278 if (!WebsiteDataStore::defaultDataStoreExists()) { 1279 auto* websiteDataStore = m_processPool.websiteDataStore(); 1280 if (websiteDataStore && websiteDataStore->sessionID() == sessionID) 1281 return websiteDataStore; 1282 } 1283 1284 return WebsiteDataStore::defaultDataStore().ptr(); 1285 } 1286 return WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID); 1364 return WebsiteDataStore::existingDataStoreForSessionID(sessionID); 1287 1365 } 1288 1366 … … 1331 1409 void NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess(RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler) 1332 1410 { 1333 m_processPool.establishWorkerContextConnectionToNetworkProcess(*this, WTFMove(registrableDomain), sessionID, WTFMove(completionHandler));1411 WebProcessPool::establishWorkerContextConnectionToNetworkProcess(*this, RegistrableDomain {registrableDomain}, sessionID, WTFMove(completionHandler)); 1334 1412 } 1335 1413 … … 1494 1572 } 1495 1573 1574 static bool anyProcessPoolHasForegroundWebProcesses() 1575 { 1576 for (auto* processPool : WebProcessPool::allProcessPools()) { 1577 if (processPool->hasForegroundWebProcesses()) 1578 return true; 1579 } 1580 return false; 1581 } 1582 1583 static bool anyProcessPoolHasBackgroundWebProcesses() 1584 { 1585 for (auto* processPool : WebProcessPool::allProcessPools()) { 1586 if (processPool->hasBackgroundWebProcesses()) 1587 return true; 1588 } 1589 return false; 1590 } 1591 1496 1592 void NetworkProcessProxy::updateProcessAssertion() 1497 1593 { 1498 if ( processPool().hasForegroundWebProcesses()) {1594 if (anyProcessPoolHasForegroundWebProcesses()) { 1499 1595 if (!ProcessThrottler::isValidForegroundActivity(m_activityFromWebProcesses)) { 1500 1596 m_activityFromWebProcesses = throttler().foregroundActivity("Networking for foreground view(s)"_s); … … 1503 1599 return; 1504 1600 } 1505 if ( processPool().hasBackgroundWebProcesses()) {1601 if (anyProcessPoolHasBackgroundWebProcesses()) { 1506 1602 if (!ProcessThrottler::isValidBackgroundActivity(m_activityFromWebProcesses)) { 1507 1603 m_activityFromWebProcesses = throttler().backgroundActivity("Networking for background view(s)"_s); -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r267750 r267763 47 47 #if PLATFORM(COCOA) 48 48 #include "XPCEventHandler.h" 49 #include <wtf/OSObjectPtr.h> 49 50 #endif 50 51 51 52 namespace IPC { 52 53 class FormDataReference; 54 } 55 56 namespace API { 57 class CustomProtocolManagerClient; 53 58 } 54 59 … … 74 79 class DownloadProxy; 75 80 class DownloadProxyMap; 81 class WebCookieManagerProxy; 76 82 class WebPageProxy; 77 class WebProcessPool;78 83 class WebUserContentControllerProxy; 79 84 … … 87 92 struct ResourceLoadInfo; 88 93 struct WebsiteData; 89 90 class NetworkProcessProxy final : public AuxiliaryProcessProxy, private ProcessThrottlerClient, public CanMakeWeakPtr<NetworkProcessProxy> { 94 struct WebsiteDataStoreParameters; 95 96 class NetworkProcessProxy final : public AuxiliaryProcessProxy, private ProcessThrottlerClient, public CanMakeWeakPtr<NetworkProcessProxy>, public RefCounted<NetworkProcessProxy> { 91 97 WTF_MAKE_FAST_ALLOCATED; 92 98 public: … … 103 109 using OpenerDomain = WebCore::RegistrableDomain; 104 110 105 explicit NetworkProcessProxy(WebProcessPool&); 111 static Ref<NetworkProcessProxy> defaultNetworkProcess(); 112 static Ref<NetworkProcessProxy> create() { return adoptRef(*new NetworkProcessProxy); } 106 113 ~NetworkProcessProxy(); 107 114 115 static Vector<Ref<NetworkProcessProxy>> allNetworkProcesses(); 116 117 void terminate() final; 118 void didTerminate(); 119 108 120 void getNetworkProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&); 109 121 110 DownloadProxy& createDownloadProxy(WebsiteDataStore&, const WebCore::ResourceRequest&, const FrameInfoData&, WebPageProxy* originatingPage);122 DownloadProxy& createDownloadProxy(WebsiteDataStore&, WebProcessPool&, const WebCore::ResourceRequest&, const FrameInfoData&, WebPageProxy* originatingPage); 111 123 112 124 void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, CompletionHandler<void(WebsiteData)>&&); … … 206 218 void updateProcessAssertion(); 207 219 208 WebProcessPool& processPool() { return m_processPool; }209 210 220 #if ENABLE(CONTENT_EXTENSIONS) 211 221 void didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy&); 212 222 #endif 213 223 214 void addSession(Ref<WebsiteDataStore>&&); 215 bool hasSession(PAL::SessionID) const; 216 void removeSession(PAL::SessionID); 224 void addSession(WebsiteDataStore&); 225 void removeSession(WebsiteDataStore&); 217 226 218 227 #if ENABLE(INDEXED_DATABASE) … … 229 238 void unregisterSchemeForLegacyCustomProtocol(const String&); 230 239 240 void networkProcessCrashed(); 241 231 242 void resetQuota(PAL::SessionID, CompletionHandler<void()>&&); 232 243 … … 248 259 void clearBundleIdentifier(CompletionHandler<void()>&&); 249 260 261 WebCookieManagerProxy& cookieManager() { return m_cookieManager.get(); } 262 263 API::CustomProtocolManagerClient& customProtocolManagerClient() { return m_customProtocolManagerClient.get(); } 264 265 #if PLATFORM(COCOA) 266 xpc_object_t xpcEndpointMessage() const { return m_endpointMessage.get(); } 267 #endif 268 250 269 private: 270 explicit NetworkProcessProxy(); 271 272 void sendCreationParametersToNewProcess(); 273 251 274 // AuxiliaryProcessProxy 252 275 ASCIILiteral processName() const final { return "Networking"_s; } … … 256 279 void processWillShutDown(IPC::Connection&) override; 257 280 258 void networkProcessCrashed();259 281 void clearCallbackStates(); 260 282 … … 312 334 void processAuthenticationChallenge(PAL::SessionID, Ref<AuthenticationChallengeProxy>&&); 313 335 314 WebProcessPool& m_processPool;315 316 336 HashMap<CallbackID, CompletionHandler<void(WebsiteData)>> m_pendingFetchWebsiteDataCallbacks; 317 337 HashMap<CallbackID, CompletionHandler<void()>> m_pendingDeleteWebsiteDataCallbacks; … … 319 339 320 340 std::unique_ptr<DownloadProxyMap> m_downloadProxyMap; 341 342 UniqueRef<API::CustomProtocolManagerClient> m_customProtocolManagerClient; 321 343 #if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER) 322 344 LegacyCustomProtocolManagerProxy m_customProtocolManagerProxy; 323 345 #endif 346 324 347 ProcessThrottler m_throttler; 325 348 std::unique_ptr<ProcessThrottler::BackgroundActivity> m_activityForHoldingLockedFiles; … … 347 370 WeakPtr<NetworkProcessProxy> m_networkProcess; 348 371 }; 349 #endif 350 351 HashSet<PAL::SessionID> m_sessionIDs; 372 OSObjectPtr<xpc_object_t> m_endpointMessage; 373 #endif 374 375 WeakHashSet<WebsiteDataStore> m_websiteDataStores; 376 Ref<WebCookieManagerProxy> m_cookieManager; 352 377 }; 353 378 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxyCocoa.mm
r267618 r267763 52 52 return false; 53 53 54 if (messageName == LaunchServicesDatabaseXPCConstants::xpcLaunchServicesDatabaseXPCEndpointMessageName) 55 m_networkProcess->processPool().sendNetworkProcessXPCEndpointToWebProcess(event); 54 if (messageName == LaunchServicesDatabaseXPCConstants::xpcLaunchServicesDatabaseXPCEndpointMessageName) { 55 m_networkProcess->m_endpointMessage = event; 56 for (auto& dataStore : m_networkProcess->m_websiteDataStores) 57 dataStore.sendNetworkProcessXPCEndpointToAllWebProcesses(); 58 } 56 59 57 60 return true; -
trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.cpp
r267618 r267763 30 30 #include "APISecurityOrigin.h" 31 31 #include "NetworkProcessMessages.h" 32 #include "NetworkProcessProxy.h" 32 33 #include "OptionalCallbackID.h" 33 34 #include "WebCookieManagerMessages.h" … … 40 41 using namespace WebCore; 41 42 42 const char* WebCookieManagerProxy::supplementName() 43 { 44 return "WebCookieManagerProxy"; 45 } 46 47 Ref<WebCookieManagerProxy> WebCookieManagerProxy::create(WebProcessPool* processPool) 48 { 49 return adoptRef(*new WebCookieManagerProxy(processPool)); 50 } 51 52 WebCookieManagerProxy::WebCookieManagerProxy(WebProcessPool* processPool) 53 : WebContextSupplement(processPool) 54 { 55 WebContextSupplement::processPool()->addMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName(), *this); 43 WebCookieManagerProxy::WebCookieManagerProxy(NetworkProcessProxy& networkProcess) 44 : m_networkProcess(makeWeakPtr(networkProcess)) 45 { 46 networkProcess.addMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName(), *this); 56 47 } 57 48 58 49 WebCookieManagerProxy::~WebCookieManagerProxy() 59 50 { 51 if (m_networkProcess) 52 m_networkProcess->removeMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName()); 60 53 ASSERT(m_cookieObservers.isEmpty()); 61 54 } … … 66 59 } 67 60 68 // WebContextSupplement69 70 void WebCookieManagerProxy::processPoolDestroyed()71 {72 Vector<Observer*> observers;73 for (auto& observerSet : m_cookieObservers.values()) {74 for (auto* observer : observerSet)75 observers.append(observer);76 }77 78 for (auto* observer : observers)79 observer->managerDestroyed();80 81 ASSERT(m_cookieObservers.isEmpty());82 }83 84 void WebCookieManagerProxy::processDidClose(WebProcessProxy*)85 {86 }87 88 void WebCookieManagerProxy::processDidClose(NetworkProcessProxy*)89 {90 }91 92 void WebCookieManagerProxy::refWebContextSupplement()93 {94 API::Object::ref();95 }96 97 void WebCookieManagerProxy::derefWebContextSupplement()98 {99 API::Object::deref();100 }101 102 61 void WebCookieManagerProxy::getHostnamesWithCookies(PAL::SessionID sessionID, CompletionHandler<void(Vector<String>&&)>&& callbackFunction) 103 62 { 104 auto& networkProcess = processPool()->ensureNetworkProcess(); 105 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHostnamesWithCookies(sessionID), WTFMove(callbackFunction)); 63 if (m_networkProcess) 64 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetHostnamesWithCookies(sessionID), WTFMove(callbackFunction)); 65 else 66 callbackFunction({ }); 106 67 } 107 68 108 69 void WebCookieManagerProxy::deleteCookiesForHostnames(PAL::SessionID sessionID, const Vector<String>& hostnames) 109 70 { 110 processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteCookiesForHostnames(sessionID, hostnames)); 71 if (m_networkProcess) 72 m_networkProcess->send(Messages::WebCookieManager::DeleteCookiesForHostnames(sessionID, hostnames), 0); 111 73 } 112 74 113 75 void WebCookieManagerProxy::deleteAllCookies(PAL::SessionID sessionID) 114 76 { 115 processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookies(sessionID)); 77 if (m_networkProcess) 78 m_networkProcess->send(Messages::WebCookieManager::DeleteAllCookies(sessionID), 0); 116 79 } 117 80 118 81 void WebCookieManagerProxy::deleteCookie(PAL::SessionID sessionID, const Cookie& cookie, CompletionHandler<void()>&& callbackFunction) 119 82 { 120 auto& networkProcess = processPool()->ensureNetworkProcess();121 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteCookie(sessionID, cookie), [callbackFunction = WTFMove(callbackFunction)]() mutable {122 callbackFunction();123 });83 if (m_networkProcess) 84 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::DeleteCookie(sessionID, cookie), WTFMove(callbackFunction)); 85 else 86 callbackFunction(); 124 87 } 125 88 126 89 void WebCookieManagerProxy::deleteAllCookiesModifiedSince(PAL::SessionID sessionID, WallTime time, CompletionHandler<void()>&& callbackFunction) 127 90 { 128 auto& networkProcess = processPool()->ensureNetworkProcess(); 129 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time), WTFMove(callbackFunction)); 91 if (m_networkProcess) 92 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time), WTFMove(callbackFunction)); 93 else 94 callbackFunction(); 130 95 } 131 96 132 97 void WebCookieManagerProxy::setCookies(PAL::SessionID sessionID, const Vector<Cookie>& cookies, CompletionHandler<void()>&& callbackFunction) 133 98 { 134 auto& networkProcess = processPool()->ensureNetworkProcess(); 135 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookie(sessionID, cookies), WTFMove(callbackFunction)); 99 if (m_networkProcess) 100 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::SetCookie(sessionID, cookies), WTFMove(callbackFunction)); 101 else 102 callbackFunction(); 136 103 } 137 104 138 105 void WebCookieManagerProxy::setCookies(PAL::SessionID sessionID, const Vector<Cookie>& cookies, const URL& url, const URL& mainDocumentURL, CompletionHandler<void()>&& callbackFunction) 139 106 { 140 auto& networkProcess = processPool()->ensureNetworkProcess(); 141 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL), WTFMove(callbackFunction)); 107 if (m_networkProcess) 108 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL), WTFMove(callbackFunction)); 109 else 110 callbackFunction(); 142 111 } 143 112 144 113 void WebCookieManagerProxy::getAllCookies(PAL::SessionID sessionID, CompletionHandler<void(Vector<Cookie>&&)>&& callbackFunction) 145 114 { 146 auto& networkProcess = processPool()->ensureNetworkProcess(); 147 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetAllCookies(sessionID), WTFMove(callbackFunction)); 115 if (m_networkProcess) 116 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetAllCookies(sessionID), WTFMove(callbackFunction)); 117 else 118 callbackFunction({ }); 148 119 } 149 120 150 121 void WebCookieManagerProxy::getCookies(PAL::SessionID sessionID, const URL& url, CompletionHandler<void(Vector<Cookie>&&)>&& callbackFunction) 151 122 { 152 auto& networkProcess = processPool()->ensureNetworkProcess(); 153 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetCookies(sessionID, url), WTFMove(callbackFunction)); 123 if (m_networkProcess) 124 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetCookies(sessionID, url), WTFMove(callbackFunction)); 125 else 126 callbackFunction({ }); 154 127 } 155 128 156 129 void WebCookieManagerProxy::startObservingCookieChanges(PAL::SessionID sessionID) 157 130 { 158 processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StartObservingCookieChanges(sessionID)); 131 if (m_networkProcess) 132 m_networkProcess->send(Messages::WebCookieManager::StartObservingCookieChanges(sessionID), 0); 159 133 } 160 134 161 135 void WebCookieManagerProxy::stopObservingCookieChanges(PAL::SessionID sessionID) 162 136 { 163 processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StopObservingCookieChanges(sessionID)); 137 if (m_networkProcess) 138 m_networkProcess->send(Messages::WebCookieManager::StopObservingCookieChanges(sessionID), 0); 164 139 } 165 140 … … 212 187 void WebCookieManagerProxy::setHTTPCookieAcceptPolicy(PAL::SessionID, HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& callbackFunction) 213 188 { 214 #if USE(SOUP)215 processPool()->setInitialHTTPCookieAcceptPolicy(policy);216 #endif 217 218 auto& networkProcess = processPool()->ensureNetworkProcess(); 219 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy), WTFMove(callbackFunction)); 220 } 221 222 void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(PAL::SessionID, CompletionHandler<void(HTTPCookieAcceptPolicy)>&& callbackFunction)223 { 224 auto& networkProcess = processPool()->ensureNetworkProcess();225 networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(), WTFMove(callbackFunction));189 if (m_networkProcess) 190 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy), WTFMove(callbackFunction)); 191 else 192 callbackFunction(); 193 } 194 195 void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(PAL::SessionID sessionID, CompletionHandler<void(HTTPCookieAcceptPolicy)>&& callbackFunction) 196 { 197 if (m_networkProcess) 198 m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(sessionID), WTFMove(callbackFunction)); 199 else 200 callbackFunction(HTTPCookieAcceptPolicy::Never); 226 201 } 227 202 -
trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h
r267618 r267763 57 57 typedef GenericCallback<const Vector<WebCore::Cookie>&> GetCookiesCallback; 58 58 59 class WebCookieManagerProxy : public API::ObjectImpl<API::Object::Type::CookieManager>, p ublic WebContextSupplement, private IPC::MessageReceiver {59 class WebCookieManagerProxy : public API::ObjectImpl<API::Object::Type::CookieManager>, private IPC::MessageReceiver { 60 60 public: 61 static const char* supplementName(); 62 63 static Ref<WebCookieManagerProxy> create(WebProcessPool*); 61 static Ref<WebCookieManagerProxy> create(NetworkProcessProxy& networkProcess) { return adoptRef(*new WebCookieManagerProxy(networkProcess)); } 64 62 virtual ~WebCookieManagerProxy(); 65 63 … … 105 103 106 104 private: 107 WebCookieManagerProxy( WebProcessPool*);105 WebCookieManagerProxy(NetworkProcessProxy&); 108 106 109 107 void cookiesDidChange(PAL::SessionID); 110 111 // WebContextSupplement112 void processPoolDestroyed() override;113 void processDidClose(WebProcessProxy*) override;114 void processDidClose(NetworkProcessProxy*) override;115 void refWebContextSupplement() override;116 void derefWebContextSupplement() override;117 108 118 109 // IPC::MessageReceiver … … 126 117 HashMap<PAL::SessionID, HashSet<Observer*>> m_cookieObservers; 127 118 119 WeakPtr<NetworkProcessProxy> m_networkProcess; 128 120 WebCookieManagerProxyClient m_client; 129 121 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r267618 r267763 1747 1747 1748 1748 send(Messages::WebPage::SetControlledByAutomation(controlled)); 1749 m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::SetSessionIsControlledByAutomation(m_websiteDataStore->sessionID(), m_controlledByAutomation));1749 websiteDataStore().networkProcess().send(Messages::NetworkProcess::SetSessionIsControlledByAutomation(m_websiteDataStore->sessionID(), m_controlledByAutomation), 0); 1750 1750 } 1751 1751 … … 3208 3208 { 3209 3209 #if ENABLE(APP_BOUND_DOMAINS) && !PLATFORM(MACCATALYST) 3210 if (auto* networkProcess = m_process->processPool().networkProcess()) { 3211 if (!networkProcess->canSendMessage()) 3212 return; 3213 networkProcess->send(Messages::NetworkProcess::DisableServiceWorkerEntitlement(), 0); 3214 } 3210 websiteDataStore().networkProcess().send(Messages::NetworkProcess::DisableServiceWorkerEntitlement(), 0); 3215 3211 #endif 3216 3212 } … … 3221 3217 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 3222 3218 sendWithAsyncReply(Messages::WebPage::ClearServiceWorkerEntitlementOverride(), [callbackAggregator] { }); 3223 if (auto* networkProcess = m_process->processPool().networkProcess()) { 3224 if (!networkProcess->canSendMessage()) { 3225 completionHandler(); 3226 return; 3227 } 3228 networkProcess->sendWithAsyncReply(Messages::NetworkProcess::ClearServiceWorkerEntitlementOverride(), [callbackAggregator] { }); 3229 } 3219 websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::ClearServiceWorkerEntitlementOverride(), [callbackAggregator] { }); 3230 3220 #else 3231 3221 completionHandler(); … … 4421 4411 4422 4412 auto storedCredentialsPolicy = m_canUseCredentialStorage ? WebCore::StoredCredentialsPolicy::Use : WebCore::StoredCredentialsPolicy::DoNotUse; 4423 m_process->processPool().ensureNetworkProcess().preconnectTo(sessionID(), identifier(), webPageID(), url, userAgent(), storedCredentialsPolicy, isNavigatingToAppBoundDomain());4413 websiteDataStore().networkProcess().preconnectTo(sessionID(), identifier(), webPageID(), url, userAgent(), storedCredentialsPolicy, isNavigatingToAppBoundDomain()); 4424 4414 } 4425 4415 … … 4717 4707 URL requesterURL { URL(), requesterOrigin.toString() }; 4718 4708 if (!currentDomain.matches(requesterURL)) 4719 m_ process->processPool().didCommitCrossSiteLoadWithDataTransfer(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, navigationDataTransfer, m_identifier, m_webPageID);4709 m_websiteDataStore->networkProcess().didCommitCrossSiteLoadWithDataTransfer(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, navigationDataTransfer, m_identifier, m_webPageID); 4720 4710 } 4721 4711 #endif … … 4755 4745 if (auto& adClickAttribution = navigation->adClickAttribution()) { 4756 4746 if (adClickAttribution->destination().matches(frame->url())) 4757 m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::StoreAdClickAttribution(m_websiteDataStore->sessionID(), *adClickAttribution));4747 websiteDataStore().networkProcess().send(Messages::NetworkProcess::StoreAdClickAttribution(m_websiteDataStore->sessionID(), *adClickAttribution), 0); 4758 4748 } 4759 4749 } … … 5369 5359 return; 5370 5360 5371 m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::LogFrameNavigation(m_websiteDataStore->sessionID(), RegistrableDomain { targetURL }, RegistrableDomain { pageURL }, RegistrableDomain { sourceURL }, isRedirect, frame.isMainFrame(), MonotonicTime::now() - m_didFinishDocumentLoadForMainFrameTimestamp, wasPotentiallyInitiatedByUser));5361 websiteDataStore().networkProcess().send(Messages::NetworkProcess::LogFrameNavigation(m_websiteDataStore->sessionID(), RegistrableDomain { targetURL }, RegistrableDomain { pageURL }, RegistrableDomain { sourceURL }, isRedirect, frame.isMainFrame(), MonotonicTime::now() - m_didFinishDocumentLoadForMainFrameTimestamp, wasPotentiallyInitiatedByUser), 0); 5372 5362 } 5373 5363 #endif … … 9994 9984 void WebPageProxy::dumpAdClickAttribution(CompletionHandler<void(const String&)>&& completionHandler) 9995 9985 { 9996 if (auto* networkProcess = m_process->processPool().networkProcess()) { 9997 if (!networkProcess->canSendMessage()) { 9998 completionHandler(emptyString()); 9999 return; 10000 } 10001 networkProcess->sendWithAsyncReply(Messages::NetworkProcess::DumpAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler)); 10002 } 9986 websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::DumpAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler)); 10003 9987 } 10004 9988 10005 9989 void WebPageProxy::clearAdClickAttribution(CompletionHandler<void()>&& completionHandler) 10006 9990 { 10007 if (auto* networkProcess = m_process->processPool().networkProcess()) { 10008 if (!networkProcess->canSendMessage()) { 10009 completionHandler(); 10010 return; 10011 } 10012 networkProcess->sendWithAsyncReply(Messages::NetworkProcess::ClearAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler)); 10013 } else 10014 completionHandler(); 9991 websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::ClearAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler)); 10015 9992 } 10016 9993 10017 9994 void WebPageProxy::setAdClickAttributionOverrideTimerForTesting(bool value, CompletionHandler<void()>&& completionHandler) 10018 9995 { 10019 if (auto* networkProcess = m_process->processPool().networkProcess()) { 10020 if (!networkProcess->canSendMessage()) { 10021 completionHandler(); 10022 return; 10023 } 10024 networkProcess->sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionOverrideTimerForTesting(m_websiteDataStore->sessionID(), value), WTFMove(completionHandler)); 10025 } 9996 websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionOverrideTimerForTesting(m_websiteDataStore->sessionID(), value), WTFMove(completionHandler)); 10026 9997 } 10027 9998 10028 9999 void WebPageProxy::setAdClickAttributionConversionURLForTesting(const URL& url, CompletionHandler<void()>&& completionHandler) 10029 10000 { 10030 if (auto* networkProcess = m_process->processPool().networkProcess()) { 10031 if (!networkProcess->canSendMessage()) { 10032 completionHandler(); 10033 return; 10034 } 10035 networkProcess->sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionConversionURLForTesting(m_websiteDataStore->sessionID(), url), WTFMove(completionHandler)); 10036 } 10001 websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionConversionURLForTesting(m_websiteDataStore->sessionID(), url), WTFMove(completionHandler)); 10037 10002 } 10038 10003 10039 10004 void WebPageProxy::markAdClickAttributionsAsExpiredForTesting(CompletionHandler<void()>&& completionHandler) 10040 10005 { 10041 if (auto* networkProcess = m_process->processPool().networkProcess()) { 10042 if (!networkProcess->canSendMessage()) { 10043 completionHandler(); 10044 return; 10045 } 10046 networkProcess->sendWithAsyncReply(Messages::NetworkProcess::MarkAdClickAttributionsAsExpiredForTesting(m_websiteDataStore->sessionID()), WTFMove(completionHandler)); 10047 } 10006 websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::MarkAdClickAttributionsAsExpiredForTesting(m_websiteDataStore->sessionID()), WTFMove(completionHandler)); 10048 10007 } 10049 10008 -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r267618 r267763 46 46 #include "LogInitialization.h" 47 47 #include "Logging.h" 48 #include "NetworkProcessConnectionInfo.h"49 48 #include "NetworkProcessCreationParameters.h" 50 49 #include "NetworkProcessMessages.h" … … 144 143 145 144 #define WEBPROCESSPOOL_RELEASE_LOG(channel, fmt, ...) RELEASE_LOG(channel, "%p - WebProcessPool::" fmt, this, ##__VA_ARGS__) 145 #define WEBPROCESSPOOL_RELEASE_LOG_STATIC(channel, fmt, ...) RELEASE_LOG(channel, "WebProcessPool::" fmt, ##__VA_ARGS__) 146 146 #define WEBPROCESSPOOL_RELEASE_LOG_ERROR(channel, fmt, ...) RELEASE_LOG_ERROR(channel, "%p - WebProcessPool::" fmt, this, ##__VA_ARGS__) 147 147 #define WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED(channel, fmt, ...) RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), channel, "%p - WebProcessPool::" fmt, this, ##__VA_ARGS__) 148 #define WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED_STATIC(channel, fmt, ...) RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), channel, "WebProcessPool::" fmt, ##__VA_ARGS__) 148 149 149 150 namespace WebKit { … … 233 234 } 234 235 236 Vector<String> WebProcessPool::urlSchemesWithCustomProtocolHandlers() 237 { 238 return copyToVector(globalURLSchemesWithCustomProtocolHandlers()); 239 } 240 235 241 WebProcessPool::WebProcessPool(API::ProcessPoolConfiguration& configuration) 236 242 : m_configuration(configuration.copy()) … … 240 246 , m_downloadClient(makeUniqueRef<API::DownloadClient>()) 241 247 , m_historyClient(makeUnique<API::LegacyContextHistoryClient>()) 242 , m_customProtocolManagerClient(makeUnique<API::CustomProtocolManagerClient>())243 248 , m_visitedLinkStore(VisitedLinkStore::create()) 244 249 #if PLATFORM(MAC) … … 268 273 }); 269 274 270 if (!m_websiteDataStore && WebKit::WebsiteDataStore::defaultDataStoreExists())271 m_websiteDataStore = WebKit::WebsiteDataStore::defaultDataStore();272 273 275 for (auto& scheme : m_configuration->alwaysRevalidatedURLSchemes()) 274 276 m_schemesToRegisterAsAlwaysRevalidated.add(scheme); … … 286 288 287 289 // NOTE: These sub-objects must be initialized after m_messageReceiverMap.. 288 addSupplement<WebCookieManagerProxy>();289 290 addSupplement<WebGeolocationManagerProxy>(); 290 291 addSupplement<WebNotificationManagerProxy>(); … … 343 344 #endif 344 345 345 if (m_networkProcess)346 m_networkProcess->shutDownProcess();347 348 346 #if ENABLE(GAMEPAD) 349 347 if (!m_processesUsingGamepads.isEmpty()) … … 403 401 } 404 402 405 void WebProcessPool::setLegacyCustomProtocolManagerClient(std::unique_ptr<API::CustomProtocolManagerClient>&& customProtocolManagerClient)406 {407 #if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)408 if (!customProtocolManagerClient)409 m_customProtocolManagerClient = makeUnique<API::CustomProtocolManagerClient>();410 else411 m_customProtocolManagerClient = WTFMove(customProtocolManagerClient);412 #endif413 }414 415 403 void WebProcessPool::setCustomWebContentServiceBundleIdentifier(const String& customWebContentServiceBundleIdentifier) 416 404 { … … 422 410 } 423 411 424 IPC::Connection* WebProcessPool::networkingProcessConnection()425 {426 return m_networkProcess->connection();427 }428 429 412 void WebProcessPool::languageChanged(void* context) 430 413 { … … 436 419 sendToAllProcesses(Messages::WebProcess::UserPreferredLanguagesChanged()); 437 420 #if USE(SOUP) 438 if (m_networkProcess) 439 m_networkProcess->send(Messages::NetworkProcess::UserPreferredLanguagesChanged(userPreferredLanguages()), 0); 421 WebsiteDataStore::defaultDataStore()->networkProcess().send(Messages::NetworkProcess::UserPreferredLanguagesChanged(userPreferredLanguages()), 0); 440 422 #endif 441 423 } … … 450 432 { 451 433 sendToAllProcesses(Messages::AuxiliaryProcess::DidReceiveMemoryPressureEvent(isCritical)); 452 sendToNetworkingProcess(Messages::AuxiliaryProcess::DidReceiveMemoryPressureEvent(isCritical)); 434 for (auto networkProcess : NetworkProcessProxy::allNetworkProcesses()) 435 networkProcess->send(Messages::AuxiliaryProcess::DidReceiveMemoryPressureEvent(isCritical), 0); 453 436 #if ENABLE(NETSCAPE_PLUGIN_API) 454 437 PluginProcessManager::singleton().sendMemoryPressureEvent(isCritical); … … 475 458 } 476 459 477 NetworkProcessProxy& WebProcessPool::ensureNetworkProcess(WebsiteDataStore* withWebsiteDataStore)478 {479 ASSERT(RunLoop::isMain());480 481 // FIXME: This is a temporary workaround for apps using WebKit API on non-main threads.482 // We should remove this once we enforce threading violation check on our APIs.483 // https://bugs.webkit.org/show_bug.cgi?id=200246.484 if (!RunLoop::isMain()) {485 callOnMainRunLoopAndWait([this, protectedThis = makeRef(*this)] {486 ensureNetworkProcess();487 });488 return *m_networkProcess;489 }490 491 if (m_networkProcess) {492 if (withWebsiteDataStore) {493 m_networkProcess->addSession(makeRef(*withWebsiteDataStore));494 withWebsiteDataStore->clearPendingCookies();495 }496 return *m_networkProcess;497 }498 499 auto networkProcess = makeUnique<NetworkProcessProxy>(*this);500 501 NetworkProcessCreationParameters parameters;502 503 if (m_websiteDataStore) {504 parameters.defaultDataStoreParameters.pendingCookies = copyToVector(m_websiteDataStore->pendingCookies());505 m_websiteDataStore->clearPendingCookies();506 #if PLATFORM(COCOA)507 parameters.defaultDataStoreParameters.networkSessionParameters.sourceApplicationBundleIdentifier = m_websiteDataStore->configuration().sourceApplicationBundleIdentifier();508 parameters.defaultDataStoreParameters.networkSessionParameters.sourceApplicationSecondaryIdentifier = m_websiteDataStore->configuration().sourceApplicationSecondaryIdentifier();509 #endif510 }511 512 parameters.cacheModel = LegacyGlobalSettings::singleton().cacheModel();513 514 for (auto& scheme : globalURLSchemesWithCustomProtocolHandlers())515 parameters.urlSchemesRegisteredForCustomProtocols.append(scheme);516 517 #if PLATFORM(IOS_FAMILY)518 String cookieStorageDirectory = WebProcessPool::cookieStorageDirectory();519 if (!cookieStorageDirectory.isEmpty())520 SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle);521 522 String containerCachesDirectory = WebProcessPool::networkingCachesDirectory();523 if (!containerCachesDirectory.isEmpty())524 SandboxExtension::createHandleForReadWriteDirectory(containerCachesDirectory, parameters.containerCachesDirectoryExtensionHandle);525 526 String parentBundleDirectory = WebProcessPool::parentBundleDirectory();527 if (!parentBundleDirectory.isEmpty())528 SandboxExtension::createHandle(parentBundleDirectory, SandboxExtension::Type::ReadOnly, parameters.parentBundleDirectoryExtensionHandle);529 530 #if ENABLE(INDEXED_DATABASE)531 SandboxExtension::createHandleForTemporaryFile(emptyString(), SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.indexedDatabaseTempBlobDirectoryExtensionHandle);532 #endif533 #endif534 535 parameters.urlSchemesRegisteredAsSecure = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsSecure());536 parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsBypassingContentSecurityPolicy());537 parameters.urlSchemesRegisteredAsLocal = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsLocal());538 parameters.urlSchemesRegisteredAsNoAccess = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsNoAccess());539 540 #if ENABLE(INDEXED_DATABASE)541 // *********542 // IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)543 // *********544 if (m_websiteDataStore)545 parameters.defaultDataStoreParameters.indexedDatabaseDirectory = m_websiteDataStore->resolvedIndexedDatabaseDirectory();546 else if (WebKit::WebsiteDataStore::defaultDataStoreExists())547 parameters.defaultDataStoreParameters.indexedDatabaseDirectory = WebKit::WebsiteDataStore::defaultDataStore()->parameters().indexedDatabaseDirectory;548 549 if (!parameters.defaultDataStoreParameters.indexedDatabaseDirectory.isEmpty()) {550 SandboxExtension::createHandleForReadWriteDirectory(parameters.defaultDataStoreParameters.indexedDatabaseDirectory, parameters.defaultDataStoreParameters.indexedDatabaseDirectoryExtensionHandle);551 networkProcess->createSymLinkForFileUpgrade(parameters.defaultDataStoreParameters.indexedDatabaseDirectory);552 }553 #endif554 555 #if ENABLE(SERVICE_WORKER)556 if (m_websiteDataStore)557 parameters.serviceWorkerRegistrationDirectory = m_websiteDataStore->resolvedServiceWorkerRegistrationDirectory();558 if (!parameters.serviceWorkerRegistrationDirectory)559 parameters.serviceWorkerRegistrationDirectory = WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory();560 SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);561 #endif562 563 auto localStorageDirectory = m_websiteDataStore ? m_websiteDataStore->resolvedLocalStorageDirectory() : nullString();564 if (!localStorageDirectory)565 localStorageDirectory = WebKit::WebsiteDataStore::defaultLocalStorageDirectory();566 parameters.defaultDataStoreParameters.localStorageDirectory = localStorageDirectory;567 SandboxExtension::createHandleForReadWriteDirectory(localStorageDirectory, parameters.defaultDataStoreParameters.localStorageDirectoryExtensionHandle);568 569 auto cacheStorageDirectory = m_websiteDataStore ? m_websiteDataStore->cacheStorageDirectory() : nullString();570 if (!cacheStorageDirectory.isEmpty()) {571 SandboxExtension::createHandleForReadWriteDirectory(cacheStorageDirectory, parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);572 parameters.defaultDataStoreParameters.cacheStorageDirectory = WTFMove(cacheStorageDirectory);573 }574 575 String resourceLoadStatisticsDirectory;576 SandboxExtension::Handle resourceLoadStatisticsDirectoryExtensionHandle;577 if (m_websiteDataStore)578 resourceLoadStatisticsDirectory = m_websiteDataStore->resolvedResourceLoadStatisticsDirectory();579 else if (WebKit::WebsiteDataStore::defaultDataStoreExists())580 resourceLoadStatisticsDirectory = WebKit::WebsiteDataStore::defaultDataStore()->parameters().networkSessionParameters.resourceLoadStatisticsParameters.directory;581 582 if (!resourceLoadStatisticsDirectory.isEmpty())583 SandboxExtension::createHandleForReadWriteDirectory(resourceLoadStatisticsDirectory, resourceLoadStatisticsDirectoryExtensionHandle);584 585 bool enableResourceLoadStatistics = false;586 bool enableResourceLoadStatisticsLogTestingEvent = false;587 bool shouldIncludeLocalhost = true;588 bool enableResourceLoadStatisticsDebugMode = false;589 #if ENABLE(RESOURCE_LOAD_STATISTICS)590 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::All;591 WebCore::SameSiteStrictEnforcementEnabled sameSiteStrictEnforcementEnabled = WebCore::SameSiteStrictEnforcementEnabled::No;592 #endif593 WebCore::FirstPartyWebsiteDataRemovalMode firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies;594 WebCore::RegistrableDomain standaloneApplicationDomain;595 HashSet<WebCore::RegistrableDomain> appBoundDomains;596 WebCore::RegistrableDomain manualPrevalentResource;597 598 #if PLATFORM(COCOA)599 m_tccPreferenceEnabled = doesAppHaveITPEnabled();600 if (withWebsiteDataStore && !withWebsiteDataStore->isItpStateExplicitlySet()) {601 enableResourceLoadStatistics = m_tccPreferenceEnabled;602 withWebsiteDataStore->setResourceLoadStatisticsEnabled(enableResourceLoadStatistics);603 } else if (m_websiteDataStore && !m_websiteDataStore->isItpStateExplicitlySet()) {604 enableResourceLoadStatistics = m_tccPreferenceEnabled;605 m_websiteDataStore->setResourceLoadStatisticsEnabled(enableResourceLoadStatistics);606 } else if (WebsiteDataStore::defaultDataStoreExists() && !WebsiteDataStore::defaultDataStore()->isItpStateExplicitlySet()) {607 enableResourceLoadStatistics = m_tccPreferenceEnabled;608 WebsiteDataStore::defaultDataStore()->setResourceLoadStatisticsEnabled(enableResourceLoadStatistics);609 } else610 enableResourceLoadStatistics = m_tccPreferenceEnabled;611 #endif612 613 if (withWebsiteDataStore) {614 enableResourceLoadStatistics = withWebsiteDataStore->resourceLoadStatisticsEnabled();615 #if ENABLE(RESOURCE_LOAD_STATISTICS)616 enableResourceLoadStatisticsLogTestingEvent = withWebsiteDataStore->hasStatisticsTestingCallback();617 #endif618 if (enableResourceLoadStatistics) {619 auto networkSessionParameters = withWebsiteDataStore->parameters().networkSessionParameters;620 shouldIncludeLocalhost = networkSessionParameters.resourceLoadStatisticsParameters.shouldIncludeLocalhost;621 enableResourceLoadStatisticsDebugMode = networkSessionParameters.resourceLoadStatisticsParameters.enableDebugMode;622 #if ENABLE(RESOURCE_LOAD_STATISTICS)623 thirdPartyCookieBlockingMode = networkSessionParameters.resourceLoadStatisticsParameters.thirdPartyCookieBlockingMode;624 sameSiteStrictEnforcementEnabled = networkSessionParameters.resourceLoadStatisticsParameters.sameSiteStrictEnforcementEnabled;625 #endif626 firstPartyWebsiteDataRemovalMode = networkSessionParameters.resourceLoadStatisticsParameters.firstPartyWebsiteDataRemovalMode;627 standaloneApplicationDomain = networkSessionParameters.resourceLoadStatisticsParameters.standaloneApplicationDomain;628 appBoundDomains = networkSessionParameters.resourceLoadStatisticsParameters.appBoundDomains;629 manualPrevalentResource = networkSessionParameters.resourceLoadStatisticsParameters.manualPrevalentResource;630 }631 632 parameters.defaultDataStoreParameters.perOriginStorageQuota = withWebsiteDataStore->perOriginStorageQuota();633 parameters.defaultDataStoreParameters.perThirdPartyOriginStorageQuota = withWebsiteDataStore->perThirdPartyOriginStorageQuota();634 635 const auto& networkCacheDirectory = withWebsiteDataStore->resolvedNetworkCacheDirectory();636 if (!networkCacheDirectory.isNull()) {637 parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;638 SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);639 }640 641 const auto& hstsStorageDirectory = withWebsiteDataStore->resolvedHSTSStorageDirectory();642 if (!hstsStorageDirectory.isNull()) {643 parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectory = hstsStorageDirectory;644 SandboxExtension::createHandle(hstsStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectoryExtensionHandle);645 }646 } else if (m_websiteDataStore) {647 enableResourceLoadStatistics = m_websiteDataStore->resourceLoadStatisticsEnabled();648 #if ENABLE(RESOURCE_LOAD_STATISTICS)649 enableResourceLoadStatisticsLogTestingEvent = m_websiteDataStore->hasStatisticsTestingCallback();650 #endif651 if (enableResourceLoadStatistics) {652 auto networkSessionParameters = m_websiteDataStore->parameters().networkSessionParameters;653 shouldIncludeLocalhost = networkSessionParameters.resourceLoadStatisticsParameters.shouldIncludeLocalhost;654 enableResourceLoadStatisticsDebugMode = networkSessionParameters.resourceLoadStatisticsParameters.enableDebugMode;655 #if ENABLE(RESOURCE_LOAD_STATISTICS)656 thirdPartyCookieBlockingMode = networkSessionParameters.resourceLoadStatisticsParameters.thirdPartyCookieBlockingMode;657 sameSiteStrictEnforcementEnabled = networkSessionParameters.resourceLoadStatisticsParameters.sameSiteStrictEnforcementEnabled;658 #endif659 firstPartyWebsiteDataRemovalMode = networkSessionParameters.resourceLoadStatisticsParameters.firstPartyWebsiteDataRemovalMode;660 standaloneApplicationDomain = networkSessionParameters.resourceLoadStatisticsParameters.standaloneApplicationDomain;661 appBoundDomains = networkSessionParameters.resourceLoadStatisticsParameters.appBoundDomains;662 manualPrevalentResource = networkSessionParameters.resourceLoadStatisticsParameters.manualPrevalentResource;663 }664 665 parameters.defaultDataStoreParameters.perOriginStorageQuota = m_websiteDataStore->perOriginStorageQuota();666 parameters.defaultDataStoreParameters.perThirdPartyOriginStorageQuota = m_websiteDataStore->perThirdPartyOriginStorageQuota();667 668 const auto& networkCacheDirectory = m_websiteDataStore->resolvedNetworkCacheDirectory();669 if (!networkCacheDirectory.isNull()) {670 parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;671 SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);672 }673 674 const auto& hstsStorageDirectory = m_websiteDataStore->resolvedHSTSStorageDirectory();675 if (!hstsStorageDirectory.isNull()) {676 parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectory = hstsStorageDirectory;677 SandboxExtension::createHandle(hstsStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectoryExtensionHandle);678 }679 } else {680 if (WebsiteDataStore::defaultDataStoreExists())681 enableResourceLoadStatistics = WebsiteDataStore::defaultDataStore()->resourceLoadStatisticsEnabled();682 auto networkCacheDirectory = WebsiteDataStore::defaultNetworkCacheDirectory();683 parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;684 SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);685 }686 687 #if HAVE(CFNETWORK_ALTERNATIVE_SERVICE)688 if (WebsiteDataStore::http3Enabled()) {689 parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectory = WebsiteDataStore::defaultAlternativeServicesDirectory();690 if (!parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectory.isEmpty())691 SandboxExtension::createHandleForReadWriteDirectory(parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectory, parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectoryExtensionHandle);692 parameters.defaultDataStoreParameters.networkSessionParameters.http3Enabled = true;693 }694 #endif695 bool isItpStateExplicitlySet = false;696 parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsParameters = ResourceLoadStatisticsParameters {697 WTFMove(resourceLoadStatisticsDirectory),698 WTFMove(resourceLoadStatisticsDirectoryExtensionHandle),699 enableResourceLoadStatistics,700 isItpStateExplicitlySet,701 enableResourceLoadStatisticsLogTestingEvent,702 shouldIncludeLocalhost,703 enableResourceLoadStatisticsDebugMode,704 #if ENABLE(RESOURCE_LOAD_STATISTICS)705 thirdPartyCookieBlockingMode,706 sameSiteStrictEnforcementEnabled,707 #endif708 firstPartyWebsiteDataRemovalMode,709 standaloneApplicationDomain,710 appBoundDomains,711 manualPrevalentResource,712 };713 714 // Add any platform specific parameters715 platformInitializeNetworkProcess(parameters);716 717 // Initialize the network process.718 networkProcess->send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0);719 720 #if PLATFORM(COCOA)721 networkProcess->send(Messages::NetworkProcess::SetQOS(networkProcessLatencyQOS(), networkProcessThroughputQOS()), 0);722 #endif723 724 networkProcess->updateProcessAssertion();725 726 if (withWebsiteDataStore) {727 networkProcess->addSession(makeRef(*withWebsiteDataStore));728 withWebsiteDataStore->clearPendingCookies();729 }730 731 // Make sure the network process knows about all the sessions that have been registered before it started.732 for (auto& sessionID : m_sessionToPageIDsMap.keys()) {733 if (auto* websiteDataStore = WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID))734 networkProcess->addSession(*websiteDataStore);735 }736 737 m_networkProcess = WTFMove(networkProcess);738 return *m_networkProcess;739 }740 741 460 void WebProcessPool::networkProcessCrashed(NetworkProcessProxy& networkProcessProxy) 742 461 { 743 ASSERT(m_networkProcess);744 ASSERT(&networkProcessProxy == m_networkProcess.get());745 746 462 for (auto& supplement : m_supplements.values()) 747 463 supplement->processDidClose(&networkProcessProxy); … … 752 468 m_automationSession->terminate(); 753 469 754 // Leave the process proxy around during client call, so that the client could query the process identifier.755 m_networkProcess = nullptr;756 757 470 terminateServiceWorkers(); 758 471 } … … 763 476 m_client.serviceWorkerProcessDidCrash(this, proxy.processIdentifier()); 764 477 #endif 765 }766 767 void WebProcessPool::getNetworkProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply&& reply)768 {769 ensureNetworkProcess();770 m_networkProcess->getNetworkProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {771 if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) {772 WEBPROCESSPOOL_RELEASE_LOG_ERROR(Process, "getNetworkProcessConnection: Failed first attempt, retrying");773 ensureNetworkProcess();774 m_networkProcess->getNetworkProcessConnection(*webProcessProxy, WTFMove(reply));775 return;776 }777 reply(connectionInfo);778 });779 478 } 780 479 … … 802 501 #endif 803 502 503 bool WebProcessPool::s_useSeparateServiceWorkerProcess = false; 504 804 505 #if ENABLE(SERVICE_WORKER) 805 506 void WebProcessPool::establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy& proxy, RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler) 806 507 { 807 ASSERT_UNUSED(proxy, &proxy == m_networkProcess.get());808 809 auto* websiteDataStore = WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID);810 811 if (!websiteDataStore) {812 if (!m_websiteDataStore) 813 m_websiteDataStore = WebKit::WebsiteDataStore::defaultDataStore().ptr();814 websiteDataStore = m_websiteDataStore.get();815 }508 auto* websiteDataStore = WebsiteDataStore::existingDataStoreForSessionID(sessionID); 509 if (!websiteDataStore) 510 websiteDataStore = WebsiteDataStore::defaultDataStore().ptr(); 511 if (!processPools().size()) 512 static NeverDestroyed<Ref<WebProcessPool>> serviceWorkerProcessPool(WebProcessPool::create(API::ProcessPoolConfiguration::create().get())); 513 514 // Arbitrarily choose the first process pool to host the service worker process. 515 auto* processPool = processPools()[0]; 516 ASSERT(processPool); 816 517 817 518 WebProcessProxy* serviceWorkerProcessProxy { nullptr }; 818 if (!m_useSeparateServiceWorkerProcess) { 819 for (auto& process : m_processes) { 820 if (process == m_prewarmedProcess || process->isDummyProcessProxy()) 519 520 if (!s_useSeparateServiceWorkerProcess) { 521 for (auto& process : processPool->m_processes) { 522 if (process == processPool->m_prewarmedProcess || process->isDummyProcessProxy()) 821 523 continue; 822 524 if (&process->websiteDataStore() != websiteDataStore) … … 826 528 827 529 serviceWorkerProcessProxy = process.get(); 828 serviceWorkerProcessProxy->enableServiceWorkers( userContentControllerIdentifierForServiceWorkers());829 830 WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED (ServiceWorker, "establishWorkerContextConnectionToNetworkProcess reusing an existing web process (process=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier());530 serviceWorkerProcessProxy->enableServiceWorkers(processPool->userContentControllerIdentifierForServiceWorkers()); 531 532 WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED_STATIC(ServiceWorker, "establishWorkerContextConnectionToNetworkProcess reusing an existing web process (process=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier()); 831 533 break; 832 534 } … … 834 536 835 537 if (!serviceWorkerProcessProxy) { 836 auto newProcessProxy = WebProcessProxy::createForServiceWorkers(* this, WTFMove(registrableDomain), *websiteDataStore);538 auto newProcessProxy = WebProcessProxy::createForServiceWorkers(*processPool, WTFMove(registrableDomain), *websiteDataStore); 837 539 serviceWorkerProcessProxy = newProcessProxy.ptr(); 838 540 839 WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED (ServiceWorker, "establishWorkerContextConnectionToNetworkProcess creating a new service worker process (proces=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier());840 841 initializeNewWebProcess(newProcessProxy, websiteDataStore);842 m_processes.append(WTFMove(newProcessProxy));843 } 844 845 ASSERT(! m_serviceWorkerProcesses.contains(*serviceWorkerProcessProxy));846 m_serviceWorkerProcesses.add(*serviceWorkerProcessProxy);847 848 serviceWorkerProcessProxy->establishServiceWorkerContext( m_serviceWorkerPreferences ? m_serviceWorkerPreferences.value() :m_defaultPageGroup->preferences().store(), WTFMove(completionHandler));849 if (! m_serviceWorkerUserAgent.isNull())850 serviceWorkerProcessProxy->setServiceWorkerUserAgent( m_serviceWorkerUserAgent);541 WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED_STATIC(ServiceWorker, "establishWorkerContextConnectionToNetworkProcess creating a new service worker process (proces=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier()); 542 543 processPool->initializeNewWebProcess(newProcessProxy, websiteDataStore); 544 processPool->m_processes.append(WTFMove(newProcessProxy)); 545 } 546 547 ASSERT(!serviceWorkerProcesses().contains(*serviceWorkerProcessProxy)); 548 serviceWorkerProcesses().add(*serviceWorkerProcessProxy); 549 550 serviceWorkerProcessProxy->establishServiceWorkerContext(processPool->m_serviceWorkerPreferences ? processPool->m_serviceWorkerPreferences.value() : processPool->m_defaultPageGroup->preferences().store(), WTFMove(completionHandler)); 551 if (!processPool->m_serviceWorkerUserAgent.isNull()) 552 serviceWorkerProcessProxy->setServiceWorkerUserAgent(processPool->m_serviceWorkerUserAgent); 851 553 } 852 554 853 555 void WebProcessPool::removeFromServiceWorkerProcesses(WebProcessProxy& process) 854 556 { 855 ASSERT( m_serviceWorkerProcesses.contains(process));856 m_serviceWorkerProcesses.remove(process);557 ASSERT(serviceWorkerProcesses().contains(process)); 558 serviceWorkerProcesses().remove(process); 857 559 } 858 560 #endif … … 923 625 // In platforms using Bubblewrap for sandboxing, prewarmed process is launched using the WebProcessPool primary WebsiteDataStore, 924 626 // so we don't use it in case of using a different WebsiteDataStore. 925 if (m_sandboxEnabled && m_websiteDataStore && m_websiteDataStore.get() != &websiteDataStore)627 if (m_sandboxEnabled) 926 628 return nullptr; 927 629 #endif … … 1033 735 }); 1034 736 1035 ensureNetworkProcess();1036 1037 737 WebProcessCreationParameters parameters; 1038 738 … … 1199 899 1200 900 m_connectionClient.didCreateConnection(this, process->webConnection()); 1201 1202 if (m_websiteDataStore)1203 m_websiteDataStore->didCreateNetworkProcess();1204 901 } 1205 902 … … 1296 993 // We try to avoid creating the default data store as long as possible. 1297 994 // But if there is an attempt to create a web page without any specified data store, then we have to create it. 1298 if (!m_websiteDataStore) 1299 m_websiteDataStore = WebKit::WebsiteDataStore::defaultDataStore().ptr(); 1300 1301 pageConfiguration->setWebsiteDataStore(m_websiteDataStore.get()); 995 pageConfiguration->setWebsiteDataStore(WebKit::WebsiteDataStore::defaultDataStore().ptr()); 1302 996 } 1303 997 … … 1330 1024 if (!m_serviceWorkerPreferences) { 1331 1025 m_serviceWorkerPreferences = page->preferencesStore(); 1332 for (auto& serviceWorkerProcess : m_serviceWorkerProcesses)1026 for (auto& serviceWorkerProcess : serviceWorkerProcesses()) 1333 1027 serviceWorkerProcess.updateServiceWorkerPreferencesStore(*m_serviceWorkerPreferences); 1334 1028 } … … 1357 1051 return; 1358 1052 m_serviceWorkerUserAgent = userAgent; 1359 for (auto& serviceWorkerProcess : m_serviceWorkerProcesses)1053 for (auto& serviceWorkerProcess : serviceWorkerProcesses()) 1360 1054 serviceWorkerProcess.setServiceWorkerUserAgent(m_serviceWorkerUserAgent); 1361 1055 } … … 1366 1060 auto result = m_sessionToPageIDsMap.add(dataStore.sessionID(), HashSet<WebPageProxyIdentifier>()).iterator->value.add(pageID); 1367 1061 ASSERT_UNUSED(result, result.isNewEntry); 1368 1369 auto sessionID = dataStore.sessionID();1370 if (sessionID != PAL::SessionID::defaultSessionID()) {1371 ASSERT(!sessionID.isEphemeral() || dataStore.parameters().networkSessionParameters.sessionID == sessionID);1372 if (m_networkProcess) {1373 m_networkProcess->addSession(makeRef(dataStore));1374 dataStore.clearPendingCookies();1375 }1376 }1377 1062 } 1378 1063 … … 1402 1087 { 1403 1088 auto& downloadProxy = createDownloadProxy(dataStore, request, initiatingPage, { }); 1404 PAL::SessionID sessionID = dataStore.sessionID();1405 1089 1406 1090 Optional<NavigatingToAppBoundDomain> isAppBound = NavigatingToAppBoundDomain::No; … … 1412 1096 } 1413 1097 1414 if (networkProcess()) { 1415 ResourceRequest updatedRequest(request); 1416 // Request's firstPartyForCookies will be used as Original URL of the download request. 1417 // We set the value to top level document's URL. 1418 if (initiatingPage) { 1419 URL initiatingPageURL = URL { URL { }, initiatingPage->pageLoadState().url() }; 1420 updatedRequest.setFirstPartyForCookies(initiatingPageURL); 1421 updatedRequest.setIsSameSite(areRegistrableDomainsEqual(initiatingPageURL, request.url())); 1422 if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent)) 1423 updatedRequest.setHTTPUserAgent(initiatingPage->userAgentForURL(request.url())); 1424 } else { 1425 updatedRequest.setFirstPartyForCookies(URL()); 1426 updatedRequest.setIsSameSite(false); 1427 if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent)) 1428 updatedRequest.setHTTPUserAgent(WebPageProxy::standardUserAgent()); 1429 } 1430 updatedRequest.setIsTopSite(false); 1431 networkProcess()->send(Messages::NetworkProcess::DownloadRequest(sessionID, downloadProxy.downloadID(), updatedRequest, isAppBound, suggestedFilename), 0); 1432 return downloadProxy; 1433 } 1098 ResourceRequest updatedRequest(request); 1099 // Request's firstPartyForCookies will be used as Original URL of the download request. 1100 // We set the value to top level document's URL. 1101 if (initiatingPage) { 1102 URL initiatingPageURL = URL { URL { }, initiatingPage->pageLoadState().url() }; 1103 updatedRequest.setFirstPartyForCookies(initiatingPageURL); 1104 updatedRequest.setIsSameSite(areRegistrableDomainsEqual(initiatingPageURL, request.url())); 1105 if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent)) 1106 updatedRequest.setHTTPUserAgent(initiatingPage->userAgentForURL(request.url())); 1107 } else { 1108 updatedRequest.setFirstPartyForCookies(URL()); 1109 updatedRequest.setIsSameSite(false); 1110 if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent)) 1111 updatedRequest.setHTTPUserAgent(WebPageProxy::standardUserAgent()); 1112 } 1113 updatedRequest.setIsTopSite(false); 1114 dataStore.networkProcess().send(Messages::NetworkProcess::DownloadRequest(dataStore.sessionID(), downloadProxy.downloadID(), updatedRequest, isAppBound, suggestedFilename), 0); 1434 1115 1435 1116 return downloadProxy; … … 1439 1120 { 1440 1121 auto& downloadProxy = createDownloadProxy(dataStore, ResourceRequest(), initiatingPage, { }); 1441 PAL::SessionID sessionID = dataStore.sessionID();1442 1122 1443 1123 SandboxExtension::Handle sandboxExtensionHandle; … … 1445 1125 SandboxExtension::createHandle(path, SandboxExtension::Type::ReadWrite, sandboxExtensionHandle); 1446 1126 1447 if (networkProcess()) { 1448 networkProcess()->send(Messages::NetworkProcess::ResumeDownload(sessionID, downloadProxy.downloadID(), resumeData.dataReference(), path, sandboxExtensionHandle), 0); 1449 return downloadProxy; 1450 } 1451 1127 dataStore.networkProcess().send(Messages::NetworkProcess::ResumeDownload(dataStore.sessionID(), downloadProxy.downloadID(), resumeData.dataReference(), path, sandboxExtensionHandle), 0); 1452 1128 return downloadProxy; 1453 1129 } … … 1518 1194 #endif // ENABLE(NETSCAPE_PLUGIN_API) 1519 1195 1520 ProcessID WebProcessPool::networkProcessIdentifier()1521 {1522 return m_networkProcess ? m_networkProcess->processIdentifier() : 0;1523 }1524 1525 1196 ProcessID WebProcessPool::prewarmedProcessIdentifier() 1526 1197 { … … 1559 1230 LegacyGlobalSettings::singleton().registerURLSchemeAsSecure(urlScheme); 1560 1231 sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsSecure(urlScheme)); 1561 sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsSecure(urlScheme)); 1232 WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) { 1233 dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsSecure(urlScheme), 0); 1234 }); 1562 1235 } 1563 1236 … … 1566 1239 LegacyGlobalSettings::singleton().registerURLSchemeAsBypassingContentSecurityPolicy(urlScheme); 1567 1240 sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsBypassingContentSecurityPolicy(urlScheme)); 1568 sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsBypassingContentSecurityPolicy(urlScheme)); 1241 WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) { 1242 dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsBypassingContentSecurityPolicy(urlScheme), 0); 1243 }); 1569 1244 } 1570 1245 … … 1579 1254 LegacyGlobalSettings::singleton().registerURLSchemeAsLocal(urlScheme); 1580 1255 sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsLocal(urlScheme)); 1581 sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsLocal(urlScheme)); 1256 WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) { 1257 dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsLocal(urlScheme), 0); 1258 }); 1582 1259 } 1583 1260 … … 1586 1263 LegacyGlobalSettings::singleton().registerURLSchemeAsNoAccess(urlScheme); 1587 1264 sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsNoAccess(urlScheme)); 1588 sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsNoAccess(urlScheme)); 1265 WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) { 1266 dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsNoAccess(urlScheme), 0); 1267 }); 1589 1268 } 1590 1269 … … 1607 1286 1608 1287 globalURLSchemesWithCustomProtocolHandlers().add(urlScheme); 1609 for (auto* processPool : allProcessPools()) { 1610 if (auto* networkProcess = processPool->networkProcess()) 1611 networkProcess->registerSchemeForLegacyCustomProtocol(urlScheme); 1612 } 1288 for (auto networkProcess : NetworkProcessProxy::allNetworkProcesses()) 1289 networkProcess->registerSchemeForLegacyCustomProtocol(urlScheme); 1613 1290 } 1614 1291 … … 1619 1296 1620 1297 globalURLSchemesWithCustomProtocolHandlers().remove(urlScheme); 1621 for (auto* processPool : allProcessPools()) { 1622 if (auto* networkProcess = processPool->networkProcess()) 1623 networkProcess->unregisterSchemeForLegacyCustomProtocol(urlScheme); 1624 } 1298 for (auto networkProcess : NetworkProcessProxy::allNetworkProcesses()) 1299 networkProcess->unregisterSchemeForLegacyCustomProtocol(urlScheme); 1625 1300 } 1626 1301 … … 1656 1331 sendToAllProcesses(Messages::WebProcess::SetCacheModel(cacheModel)); 1657 1332 1658 if (m_networkProcess) 1659 m_networkProcess->send(Messages::NetworkProcess::SetCacheModel(cacheModel), 0); 1333 WebsiteDataStore::forEachWebsiteDataStore([cacheModel] (WebsiteDataStore& dataStore) { 1334 dataStore.networkProcess().send(Messages::NetworkProcess::SetCacheModel(cacheModel), 0); 1335 }); 1660 1336 } 1661 1337 … … 1664 1340 updateBackForwardCacheCapacity(); 1665 1341 1666 if (m_networkProcess) 1667 m_networkProcess->sendSync(Messages::NetworkProcess::SetCacheModelSynchronouslyForTesting(cacheModel), { }, { }); 1342 WebsiteDataStore::forEachWebsiteDataStore([cacheModel] (WebsiteDataStore& dataStore) { 1343 dataStore.networkProcess().sendSync(Messages::NetworkProcess::SetCacheModelSynchronouslyForTesting(cacheModel), { }, 0); 1344 }); 1668 1345 } 1669 1346 … … 1675 1352 DownloadProxy& WebProcessPool::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& request, WebPageProxy* originatingPage, const FrameInfoData& frameInfo) 1676 1353 { 1677 return ensureNetworkProcess(&dataStore).createDownloadProxy(dataStore, request, frameInfo, originatingPage); 1678 } 1679 1680 void WebProcessPool::synthesizeAppIsBackground(bool background) 1681 { 1682 ensureNetworkProcess().synthesizeAppIsBackground(background); 1354 return dataStore.networkProcess().createDownloadProxy(dataStore, *this, request, frameInfo, originatingPage); 1683 1355 } 1684 1356 … … 1751 1423 } 1752 1424 1753 template<typename T, typename U>1754 void WebProcessPool::sendSyncToNetworkingProcess(T&& message, U&& reply)1755 {1756 if (m_networkProcess && m_networkProcess->canSendMessage())1757 m_networkProcess->sendSync(std::forward<T>(message), std::forward<U>(reply), 0);1758 }1759 1760 void WebProcessPool::clearCachedCredentials(const PAL::SessionID& sessionID)1761 {1762 if (m_networkProcess)1763 m_networkProcess->send(Messages::NetworkProcess::ClearCachedCredentials(sessionID), 0);1764 }1765 1766 void WebProcessPool::terminateNetworkProcess()1767 {1768 terminateServiceWorkers();1769 1770 if (!m_networkProcess)1771 return;1772 1773 m_networkProcess->terminate();1774 m_networkProcess = nullptr;1775 }1776 1777 1425 void WebProcessPool::terminateAllWebContentProcesses() 1778 1426 { … … 1782 1430 } 1783 1431 1784 void WebProcessPool::sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&& completionHandler)1785 {1786 if (!m_networkProcess)1787 return completionHandler();1788 1789 m_networkProcess->sendPrepareToSuspend(IsSuspensionImminent::No, WTFMove(completionHandler));1790 }1791 1792 void WebProcessPool::sendNetworkProcessWillSuspendImminentlyForTesting()1793 {1794 if (m_networkProcess)1795 m_networkProcess->sendProcessWillSuspendImminentlyForTesting();1796 }1797 1798 void WebProcessPool::sendNetworkProcessDidResume()1799 {1800 if (m_networkProcess)1801 m_networkProcess->sendProcessDidResume();1802 }1803 1804 1432 void WebProcessPool::terminateServiceWorkers() 1805 1433 { 1806 1434 #if ENABLE(SERVICE_WORKER) 1807 1435 auto protectedThis = makeRef(*this); 1808 while (m_serviceWorkerProcesses.computeSize()) 1809 m_serviceWorkerProcesses.begin()->disableServiceWorkers(); 1810 #endif 1811 } 1812 1813 void WebProcessPool::flushCookies(const PAL::SessionID& sessionID, CompletionHandler<void()>&& completionHandler) 1814 { 1815 ensureNetworkProcess().flushCookies(sessionID, WTFMove(completionHandler)); 1436 while (serviceWorkerProcesses().computeSize()) 1437 serviceWorkerProcesses().begin()->disableServiceWorkers(); 1438 #endif 1816 1439 } 1817 1440 … … 2090 1713 } 2091 1714 1715 WeakHashSet<WebProcessProxy>& WebProcessPool::serviceWorkerProcesses() 1716 { 1717 static NeverDestroyed<WeakHashSet<WebProcessProxy>> processes; 1718 return processes; 1719 } 1720 2092 1721 void WebProcessPool::updateProcessAssertions() 2093 1722 { 2094 ensureNetworkProcess().updateProcessAssertion(); 1723 WebsiteDataStore::forEachWebsiteDataStore([] (WebsiteDataStore& dataStore) { 1724 dataStore.networkProcess().updateProcessAssertion(); 1725 }); 2095 1726 #if ENABLE(SERVICE_WORKER) 2096 1727 // Check on next run loop since the web process proxy tokens are probably being updated. 2097 callOnMainRunLoop([this, weakThis = makeWeakPtr(this)] { 2098 if (!weakThis) 2099 return; 2100 for (auto& serviceWorkerProcess : m_serviceWorkerProcesses) 1728 callOnMainRunLoop([] { 1729 for (auto& serviceWorkerProcess : serviceWorkerProcesses()) 2101 1730 serviceWorkerProcess.updateServiceWorkerProcessAssertion(); 2102 1731 }); … … 2108 1737 #if ENABLE(SERVICE_WORKER) 2109 1738 // FIXME: This is inefficient. 2110 return WTF::anyOf( m_serviceWorkerProcesses, [pageID](auto& process) {1739 return WTF::anyOf(serviceWorkerProcesses(), [pageID](auto& process) { 2111 1740 return process.hasServiceWorkerPageProxy(pageID); 2112 1741 }); … … 2330 1959 2331 1960 #if ENABLE(RESOURCE_LOAD_STATISTICS) 2332 void WebProcessPool::didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, OptionSet<CrossSiteNavigationDataTransfer::Flag> navigationDataTransfer, WebPageProxyIdentifier webPageProxyID, PageIdentifier webPageID)2333 {2334 if (!m_networkProcess)2335 return;2336 2337 m_networkProcess->didCommitCrossSiteLoadWithDataTransfer(sessionID, fromDomain, toDomain, navigationDataTransfer, webPageProxyID, webPageID);2338 }2339 2340 1961 void WebProcessPool::setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain>&& domains) 2341 1962 { … … 2388 2009 void WebProcessPool::setUseSeparateServiceWorkerProcess(bool useSeparateServiceWorkerProcess) 2389 2010 { 2390 if ( m_useSeparateServiceWorkerProcess == useSeparateServiceWorkerProcess)2011 if (s_useSeparateServiceWorkerProcess == useSeparateServiceWorkerProcess) 2391 2012 return; 2392 2013 2393 WEBPROCESSPOOL_RELEASE_LOG (ServiceWorker, "setUseSeparateServiceWorkerProcess: (useSeparateServiceWorkerProcess=%d)", useSeparateServiceWorkerProcess);2394 2395 m_useSeparateServiceWorkerProcess = useSeparateServiceWorkerProcess;2396 terminateServiceWorkers();2397 terminateNetworkProcess();2014 WEBPROCESSPOOL_RELEASE_LOG_STATIC(ServiceWorker, "setUseSeparateServiceWorkerProcess: (useSeparateServiceWorkerProcess=%d)", useSeparateServiceWorkerProcess); 2015 2016 s_useSeparateServiceWorkerProcess = useSeparateServiceWorkerProcess; 2017 for (auto* processPool : WebProcessPool::allProcessPools()) 2018 processPool->terminateServiceWorkers(); 2398 2019 } 2399 2020 … … 2401 2022 bool WebProcessPool::hasServiceWorkerForegroundActivityForTesting() const 2402 2023 { 2403 return WTF::anyOf( m_serviceWorkerProcesses, [](auto& process) {2024 return WTF::anyOf(serviceWorkerProcesses(), [](auto& process) { 2404 2025 return process.hasServiceWorkerForegroundActivityForTesting(); 2405 2026 }); … … 2408 2029 bool WebProcessPool::hasServiceWorkerBackgroundActivityForTesting() const 2409 2030 { 2410 return WTF::anyOf( m_serviceWorkerProcesses, [](auto& process) {2031 return WTF::anyOf(serviceWorkerProcesses(), [](auto& process) { 2411 2032 return process.hasServiceWorkerBackgroundActivityForTesting(); 2412 2033 }); -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r267618 r267763 78 78 namespace API { 79 79 class AutomationClient; 80 class CustomProtocolManagerClient;81 80 class DownloadClient; 82 81 class HTTPCookieStore; … … 177 176 void setDownloadClient(UniqueRef<API::DownloadClient>&&); 178 177 void setAutomationClient(std::unique_ptr<API::AutomationClient>&&); 179 void setLegacyCustomProtocolManagerClient(std::unique_ptr<API::CustomProtocolManagerClient>&&);180 178 181 179 void setCustomWebContentServiceBundleIdentifier(const String&); … … 188 186 WebProcessProxy* dummyProcessProxy(PAL::SessionID sessionID) const { return m_dummyProcessProxies.get(sessionID).get(); } 189 187 190 // WebProcess or NetworkProcess as approporiate for current process model. The connection must be non-null.191 IPC::Connection* networkingProcessConnection();192 193 188 template<typename T> void sendToAllProcesses(const T& message); 194 189 template<typename T> void sendToAllProcessesForSession(const T& message, PAL::SessionID); 195 190 196 // Sends the message to WebProcess or NetworkProcess as approporiate for current process model.197 template<typename T> void sendToNetworkingProcess(T&& message);198 template<typename T, typename U> void sendSyncToNetworkingProcess(T&& message, U&& reply);199 template<typename T> void sendToNetworkingProcessRelaunchingIfNecessary(T&& message);200 201 191 void processDidFinishLaunching(WebProcessProxy*); 202 192 … … 205 195 // Disconnect the process from the context. 206 196 void disconnectProcess(WebProcessProxy*); 207 208 WebKit::WebsiteDataStore* websiteDataStore() const { return m_websiteDataStore.get(); }209 void setPrimaryDataStore(WebKit::WebsiteDataStore& dataStore) { m_websiteDataStore = &dataStore; }210 197 211 198 Ref<WebPageProxy> createWebPage(PageClient&, Ref<API::PageConfiguration>&&); … … 259 246 void clearSupportedPlugins(); 260 247 261 ProcessID networkProcessIdentifier();262 248 ProcessID prewarmedProcessIdentifier(); 263 249 void activePagesOriginsInWebProcessForTesting(ProcessID, CompletionHandler<void(Vector<String>&&)>&&); 264 bool networkProcessHasEntitlementForTesting(const String&);265 250 266 251 WebPageGroup& defaultPageGroup() { return m_defaultPageGroup.get(); } … … 303 288 WebContextClient& client() { return m_client; } 304 289 305 API::CustomProtocolManagerClient& customProtocolManagerClient() const { return *m_customProtocolManagerClient; }306 307 290 struct Statistics { 308 291 unsigned wkViewCount; … … 320 303 void terminateServiceWorkers(); 321 304 322 void flushCookies(const PAL::SessionID&, CompletionHandler<void()>&&);323 324 305 void setShouldMakeNextWebProcessLaunchFailForTesting(bool value) { m_shouldMakeNextWebProcessLaunchFailForTesting = value; } 325 306 bool shouldMakeNextWebProcessLaunchFailForTesting() const { return m_shouldMakeNextWebProcessLaunchFailForTesting; } 326 void setShouldMakeNextNetworkProcessLaunchFailForTesting(bool value) { m_shouldMakeNextNetworkProcessLaunchFailForTesting = value; }327 bool shouldMakeNextNetworkProcessLaunchFailForTesting() const { return m_shouldMakeNextNetworkProcessLaunchFailForTesting; }328 307 329 308 void reportWebContentCPUTime(Seconds cpuTime, uint64_t activityState); … … 384 363 385 364 // Network Process Management 386 NetworkProcessProxy& ensureNetworkProcess(WebsiteDataStore* withWebsiteDataStore = nullptr);387 NetworkProcessProxy* networkProcess() const { return m_networkProcess.get(); }388 365 void networkProcessCrashed(NetworkProcessProxy&); 389 390 void getNetworkProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&);391 366 392 367 bool isServiceWorkerPageID(WebPageProxyIdentifier) const; 393 368 #if ENABLE(SERVICE_WORKER) 394 void establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&);369 static void establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&); 395 370 void removeFromServiceWorkerProcesses(WebProcessProxy&); 396 size_t serviceWorkerProxiesCount() const { return m_serviceWorkerProcesses.computeSize(); } 397 void setAllowsAnySSLCertificateForServiceWorker(bool allows) { m_allowsAnySSLCertificateForServiceWorker = allows; } 398 bool allowsAnySSLCertificateForServiceWorker() const { return m_allowsAnySSLCertificateForServiceWorker; } 371 size_t serviceWorkerProxiesCount() const { return serviceWorkerProcesses().computeSize(); } 399 372 void updateServiceWorkerUserAgent(const String& userAgent); 400 373 const Optional<UserContentControllerIdentifier>& userContentControllerIdentifierForServiceWorkers() const { return m_userContentControllerIDForServiceWorker; } … … 450 423 bool shouldTakeUIBackgroundAssertion() const { return m_shouldTakeUIBackgroundAssertion; } 451 424 452 void synthesizeAppIsBackground(bool background);453 454 425 #if ENABLE(GAMEPAD) 455 426 void gamepadConnected(const UIGamepad&, WebCore::EventMakesGamepadsVisible); … … 489 460 490 461 #if ENABLE(RESOURCE_LOAD_STATISTICS) 491 void didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID, const WebCore::RegistrableDomain& fromDomain, const WebCore::RegistrableDomain& toDomain, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag>, WebPageProxyIdentifier, WebCore::PageIdentifier);492 462 void setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain>&&); 493 463 void seedResourceLoadStatisticsForTesting(const WebCore::RegistrableDomain& firstPartyDomain, const WebCore::RegistrableDomain& thirdPartyDomain, bool shouldScheduleNotification, CompletionHandler<void()>&&); … … 516 486 PlugInAutoStartProvider& plugInAutoStartProvider() { return m_plugInAutoStartProvider; } 517 487 518 void setUseSeparateServiceWorkerProcess(bool);519 bool useSeparateServiceWorkerProcess() const { return m_useSeparateServiceWorkerProcess; }488 static void setUseSeparateServiceWorkerProcess(bool); 489 static bool useSeparateServiceWorkerProcess() { return s_useSeparateServiceWorkerProcess; } 520 490 521 491 #if ENABLE(CFPREFS_DIRECT_MODE) … … 529 499 #endif 530 500 531 #if PLATFORM(COCOA) 532 OSObjectPtr<xpc_object_t> xpcEndpointMessage() const; 533 void sendNetworkProcessXPCEndpointToWebProcess(OSObjectPtr<xpc_object_t> endpointMessage); 534 #endif 535 536 private: 537 void platformInitialize(); 538 539 void platformInitializeWebProcess(const WebProcessProxy&, WebProcessCreationParameters&); 540 void platformInvalidateContext(); 541 542 void processForNavigationInternal(WebPageProxy&, const API::Navigation&, Ref<WebProcessProxy>&& sourceProcess, const URL& sourceURL, ProcessSwapRequestedByClient, Ref<WebsiteDataStore>&&, CompletionHandler<void(Ref<WebProcessProxy>&&, SuspendedPageProxy*, const String&)>&&); 543 544 RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&); 545 546 WebProcessProxy& createNewWebProcess(WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 547 void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 548 549 void platformInitializeNetworkProcess(NetworkProcessCreationParameters&); 550 551 void handleMessage(IPC::Connection&, const String& messageName, const UserData& messageBody); 552 void handleSynchronousMessage(IPC::Connection&, const String& messageName, const UserData& messageBody, CompletionHandler<void(UserData&&)>&&); 553 554 #if ENABLE(GAMEPAD) 555 void startedUsingGamepads(IPC::Connection&); 556 void stoppedUsingGamepads(IPC::Connection&); 557 558 void processStoppedUsingGamepads(WebProcessProxy&); 559 #endif 560 561 void updateProcessAssertions(); 562 void updateAudibleMediaAssertions(); 563 564 // IPC::MessageReceiver. 565 // Implemented in generated WebProcessPoolMessageReceiver.cpp 566 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override; 567 void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override; 568 569 static void languageChanged(void* context); 570 void languageChanged(); 571 572 bool usesSingleWebProcess() const { return m_configuration->usesSingleWebProcess(); } 501 static void platformInitializeNetworkProcess(NetworkProcessCreationParameters&); 502 static Vector<String> urlSchemesWithCustomProtocolHandlers(); 573 503 574 504 #if PLATFORM(IOS_FAMILY) … … 580 510 #endif 581 511 512 private: 513 void platformInitialize(); 514 515 void platformInitializeWebProcess(const WebProcessProxy&, WebProcessCreationParameters&); 516 void platformInvalidateContext(); 517 518 void processForNavigationInternal(WebPageProxy&, const API::Navigation&, Ref<WebProcessProxy>&& sourceProcess, const URL& sourceURL, ProcessSwapRequestedByClient, Ref<WebsiteDataStore>&&, CompletionHandler<void(Ref<WebProcessProxy>&&, SuspendedPageProxy*, const String&)>&&); 519 520 RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&); 521 522 WebProcessProxy& createNewWebProcess(WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 523 void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 524 525 void handleMessage(IPC::Connection&, const String& messageName, const UserData& messageBody); 526 void handleSynchronousMessage(IPC::Connection&, const String& messageName, const UserData& messageBody, CompletionHandler<void(UserData&&)>&&); 527 528 #if ENABLE(GAMEPAD) 529 void startedUsingGamepads(IPC::Connection&); 530 void stoppedUsingGamepads(IPC::Connection&); 531 532 void processStoppedUsingGamepads(WebProcessProxy&); 533 #endif 534 535 void updateProcessAssertions(); 536 void updateAudibleMediaAssertions(); 537 538 // IPC::MessageReceiver. 539 // Implemented in generated WebProcessPoolMessageReceiver.cpp 540 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override; 541 void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override; 542 543 static void languageChanged(void* context); 544 void languageChanged(); 545 546 bool usesSingleWebProcess() const { return m_configuration->usesSingleWebProcess(); } 547 582 548 #if PLATFORM(COCOA) 583 549 void registerNotificationObservers(); … … 621 587 622 588 #if ENABLE(SERVICE_WORKER) 623 WeakHashSet<WebProcessProxy> m_serviceWorkerProcesses;589 static WeakHashSet<WebProcessProxy>& serviceWorkerProcesses(); 624 590 bool m_waitingForWorkerContextProcessConnection { false }; 625 bool m_allowsAnySSLCertificateForServiceWorker { false };626 591 String m_serviceWorkerUserAgent; 627 592 Optional<WebPreferencesStore> m_serviceWorkerPreferences; … … 639 604 UniqueRef<API::DownloadClient> m_downloadClient; 640 605 std::unique_ptr<API::LegacyContextHistoryClient> m_historyClient; 641 std::unique_ptr<API::CustomProtocolManagerClient> m_customProtocolManagerClient;642 606 643 607 RefPtr<WebAutomationSession> m_automationSession; … … 671 635 double m_memorySamplerInterval { 1400.0 }; 672 636 673 RefPtr<WebKit::WebsiteDataStore> m_websiteDataStore;674 675 637 typedef HashMap<const char*, RefPtr<WebContextSupplement>, PtrHash<const char*>> WebContextSupplementMap; 676 638 WebContextSupplementMap m_supplements; … … 704 666 bool m_processTerminationEnabled { true }; 705 667 706 std::unique_ptr<NetworkProcessProxy> m_networkProcess;707 708 668 HashMap<uint64_t, RefPtr<DictionaryCallback>> m_dictionaryCallbacks; 709 669 … … 714 674 bool m_shouldTakeUIBackgroundAssertion; 715 675 bool m_shouldMakeNextWebProcessLaunchFailForTesting { false }; 716 bool m_shouldMakeNextNetworkProcessLaunchFailForTesting { false };717 676 bool m_tccPreferenceEnabled { false }; 718 677 … … 806 765 bool m_isDelayedWebProcessLaunchDisabled { false }; 807 766 #endif 808 bool m_useSeparateServiceWorkerProcess { false };767 static bool s_useSeparateServiceWorkerProcess; 809 768 810 769 #if ENABLE(RESOURCE_LOAD_STATISTICS) 811 770 HashSet<WebCore::RegistrableDomain> m_domainsWithUserInteraction; 812 771 #endif 813 814 #if PLATFORM(COCOA)815 OSObjectPtr<xpc_object_t> m_endpointMessage;816 #endif817 772 }; 818 819 template<typename T>820 void WebProcessPool::sendToNetworkingProcess(T&& message)821 {822 if (m_networkProcess && m_networkProcess->canSendMessage())823 m_networkProcess->send(std::forward<T>(message), 0);824 }825 826 template<typename T>827 void WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary(T&& message)828 {829 ensureNetworkProcess();830 m_networkProcess->send(std::forward<T>(message), 0);831 }832 773 833 774 template<typename T> -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r267618 r267763 269 269 ASSERT(!m_websiteDataStore); 270 270 m_websiteDataStore = &dataStore; 271 #if PLATFORM(COCOA) 272 dataStore.sendNetworkProcessXPCEndpointToWebProcess(*this); 273 #endif 271 274 updateRegistrationWithDataStore(); 272 275 send(Messages::WebProcess::SetWebsiteDataStoreParameters(processPool().webProcessDataStoreParameters(*this, dataStore)), 0); … … 739 742 void WebProcessProxy::getNetworkProcessConnection(Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply&& reply) 740 743 { 741 m_processPool->getNetworkProcessConnection(*this, WTFMove(reply));744 websiteDataStore().getNetworkProcessConnection(*this, WTFMove(reply)); 742 745 } 743 746 … … 956 959 957 960 #if PLATFORM(COCOA) 958 auto endpointMessage = processPool().xpcEndpointMessage(); 959 if (endpointMessage) 960 xpc_connection_send_message(connection()->xpcConnection(), endpointMessage.get()); 961 if (m_websiteDataStore) 962 m_websiteDataStore->sendNetworkProcessXPCEndpointToWebProcess(*this); 961 963 #endif 962 964 -
trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
r267618 r267763 29 29 #import "CookieStorageUtilsCF.h" 30 30 #import "DefaultWebBrowserChecks.h" 31 #import "NetworkProcessProxy.h" 31 32 #import "SandboxUtilities.h" 32 33 #import "StorageManager.h" 33 34 #import "WebFramePolicyListenerProxy.h" 34 35 #import "WebPreferencesKeys.h" 36 #import "WebProcessProxy.h" 35 37 #import "WebResourceLoadStatisticsStore.h" 36 38 #import "WebsiteDataStoreParameters.h" … … 45 47 #import <wtf/ProcessPrivilege.h> 46 48 #import <wtf/URL.h> 49 #import <wtf/cocoa/Entitlements.h> 47 50 #import <wtf/text/StringBuilder.h> 48 51 … … 563 566 #endif 564 567 565 } 568 bool WebsiteDataStore::networkProcessHasEntitlementForTesting(const String& entitlement) 569 { 570 return WTF::hasEntitlement(networkProcess().connection()->xpcConnection(), entitlement.utf8().data()); 571 } 572 573 void WebsiteDataStore::sendNetworkProcessXPCEndpointToWebProcess(WebProcessProxy& process) 574 { 575 if (process.state() != AuxiliaryProcessProxy::State::Running) 576 return; 577 auto* connection = process.connection(); 578 if (!connection) 579 return; 580 auto message = networkProcess().xpcEndpointMessage(); 581 if (!message) 582 return; 583 xpc_connection_send_message(connection->xpcConnection(), message); 584 } 585 586 void WebsiteDataStore::sendNetworkProcessXPCEndpointToAllWebProcesses() 587 { 588 for (auto& process : m_processes) 589 sendNetworkProcessXPCEndpointToWebProcess(process); 590 } 591 592 } -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r267750 r267763 33 33 #include "DeviceIdHashSaltStorage.h" 34 34 #include "GPUProcessProxy.h" 35 #include "Logging.h" 35 36 #include "MockAuthenticatorManager.h" 37 #include "NetworkProcessConnectionInfo.h" 36 38 #include "NetworkProcessMessages.h" 37 39 #include "ShouldGrandfatherStatistics.h" 38 40 #include "StorageAccessStatus.h" 39 41 #include "WebBackForwardCache.h" 42 #include "WebCookieManagerProxy.h" 40 43 #include "WebKit2Initialize.h" 41 44 #include "WebPageProxy.h" … … 76 79 #endif 77 80 81 #if PLATFORM(COCOA) 82 #include "DefaultWebBrowserChecks.h" 83 #endif 84 78 85 namespace WebKit { 79 86 … … 84 91 } 85 92 86 static HashMap<PAL::SessionID, WebsiteDataStore*>& nonDefaultDataStores()93 static HashMap<PAL::SessionID, WebsiteDataStore*>& allDataStores() 87 94 { 88 95 RELEASE_ASSERT(isUIThread()); 89 96 static NeverDestroyed<HashMap<PAL::SessionID, WebsiteDataStore*>> map; 90 97 return map; 98 } 99 100 void WebsiteDataStore::forEachWebsiteDataStore(Function<void(WebsiteDataStore&)>&& function) 101 { 102 for (auto* dataStore : allDataStores().values()) 103 function(*dataStore); 91 104 } 92 105 … … 116 129 { 117 130 WTF::setProcessPrivileges(allPrivileges()); 118 maybeRegisterWithSessionIDMap();131 registerWithSessionIDMap(); 119 132 platformInitialize(); 120 133 … … 129 142 platformDestroy(); 130 143 131 if (m_sessionID != PAL::SessionID::defaultSessionID()) { 132 ASSERT(nonDefaultDataStores().get(m_sessionID) == this); 133 nonDefaultDataStores().remove(m_sessionID); 134 for (auto& processPool : WebProcessPool::allProcessPools()) { 135 if (auto* networkProcess = processPool->networkProcess()) 136 networkProcess->removeSession(m_sessionID); 137 } 138 } 144 ASSERT(allDataStores().get(m_sessionID) == this); 145 allDataStores().remove(m_sessionID); 146 networkProcess().removeSession(*this); 139 147 #if ENABLE(GPU_PROCESS) 140 141 148 if (auto* gpuProcessProxy = GPUProcessProxy::singletonIfCreated()) 149 gpuProcessProxy->removeSession(m_sessionID); 142 150 #endif 143 151 } … … 152 160 { 153 161 InitializeWebKit2(); 154 155 162 auto& store = globalDefaultDataStore(); 156 163 if (!store) … … 170 177 } 171 178 172 void WebsiteDataStore::maybeRegisterWithSessionIDMap() 173 { 174 if (m_sessionID != PAL::SessionID::defaultSessionID()) { 175 auto result = nonDefaultDataStores().add(m_sessionID, this); 176 ASSERT_UNUSED(result, result.isNewEntry); 177 } 178 } 179 180 WebsiteDataStore* WebsiteDataStore::existingNonDefaultDataStoreForSessionID(PAL::SessionID sessionID) 181 { 182 return sessionID != PAL::SessionID::defaultSessionID() ? nonDefaultDataStores().get(sessionID) : nullptr; 179 void WebsiteDataStore::registerWithSessionIDMap() 180 { 181 auto result = allDataStores().add(m_sessionID, this); 182 ASSERT_UNUSED(result, result.isNewEntry); 183 } 184 185 WebsiteDataStore* WebsiteDataStore::existingDataStoreForSessionID(PAL::SessionID sessionID) 186 { 187 return allDataStores().get(sessionID); 188 } 189 190 static Ref<NetworkProcessProxy> networkProcessForSession(PAL::SessionID sessionID) 191 { 192 #if PLATFORM(GTK) || PLATFORM(WPE) 193 if (sessionID.isEphemeral()) { 194 // Reuse a previous persistent session network process for ephemeral sessions. 195 for (auto* dataStore : allDataStores().values()) { 196 if (dataStore->isPersistent()) 197 return makeRef(dataStore->networkProcess()); 198 } 199 } 200 return NetworkProcessProxy::create(); 201 #else 202 UNUSED_PARAM(sessionID); 203 return NetworkProcessProxy::defaultNetworkProcess(); 204 #endif 205 } 206 207 NetworkProcessProxy& WebsiteDataStore::networkProcess() 208 { 209 if (!m_networkProcess) { 210 m_networkProcess = networkProcessForSession(m_sessionID); 211 m_networkProcess->addSession(*this); 212 } 213 214 return *m_networkProcess; 215 } 216 217 NetworkProcessProxy& WebsiteDataStore::networkProcess() const 218 { 219 return const_cast<WebsiteDataStore&>(*this).networkProcess(); 183 220 } 184 221 … … 194 231 ASSERT(!process.provisionalPageCount()); 195 232 m_processes.remove(process); 196 }197 198 WebProcessPool* WebsiteDataStore::processPoolForCookieStorageOperations()199 {200 auto pools = processPools(1);201 return pools.isEmpty() ? nullptr : pools.begin()->get();202 233 } 203 234 … … 441 472 442 473 auto networkProcessAccessType = computeNetworkProcessAccessTypeForDataFetch(dataTypes, !isPersistent()); 443 if (networkProcessAccessType != ProcessAccessType::None) { 444 auto pools = networkProcessAccessType == ProcessAccessType::Launch ? ensureProcessPools() : processPools(); 445 for (auto& processPool : pools) { 446 switch (networkProcessAccessType) { 447 case ProcessAccessType::OnlyIfLaunched: 448 if (!processPool->networkProcess()) 449 continue; 450 break; 451 452 case ProcessAccessType::Launch: 453 processPool->ensureNetworkProcess(this); 454 break; 455 456 case ProcessAccessType::None: 457 ASSERT_NOT_REACHED(); 458 } 459 474 switch (networkProcessAccessType) { 475 case ProcessAccessType::Launch: 476 networkProcess(); 477 ASSERT(m_networkProcess); 478 FALLTHROUGH; 479 case ProcessAccessType::OnlyIfLaunched: 480 if (m_networkProcess) { 460 481 callbackAggregator->addPendingCallback(); 461 processPool->networkProcess()->fetchWebsiteData(m_sessionID, dataTypes, fetchOptions, [callbackAggregator, processPool](WebsiteData websiteData) {482 m_networkProcess->fetchWebsiteData(m_sessionID, dataTypes, fetchOptions, [callbackAggregator](WebsiteData websiteData) { 462 483 callbackAggregator->removePendingCallback(WTFMove(websiteData)); 463 484 }); 464 485 } 486 break; 487 case ProcessAccessType::None: 488 break; 465 489 } 466 490 … … 725 749 #endif 726 750 auto networkProcessAccessType = computeNetworkProcessAccessTypeForDataRemoval(dataTypes, !isPersistent()); 727 if (networkProcessAccessType != ProcessAccessType::None) { 728 auto pools = networkProcessAccessType == ProcessAccessType::Launch ? ensureProcessPools() : processPools(); 729 for (auto& processPool : pools) { 730 switch (networkProcessAccessType) { 731 case ProcessAccessType::OnlyIfLaunched: 732 if (!processPool->networkProcess()) 733 continue; 734 break; 735 736 case ProcessAccessType::Launch: 737 processPool->ensureNetworkProcess(this); 738 break; 739 740 case ProcessAccessType::None: 741 ASSERT_NOT_REACHED(); 742 } 743 751 switch (networkProcessAccessType) { 752 case ProcessAccessType::Launch: 753 networkProcess(); 754 ASSERT(m_networkProcess); 755 FALLTHROUGH; 756 case ProcessAccessType::OnlyIfLaunched: 757 if (m_networkProcess) { 744 758 callbackAggregator->addPendingCallback(); 745 processPool->networkProcess()->deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator, processPool] {759 m_networkProcess->deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator] { 746 760 callbackAggregator->removePendingCallback(); 747 761 }); … … 750 764 #endif 751 765 } 766 break; 767 case ProcessAccessType::None: 768 break; 752 769 } 753 770 … … 894 911 if (dataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) { 895 912 if (!didNotifyNetworkProcessToDeleteWebsiteData) { 896 for (auto& processPool : processPools()) { 897 if (auto* process = processPool->networkProcess()) { 898 callbackAggregator->addPendingCallback(); 899 process->deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator] { 900 callbackAggregator->removePendingCallback(); 901 }); 902 } 903 } 913 networkProcess().deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator] { 914 callbackAggregator->removePendingCallback(); 915 }); 904 916 } 905 917 … … 995 1007 switch (networkProcessAccessType) { 996 1008 case ProcessAccessType::OnlyIfLaunched: 997 if (!processPool->networkProcess())998 continue;999 1009 break; 1000 1010 1001 1011 case ProcessAccessType::Launch: 1002 processPool->ensureNetworkProcess(this);1012 networkProcess(); 1003 1013 break; 1004 1014 … … 1022 1032 1023 1033 callbackAggregator->addPendingCallback(); 1024 processPool->networkProcess()->deleteWebsiteDataForOrigins(m_sessionID, dataTypes, origins, cookieHostNames, HSTSCacheHostNames, registrableDomains, [callbackAggregator, processPool] {1034 networkProcess().deleteWebsiteDataForOrigins(m_sessionID, dataTypes, origins, cookieHostNames, HSTSCacheHostNames, registrableDomains, [callbackAggregator, processPool] { 1025 1035 callbackAggregator->removePendingCallback(); 1026 1036 }); … … 1181 1191 void WebsiteDataStore::setServiceWorkerTimeoutForTesting(Seconds seconds) 1182 1192 { 1183 for (auto& processPool : WebProcessPool::allProcessPools()) { 1184 if (auto* networkProcess = processPool->networkProcess()) 1185 networkProcess->sendSync(Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting(seconds), Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting::Reply(), 0); 1186 } 1193 networkProcess().sendSync(Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting(seconds), Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting::Reply(), 0); 1187 1194 } 1188 1195 1189 1196 void WebsiteDataStore::resetServiceWorkerTimeoutForTesting() 1190 1197 { 1191 for (auto& processPool : WebProcessPool::allProcessPools()) { 1192 if (auto* networkProcess = processPool->networkProcess()) 1193 networkProcess->sendSync(Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting(), Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting::Reply(), 0); 1194 } 1198 networkProcess().sendSync(Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting(), Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting::Reply(), 0); 1195 1199 } 1196 1200 … … 1202 1206 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1203 1207 1204 for (auto& processPool : processPools()) 1205 processPool->ensureNetworkProcess().setMaxStatisticsEntries(m_sessionID, maximumEntryCount, [processPool, callbackAggregator] { }); 1208 networkProcess().setMaxStatisticsEntries(m_sessionID, maximumEntryCount, [callbackAggregator] { }); 1206 1209 } 1207 1210 … … 1212 1215 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1213 1216 1214 for (auto& processPool : processPools()) 1215 processPool->ensureNetworkProcess().setPruneEntriesDownTo(m_sessionID, pruneTargetCount, [processPool, callbackAggregator] { }); 1217 networkProcess().setPruneEntriesDownTo(m_sessionID, pruneTargetCount, [callbackAggregator] { }); 1216 1218 } 1217 1219 … … 1222 1224 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1223 1225 1224 for (auto& processPool : processPools()) 1225 processPool->ensureNetworkProcess().setGrandfatheringTime(m_sessionID, seconds, [processPool, callbackAggregator] { }); 1226 networkProcess().setGrandfatheringTime(m_sessionID, seconds, [callbackAggregator] { }); 1226 1227 } 1227 1228 … … 1232 1233 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1233 1234 1234 for (auto& processPool : processPools()) 1235 processPool->ensureNetworkProcess().setMinimumTimeBetweenDataRecordsRemoval(m_sessionID, seconds, [processPool, callbackAggregator] { }); 1235 networkProcess().setMinimumTimeBetweenDataRecordsRemoval(m_sessionID, seconds, [callbackAggregator] { }); 1236 1236 } 1237 1237 … … 1239 1239 { 1240 1240 ASSERT(RunLoop::isMain()); 1241 1242 for (auto& processPool : processPools()) { 1243 if (auto* process = processPool->networkProcess()) { 1244 process->dumpResourceLoadStatistics(m_sessionID, WTFMove(completionHandler)); 1245 break; 1246 } 1247 } 1241 networkProcess().dumpResourceLoadStatistics(m_sessionID, WTFMove(completionHandler)); 1248 1242 } 1249 1243 … … 1257 1251 } 1258 1252 1259 for (auto& processPool : processPools()) { 1260 if (auto* process = processPool->networkProcess()) { 1261 process->isPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1262 break; 1263 } 1264 } 1253 networkProcess().isPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1265 1254 } 1266 1255 … … 1274 1263 } 1275 1264 1276 for (auto& processPool : processPools()) { 1277 if (auto* process = processPool->networkProcess()) { 1278 process->isGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1279 break; 1280 } 1281 } 1265 networkProcess().isGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1282 1266 } 1283 1267 … … 1293 1277 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1294 1278 1295 for (auto& processPool : ensureProcessPools()) 1296 processPool->ensureNetworkProcess().setPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { }); 1279 networkProcess().setPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1297 1280 } 1298 1281 … … 1308 1291 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1309 1292 1310 for (auto& processPool : processPools()) { 1311 if (auto* process = processPool->networkProcess()) 1312 process->setPrevalentResourceForDebugMode(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { }); 1313 } 1293 networkProcess().setPrevalentResourceForDebugMode(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1314 1294 } 1315 1295 … … 1323 1303 } 1324 1304 1325 for (auto& processPool : processPools()) { 1326 if (auto* process = processPool->networkProcess()) { 1327 process->isVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1328 break; 1329 } 1330 } 1305 networkProcess().isVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1331 1306 } 1332 1307 … … 1342 1317 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1343 1318 1344 for (auto& processPool : processPools()) { 1345 if (auto* networkProcess = processPool->networkProcess()) 1346 networkProcess->setVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { }); 1347 } 1319 networkProcess().setVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1348 1320 } 1349 1321 … … 1354 1326 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1355 1327 1356 for (auto& processPool : processPools()) 1357 processPool->ensureNetworkProcess().setShouldClassifyResourcesBeforeDataRecordsRemoval(m_sessionID, value, [processPool, callbackAggregator] { }); 1328 networkProcess().setShouldClassifyResourcesBeforeDataRecordsRemoval(m_sessionID, value, [callbackAggregator] { }); 1358 1329 } 1359 1330 … … 1369 1340 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1370 1341 1371 for (auto& processPool : processPools()) { 1372 if (auto* process = processPool->networkProcess()) 1373 process->setSubframeUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, [processPool, callbackAggregator] { }); 1374 } 1342 networkProcess().setSubframeUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, [callbackAggregator] { }); 1375 1343 } 1376 1344 … … 1379 1347 ASSERT(RunLoop::isMain()); 1380 1348 1381 for (auto& processPool : processPools()) { 1382 if (auto* process = processPool->networkProcess()) { 1383 process->isRegisteredAsSubFrameUnder(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler)); 1384 break; 1385 } 1386 } 1349 networkProcess().isRegisteredAsSubFrameUnder(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler)); 1387 1350 } 1388 1351 … … 1398 1361 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1399 1362 1400 for (auto& processPool : processPools()) { 1401 if (auto* process = processPool->networkProcess()) 1402 process->setSubresourceUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, [processPool, callbackAggregator] { }); 1403 } 1363 networkProcess().setSubresourceUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, [callbackAggregator] { }); 1404 1364 } 1405 1365 … … 1408 1368 ASSERT(RunLoop::isMain()); 1409 1369 1410 for (auto& processPool : processPools()) { 1411 if (auto* process = processPool->networkProcess()) { 1412 process->isRegisteredAsSubresourceUnder(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler)); 1413 return; 1414 } 1415 } 1416 completionHandler(false); 1370 networkProcess().isRegisteredAsSubresourceUnder(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler)); 1417 1371 } 1418 1372 … … 1428 1382 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1429 1383 1430 for (auto& processPool : processPools()) { 1431 if (auto* process = processPool->networkProcess()) 1432 process->setSubresourceUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedTo }, [processPool, callbackAggregator] { }); 1433 } 1384 networkProcess().setSubresourceUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedTo }, [callbackAggregator] { }); 1434 1385 } 1435 1386 … … 1443 1394 } 1444 1395 1445 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1446 1447 for (auto& processPool : processPools()) { 1448 if (auto* process = processPool->networkProcess()) 1449 process->setSubresourceUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, [processPool, callbackAggregator] { }); 1450 } 1396 networkProcess().setSubresourceUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, WTFMove(completionHandler)); 1451 1397 } 1452 1398 … … 1460 1406 } 1461 1407 1462 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1463 1464 for (auto& processPool : processPools()) { 1465 if (auto* process = processPool->networkProcess()) 1466 process->setTopFrameUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedTo }, [processPool, callbackAggregator] { }); 1467 } 1408 networkProcess().setTopFrameUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedTo }, WTFMove(completionHandler)); 1468 1409 } 1469 1410 … … 1477 1418 } 1478 1419 1479 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1480 1481 for (auto& processPool : processPools()) { 1482 if (auto* process = processPool->networkProcess()) 1483 process->setTopFrameUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, [processPool, callbackAggregator] { }); 1484 } 1420 networkProcess().setTopFrameUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, WTFMove(completionHandler)); 1485 1421 } 1486 1422 … … 1489 1425 ASSERT(RunLoop::isMain()); 1490 1426 1491 for (auto& processPool : processPools()) { 1492 if (auto* process = processPool->networkProcess()) { 1493 process->isRegisteredAsRedirectingTo(m_sessionID, WebCore::RegistrableDomain { urlRedirectedFrom }, WebCore::RegistrableDomain { urlRedirectedTo }, WTFMove(completionHandler)); 1494 return; 1495 } 1496 } 1497 completionHandler(false); 1427 networkProcess().isRegisteredAsRedirectingTo(m_sessionID, WebCore::RegistrableDomain { urlRedirectedFrom }, WebCore::RegistrableDomain { urlRedirectedTo }, WTFMove(completionHandler)); 1498 1428 } 1499 1429 … … 1507 1437 } 1508 1438 1509 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1510 1511 for (auto& processPool : processPools()) { 1512 if (auto* process = processPool->networkProcess()) 1513 process->clearPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { }); 1514 } 1439 networkProcess().clearPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1515 1440 } 1516 1441 … … 1518 1443 { 1519 1444 ASSERT(RunLoop::isMain()); 1520 1521 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1522 1523 for (auto& processPool : processPools()) { 1524 if (auto* process = processPool->networkProcess()) 1525 process->resetParametersToDefaultValues(m_sessionID, [processPool, callbackAggregator] { }); 1526 } 1445 networkProcess().resetParametersToDefaultValues(m_sessionID, WTFMove(completionHandler)); 1527 1446 } 1528 1447 … … 1531 1450 ASSERT(RunLoop::isMain()); 1532 1451 1533 for (auto& processPool : processPools()) { 1534 if (auto* process = processPool->networkProcess()) 1535 process->submitTelemetry(m_sessionID, [] { }); 1536 } 1452 networkProcess().submitTelemetry(m_sessionID, [] { }); 1537 1453 } 1538 1454 … … 1541 1457 ASSERT(RunLoop::isMain()); 1542 1458 1543 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1544 1545 for (auto& processPool : processPools()) { 1546 if (auto* process = processPool->networkProcess()) 1547 process->scheduleClearInMemoryAndPersistent(m_sessionID, modifiedSince, shouldGrandfather, [processPool, callbackAggregator] { }); 1548 } 1459 networkProcess().scheduleClearInMemoryAndPersistent(m_sessionID, modifiedSince, shouldGrandfather, WTFMove(completionHandler)); 1549 1460 } 1550 1461 … … 1553 1464 ASSERT(RunLoop::isMain()); 1554 1465 1555 struct CallbackAggregator : RefCounted<CallbackAggregator> {1556 CallbackAggregator(CompletionHandler<void(Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&&)>&& completionHandler)1466 struct LocalCallbackAggregator : RefCounted<LocalCallbackAggregator> { 1467 LocalCallbackAggregator(CompletionHandler<void(Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&&)>&& completionHandler) 1557 1468 : m_completionHandler(WTFMove(completionHandler)) 1558 1469 { … … 1560 1471 }; 1561 1472 1562 ~ CallbackAggregator()1473 ~LocalCallbackAggregator() 1563 1474 { 1564 1475 ASSERT(RunLoop::isMain()); … … 1575 1486 Vector<WebResourceLoadStatisticsStore::ThirdPartyData> m_results; 1576 1487 }; 1577 1578 RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler))); 1579 1580 for (auto& processPool : ensureProcessPools()) { 1581 processPool->sendResourceLoadStatisticsDataImmediately([this, protectedThis = makeRef(*this), processPool, callbackAggregator] { 1582 processPool->ensureNetworkProcess(this).getResourceLoadStatisticsDataSummary(m_sessionID, [callbackAggregator, processPool](Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&& data) { 1583 callbackAggregator->addResult(WTFMove(data)); 1584 }); 1488 1489 auto localCallbackAggregator = adoptRef(new LocalCallbackAggregator(WTFMove(completionHandler))); 1490 1491 auto wtfCallbackAggregator = WTF::CallbackAggregator::create([this, protectedThis = makeRef(*this), localCallbackAggregator] { 1492 networkProcess().getResourceLoadStatisticsDataSummary(m_sessionID, [localCallbackAggregator](Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&& data) { 1493 localCallbackAggregator->addResult(WTFMove(data)); 1585 1494 }); 1586 } 1495 }); 1496 1497 for (auto* processPool : WebProcessPool::allProcessPools()) 1498 processPool->sendResourceLoadStatisticsDataImmediately([wtfCallbackAggregator] { }); 1587 1499 } 1588 1500 … … 1591 1503 ASSERT(RunLoop::isMain()); 1592 1504 1593 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1594 1595 for (auto& processPool : processPools()) { 1596 if (auto* process = processPool->networkProcess()) 1597 process->scheduleClearInMemoryAndPersistent(m_sessionID, { }, shouldGrandfather, [processPool, callbackAggregator] { }); 1598 } 1505 networkProcess().scheduleClearInMemoryAndPersistent(m_sessionID, { }, shouldGrandfather, WTFMove(completionHandler)); 1599 1506 } 1600 1507 … … 1603 1510 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1604 1511 1605 for (auto& processPool : processPools()) { 1606 if (auto* process = processPool->networkProcess()) 1607 process->scheduleCookieBlockingUpdate(m_sessionID, [processPool, callbackAggregator] { }); 1608 } 1512 networkProcess().scheduleCookieBlockingUpdate(m_sessionID, [callbackAggregator] { }); 1609 1513 } 1610 1514 … … 1615 1519 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1616 1520 1617 for (auto& processPool : processPools()) { 1618 if (auto* process = processPool->networkProcess()) 1619 process->scheduleStatisticsAndDataRecordsProcessing(m_sessionID, [processPool, callbackAggregator] { }); 1620 } 1521 networkProcess().scheduleStatisticsAndDataRecordsProcessing(m_sessionID, [callbackAggregator] { }); 1621 1522 } 1622 1523 … … 1624 1525 { 1625 1526 ASSERT(RunLoop::isMain()); 1626 1627 for (auto& processPool : processPools()) { 1628 if (auto* process = processPool->networkProcess()) { 1629 process->statisticsDatabaseHasAllTables(m_sessionID, WTFMove(completionHandler)); 1630 return; 1631 } 1632 } 1633 1634 completionHandler(false); 1527 networkProcess().statisticsDatabaseHasAllTables(m_sessionID, WTFMove(completionHandler)); 1635 1528 } 1636 1529 … … 1644 1537 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1645 1538 1646 for (auto& processPool : processPools()) { 1647 if (auto* process = processPool->networkProcess()) 1648 process->setLastSeen(m_sessionID, WebCore::RegistrableDomain { url }, seconds, [processPool, callbackAggregator] { }); 1649 } 1539 networkProcess().setLastSeen(m_sessionID, WebCore::RegistrableDomain { url }, seconds, [callbackAggregator] { }); 1650 1540 } 1651 1541 … … 1654 1544 ASSERT(RunLoop::isMain()); 1655 1545 1656 for (auto& processPool : processPools()) { 1657 if (auto* process = processPool->networkProcess()) { 1658 process->domainIDExistsInDatabase(m_sessionID, domainID, WTFMove(completionHandler)); 1659 break; 1660 } 1661 } 1546 networkProcess().domainIDExistsInDatabase(m_sessionID, domainID, WTFMove(completionHandler)); 1662 1547 } 1663 1548 … … 1671 1556 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1672 1557 1673 for (auto& processPool : processPools()) { 1674 if (auto* process = processPool->networkProcess()) 1675 process->mergeStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, WebCore::RegistrableDomain { topFrameUrl1 }, WebCore::RegistrableDomain { topFrameUrl2 }, lastSeen, hadUserInteraction, mostRecentUserInteraction, isGrandfathered, isPrevalent, isVeryPrevalent, dataRecordsRemoved, [processPool, callbackAggregator] { }); 1676 } 1558 networkProcess().mergeStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, WebCore::RegistrableDomain { topFrameUrl1 }, WebCore::RegistrableDomain { topFrameUrl2 }, lastSeen, hadUserInteraction, mostRecentUserInteraction, isGrandfathered, isPrevalent, isVeryPrevalent, dataRecordsRemoved, [callbackAggregator] { }); 1677 1559 } 1678 1560 … … 1686 1568 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1687 1569 1688 for (auto& processPool : processPools()) { 1689 if (auto* process = processPool->networkProcess()) 1690 process->insertExpiredStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, hadUserInteraction, isScheduledForAllButCookieDataRemoval, isPrevalent, [processPool, callbackAggregator] { }); 1691 } 1570 networkProcess().insertExpiredStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, hadUserInteraction, isScheduledForAllButCookieDataRemoval, isPrevalent, [callbackAggregator] { }); 1692 1571 } 1693 1572 … … 1696 1575 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1697 1576 1698 for (auto& processPool : processPools()) 1699 processPool->ensureNetworkProcess().setNotifyPagesWhenDataRecordsWereScanned(m_sessionID, value, [processPool, callbackAggregator] { }); 1577 networkProcess().setNotifyPagesWhenDataRecordsWereScanned(m_sessionID, value, [callbackAggregator] { }); 1700 1578 } 1701 1579 … … 1705 1583 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1706 1584 1707 for (auto& processPool : processPools()) 1708 processPool->ensureNetworkProcess().setIsRunningResourceLoadStatisticsTest(m_sessionID, value, [processPool, callbackAggregator] { }); 1585 networkProcess().setIsRunningResourceLoadStatisticsTest(m_sessionID, value, [callbackAggregator] { }); 1709 1586 } 1710 1587 … … 1717 1594 } 1718 1595 1719 webPage->process().processPool().ensureNetworkProcess().getAllStorageAccessEntries(m_sessionID, WTFMove(completionHandler));1596 networkProcess().getAllStorageAccessEntries(m_sessionID, WTFMove(completionHandler)); 1720 1597 } 1721 1598 … … 1725 1602 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1726 1603 1727 for (auto& processPool : processPools()) 1728 processPool->ensureNetworkProcess().setTimeToLiveUserInteraction(m_sessionID, seconds, [callbackAggregator] { }); 1604 networkProcess().setTimeToLiveUserInteraction(m_sessionID, seconds, [callbackAggregator] { }); 1729 1605 } 1730 1606 … … 1740 1616 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1741 1617 1742 for (auto& processPool : processPools()) { 1743 if (auto* process = processPool->networkProcess()) 1744 process->logUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1745 } 1618 networkProcess().logUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1746 1619 } 1747 1620 … … 1755 1628 } 1756 1629 1757 for (auto& processPool : processPools()) { 1758 if (auto* process = processPool->networkProcess()) { 1759 process->hasHadUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1760 return; 1761 } 1762 } 1763 completionHandler(false); 1630 networkProcess().hasHadUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1764 1631 } 1765 1632 … … 1773 1640 } 1774 1641 1775 for (auto& processPool : processPools()) { 1776 if (auto* process = processPool->networkProcess()) { 1777 process->isRelationshipOnlyInDatabaseOnce(m_sessionID, WebCore::RegistrableDomain { subUrl }, WebCore::RegistrableDomain { topUrl }, WTFMove(completionHandler)); 1778 return; 1779 } 1780 } 1781 completionHandler(false); 1642 networkProcess().isRelationshipOnlyInDatabaseOnce(m_sessionID, WebCore::RegistrableDomain { subUrl }, WebCore::RegistrableDomain { topUrl }, WTFMove(completionHandler)); 1782 1643 } 1783 1644 … … 1793 1654 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1794 1655 1795 for (auto& processPool : processPools()) { 1796 if (auto* process = processPool->networkProcess()) 1797 process->clearUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1798 } 1656 networkProcess().clearUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1799 1657 } 1800 1658 … … 1810 1668 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1811 1669 1812 for (auto& processPool : processPools()) { 1813 if (auto* process = processPool->networkProcess()) 1814 process->setGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, isGrandfathered, [callbackAggregator] { }); 1815 } 1670 networkProcess().setGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, isGrandfathered, [callbackAggregator] { }); 1816 1671 } 1817 1672 … … 1822 1677 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1823 1678 1824 for (auto& processPool : processPools()) { 1825 if (auto* process = processPool->networkProcess()) 1826 process->setCrossSiteLoadWithLinkDecorationForTesting(m_sessionID, WebCore::RegistrableDomain { fromURL }, WebCore::RegistrableDomain { toURL }, [processPool, callbackAggregator] { }); 1827 } 1679 networkProcess().setCrossSiteLoadWithLinkDecorationForTesting(m_sessionID, WebCore::RegistrableDomain { fromURL }, WebCore::RegistrableDomain { toURL }, [callbackAggregator] { }); 1828 1680 } 1829 1681 … … 1832 1684 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1833 1685 1834 for (auto& processPool : processPools()) { 1835 if (auto* networkProcess = processPool->networkProcess()) 1836 networkProcess->resetCrossSiteLoadsWithLinkDecorationForTesting(m_sessionID, [callbackAggregator] { }); 1837 } 1686 networkProcess().resetCrossSiteLoadsWithLinkDecorationForTesting(m_sessionID, [callbackAggregator] { }); 1838 1687 } 1839 1688 … … 1842 1691 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1843 1692 1844 for (auto& processPool : processPools()) { 1845 if (auto* networkProcess = processPool->networkProcess()) 1846 networkProcess->deleteCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, includeHttpOnlyCookies, [callbackAggregator] { }); 1847 } 1693 networkProcess().deleteCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, includeHttpOnlyCookies, [callbackAggregator] { }); 1848 1694 } 1849 1695 1850 1696 void WebsiteDataStore::hasLocalStorageForTesting(const URL& url, CompletionHandler<void(bool)>&& completionHandler) const 1851 1697 { 1852 for (auto& processPool : processPools()) { 1853 if (auto* networkProcess = processPool->networkProcess()) { 1854 networkProcess->hasLocalStorage(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1855 return; 1856 } 1857 } 1858 completionHandler(false); 1698 networkProcess().hasLocalStorage(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1859 1699 } 1860 1700 1861 1701 void WebsiteDataStore::hasIsolatedSessionForTesting(const URL& url, CompletionHandler<void(bool)>&& completionHandler) const 1862 1702 { 1863 for (auto& processPool : processPools()) { 1864 if (auto* networkProcess = processPool->networkProcess()) { 1865 networkProcess->hasIsolatedSession(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1866 return; 1867 } 1868 } 1869 completionHandler(false); 1703 networkProcess().hasIsolatedSession(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1870 1704 } 1871 1705 … … 1874 1708 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1875 1709 1876 for (auto& processPool : processPools()) { 1877 if (auto* networkProcess = processPool->networkProcess()) 1878 networkProcess->setShouldDowngradeReferrerForTesting(enabled, [callbackAggregator] { }); 1879 } 1710 networkProcess().setShouldDowngradeReferrerForTesting(enabled, [callbackAggregator] { }); 1880 1711 } 1881 1712 … … 1908 1739 } 1909 1740 1910 for (auto& processPool : processPools()) { 1911 if (auto* networkProcess = processPool->networkProcess()) 1912 networkProcess->setThirdPartyCookieBlockingMode(m_sessionID, blockingMode, [callbackAggregator] { }); 1913 } 1741 networkProcess().setThirdPartyCookieBlockingMode(m_sessionID, blockingMode, [callbackAggregator] { }); 1914 1742 } 1915 1743 … … 1919 1747 1920 1748 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1921 for (auto& processPool : processPools()) { 1922 if (auto* networkProcess = processPool->networkProcess()) 1923 networkProcess->setShouldEnbleSameSiteStrictEnforcementForTesting(m_sessionID, flag, [callbackAggregator] { }); 1924 } 1749 networkProcess().setShouldEnbleSameSiteStrictEnforcementForTesting(m_sessionID, flag, [callbackAggregator] { }); 1925 1750 } 1926 1751 … … 1930 1755 auto mode = enabled ? WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies : WebCore::FirstPartyWebsiteDataRemovalMode::None; 1931 1756 1932 for (auto& processPool : processPools()) { 1933 if (auto* networkProcess = processPool->networkProcess()) 1934 networkProcess->setFirstPartyWebsiteDataRemovalModeForTesting(m_sessionID, mode, [callbackAggregator] { }); 1935 } 1757 networkProcess().setFirstPartyWebsiteDataRemovalModeForTesting(m_sessionID, mode, [callbackAggregator] { }); 1936 1758 } 1937 1759 … … 1940 1762 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1941 1763 1942 for (auto& processPool : processPools()) { 1943 if (auto* networkProcess = processPool->networkProcess()) 1944 networkProcess->setToSameSiteStrictCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1945 } 1764 networkProcess().setToSameSiteStrictCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { }); 1946 1765 } 1947 1766 … … 1955 1774 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1956 1775 1957 for (auto& processPool : processPools()) 1958 processPool->ensureNetworkProcess().setFirstPartyHostCNAMEDomainForTesting(m_sessionID, firstPartyURL.host().toString(), WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { }); 1776 networkProcess().setFirstPartyHostCNAMEDomainForTesting(m_sessionID, firstPartyURL.host().toString(), WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { }); 1959 1777 } 1960 1778 … … 1968 1786 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1969 1787 1970 for (auto& processPool : processPools()) 1971 processPool->ensureNetworkProcess().setThirdPartyCNAMEDomainForTesting(m_sessionID, WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { }); 1788 networkProcess().setThirdPartyCNAMEDomainForTesting(m_sessionID, WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { }); 1972 1789 } 1973 1790 #endif // ENABLE(RESOURCE_LOAD_STATISTICS) … … 1975 1792 void WebsiteDataStore::syncLocalStorage(CompletionHandler<void()>&& completionHandler) 1976 1793 { 1977 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1978 for (auto& processPool : processPools()) { 1979 if (auto* networkProcess = processPool->networkProcess()) 1980 networkProcess->sendWithAsyncReply(Messages::NetworkProcess::SyncLocalStorage(), [callbackAggregator] { }); 1981 } 1794 networkProcess().sendWithAsyncReply(Messages::NetworkProcess::SyncLocalStorage(), WTFMove(completionHandler)); 1982 1795 } 1983 1796 … … 1987 1800 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1988 1801 1989 for (auto& processPool : processPools()) 1990 processPool->ensureNetworkProcess().setCacheMaxAgeCapForPrevalentResources(m_sessionID, seconds, [callbackAggregator] { }); 1802 networkProcess().setCacheMaxAgeCapForPrevalentResources(m_sessionID, seconds, [callbackAggregator] { }); 1991 1803 #else 1992 1804 UNUSED_PARAM(seconds); … … 1998 1810 { 1999 1811 #if ENABLE(RESOURCE_LOAD_STATISTICS) 2000 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2001 2002 for (auto& processPool : processPools()) { 2003 if (auto* networkProcess = processPool->networkProcess()) 2004 networkProcess->resetCacheMaxAgeCapForPrevalentResources(m_sessionID, [callbackAggregator] { }); 2005 } 1812 networkProcess().resetCacheMaxAgeCapForPrevalentResources(m_sessionID, WTFMove(completionHandler)); 2006 1813 #else 2007 1814 completionHandler(); 2008 1815 #endif 2009 }2010 2011 bool WebsiteDataStore::isAssociatedProcessPool(WebProcessPool& processPool) const2012 {2013 if (auto* processPoolDataStore = processPool.websiteDataStore())2014 return processPoolDataStore == this;2015 if (auto* networkProcessProxy = processPool.networkProcess())2016 return networkProcessProxy->hasSession(m_sessionID);2017 return false;2018 1816 } 2019 1817 … … 2032 1830 // Check if we're one of the legacy data stores. 2033 1831 for (auto& processPool : WebProcessPool::allProcessPools()) { 2034 if (!isAssociatedProcessPool(*processPool))2035 continue;2036 2037 1832 processPools.add(processPool); 2038 1833 if (processPools.size() == limit) … … 2073 1868 void WebsiteDataStore::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* certificate, const String& host) 2074 1869 { 2075 for (auto& processPool : processPools()) 2076 processPool->ensureNetworkProcess().send(Messages::NetworkProcess::AllowSpecificHTTPSCertificateForHost(certificate->certificateInfo(), host), 0); 1870 networkProcess().send(Messages::NetworkProcess::AllowSpecificHTTPSCertificateForHost(certificate->certificateInfo(), host), 0); 2077 1871 } 2078 1872 … … 2127 1921 FileSystem::deleteEmptyDirectory(mediaKeyDirectory); 2128 1922 } 1923 } 1924 1925 void WebsiteDataStore::getNetworkProcessConnection(WebProcessProxy& webProcessProxy, CompletionHandler<void(const NetworkProcessConnectionInfo&)>&& reply) 1926 { 1927 networkProcess().getNetworkProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable { 1928 if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) { 1929 terminateNetworkProcess(); 1930 RELEASE_LOG_IF(isPersistent(), Process, "getNetworkProcessConnection: Failed first attempt, retrying"); 1931 networkProcess().getNetworkProcessConnection(*webProcessProxy, WTFMove(reply)); 1932 return; 1933 } 1934 reply(connectionInfo); 1935 }); 1936 } 1937 1938 void WebsiteDataStore::networkProcessCrashed(NetworkProcessProxy&) 1939 { 1940 if (m_networkProcess) 1941 m_networkProcess->didTerminate(); 1942 m_networkProcess = nullptr; 1943 } 1944 1945 void WebsiteDataStore::terminateNetworkProcess() 1946 { 1947 for (auto* processPool : WebProcessPool::allProcessPools()) 1948 processPool->terminateServiceWorkers(); 1949 1950 if (!m_networkProcess) 1951 return; 1952 m_networkProcess->terminate(); 1953 m_networkProcess = nullptr; 1954 } 1955 1956 void WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&& completionHandler) 1957 { 1958 networkProcess().sendPrepareToSuspend(IsSuspensionImminent::No, WTFMove(completionHandler)); 1959 } 1960 1961 void WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting() 1962 { 1963 networkProcess().sendProcessWillSuspendImminentlyForTesting(); 1964 } 1965 1966 void WebsiteDataStore::sendNetworkProcessDidResume() 1967 { 1968 networkProcess().sendProcessDidResume(); 2129 1969 } 2130 1970 … … 2158 1998 resolveDirectoriesIfNecessary(); 2159 1999 2160 for (auto& processPool : processPools()) {2161 processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, true));2000 networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, true), 0); 2001 for (auto& processPool : processPools()) 2162 2002 processPool->sendToAllProcessesForSession(Messages::WebProcess::SetResourceLoadStatisticsEnabled(true), m_sessionID); 2163 } 2164 return; 2165 } 2166 2167 for (auto& processPool : processPools()) { 2168 processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, false)); 2003 return; 2004 } 2005 2006 networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, false), 0); 2007 for (auto& processPool : processPools()) 2169 2008 processPool->sendToAllProcessesForSession(Messages::WebProcess::SetResourceLoadStatisticsEnabled(false), m_sessionID); 2170 }2171 2009 2172 2010 m_resourceLoadStatisticsEnabled = false; … … 2180 2018 { 2181 2019 if (callback) { 2182 for (auto& processPool : processPools()) 2183 processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsLogTestingEvent(true)); 2020 networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsLogTestingEvent(true), 0); 2184 2021 } 2185 2022 … … 2200 2037 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2201 2038 2202 for (auto& processPool : processPools()) 2203 processPool->ensureNetworkProcess().setResourceLoadStatisticsDebugMode(m_sessionID, enabled, [callbackAggregator] { }); 2039 networkProcess().setResourceLoadStatisticsDebugMode(m_sessionID, enabled, [callbackAggregator] { }); 2204 2040 #else 2205 2041 UNUSED_PARAM(enabled); … … 2216 2052 } 2217 2053 2218 for (auto& processPool : processPools()) { 2219 if (auto* networkProcess = processPool->networkProcess()) { 2220 networkProcess->isResourceLoadStatisticsEphemeral(m_sessionID, WTFMove(completionHandler)); 2221 return; 2222 } 2223 } 2224 #endif 2054 networkProcess().isResourceLoadStatisticsEphemeral(m_sessionID, WTFMove(completionHandler)); 2055 #else 2225 2056 completionHandler(false); 2057 #endif 2226 2058 } 2227 2059 2228 2060 void WebsiteDataStore::setAdClickAttributionDebugMode(bool enabled) 2229 2061 { 2230 for (auto& processPool : processPools()) 2231 processPool->ensureNetworkProcess().setAdClickAttributionDebugMode(enabled); 2062 networkProcess().setAdClickAttributionDebugMode(enabled); 2232 2063 } 2233 2064 … … 2251 2082 #endif 2252 2083 2253 Vector<WebCore::Cookie> WebsiteDataStore::pendingCookies() const2254 {2255 return copyToVector(m_pendingCookies);2256 }2257 2258 void WebsiteDataStore::addPendingCookie(const WebCore::Cookie& cookie)2259 {2260 m_pendingCookies.removeIf([&cookie](auto& pendingCookie) {2261 return pendingCookie.isKeyEqual(cookie);2262 });2263 m_pendingCookies.add(cookie);2264 }2265 2266 void WebsiteDataStore::removePendingCookie(const WebCore::Cookie& cookie)2267 {2268 m_pendingCookies.remove(cookie);2269 }2270 2271 void WebsiteDataStore::clearPendingCookies()2272 {2273 m_pendingCookies.clear();2274 }2275 2276 2084 void WebsiteDataStore::flushCookies(CompletionHandler<void()>&& completionHandler) 2277 2085 { 2278 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2279 for (auto processPool : WebProcessPool::allProcessPools()) 2280 processPool->flushCookies(sessionID(), [callbackAggregator] { }); 2086 networkProcess().flushCookies(sessionID(), WTFMove(completionHandler)); 2281 2087 } 2282 2088 2283 2089 void WebsiteDataStore::setAllowsAnySSLCertificateForWebSocket(bool allows) 2284 2090 { 2285 for (auto processPool : WebProcessPool::allProcessPools()) { 2286 if (auto* networkProcess = processPool->networkProcess()) 2287 networkProcess->sendSync(Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket(allows), Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket::Reply(), 0); 2288 } 2091 networkProcess().sendSync(Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket(allows), Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket::Reply(), 0); 2289 2092 } 2290 2093 2291 2094 void WebsiteDataStore::clearCachedCredentials() 2292 2095 { 2293 for (auto processPool : WebProcessPool::allProcessPools()) 2294 processPool->clearCachedCredentials(sessionID()); 2096 networkProcess().send(Messages::NetworkProcess::ClearCachedCredentials(sessionID()), 0); 2295 2097 } 2296 2098 … … 2317 2119 2318 2120 resolveDirectoriesIfNecessary(); 2319 2320 parameters.pendingCookies = pendingCookies();2321 2121 2322 2122 auto resourceLoadStatisticsDirectory = m_configuration->resourceLoadStatisticsDirectory(); … … 2424 2224 #endif 2425 2225 platformSetNetworkParameters(parameters); 2426 2226 #if PLATFORM(COCOA) 2227 parameters.networkSessionParameters.appHasRequestedCrossWebsiteTrackingPermission = hasRequestedCrossWebsiteTrackingPermission(); 2228 #endif 2229 2427 2230 return parameters; 2428 2231 } … … 2454 2257 } 2455 2258 2456 void WebsiteDataStore::didCreateNetworkProcess()2457 {2458 }2459 2460 2259 void WebsiteDataStore::getLocalStorageDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler) 2461 2260 { … … 2465 2264 } 2466 2265 2467 for (auto& processPool : ensureProcessPools()) { 2468 processPool->ensureNetworkProcess(this).getLocalStorageDetails(m_sessionID, [completionHandler = WTFMove(completionHandler)](auto&& details) { 2469 completionHandler(WTFMove(details)); 2470 }); 2471 // FIXME: Support fetching from multiple pools. 2472 break; 2473 } 2474 ASSERT(!completionHandler); 2266 networkProcess().getLocalStorageDetails(m_sessionID, [completionHandler = WTFMove(completionHandler)](auto&& details) { 2267 completionHandler(WTFMove(details)); 2268 }); 2475 2269 } 2476 2270 … … 2478 2272 { 2479 2273 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2480 for (auto& processPool : processPools()) { 2481 if (auto* process = processPool->networkProcess()) 2482 process->resetQuota(m_sessionID, [callbackAggregator] { }); 2483 } 2274 networkProcess().resetQuota(m_sessionID, [callbackAggregator] { }); 2484 2275 } 2485 2276 … … 2507 2298 return false; 2508 2299 } 2509 #endif 2300 2301 bool WebsiteDataStore::networkProcessHasEntitlementForTesting(const String&) 2302 { 2303 return false; 2304 } 2305 #endif // !PLATFORM(COCOA) 2510 2306 2511 2307 #if !USE(GLIB) … … 2519 2315 void WebsiteDataStore::renameOriginInWebsiteData(URL&& oldName, URL&& newName, OptionSet<WebsiteDataType> dataTypes, CompletionHandler<void()>&& completionHandler) 2520 2316 { 2521 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2522 for (auto& processPool : WebProcessPool::allProcessPools()) { 2523 if (auto* networkProcess = processPool->networkProcess()) { 2524 networkProcess->addSession(*this); 2525 networkProcess->renameOriginInWebsiteData(m_sessionID, oldName, newName, dataTypes, [callbackAggregator] { }); 2526 } 2527 } 2317 networkProcess().renameOriginInWebsiteData(m_sessionID, oldName, newName, dataTypes, WTFMove(completionHandler)); 2528 2318 } 2529 2319 … … 2531 2321 void WebsiteDataStore::hasAppBoundSession(CompletionHandler<void(bool)>&& completionHandler) const 2532 2322 { 2533 for (auto& processPool : processPools()) { 2534 if (auto* networkProcess = processPool->networkProcess()) { 2535 networkProcess->hasAppBoundSession(m_sessionID, WTFMove(completionHandler)); 2536 return; 2537 } 2538 } 2539 completionHandler(false); 2323 networkProcess().hasAppBoundSession(m_sessionID, WTFMove(completionHandler)); 2540 2324 } 2541 2325 2542 2326 void WebsiteDataStore::clearAppBoundSession(CompletionHandler<void()>&& completionHandler) 2543 2327 { 2544 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2545 2546 for (auto& processPool : processPools()) { 2547 if (auto* networkProcess = processPool->networkProcess()) 2548 networkProcess->clearAppBoundSession(m_sessionID, [processPool, callbackAggregator] { }); 2549 } 2328 networkProcess().clearAppBoundSession(m_sessionID, WTFMove(completionHandler)); 2550 2329 } 2551 2330 … … 2569 2348 propagateAppBoundDomains(globalDefaultDataStore().get(), *appBoundDomains); 2570 2349 2571 for (auto* store : nonDefaultDataStores().values())2350 for (auto* store : allDataStores().values()) 2572 2351 propagateAppBoundDomains(store, *appBoundDomains); 2573 2352 } … … 2577 2356 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2578 2357 2579 for (auto& processPool : processPools()) { 2580 if (auto* networkProcess = processPool->networkProcess()) 2581 networkProcess->setAppBoundDomainsForResourceLoadStatistics(m_sessionID, domains, [callbackAggregator] { }); 2582 } 2358 networkProcess().setAppBoundDomainsForResourceLoadStatistics(m_sessionID, domains, [callbackAggregator] { }); 2583 2359 } 2584 2360 #endif … … 2588 2364 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2589 2365 2590 for (auto& processPool : processPools()) 2591 processPool->ensureNetworkProcess().updateBundleIdentifier(bundleIdentifier, [callbackAggregator] { }); 2366 networkProcess().updateBundleIdentifier(bundleIdentifier, [callbackAggregator] { }); 2592 2367 } 2593 2368 … … 2596 2371 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 2597 2372 2598 for (auto& processPool : processPools()) 2599 processPool->ensureNetworkProcess().clearBundleIdentifier([callbackAggregator] { }); 2600 } 2601 2602 } 2373 networkProcess().clearBundleIdentifier([callbackAggregator] { }); 2374 } 2375 2376 static bool nextNetworkProcessLaunchShouldFailForTesting { false }; 2377 2378 void WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting() 2379 { 2380 nextNetworkProcessLaunchShouldFailForTesting = true; 2381 } 2382 2383 bool WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting() 2384 { 2385 return std::exchange(nextNetworkProcessLaunchShouldFailForTesting, false); 2386 } 2387 2388 } -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
r267750 r267763 54 54 #if PLATFORM(COCOA) 55 55 #include <pal/spi/cf/CFNetworkSPI.h> 56 #include <wtf/OSObjectPtr.h> 57 #include <wtf/spi/darwin/XPCSPI.h> 56 58 #endif 57 59 … … 80 82 class SecKeyProxyStore; 81 83 class DeviceIdHashSaltStorage; 84 class NetworkProcessProxy; 82 85 class SOAuthorizationCoordinator; 83 86 class WebCertificateInfo; … … 89 92 enum class WebsiteDataFetchOption : uint8_t; 90 93 enum class WebsiteDataType : uint32_t; 94 95 struct NetworkProcessConnectionInfo; 91 96 struct WebsiteDataRecord; 92 97 struct WebsiteDataStoreParameters; … … 114 119 ~WebsiteDataStore(); 115 120 116 static WebsiteDataStore* existingNonDefaultDataStoreForSessionID(PAL::SessionID); 121 static void forEachWebsiteDataStore(Function<void(WebsiteDataStore&)>&&); 122 123 NetworkProcessProxy& networkProcess() const; 124 NetworkProcessProxy& networkProcess(); 125 126 static WebsiteDataStore* existingDataStoreForSessionID(PAL::SessionID); 117 127 118 128 bool isPersistent() const { return !m_sessionID.isEphemeral(); } … … 123 133 124 134 const WeakHashSet<WebProcessProxy>& processes() const { return m_processes; } 135 136 void getNetworkProcessConnection(WebProcessProxy&, CompletionHandler<void(const NetworkProcessConnectionInfo&)>&&); 137 void terminateNetworkProcess(); 138 void sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&&); 139 void sendNetworkProcessWillSuspendImminentlyForTesting(); 140 void sendNetworkProcessDidResume(); 141 void networkProcessCrashed(NetworkProcessProxy&); 142 static void makeNextNetworkProcessLaunchFailForTesting(); 143 static bool shouldMakeNextNetworkProcessLaunchFailForTesting(); 125 144 126 145 bool resourceLoadStatisticsEnabled() const; … … 239 258 DeviceIdHashSaltStorage& deviceIdHashSaltStorage() { return m_deviceIdHashSaltStorage.get(); } 240 259 241 WebProcessPool* processPoolForCookieStorageOperations();242 bool isAssociatedProcessPool(WebProcessPool&) const;243 244 260 WebsiteDataStoreParameters parameters(); 245 261 246 Vector<WebCore::Cookie> pendingCookies() const;247 void addPendingCookie(const WebCore::Cookie&);248 void removePendingCookie(const WebCore::Cookie&);249 void clearPendingCookies();250 262 void flushCookies(CompletionHandler<void()>&&); 251 263 void clearCachedCredentials(); … … 254 266 255 267 void dispatchOnQueue(Function<void()>&&); 268 269 #if PLATFORM(COCOA) 270 void sendNetworkProcessXPCEndpointToWebProcess(WebProcessProxy&); 271 void sendNetworkProcessXPCEndpointToAllWebProcesses(); 272 #endif 256 273 257 274 #if USE(CURL) … … 280 297 #endif 281 298 282 void didCreateNetworkProcess();283 284 299 const WebsiteDataStoreConfiguration& configuration() { return m_configuration.get(); } 285 300 … … 290 305 291 306 void renameOriginInWebsiteData(URL&&, URL&&, OptionSet<WebsiteDataType>, CompletionHandler<void()>&&); 307 308 bool networkProcessHasEntitlementForTesting(const String&); 292 309 293 310 #if ENABLE(DEVICE_ORIENTATION) … … 367 384 static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>&); 368 385 369 void maybeRegisterWithSessionIDMap();386 void registerWithSessionIDMap(); 370 387 371 388 #if ENABLE(APP_BOUND_DOMAINS) … … 407 424 #endif 408 425 409 HashSet<WebCore::Cookie> m_pendingCookies;410 411 426 WeakHashSet<WebProcessProxy> m_processes; 412 427 … … 429 444 430 445 RefPtr<API::HTTPCookieStore> m_cookieStore; 446 RefPtr<NetworkProcessProxy> m_networkProcess; 431 447 432 448 #if HAVE(APP_SSO) -
trunk/Source/WebKit/UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp
r267618 r267763 43 43 m_proxySettings = WTFMove(proxySettings); 44 44 45 for (auto& processPool : processPools()) 46 processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_proxySettings)); 45 networkProcess().send(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_proxySettings), 0); 47 46 } 48 47 -
trunk/Source/WebKit/UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp
r267618 r267763 43 43 networkSessionParameters.proxySettings = m_networkProxySettings; 44 44 45 if (auto* processPool = processPoolForCookieStorageOperations()) 46 processPool->supplement<WebCookieManagerProxy>()->getCookiePersistentStorage(m_sessionID, networkSessionParameters.cookiePersistentStoragePath, networkSessionParameters.cookiePersistentStorageType); 45 networkProcess().cookieManager().getCookiePersistentStorage(m_sessionID, networkSessionParameters.cookiePersistentStoragePath, networkSessionParameters.cookiePersistentStorageType); 47 46 } 48 47 … … 56 55 57 56 m_persistentCredentialStorageEnabled = enabled; 58 for (auto& processPool : processPools()) 59 processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetPersistentCredentialStorageEnabled(m_sessionID, m_persistentCredentialStorageEnabled)); 57 networkProcess().send(Messages::NetworkProcess::SetPersistentCredentialStorageEnabled(m_sessionID, m_persistentCredentialStorageEnabled), 0); 60 58 } 61 59 … … 66 64 67 65 m_ignoreTLSErrors = ignoreTLSErrors; 68 for (auto& processPool : processPools()) 69 processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetIgnoreTLSErrors(m_sessionID, m_ignoreTLSErrors)); 66 networkProcess().send(Messages::NetworkProcess::SetIgnoreTLSErrors(m_sessionID, m_ignoreTLSErrors), 0); 70 67 } 71 68 … … 73 70 { 74 71 m_networkProxySettings = WTFMove(settings); 75 for (auto& processPool : processPools()) 76 processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_networkProxySettings)); 72 networkProcess().send(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_networkProxySettings), 0); 77 73 } 78 74 -
trunk/Source/WebKit/UIProcess/glib/WebProcessProxyGLib.cpp
r267618 r267763 45 45 // Prewarmed processes don't have a WebsiteDataStore yet, so use the primary WebsiteDataStore from the WebProcessPool. 46 46 // The process won't be used if current WebsiteDataStore is different than the WebProcessPool primary one. 47 dataStore = m_processPool->websiteDataStore();47 dataStore = WebsiteDataStore::defaultDataStore().ptr(); 48 48 } 49 49 -
trunk/Source/WebKit/UIProcess/soup/WebCookieManagerProxySoup.cpp
r267618 r267763 27 27 #include "WebCookieManagerProxy.h" 28 28 29 #include "NetworkProcessProxy.h" 29 30 #include "WebCookieManagerMessages.h" 30 31 #include "WebProcessPool.h" … … 34 35 void WebCookieManagerProxy::setCookiePersistentStorage(PAL::SessionID sessionID, const String& storagePath, SoupCookiePersistentStorageType storageType) 35 36 { 36 m_cookiePersistentStorageMap.set(sessionID, std::make_pair(storagePath, storageType));37 processPool()->sendToNetworkingProcess(Messages::WebCookieManager::SetCookiePersistentStorage(sessionID, storagePath, storageType));37 if (m_networkProcess) 38 m_networkProcess->send(Messages::WebCookieManager::SetCookiePersistentStorage(sessionID, storagePath, storageType), 0); 38 39 } 39 40 -
trunk/Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp
r267750 r267763 38 38 void WebProcessPool::platformInitializeNetworkProcess(NetworkProcessCreationParameters& parameters) 39 39 { 40 NetworkSessionCreationParameters& defaultSessionParameters = parameters.defaultDataStoreParameters.networkSessionParameters;41 supplement<WebCookieManagerProxy>()->getCookiePersistentStorage(defaultSessionParameters.sessionID, defaultSessionParameters.cookiePersistentStoragePath, defaultSessionParameters.cookiePersistentStorageType);42 if (m_websiteDataStore) {43 defaultSessionParameters.persistentCredentialStorageEnabled = m_websiteDataStore->persistentCredentialStorageEnabled();44 defaultSessionParameters.ignoreTLSErrors = m_websiteDataStore->ignoreTLSErrors();45 defaultSessionParameters.proxySettings = m_websiteDataStore->networkProxySettings();46 }47 48 parameters.cookieAcceptPolicy = m_initialHTTPCookieAcceptPolicy;49 40 parameters.languages = userPreferredLanguages(); 50 41 } -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnectionInfo.h
r267618 r267763 26 26 #pragma once 27 27 28 #include "Connection.h" 28 29 #include <WebCore/HTTPCookieAcceptPolicy.h> 29 30 -
trunk/Tools/ChangeLog
r267761 r267763 1 2020-09-29 Alex Christensen <achristensen@webkit.org> 2 3 Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore 4 https://bugs.webkit.org/show_bug.cgi?id=216041 5 6 Reviewed by Brady Eidson. 7 8 Most changes to tests are just calling a function on the WKWebsiteDataStore instead of the WKProcessPool 9 because we want to do something with the network process and it has a new owner. 10 Exceptions are noted inline. 11 12 * TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm: 13 (TestWebKitAPI::TEST): 14 * TestWebKitAPI/Tests/WebKitCocoa/Download.mm: 15 (TestWebKitAPI::downloadAtRate): 16 * TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm: 17 (TEST): 18 * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm: 19 (TEST): 20 * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm: 21 (TEST): 22 * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm: 23 (TEST): 24 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm: 25 (TEST): 26 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm: 27 (TEST): 28 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm: 29 (TEST): 30 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm: 31 (TEST): 32 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm: 33 (TEST): 34 * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm: 35 (TEST): 36 * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm: 37 (TEST): 38 * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm: 39 (checkRecoveryAfterCrash): 40 * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: 41 * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm: 42 (TEST): 43 This test was making a WKWebsiteDataStore, getting its resource load statistics directory, 44 putting things in that directory, then starting the network process and making sure everything 45 works when initializing the network process. Now, network process initialization happens when a 46 WKWebsiteDataStore is instantiated, so we need to put things there before instantiating a WKWebsiteDataStore. 47 * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: 48 Before this change, each WKProcessPool had its own network process, which holds the service worker registry 49 for the WebsiteDataStores used with that process pool. Now, the network process still needs to have a service 50 worker registry in it, but when we receive a message from it looking for a web process to run the service 51 worker, we go arbitrarily to the first process pool that has a process we can use. This logic is in 52 WebProcessPool::establishWorkerContextConnectionToNetworkProcess. Because we use the first process pool each 53 time, setting the custom user agent to two different things in two different process pools causes only one 54 to be used. This is not a problem in practice, though, because the only application that uses the SPI to 55 set a service worker's custom user agent is Safari, which only has one process pool. This test still verifies 56 that a user ageint is correctly sent. 57 Similarly, the tests that count service worker processes either have different results or need to be run with 58 one process pool per parent process. To keep the results the same, I separated the tests into different 59 TEST(ServiceWorkers, ...) macros which are run in separate parent processes. 60 The test RestoreFromDiskNonDefaultStore needs to use the same data store for both WKWebViews now because otherwise 61 there was a race condition in the startup of a new network process that wasn't there before because we were using the 62 same process pool and therefore the same network process. I added spinning the run loop and sleeping to be able to 63 reproduce the race condition failure and I use the same WKWebsiteDataStore to use the same network process, which was 64 the intent of using the same WKProcessPool before. The test still tests that the registration is re-used when we are 65 not using the default data store. 66 * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: 67 * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm: 68 (-[CheckSessionCookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): 69 (-[CheckSessionCookieUIDelegate waitForMessage]): 70 (-[CheckSessionCookieUIDelegate alertCookieHTML]): 71 (TEST): 72 This is the whole point of me doing this. 73 I took a test that was flaky only on iOS (because of different NSHTTPCookieStorage syncing behavior) and made 74 it flaky nowhere (fingers crossed!) and added a test that correctly handles session cookies like we could not 75 before this change. 76 I also re-used some test infrastructure and made it stop using process-global static variables for test state. 77 * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm: 78 (TEST): 79 * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm: 80 (runWebsiteDataStoreCustomPaths): 81 (TEST): 82 * TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm: 83 (-[CloseWhileStartingProtocol startLoading]): 84 (TestWebKitAPI::runTest): 85 * WebKitTestRunner/TestController.cpp: 86 (WTR::TestController::resetStateToConsistentValues): 87 (WTR::TestController::findAndDumpWebKitProcessIdentifiers): 88 (WTR::TestController::networkProcessDidCrash): 89 (WTR::TestController::terminateNetworkProcess): 90 (WTR::TestController::platformAdjustContext): 91 WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting is not needed, so I removed it. 92 WKContextSetPrimaryWebsiteDataStore isn't needed any more because WKContextRef (WebProcessPool) doesn't 93 own a network process any more, so it doesn't care which is the default WebsiteDataStore. 94 In fact, the "default" WebsiteDataStore isn't really important in the network process any more. 95 1 96 2020-09-26 Darin Adler <darin@apple.com> 2 97 -
trunk/Tools/TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm
r267618 r267763 33 33 #import <WebKit/WKProcessPoolPrivate.h> 34 34 #import <WebKit/WKWebViewPrivate.h> 35 #import <WebKit/WKWebsiteDataStorePrivate.h> 35 36 #import <WebKit/WebKit.h> 36 37 #import <wtf/RetainPtr.h> … … 88 89 EXPECT_NE(webView1PID, webView2PID); 89 90 90 pid_t initialNetworkProcessIdentififer = [ processPool.get()_networkProcessIdentifier];91 pid_t initialNetworkProcessIdentififer = [configuration.get().websiteDataStore _networkProcessIdentifier]; 91 92 EXPECT_NE(initialNetworkProcessIdentififer, 0); 92 93 kill(initialNetworkProcessIdentififer, SIGKILL); … … 97 98 [webView1.get() _test_waitForDidFinishNavigation]; 98 99 99 pid_t relaunchedNetworkProcessIdentifier = [ processPool.get()_networkProcessIdentifier];100 pid_t relaunchedNetworkProcessIdentifier = [configuration.get().websiteDataStore _networkProcessIdentifier]; 100 101 EXPECT_NE(initialNetworkProcessIdentififer, relaunchedNetworkProcessIdentifier); 101 102 EXPECT_FALSE(networkProcessCrashed); … … 147 148 // Constucting a WebView starts a network process so terminate this one. The page load below will then request a network process and we 148 149 // make this new network process launch crash on startup. 149 [ processPool _terminateNetworkProcess];150 [ processPool _makeNextNetworkProcessLaunchFailForTesting];150 [WKWebsiteDataStore _makeNextNetworkProcessLaunchFailForTesting]; 151 [configuration.get().websiteDataStore _terminateNetworkProcess]; 151 152 152 153 auto delegate = adoptNS([[MonitorWebContentCrashNavigationDelegate alloc] init]); … … 159 160 EXPECT_FALSE(webProcessCrashed); 160 161 EXPECT_GT([webView _webProcessIdentifier], 0); 161 EXPECT_GT([ processPool.get()_networkProcessIdentifier], 0);162 EXPECT_GT([configuration.get().websiteDataStore _networkProcessIdentifier], 0); 162 163 } 163 164 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm
r267618 r267763 890 890 Util::run(&receivedData); 891 891 // Start the DownloadMonitor's timer. 892 [[webView configuration]. processPool_synthesizeAppIsBackground:YES];892 [[webView configuration].websiteDataStore _synthesizeAppIsBackground:YES]; 893 893 if (returnToForeground == AppReturnsToForeground::Yes) 894 [[webView configuration]. processPool_synthesizeAppIsBackground:NO];894 [[webView configuration].websiteDataStore _synthesizeAppIsBackground:NO]; 895 895 didCancel = false; 896 896 Util::run(&didCancel); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm
r267618 r267763 32 32 #import <WebKit/WKUserContentControllerPrivate.h> 33 33 #import <WebKit/WKWebViewConfigurationPrivate.h> 34 #import <WebKit/WKWebsiteDataStorePrivate.h> 34 35 #import <WebKit/WebKit.h> 35 36 #import <WebKit/_WKProcessPoolConfiguration.h> … … 87 88 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 88 89 89 [configuration.get(). processPool_terminateNetworkProcess];90 [configuration.get().websiteDataStore _terminateNetworkProcess]; 90 91 91 92 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm
r267618 r267763 31 31 #import <WebKit/WKUserContentControllerPrivate.h> 32 32 #import <WebKit/WKWebViewConfigurationPrivate.h> 33 #import <WebKit/WKWebsiteDataStorePrivate.h> 33 34 #import <WebKit/WebKit.h> 34 35 #import <WebKit/_WKProcessPoolConfiguration.h> … … 58 59 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 59 60 60 [configuration.get(). processPool_terminateNetworkProcess];61 [configuration.get().websiteDataStore _terminateNetworkProcess]; 61 62 62 63 // Copy the inconsistent database files to the database directory -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm
r267753 r267763 32 32 #import <WebKit/WKUserContentControllerPrivate.h> 33 33 #import <WebKit/WKWebViewConfigurationPrivate.h> 34 #import <WebKit/WKWebsiteDataStorePrivate.h> 34 35 #import <WebKit/WebKit.h> 35 36 #import <WebKit/_WKProcessPoolConfiguration.h> … … 59 60 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 60 61 61 [configuration.get(). processPool_terminateNetworkProcess];62 [configuration.get().websiteDataStore _terminateNetworkProcess]; 62 63 63 64 // Copy the inconsistent database files to the database directory … … 91 92 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 92 93 93 [configuration.get(). processPool_terminateNetworkProcess];94 [configuration.get().websiteDataStore _terminateNetworkProcess]; 94 95 95 96 NSURL *url = [[NSBundle mainBundle] URLForResource:databaseName withExtension:@"sqlite3" subdirectory:@"TestWebKitAPI.resources"]; -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm
r267618 r267763 32 32 #import <WebKit/WKUserContentControllerPrivate.h> 33 33 #import <WebKit/WKWebViewConfigurationPrivate.h> 34 #import <WebKit/WKWebsiteDataStorePrivate.h> 34 35 #import <WebKit/WebKit.h> 35 36 #import <WebKit/_WKProcessPoolConfiguration.h> … … 58 59 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 59 60 60 [configuration.get(). processPool_terminateNetworkProcess];61 [configuration.get().websiteDataStore _terminateNetworkProcess]; 61 62 62 63 // Copy database files with old ObjectStoreInfo schema to the database directory. -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm
r267618 r267763 32 32 #import <WebKit/WKUserContentControllerPrivate.h> 33 33 #import <WebKit/WKWebViewConfigurationPrivate.h> 34 #import <WebKit/WKWebsiteDataStorePrivate.h> 34 35 #import <WebKit/WebKit.h> 35 36 #import <WebKit/_WKProcessPoolConfiguration.h> … … 93 94 if (!killedDBProcess && openRequestUpgradeNeeded) { 94 95 killedDBProcess = true; 95 [configuration.get(). processPool_terminateNetworkProcess];96 [configuration.get().websiteDataStore _terminateNetworkProcess]; 96 97 } 97 98 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm
r267618 r267763 33 33 #import <WebKit/WKWebViewConfigurationPrivate.h> 34 34 #import <WebKit/WKWebViewPrivate.h> 35 #import <WebKit/WKWebsiteDataStorePrivate.h> 35 36 #import <WebKit/_WKProcessPoolConfiguration.h> 36 37 #import <WebKit/_WKUserStyleSheet.h> … … 70 71 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 71 72 72 [configuration.get(). processPool_terminateNetworkProcess];73 [configuration.get().websiteDataStore _terminateNetworkProcess]; 73 74 74 75 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm
r267618 r267763 79 79 80 80 // Terminate the network process 81 [configuration.get(). processPool_terminateNetworkProcess];81 [configuration.get().websiteDataStore _terminateNetworkProcess]; 82 82 83 83 // Make a new web view to finish the test … … 269 269 webView = nil; 270 270 secondWebView = nil; 271 [configuration.get(). processPool_terminateNetworkProcess];271 [configuration.get().websiteDataStore _terminateNetworkProcess]; 272 272 273 273 // Third-party IDB storage is stored in the memory of network process. … … 386 386 webView = nil; 387 387 secondWebView = nil; 388 [configuration.get(). processPool_terminateNetworkProcess];388 [configuration.get().websiteDataStore _terminateNetworkProcess]; 389 389 390 390 auto thirdWebView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm
r267618 r267763 33 33 #import <WebKit/WKUserContentControllerPrivate.h> 34 34 #import <WebKit/WKWebViewConfigurationPrivate.h> 35 #import <WebKit/WKWebsiteDataStorePrivate.h> 35 36 #import <WebKit/WebKit.h> 36 37 #import <WebKit/_WKProcessPoolConfiguration.h> … … 89 90 runTestAndCheckResult(@"Continue"); 90 91 91 [configuration.get(). processPool_sendNetworkProcessWillSuspendImminently];92 [configuration.get(). processPool_sendNetworkProcessDidResume];92 [configuration.get().websiteDataStore _sendNetworkProcessWillSuspendImminently]; 93 [configuration.get().websiteDataStore _sendNetworkProcessDidResume]; 93 94 94 95 runTestAndCheckResult(@"Expected Abort For Suspension"); … … 159 160 runTestAndCheckResult(@"database is created"); 160 161 161 [configuration.get(). processPool_sendNetworkProcessWillSuspendImminently];162 [configuration.get(). processPool_sendNetworkProcessDidResume];162 [configuration.get().websiteDataStore _sendNetworkProcessWillSuspendImminently]; 163 [configuration.get().websiteDataStore _sendNetworkProcessDidResume]; 163 164 164 165 runTestAndCheckResult(@"transaction is completed"); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm
r267618 r267763 96 96 // Terminate network process to keep WAL on disk. 97 97 webView = nil; 98 [configuration.get(). processPool_terminateNetworkProcess];98 [configuration.get().websiteDataStore _terminateNetworkProcess]; 99 99 100 100 EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:walFilePath.get().path]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm
r267618 r267763 32 32 #import <WebKit/WKWebViewConfigurationPrivate.h> 33 33 #import <WebKit/WKWebpagePreferencesPrivate.h> 34 #import <WebKit/WKWebsiteDataStorePrivate.h> 34 35 #import <WebKit/WebKit.h> 35 36 #import <WebKit/_WKProcessPoolConfiguration.h> … … 110 111 EXPECT_WK_STREQ(@"session:storage", [lastScriptMessage body]); 111 112 112 [configuration.get(). processPool_terminateNetworkProcess];113 [configuration.get().websiteDataStore _terminateNetworkProcess]; 113 114 114 115 receivedScriptMessage = false; … … 163 164 EXPECT_WK_STREQ(@"value", [lastScriptMessage body]); 164 165 165 [ processPool.get()_sendNetworkProcessWillSuspendImminently];166 [configuration.get().websiteDataStore _sendNetworkProcessWillSuspendImminently]; 166 167 167 168 readyToContinue = false; … … 178 179 TestWebKitAPI::Util::run(&readyToContinue); 179 180 180 [ processPool.get()_sendNetworkProcessDidResume];181 [configuration.get().websiteDataStore _sendNetworkProcessDidResume]; 181 182 182 183 receivedScriptMessage = false; -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm
r267618 r267763 29 29 #import "TestWKWebView.h" 30 30 #import "Utilities.h" 31 #import <WebKit/WK ProcessPoolPrivate.h>31 #import <WebKit/WKWebsiteDataStorePrivate.h> 32 32 #import <wtf/BlockPtr.h> 33 33 #import <wtf/RetainPtr.h> … … 38 38 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:[[[WKWebViewConfiguration alloc] init] autorelease]]); 39 39 [webView synchronouslyLoadTestPageNamed:@"simple"]; 40 WK ProcessPool *pool = [webView configuration].processPool;41 bool hasEntitlement = [ pool_networkProcessHasEntitlementForTesting:@"com.apple.rootless.storage.WebKitNetworkingSandbox"];40 WKWebsiteDataStore *store = [webView configuration].websiteDataStore; 41 bool hasEntitlement = [store _networkProcessHasEntitlementForTesting:@"com.apple.rootless.storage.WebKitNetworkingSandbox"]; 42 42 #if PLATFORM(MAC) && USE(APPLE_INTERNAL_SDK) 43 43 EXPECT_TRUE(hasEntitlement); … … 45 45 EXPECT_FALSE(hasEntitlement); 46 46 #endif 47 EXPECT_FALSE([ pool_networkProcessHasEntitlementForTesting:@"test failure case"]);47 EXPECT_FALSE([store _networkProcessHasEntitlementForTesting:@"test failure case"]); 48 48 } 49 49 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm
r267618 r267763 73 73 done = false; 74 74 75 [[webView configuration]. processPool_terminateNetworkProcess];75 [[webView configuration].websiteDataStore _terminateNetworkProcess]; 76 76 [webView loadRequest:[NSURLRequest requestWithURL:simple2]]; 77 77 TestWebKitAPI::Util::run(&done); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
r267618 r267763 5386 5386 TestWebKitAPI::Util::spinRunLoop(1); 5387 5387 5388 [ processPool_terminateNetworkProcess];5388 [webViewConfiguration.get().websiteDataStore _terminateNetworkProcess]; 5389 5389 5390 5390 auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm
r267750 r267763 427 427 TestWebKitAPI::Util::spinRunLoop(1); 428 428 429 [configuration.get(). processPool_terminateNetworkProcess];429 [configuration.get().websiteDataStore _terminateNetworkProcess]; 430 430 431 431 auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); … … 460 460 TestWebKitAPI::Util::spinRunLoop(1); 461 461 462 [configuration.get(). processPool_terminateNetworkProcess];462 [configuration.get().websiteDataStore _terminateNetworkProcess]; 463 463 464 464 auto webView3 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); … … 1238 1238 TEST(ResourceLoadStatistics, CanAccessDataSummaryWithNoProcessPool) 1239 1239 { 1240 NSURL *itpRootURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"CanAccessDataSummaryWithNoProcessPoolTest"] isDirectory:YES]; 1240 1241 auto defaultFileManager = [NSFileManager defaultManager]; 1241 _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[_WKWebsiteDataStoreConfiguration new] autorelease];1242 auto *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease];1243 NSURL *itpRootURL = [[dataStore _configuration] _resourceLoadStatisticsDirectory];1244 1242 NSURL *fileURL = [itpRootURL URLByAppendingPathComponent:@"observations.db"]; 1245 1243 [defaultFileManager removeItemAtPath:itpRootURL.path error:nil]; … … 1252 1250 [defaultFileManager copyItemAtPath:newFileURL.path toPath:fileURL.path error:nil]; 1253 1251 EXPECT_TRUE([defaultFileManager fileExistsAtPath:fileURL.path]); 1252 1253 _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[_WKWebsiteDataStoreConfiguration new] autorelease]; 1254 dataStoreConfiguration._resourceLoadStatisticsDirectory = itpRootURL; 1255 auto *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease]; 1254 1256 [dataStore _setResourceLoadStatisticsEnabled:YES]; 1255 1257 … … 1301 1303 1302 1304 __block bool doneFlag = false; 1303 [ sharedProcessPool_sendNetworkProcessPrepareToSuspend:^{1304 doneFlag = true; 1305 }]; 1306 TestWebKitAPI::Util::run(&doneFlag); 1307 1308 [ sharedProcessPool_sendNetworkProcessDidResume];1305 [dataStore1 _sendNetworkProcessPrepareToSuspend:^{ 1306 doneFlag = true; 1307 }]; 1308 TestWebKitAPI::Util::run(&doneFlag); 1309 1310 [dataStore1 _sendNetworkProcessDidResume]; 1309 1311 } 1310 1312 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
r267618 r267763 559 559 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 560 560 561 messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: BarCustom UserAgent"]);561 messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: Foo Custom UserAgent"]); 562 562 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; 563 563 … … 633 633 TestWebKitAPI::Util::run(&done); 634 634 done = false; 635 636 [WKWebsiteDataStore _deleteDefaultDataStoreForTesting];637 635 638 636 ServiceWorkerTCPServer server({ … … 983 981 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 984 982 setConfigurationInjectedBundlePath(configuration.get()); 983 RetainPtr<WKProcessPool> originalProcessPool = configuration.get().processPool; 985 984 986 985 done = false; … … 1036 1035 1037 1036 // Make sure that loading the simple page did not start the service worker process. 1038 EXPECT_EQ( 0u, webView.get().configuration.processPool._serviceWorkerProcessCount);1037 EXPECT_EQ(1u, webView.get().configuration.processPool._serviceWorkerProcessCount); 1039 1038 1040 1039 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]); … … 1044 1043 done = false; 1045 1044 1046 // Make sure that loading this page did start the service worker process.1047 1045 EXPECT_EQ(1u, webView.get().configuration.processPool._serviceWorkerProcessCount); 1048 1046 EXPECT_EQ(1u, originalProcessPool.get()._serviceWorkerProcessCount); 1049 1047 [[configuration websiteDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 1050 1048 done = true; … … 1619 1617 } 1620 1618 1621 TEST(ServiceWorkers, OutOf AndInProcessServiceWorker)1619 TEST(ServiceWorkers, OutOfProcessServiceWorker) 1622 1620 { 1623 1621 bool useSeparateServiceWorkerProcess = true; … … 1625 1623 1626 1624 EXPECT_EQ(1u, launchServiceWorkerProcess(!useSeparateServiceWorkerProcess, !firstLoadAboutBlank)); 1627 EXPECT_EQ(2u, launchServiceWorkerProcess(useSeparateServiceWorkerProcess, !firstLoadAboutBlank)); 1628 } 1629 1630 TEST(ServiceWorkers, LoadAboutBlankBeforeNavigatingThroughServiceWorker) 1625 } 1626 1627 TEST(ServiceWorkers, InProcessServiceWorker) 1631 1628 { 1632 1629 bool useSeparateServiceWorkerProcess = true; 1633 1630 bool firstLoadAboutBlank = true; 1634 1631 1632 EXPECT_EQ(2u, launchServiceWorkerProcess(useSeparateServiceWorkerProcess, !firstLoadAboutBlank)); 1633 } 1634 1635 TEST(ServiceWorkers, LoadAboutBlankBeforeNavigatingThroughOutOfProcessServiceWorker) 1636 { 1637 bool useSeparateServiceWorkerProcess = true; 1638 bool firstLoadAboutBlank = true; 1639 1635 1640 EXPECT_EQ(1u, launchServiceWorkerProcess(!useSeparateServiceWorkerProcess, firstLoadAboutBlank)); 1641 } 1642 1643 TEST(ServiceWorkers, LoadAboutBlankBeforeNavigatingThroughInProcessServiceWorker) 1644 { 1645 bool useSeparateServiceWorkerProcess = true; 1646 bool firstLoadAboutBlank = true; 1647 1636 1648 EXPECT_EQ(2u, launchServiceWorkerProcess(useSeparateServiceWorkerProcess, firstLoadAboutBlank)); 1637 1649 } … … 1848 1860 EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:swDBPath.path]); 1849 1861 1850 // We protect the process pool so that it outlives the WebsiteDataStore.1851 1862 RetainPtr<WKProcessPool> protectedProcessPool; 1863 RetainPtr<WKWebsiteDataStore> protectedWebsiteDataStore; 1852 1864 1853 1865 ServiceWorkerTCPServer server({ … … 1872 1884 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1873 1885 protectedProcessPool = webView.get().configuration.processPool; 1886 protectedWebsiteDataStore = webView.get().configuration.websiteDataStore; 1874 1887 1875 1888 [webView loadRequest:server.request()]; … … 1881 1894 } 1882 1895 1896 // Make us more likely to lose any races with service worker initialization. 1897 TestWebKitAPI::Util::spinRunLoop(10); 1898 usleep(10000); 1899 TestWebKitAPI::Util::spinRunLoop(10); 1900 1883 1901 @autoreleasepool { 1884 1902 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1885 1903 1886 auto websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]); 1887 websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = swDBPath; 1888 auto nonDefaultDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]); 1889 configuration.get().websiteDataStore = nonDefaultDataStore.get(); 1904 configuration.get().websiteDataStore = protectedWebsiteDataStore.get(); 1890 1905 1891 1906 auto messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"PASS: Registration already has an active worker"]); … … 1945 1960 EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:swDBPath.path]); 1946 1961 1947 [ webView.get().configuration.processPool_sendNetworkProcessWillSuspendImminently];1962 [webView.get().configuration.websiteDataStore _sendNetworkProcessWillSuspendImminently]; 1948 1963 1949 1964 EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:swDBPath.path]); 1950 1965 1951 [ webView.get().configuration.processPool_sendNetworkProcessDidResume];1966 [webView.get().configuration.websiteDataStore _sendNetworkProcessDidResume]; 1952 1967 1953 1968 [webView loadRequest:server.request()]; -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm
r267618 r267763 480 480 @end 481 481 482 // FIXME: on iOS, UI process should be using the same cookie file as the network process for default session.483 #if PLATFORM(MAC)484 482 enum class ShouldEnableProcessPrewarming { No, Yes }; 485 483 void runWKHTTPCookieStoreWithoutProcessPool(ShouldEnableProcessPrewarming shouldEnableProcessPrewarming) … … 590 588 } 591 589 592 #endif // PLATFORM(MAC)593 594 590 @interface CheckSessionCookieUIDelegate : NSObject <WKUIDelegate> 591 - (NSString *)alertCookieHTML; 592 - (NSString *)waitForMessage; 595 593 @end 596 594 597 @implementation CheckSessionCookieUIDelegate 595 @implementation CheckSessionCookieUIDelegate { 596 RetainPtr<NSString> _message; 597 } 598 598 599 - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler 599 600 { 600 EXPECT_STREQ("SessionCookieName=CookieValue", message.UTF8String);601 _message = message; 601 602 finished = true; 602 603 completionHandler(); 603 604 } 605 606 - (NSString *)waitForMessage 607 { 608 while (!_message) 609 TestWebKitAPI::Util::spinRunLoop(); 610 return _message.autorelease(); 611 } 612 613 - (NSString *)alertCookieHTML 614 { 615 return @"<script>var cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i ++) { cookies[i] = cookies[i].trim(); } cookies.sort(); alert(cookies.join('; '));</script>"; 616 } 617 604 618 @end 619 620 TEST(WebKit, WKHTTPCookieStoreMultipleViews) 621 { 622 TestWKWebView *webView1 = [[TestWKWebView new] autorelease]; 623 [webView1 synchronouslyLoadHTMLString:@"start network process"]; 624 625 NSHTTPCookie *sessionCookie = [NSHTTPCookie cookieWithProperties:@{ 626 NSHTTPCookiePath: @"/", 627 NSHTTPCookieName: @"SessionCookieName", 628 NSHTTPCookieValue: @"CookieValue", 629 NSHTTPCookieDomain: @"127.0.0.1", 630 }]; 631 632 __block bool setCookieDone = false; 633 [webView1.configuration.websiteDataStore.httpCookieStore setCookie:sessionCookie completionHandler:^{ 634 setCookieDone = true; 635 }]; 636 TestWebKitAPI::Util::run(&setCookieDone); 637 638 auto delegate = adoptNS([CheckSessionCookieUIDelegate new]); 639 [webView1 setUIDelegate:delegate.get()]; 640 641 [webView1 loadHTMLString:[delegate alertCookieHTML] baseURL:[NSURL URLWithString:@"http://127.0.0.1"]]; 642 EXPECT_WK_STREQ([delegate waitForMessage], "SessionCookieName=CookieValue"); 643 644 TestWKWebView *webView2 = [[TestWKWebView new] autorelease]; 645 [webView2 setUIDelegate:delegate.get()]; 646 [webView2 loadHTMLString:[delegate alertCookieHTML] baseURL:[NSURL URLWithString:@"http://127.0.0.1"]]; 647 EXPECT_WK_STREQ([delegate waitForMessage], "SessionCookieName=CookieValue"); 648 } 605 649 606 650 TEST(WKHTTPCookieStore, WithoutProcessPoolEphemeralSession) … … 628 672 finished = false; 629 673 630 NSString *alertCookieHTML = @"<script>var cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i ++) { cookies[i] = cookies[i].trim(); } cookies.sort(); alert(cookies.join('; '));</script>"; 631 [webView loadHTMLString:alertCookieHTML baseURL:[NSURL URLWithString:@"http://127.0.0.1"]]; 632 TestWebKitAPI::Util::run(&finished); 674 [webView loadHTMLString:[delegate alertCookieHTML] baseURL:[NSURL URLWithString:@"http://127.0.0.1"]]; 675 EXPECT_WK_STREQ([delegate waitForMessage], "SessionCookieName=CookieValue"); 633 676 } 634 677 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm
r267618 r267763 36 36 #import <WebKit/WKWebViewConfigurationPrivate.h> 37 37 #import <WebKit/WKWebViewPrivate.h> 38 #import <WebKit/WKWebsiteDataStorePrivate.h> 38 39 #import <WebKit/WebKit.h> 39 40 #import <wtf/RetainPtr.h> … … 153 154 runUntilTasksInFlight(2); 154 155 155 [webView1.get().configuration. processPool_terminateNetworkProcess];156 [webView1.get().configuration.websiteDataStore _terminateNetworkProcess]; 156 157 157 158 runUntilTasksInFlight(0); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm
r267618 r267763 245 245 // in newly fired up NetworkProcesses, verify that the fetch and delete APIs work as expected. 246 246 247 [ processPool_terminateNetworkProcess];247 [dataStore _terminateNetworkProcess]; 248 248 auto newCustomDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]); 249 249 … … 256 256 TestWebKitAPI::Util::run(&receivedScriptMessage); 257 257 258 [ processPool_terminateNetworkProcess];258 [dataStore _terminateNetworkProcess]; 259 259 newCustomDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]); 260 260 … … 386 386 // Terminate the network process while a query is pending. 387 387 auto* allProcessPools = [WKProcessPool _allProcessPoolsForTesting]; 388 ASSERT_EQ(1U, [allProcessPools count]); 389 auto* processPool = allProcessPools[0]; 390 while (![processPool _networkProcessIdentifier]) 388 ASSERT_EQ(0U, [allProcessPools count]); 389 while (![dataStore _networkProcessIdentifier]) 391 390 TestWebKitAPI::Util::sleep(0.01); 392 kill([ processPool_networkProcessIdentifier], SIGKILL);391 kill([dataStore _networkProcessIdentifier], SIGKILL); 393 392 allProcessPools = nil; 394 393 dataStore = nil; … … 466 465 [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:key]; 467 466 468 TestWKWebView *webView2 = [[[TestWKWebView alloc] init] autorelease]; 467 WKWebViewConfiguration *configuration = [[WKWebViewConfiguration new] autorelease]; 468 configuration.websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:[[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]] autorelease]; 469 TestWKWebView *webView2 = [[[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration] autorelease]; 469 470 [webView2 synchronouslyLoadHTMLString:@"start auxiliary processes" baseURL:nil]; 470 471 … … 540 541 TestWebKitAPI::Util::spinRunLoop(1); 541 542 542 [webViewConfiguration.get(). processPool_terminateNetworkProcess];543 [webViewConfiguration.get().websiteDataStore _terminateNetworkProcess]; 543 544 544 545 request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"simple2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]; … … 858 859 859 860 done = true; 860 [[webView configuration]. processPool_terminateNetworkProcess];861 [[webView configuration].websiteDataStore _terminateNetworkProcess]; 861 862 862 863 [fileManager removeItemAtPath:path error:&error]; -
trunk/Tools/TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm
r267618 r267763 35 35 #import <WebKit/WKContextPrivate.h> 36 36 #import <WebKit/WKProcessGroupPrivate.h> 37 #import <WebKit/WKViewPrivate.h> 38 #import <WebKit/WKWebsiteDataStoreRef.h> 37 39 #import <wtf/RetainPtr.h> 38 40 … … 72 74 return processGroup; 73 75 } 76 77 static RetainPtr<WKView> wkView; 74 78 75 79 @interface CloseWhileStartingProtocol : TestProtocol … … 90 94 WKContextSetClient([processGroup() _contextRef], &client.base); 91 95 92 kill(WK ContextGetNetworkProcessIdentifier([processGroup() _contextRef]), SIGKILL);96 kill(WKWebsiteDataStoreGetNetworkProcessIdentifier(WKPageGetWebsiteDataStore([wkView pageRef])), SIGKILL); 93 97 [self.client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSCocoaErrorDomain code:0 userInfo:nil]]; 94 98 }); … … 143 147 { 144 148 RetainPtr<WKBrowsingContextGroup> browsingContextGroup = adoptNS([[WKBrowsingContextGroup alloc] initWithIdentifier:@"TestIdentifier"]); 145 RetainPtr<WKView>wkView = adoptNS([[WKView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) processGroup:processGroup() browsingContextGroup:browsingContextGroup.get()]);149 wkView = adoptNS([[WKView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) processGroup:processGroup() browsingContextGroup:browsingContextGroup.get()]); 146 150 RetainPtr<CustomProtocolsLoadDelegate> loadDelegate = adoptNS([[CustomProtocolsLoadDelegate alloc] init]); 147 151 [wkView browsingContextController].loadDelegate = loadDelegate.get(); -
trunk/Tools/WebKitTestRunner/TestController.cpp
r267761 r267763 1035 1035 resetQuota(); 1036 1036 1037 WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(platformContext(), true);1038 1039 1037 WKContextClearCurrentModifierStateForTesting(TestController::singleton().context()); 1040 1038 … … 1209 1207 WKPageGetProcessIdentifier(TestController::singleton().mainWebView()->page()), '\n', 1210 1208 TestController::networkProcessName(), ": ", 1211 WK ContextGetNetworkProcessIdentifier(m_context.get()), '\n'));1209 WKWebsiteDataStoreGetNetworkProcessIdentifier(websiteDataStore()), '\n')); 1212 1210 #else 1213 1211 dumpResponse("\n"_s); … … 2171 2169 void TestController::networkProcessDidCrash() 2172 2170 { 2173 pid_t pid = WK ContextGetNetworkProcessIdentifier(m_context.get());2171 pid_t pid = WKWebsiteDataStoreGetNetworkProcessIdentifier(websiteDataStore()); 2174 2172 fprintf(stderr, "#CRASHED - %s (pid %ld)\n", networkProcessName(), static_cast<long>(pid)); 2175 2173 exit(1); … … 2991 2989 void TestController::terminateNetworkProcess() 2992 2990 { 2993 WK ContextTerminateNetworkProcess(platformContext());2991 WKWebsiteDataStoreTerminateNetworkProcess(websiteDataStore()); 2994 2992 } 2995 2993 … … 3006 3004 void TestController::platformInitializeDataStore(WKPageConfigurationRef configuration, const TestOptions& options) 3007 3005 { 3008 if ( options.useEphemeralSession)3009 m_websiteDataStore = WKPageConfigurationGetWebsiteDataStore(configuration);3010 else 3011 m_websiteDataStore = defaultWebsiteDataStore();3006 if (!options.useEphemeralSession) 3007 WKPageConfigurationSetWebsiteDataStore(configuration, defaultWebsiteDataStore()); 3008 3009 m_websiteDataStore = WKPageConfigurationGetWebsiteDataStore(configuration); 3012 3010 } 3013 3011 … … 3022 3020 } 3023 3021 3024 WKContextRef TestController::platformAdjustContext(WKContextRef context, WKContextConfigurationRef contextConfiguration) 3025 { 3026 WKContextSetPrimaryWebsiteDataStore(context, defaultWebsiteDataStore()); 3022 WKContextRef TestController::platformAdjustContext(WKContextRef context, WKContextConfigurationRef) 3023 { 3027 3024 return context; 3028 3025 }
Note:
See TracChangeset
for help on using the changeset viewer.