Changeset 280128 in webkit


Ignore:
Timestamp:
Jul 21, 2021 4:51:18 AM (3 years ago)
Author:
Carlos Garcia Campos
Message:

REGRESSION(r267763): [SOUP] After network process crash, all cookies are lost until browser is restarted
https://bugs.webkit.org/show_bug.cgi?id=228128

Reviewed by Adrian Perez de Castro.

Cookies configuration is no longer stored to be sent again to the new network process after a crash.

  • NetworkProcess/NetworkSessionCreationParameters.cpp:

(WebKit::NetworkSessionCreationParameters::encode const): Encode cookieAcceptPolicy.
(WebKit::NetworkSessionCreationParameters::decode): Decode cookieAcceptPolicy.

  • NetworkProcess/NetworkSessionCreationParameters.h: Add cookieAcceptPolicy.
  • NetworkProcess/soup/NetworkSessionSoup.cpp:

(WebKit::NetworkSessionSoup::NetworkSessionSoup): Set cookie accept policy on NetworkStorageSession.

  • UIProcess/API/glib/WebKitCookieManager.cpp:

(webkit_cookie_manager_set_persistent_storage): Use WebsiteDataStore API to cache the given values.
(webkit_cookie_manager_set_accept_policy): Ditto.

  • UIProcess/WebCookieManagerProxy.h:
  • UIProcess/WebsiteData/WebsiteDataStore.h:
  • UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:

(WebKit::WebsiteDataStore::platformSetNetworkParameters): Set cached cookie settings to network session parameters.
(WebKit::WebsiteDataStore::setCookiePersistentStorage): Cache the given value and notify the cookie manager.
(WebKit::WebsiteDataStore::setHTTPCookieAcceptPolicy): Ditto.

  • UIProcess/soup/WebCookieManagerProxySoup.cpp:

(WebKit::WebCookieManagerProxy::getCookiePersistentStorage const): Deleted.

