⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 245930 in webkit


Ignore:
Timestamp:
May 30, 2019, 5:30:28 PM (7 years ago)
Author:
Alan Coon
Message:

Apply patch. rdar://problem/50857668

Location:
branches/safari-607-branch/Source/WebKit
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-607-branch/Source/WebKit/ChangeLog

    r245920 r245930  
     12019-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
    1372019-05-30  Kocsen Chung  <kocsen_chung@apple.com>
    238
  • branches/safari-607-branch/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r244190 r245930  
    457457}
    458458
    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 
     459void WebProcessProxy::sendPageDataStore(WebPageProxy& webPage)
     460{
    468461    auto sessionID = webPage.sessionID();
    469462    if (sessionID.isEphemeral())
     
    471464    else if (sessionID != PAL::SessionID::defaultSessionID())
    472465        send(Messages::WebProcess::AddWebsiteDataStore(webPage.websiteDataStore().parameters()), 0);
     466}
     467
     468void WebProcessProxy::addProvisionalPageProxy(ProvisionalPageProxy& provisionalPage)
     469{
     470    ASSERT(!m_provisionalPages.contains(&provisionalPage));
     471    m_provisionalPages.add(&provisionalPage);
     472
     473    sendPageDataStore(provisionalPage.page());
     474}
     475
     476void WebProcessProxy::removeProvisionalPageProxy(ProvisionalPageProxy& provisionalPage)
     477{
     478    ASSERT(m_provisionalPages.contains(&provisionalPage));
     479    m_provisionalPages.remove(&provisionalPage);
     480
     481    destroyDataStoreIfUnused(provisionalPage.page().sessionID());
     482}
     483
     484void 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);
    473494
    474495    m_pageMap.set(pageID, &webPage);
     
    499520        m_processPool->pageEndUsingWebsiteDataStore(webPage);
    500521
    501     auto sessionID = webPage.sessionID();
     522    destroyDataStoreIfUnused(webPage.sessionID());
     523
     524    updateBackgroundResponsivenessTimer();
     525
     526    maybeShutDown();
     527}
     528
     529void WebProcessProxy::destroyDataStoreIfUnused(PAL::SessionID sessionID)
     530{
    502531    if (sessionID != PAL::SessionID::defaultSessionID() && !hasPageUsingSession(sessionID))
    503532        send(Messages::WebProcess::DestroySession(sessionID), 0);
    504 
    505     updateBackgroundResponsivenessTimer();
    506 
    507     maybeShutDown();
    508533}
    509534
     
    512537    for (auto& page : m_pageMap.values()) {
    513538        if (page->sessionID() == sessionID)
     539            return true;
     540    }
     541    for (auto* provisionalPage : m_provisionalPages) {
     542        if (provisionalPage->page().sessionID() == sessionID)
    514543            return true;
    515544    }
  • branches/safari-607-branch/Source/WebKit/UIProcess/WebProcessProxy.h

    r242135 r245930  
    133133    void removeWebPage(WebPageProxy&, uint64_t pageID, EndsUsingDataStore);
    134134
    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&);
    137137
    138138    typename WebPageProxyMap::ValuesConstIteratorRange pages() const { return m_pageMap.values(); }
     
    283283    void didDestroyFrame(uint64_t);
    284284    void didDestroyUserGestureToken(uint64_t);
     285
     286    void sendPageDataStore(WebPageProxy&);
     287    void destroyDataStoreIfUnused(PAL::SessionID);
    285288
    286289    bool canBeAddedToWebProcessCache() const;
Note: See TracChangeset for help on using the changeset viewer.