Changeset 245930 in webkit
- Timestamp:
- May 30, 2019, 5:30:28 PM (7 years ago)
- Location:
- branches/safari-607-branch/Source/WebKit
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
UIProcess/WebProcessProxy.cpp (modified) (4 diffs)
-
UIProcess/WebProcessProxy.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-607-branch/Source/WebKit/ChangeLog
r245920 r245930 1 2019-05-30 Kocsen Chung <kocsen_chung@apple.com> 2 3 Apply patch. rdar://problem/50857668 4 5 2019-05-30 Chris Dumez <cdumez@apple.com> 6 7 TestWebKitAPI.ProcessSwap.UseSessionCookiesAfterProcessSwapInNonDefaultPersistentSession is failing on safari-607-branch 8 <rdar://problem/49980530> 9 10 Reviewed by Brady Eidson. 11 12 On the safari-607-branch banch, we need to send a WebProcess::AddWebsiteDataStore() IPC to the WebContent 13 process before it does any load for a non-default data store. If we fail to do so then the WebContent 14 process will fall back to using the default session for the loads. 15 16 This is what was happening for this API test. The cookie was getting set for session 2 but then it 17 would later try to read the cookie from session 1 (default one) after the process swap, and would 18 thus fail to get the cookie it expected. 19 20 The issue was that we would send the WebProcess::AddWebsiteDataStore() IPC too late, when committing 21 the provisional process (in WebPageProxy::swapToWebProcess()). By this point, the provisional load 22 would have already started in the provisional process and used the wrong session. To address the issue, 23 we now send the WebProcess::AddWebsiteDataStore() IPC as soon as we create the ProvisionalPageProxy. 24 25 * UIProcess/WebProcessProxy.cpp: 26 (WebKit::WebProcessProxy::sendPageDataStore): 27 (WebKit::WebProcessProxy::addProvisionalPageProxy): 28 (WebKit::WebProcessProxy::removeProvisionalPageProxy): 29 (WebKit::WebProcessProxy::addExistingWebPage): 30 (WebKit::WebProcessProxy::removeWebPage): 31 (WebKit::WebProcessProxy::destroyDataStoreIfUnused): 32 (WebKit::WebProcessProxy::hasPageUsingSession const): 33 * UIProcess/WebProcessProxy.h: 34 (WebKit::WebProcessProxy::addProvisionalPageProxy): Deleted. 35 (WebKit::WebProcessProxy::removeProvisionalPageProxy): Deleted. 36 1 37 2019-05-30 Kocsen Chung <kocsen_chung@apple.com> 2 38 -
branches/safari-607-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp
r244190 r245930 457 457 } 458 458 459 void WebProcessProxy::addExistingWebPage(WebPageProxy& webPage, uint64_t pageID, BeginsUsingDataStore beginsUsingDataStore) 460 { 461 ASSERT(!m_pageMap.contains(pageID)); 462 ASSERT(!globalPageMap().contains(pageID)); 463 ASSERT(!m_isInProcessCache); 464 465 if (beginsUsingDataStore == BeginsUsingDataStore::Yes) 466 m_processPool->pageBeginUsingWebsiteDataStore(webPage); 467 459 void WebProcessProxy::sendPageDataStore(WebPageProxy& webPage) 460 { 468 461 auto sessionID = webPage.sessionID(); 469 462 if (sessionID.isEphemeral()) … … 471 464 else if (sessionID != PAL::SessionID::defaultSessionID()) 472 465 send(Messages::WebProcess::AddWebsiteDataStore(webPage.websiteDataStore().parameters()), 0); 466 } 467 468 void WebProcessProxy::addProvisionalPageProxy(ProvisionalPageProxy& provisionalPage) 469 { 470 ASSERT(!m_provisionalPages.contains(&provisionalPage)); 471 m_provisionalPages.add(&provisionalPage); 472 473 sendPageDataStore(provisionalPage.page()); 474 } 475 476 void WebProcessProxy::removeProvisionalPageProxy(ProvisionalPageProxy& provisionalPage) 477 { 478 ASSERT(m_provisionalPages.contains(&provisionalPage)); 479 m_provisionalPages.remove(&provisionalPage); 480 481 destroyDataStoreIfUnused(provisionalPage.page().sessionID()); 482 } 483 484 void WebProcessProxy::addExistingWebPage(WebPageProxy& webPage, uint64_t pageID, BeginsUsingDataStore beginsUsingDataStore) 485 { 486 ASSERT(!m_pageMap.contains(pageID)); 487 ASSERT(!globalPageMap().contains(pageID)); 488 ASSERT(!m_isInProcessCache); 489 490 if (beginsUsingDataStore == BeginsUsingDataStore::Yes) 491 m_processPool->pageBeginUsingWebsiteDataStore(webPage); 492 493 sendPageDataStore(webPage); 473 494 474 495 m_pageMap.set(pageID, &webPage); … … 499 520 m_processPool->pageEndUsingWebsiteDataStore(webPage); 500 521 501 auto sessionID = webPage.sessionID(); 522 destroyDataStoreIfUnused(webPage.sessionID()); 523 524 updateBackgroundResponsivenessTimer(); 525 526 maybeShutDown(); 527 } 528 529 void WebProcessProxy::destroyDataStoreIfUnused(PAL::SessionID sessionID) 530 { 502 531 if (sessionID != PAL::SessionID::defaultSessionID() && !hasPageUsingSession(sessionID)) 503 532 send(Messages::WebProcess::DestroySession(sessionID), 0); 504 505 updateBackgroundResponsivenessTimer();506 507 maybeShutDown();508 533 } 509 534 … … 512 537 for (auto& page : m_pageMap.values()) { 513 538 if (page->sessionID() == sessionID) 539 return true; 540 } 541 for (auto* provisionalPage : m_provisionalPages) { 542 if (provisionalPage->page().sessionID() == sessionID) 514 543 return true; 515 544 } -
branches/safari-607-branch/Source/WebKit/UIProcess/WebProcessProxy.h
r242135 r245930 133 133 void removeWebPage(WebPageProxy&, uint64_t pageID, EndsUsingDataStore); 134 134 135 void addProvisionalPageProxy(ProvisionalPageProxy& provisionalPage) { ASSERT(!m_provisionalPages.contains(&provisionalPage)); m_provisionalPages.add(&provisionalPage); }136 void removeProvisionalPageProxy(ProvisionalPageProxy& provisionalPage) { ASSERT(m_provisionalPages.contains(&provisionalPage)); m_provisionalPages.remove(&provisionalPage); }135 void addProvisionalPageProxy(ProvisionalPageProxy&); 136 void removeProvisionalPageProxy(ProvisionalPageProxy&); 137 137 138 138 typename WebPageProxyMap::ValuesConstIteratorRange pages() const { return m_pageMap.values(); } … … 283 283 void didDestroyFrame(uint64_t); 284 284 void didDestroyUserGestureToken(uint64_t); 285 286 void sendPageDataStore(WebPageProxy&); 287 void destroyDataStoreIfUnused(PAL::SessionID); 285 288 286 289 bool canBeAddedToWebProcessCache() const;
Note:
See TracChangeset
for help on using the changeset viewer.