Location:
trunk/Source/WebKit
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r280122 r280128  
     12021-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        REGRESSION(r267763): [SOUP] After network process crash, all cookies are lost until browser is restarted
     4        https://bugs.webkit.org/show_bug.cgi?id=228128
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        Cookies configuration is no longer stored to be sent again to the new network process after a crash.
     9
     10        * NetworkProcess/NetworkSessionCreationParameters.cpp:
     11        (WebKit::NetworkSessionCreationParameters::encode const): Encode cookieAcceptPolicy.
     12        (WebKit::NetworkSessionCreationParameters::decode): Decode cookieAcceptPolicy.
     13        * NetworkProcess/NetworkSessionCreationParameters.h: Add cookieAcceptPolicy.
     14        * NetworkProcess/soup/NetworkSessionSoup.cpp:
     15        (WebKit::NetworkSessionSoup::NetworkSessionSoup): Set cookie accept policy on NetworkStorageSession.
     16        * UIProcess/API/glib/WebKitCookieManager.cpp:
     17        (webkit_cookie_manager_set_persistent_storage): Use WebsiteDataStore API to cache the given values.
     18        (webkit_cookie_manager_set_accept_policy): Ditto.
     19        * UIProcess/WebCookieManagerProxy.h:
     20        * UIProcess/WebsiteData/WebsiteDataStore.h:
     21        * UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:
     22        (WebKit::WebsiteDataStore::platformSetNetworkParameters): Set cached cookie settings to network session parameters.
     23        (WebKit::WebsiteDataStore::setCookiePersistentStorage): Cache the given value and notify the cookie manager.
     24        (WebKit::WebsiteDataStore::setHTTPCookieAcceptPolicy): Ditto.
     25        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
     26        (WebKit::WebCookieManagerProxy::getCookiePersistentStorage const): Deleted.
     27
    1282021-07-20  Wenson Hsieh  <wenson_hsieh@apple.com>
    229
  • trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp

    r280015 r280128  
    6565    encoder << ignoreTLSErrors;
    6666    encoder << proxySettings;
     67    encoder << cookieAcceptPolicy;
    6768#endif
    6869#if USE(CURL)
     
    190191    if (!proxySettings)
    191192        return std::nullopt;
     193
     194    std::optional<WebCore::HTTPCookieAcceptPolicy> cookieAcceptPolicy;
     195    decoder >> cookieAcceptPolicy;
     196    if (!cookieAcceptPolicy)
     197        return std::nullopt;
    192198#endif
    193199
     
    319325        , WTFMove(*ignoreTLSErrors)
    320326        , WTFMove(*proxySettings)
     327        , WTFMove(*cookieAcceptPolicy)
    321328#endif
    322329#if USE(CURL)
  • trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h

    r280015 r280128  
    3434#if USE(SOUP)
    3535#include "SoupCookiePersistentStorageType.h"
     36#include <WebCore/HTTPCookieAcceptPolicy.h>
    3637#include <WebCore/SoupNetworkProxySettings.h>
    3738#endif
     
    7879    bool ignoreTLSErrors { false };
    7980    WebCore::SoupNetworkProxySettings proxySettings;
     81    WebCore::HTTPCookieAcceptPolicy cookieAcceptPolicy { WebCore::HTTPCookieAcceptPolicy::ExclusivelyFromMainDocumentDomain };
    8082#endif
    8183#if USE(CURL)
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp

    r275116 r280128  
    4747    auto* storageSession = networkStorageSession();
    4848    ASSERT(storageSession);
     49
     50    storageSession->setCookieAcceptPolicy(parameters.cookieAcceptPolicy);
    4951
    5052    setIgnoreTLSErrors(parameters.ignoreTLSErrors);
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp

    r278941 r280128  
    195195        return;
    196196
    197     manager->priv->cookieManager().setCookiePersistentStorage(sessionID, String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage));
     197    auto& websiteDataStore = webkitWebsiteDataManagerGetDataStore(manager->priv->dataManager);
     198    websiteDataStore.setCookiePersistentStorage(String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage));
    198199}
    199200
     
    213214    g_return_if_fail(WEBKIT_IS_COOKIE_MANAGER(manager));
    214215
    215     manager->priv->cookieManager().setHTTPCookieAcceptPolicy(manager->priv->sessionID(), toHTTPCookieAcceptPolicy(policy), []() { });
     216    auto& websiteDataStore = webkitWebsiteDataManagerGetDataStore(manager->priv->dataManager);
     217    websiteDataStore.setHTTPCookieAcceptPolicy(toHTTPCookieAcceptPolicy(policy));
    216218}
    217219
  • trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h

    r278941 r280128  
    8888#if USE(SOUP)
    8989    void setCookiePersistentStorage(PAL::SessionID, const String& storagePath, SoupCookiePersistentStorageType);
    90     void getCookiePersistentStorage(PAL::SessionID, String& storagePath, SoupCookiePersistentStorageType&) const;
    9190#endif
    9291
     
    10099
    101100    WeakPtr<NetworkProcessProxy> m_networkProcess;
    102 
    103 #if USE(SOUP)
    104     using CookiePersistentStorageMap = HashMap<PAL::SessionID, std::pair<String, SoupCookiePersistentStorageType>>;
    105     CookiePersistentStorageMap m_cookiePersistentStorageMap;
    106 #endif
    107101};
    108102
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r279477 r280128  
    6363
    6464#if USE(SOUP)
     65#include "SoupCookiePersistentStorageType.h"
     66#include <WebCore/HTTPCookieAcceptPolicy.h>
    6567#include <WebCore/SoupNetworkProxySettings.h>
    6668#endif
     
    291293    void setNetworkProxySettings(WebCore::SoupNetworkProxySettings&&);
    292294    const WebCore::SoupNetworkProxySettings& networkProxySettings() const { return m_networkProxySettings; }
     295    void setCookiePersistentStorage(const String&, SoupCookiePersistentStorageType);
     296    void setHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy);
    293297#endif
    294298
     
    434438    bool m_ignoreTLSErrors { true };
    435439    WebCore::SoupNetworkProxySettings m_networkProxySettings;
     440    String m_cookiePersistentStoragePath;
     441    SoupCookiePersistentStorageType m_cookiePersistentStorageType { SoupCookiePersistentStorageType::SQLite };
     442    WebCore::HTTPCookieAcceptPolicy m_cookieAcceptPolicy { WebCore::HTTPCookieAcceptPolicy::ExclusivelyFromMainDocumentDomain };
    436443#endif
    437444
  • trunk/Source/WebKit/UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp

    r267763 r280128  
    4242    networkSessionParameters.ignoreTLSErrors = m_ignoreTLSErrors;
    4343    networkSessionParameters.proxySettings = m_networkProxySettings;
    44 
    45     networkProcess().cookieManager().getCookiePersistentStorage(m_sessionID, networkSessionParameters.cookiePersistentStoragePath, networkSessionParameters.cookiePersistentStorageType);
     44    networkSessionParameters.cookiePersistentStoragePath = m_cookiePersistentStoragePath;
     45    networkSessionParameters.cookiePersistentStorageType = m_cookiePersistentStorageType;
     46    networkSessionParameters.cookieAcceptPolicy = m_cookieAcceptPolicy;
    4647}
    4748
     
    7374}
    7475
     76void WebsiteDataStore::setCookiePersistentStorage(const String& storagePath, SoupCookiePersistentStorageType storageType)
     77{
     78    if (m_cookiePersistentStoragePath == storagePath && m_cookiePersistentStorageType == storageType)
     79        return;
     80
     81    m_cookiePersistentStoragePath = storagePath;
     82    m_cookiePersistentStorageType = storageType;
     83    networkProcess().cookieManager().setCookiePersistentStorage(m_sessionID, m_cookiePersistentStoragePath, m_cookiePersistentStorageType);
     84}
     85
     86void WebsiteDataStore::setHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy policy)
     87{
     88    if (m_cookieAcceptPolicy == policy)
     89        return;
     90
     91    m_cookieAcceptPolicy = policy;
     92    networkProcess().cookieManager().setHTTPCookieAcceptPolicy(m_sessionID, policy, [] { });
     93}
     94
    7595} // namespace WebKit
  • trunk/Source/WebKit/UIProcess/soup/WebCookieManagerProxySoup.cpp

    r267763 r280128  
    2929#include "NetworkProcessProxy.h"
    3030#include "WebCookieManagerMessages.h"
    31 #include "WebProcessPool.h"
    3231
    3332namespace WebKit {
     
    3938}
    4039
    41 void WebCookieManagerProxy::getCookiePersistentStorage(PAL::SessionID sessionID, String& storagePath, SoupCookiePersistentStorageType& storageType) const
    42 {
    43     auto pair = m_cookiePersistentStorageMap.get(sessionID);
    44     storagePath = pair.first;
    45     storageType = pair.second;
    46 }
    47 
    48 }
     40} // namespace WebKit
Note: See TracChangeset for help on using the changeset viewer.