Changeset 240340 in webkit


Ignore:
Timestamp:
Jan 23, 2019 9:24:19 AM (5 years ago)
Author:
Michael Catanzaro
Message:

[SOUP] Clean up NetworkStorageSession
https://bugs.webkit.org/show_bug.cgi?id=193707

Reviewed by Carlos Garcia Campos.

Source/WebCore:

A NetworkStorageSession now always has a SoupNetworkSession, so we can remove a lot of
complexity that is no longer needed. getOrCreateSoupNetworkSession can go away because we
know the session has always already been created. The soupNetworkSession getter can now
return a reference rather than a pointer, because it will never be NULL except after it has
been cleared with clearSoupNetworkSession (renamed), and that should only happen immediately
before process termination after nothing else is using it. Cookie jar syncing can also go
away; the NetworkStorageSession can now rely on the SoupNetworkSession to exist and just
use its cookie jar.

  • platform/network/NetworkStorageSession.h:

(WebCore::NetworkStorageSession::soupNetworkSession const): Deleted.

  • platform/network/soup/DNSResolveQueueSoup.cpp:

(WebCore::DNSResolveQueueSoup::updateIsUsingProxy):
(WebCore::DNSResolveQueueSoup::platformResolve):
(WebCore::DNSResolveQueueSoup::resolve):

  • platform/network/soup/NetworkStorageSessionSoup.cpp:

(WebCore::NetworkStorageSession::NetworkStorageSession):
(WebCore::NetworkStorageSession::~NetworkStorageSession):
(WebCore::NetworkStorageSession::soupNetworkSession const):
(WebCore::NetworkStorageSession::clearSoupNetworkSession):
(WebCore::NetworkStorageSession::cookieStorage const):
(WebCore::NetworkStorageSession::setCookieStorage):
(WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession const): Deleted.
(WebCore::NetworkStorageSession::clearSoupNetworkSessionAndCookieStorage): Deleted.

  • platform/network/soup/SocketStreamHandleImplSoup.cpp:

(WebCore::SocketStreamHandleImpl::create):

Source/WebKit:

Restore an important call to clearSoupNetworkSession that was removed in r240292. Also,
adapt to NetworkStorageSessions API changes.

  • NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp:

(WebKit::LegacyCustomProtocolManager::registerScheme):

  • NetworkProcess/soup/NetworkProcessMainSoup.cpp:
  • NetworkProcess/soup/NetworkProcessSoup.cpp:

(WebKit::NetworkProcess::userPreferredLanguagesChanged):
(WebKit::NetworkProcess::setNetworkProxySettings):

  • NetworkProcess/soup/NetworkSessionSoup.cpp:

(WebKit::NetworkSessionSoup::soupSession const):

Location:
trunk/Source
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r240337 r240340  
     12019-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>
     2
     3        [SOUP] Clean up NetworkStorageSession
     4        https://bugs.webkit.org/show_bug.cgi?id=193707
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        A NetworkStorageSession now always has a SoupNetworkSession, so we can remove a lot of
     9        complexity that is no longer needed. getOrCreateSoupNetworkSession can go away because we
     10        know the session has always already been created. The soupNetworkSession getter can now
     11        return a reference rather than a pointer, because it will never be NULL except after it has
     12        been cleared with clearSoupNetworkSession (renamed), and that should only happen immediately
     13        before process termination after nothing else is using it. Cookie jar syncing can also go
     14        away; the NetworkStorageSession can now rely on the SoupNetworkSession to exist and just
     15        use its cookie jar.
     16
     17        * platform/network/NetworkStorageSession.h:
     18        (WebCore::NetworkStorageSession::soupNetworkSession const): Deleted.
     19        * platform/network/soup/DNSResolveQueueSoup.cpp:
     20        (WebCore::DNSResolveQueueSoup::updateIsUsingProxy):
     21        (WebCore::DNSResolveQueueSoup::platformResolve):
     22        (WebCore::DNSResolveQueueSoup::resolve):
     23        * platform/network/soup/NetworkStorageSessionSoup.cpp:
     24        (WebCore::NetworkStorageSession::NetworkStorageSession):
     25        (WebCore::NetworkStorageSession::~NetworkStorageSession):
     26        (WebCore::NetworkStorageSession::soupNetworkSession const):
     27        (WebCore::NetworkStorageSession::clearSoupNetworkSession):
     28        (WebCore::NetworkStorageSession::cookieStorage const):
     29        (WebCore::NetworkStorageSession::setCookieStorage):
     30        (WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession const): Deleted.
     31        (WebCore::NetworkStorageSession::clearSoupNetworkSessionAndCookieStorage): Deleted.
     32        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
     33        (WebCore::SocketStreamHandleImpl::create):
     34
    1352019-01-23  Zalan Bujtas  <zalan@apple.com>
    236
  • trunk/Source/WebCore/platform/network/NetworkStorageSession.h

    r240292 r240340  
    9898    ~NetworkStorageSession();
    9999
    100     SoupNetworkSession* soupNetworkSession() const { return m_session.get(); };
    101     SoupNetworkSession& getOrCreateSoupNetworkSession() const;
    102     void clearSoupNetworkSessionAndCookieStorage();
     100    SoupNetworkSession& soupNetworkSession() const;
     101    void clearSoupNetworkSession();
    103102    SoupCookieJar* cookieStorage() const;
    104103    void setCookieStorage(SoupCookieJar*);
     
    169168
    170169    mutable std::unique_ptr<SoupNetworkSession> m_session;
    171     GRefPtr<SoupCookieJar> m_cookieStorage;
    172170    Function<void ()> m_cookieObserverHandler;
    173171#elif USE(CURL)
  • trunk/Source/WebCore/platform/network/soup/DNSResolveQueueSoup.cpp

    r240292 r240340  
    9393{
    9494    GRefPtr<GProxyResolver> resolver;
    95     g_object_get(globalDefaultNetworkStorageSessionAccessor()().getOrCreateSoupNetworkSession().soupSession(), "proxy-resolver", &resolver.outPtr(), nullptr);
     95    g_object_get(globalDefaultNetworkStorageSessionAccessor()().soupNetworkSession().soupSession(), "proxy-resolver", &resolver.outPtr(), nullptr);
    9696    ASSERT(resolver);
    9797
     
    176176    ASSERT(isMainThread());
    177177
    178     soup_session_prefetch_dns(globalDefaultNetworkStorageSessionAccessor()().getOrCreateSoupNetworkSession().soupSession(), hostname.utf8().data(), nullptr, resolvedCallback, nullptr);
     178    soup_session_prefetch_dns(globalDefaultNetworkStorageSessionAccessor()().soupNetworkSession().soupSession(), hostname.utf8().data(), nullptr, resolvedCallback, nullptr);
    179179}
    180180
     
    185185    auto address = adoptGRef(soup_address_new(hostname.utf8().data(), 0));
    186186    auto cancellable = adoptGRef(g_cancellable_new());
    187     soup_address_resolve_async(address.get(), soup_session_get_async_context(WebCore::globalDefaultNetworkStorageSessionAccessor()().getOrCreateSoupNetworkSession().soupSession()), cancellable.get(), resolvedWithObserverCallback, this);
     187    soup_address_resolve_async(address.get(), soup_session_get_async_context(WebCore::globalDefaultNetworkStorageSessionAccessor()().soupNetworkSession().soupSession()), cancellable.get(), resolvedWithObserverCallback, this);
    188188
    189189    g_object_set_data(G_OBJECT(address.get()), "identifier", GUINT_TO_POINTER(identifier));
  • trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp

    r240292 r240340  
    5858    , m_session(WTFMove(session))
    5959{
    60     setCookieStorage(m_session ? m_session->cookieJar() : nullptr);
     60    ASSERT(m_session->cookieJar());
     61    g_signal_connect_swapped(m_session->cookieJar(), "changed", G_CALLBACK(cookiesDidChange), this);
    6162}
    6263
    6364NetworkStorageSession::~NetworkStorageSession()
    6465{
    65     g_signal_handlers_disconnect_matched(m_cookieStorage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
    66 }
    67 
    68 SoupNetworkSession& NetworkStorageSession::getOrCreateSoupNetworkSession() const
    69 {
    70     if (!m_session)
    71         m_session = std::make_unique<SoupNetworkSession>(m_sessionID, m_cookieStorage.get());
    72     return *m_session;
    73 }
    74 
    75 void NetworkStorageSession::clearSoupNetworkSessionAndCookieStorage()
    76 {
     66    clearSoupNetworkSession();
     67}
     68
     69SoupNetworkSession& NetworkStorageSession::soupNetworkSession() const
     70{
     71    ASSERT(m_session);
     72    return *m_session.get();
     73};
     74
     75void NetworkStorageSession::clearSoupNetworkSession()
     76{
     77    if (m_session) {
     78        ASSERT(m_session->cookieJar());
     79        g_signal_handlers_disconnect_matched(m_session->cookieJar(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
     80    }
     81
    7782    m_session = nullptr;
    7883    m_cookieObserverHandler = nullptr;
    79     m_cookieStorage = nullptr;
    8084}
    8185
     
    8892SoupCookieJar* NetworkStorageSession::cookieStorage() const
    8993{
    90     RELEASE_ASSERT(!m_session || m_session->cookieJar() == m_cookieStorage.get());
    91     return m_cookieStorage.get();
     94    ASSERT(m_session);
     95    ASSERT(m_session->cookieJar());
     96    return m_session->cookieJar();
    9297}
    9398
    9499void NetworkStorageSession::setCookieStorage(SoupCookieJar* jar)
    95100{
    96     if (m_cookieStorage)
    97         g_signal_handlers_disconnect_matched(m_cookieStorage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
    98 
    99     // We always have a valid cookieStorage.
    100     if (jar)
    101         m_cookieStorage = jar;
    102     else {
    103         m_cookieStorage = adoptGRef(soup_cookie_jar_new());
    104         soup_cookie_jar_set_accept_policy(m_cookieStorage.get(), SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
    105     }
    106     g_signal_connect_swapped(m_cookieStorage.get(), "changed", G_CALLBACK(cookiesDidChange), this);
    107     if (m_session && m_session->cookieJar() != m_cookieStorage.get())
    108         m_session->setCookieJar(m_cookieStorage.get());
     101    ASSERT(jar);
     102    ASSERT(m_session);
     103    ASSERT(m_session->cookieJar());
     104
     105    if (m_session->cookieJar() == jar)
     106        return;
     107
     108    g_signal_handlers_disconnect_matched(m_session->cookieJar(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
     109    m_session->setCookieJar(jar);
     110    g_signal_connect_swapped(m_session->cookieJar(), "changed", G_CALLBACK(cookiesDidChange), this);
    109111}
    110112
  • trunk/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp

    r240117 r240340  
    9494    auto uri = urlToSoupURI(url);
    9595    Ref<SocketStreamHandle> protectedSocketStreamHandle = socket.copyRef();
    96     soup_session_connect_async(networkStorageSession->getOrCreateSoupNetworkSession().soupSession(), uri.get(), socket->m_cancellable.get(),
     96    soup_session_connect_async(networkStorageSession->soupNetworkSession().soupSession(), uri.get(), socket->m_cancellable.get(),
    9797        url.protocolIs("wss") ? reinterpret_cast<SoupSessionConnectProgressCallback>(connectProgressCallback) : nullptr,
    9898        reinterpret_cast<GAsyncReadyCallback>(connectedCallback), &protectedSocketStreamHandle.leakRef());
  • trunk/Source/WebKit/ChangeLog

    r240338 r240340  
     12019-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>
     2
     3        [SOUP] Clean up NetworkStorageSession
     4        https://bugs.webkit.org/show_bug.cgi?id=193707
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        Restore an important call to clearSoupNetworkSession that was removed in r240292. Also,
     9        adapt to NetworkStorageSessions API changes.
     10
     11        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp:
     12        (WebKit::LegacyCustomProtocolManager::registerScheme):
     13        * NetworkProcess/soup/NetworkProcessMainSoup.cpp:
     14        * NetworkProcess/soup/NetworkProcessSoup.cpp:
     15        (WebKit::NetworkProcess::userPreferredLanguagesChanged):
     16        (WebKit::NetworkProcess::setNetworkProxySettings):
     17        * NetworkProcess/soup/NetworkSessionSoup.cpp:
     18        (WebKit::NetworkSessionSoup::soupSession const):
     19
    1202019-01-23  Philippe Normand  <pnormand@igalia.com>
    221
  • trunk/Source/WebKit/NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp

    r240292 r240340  
    104104    genericRequestClass->schemes = const_cast<const char**>(reinterpret_cast<char**>(m_registeredSchemes->pdata));
    105105    lastCreatedNetworkProcess()->forEachNetworkStorageSession([](const auto& session) {
    106         if (auto* soupSession = session.soupNetworkSession())
    107             soupSession->setupCustomProtocols();
     106        session.soupNetworkSession().setupCustomProtocols();
    108107    });
    109108}
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessMainSoup.cpp

    r240292 r240340  
    3838    void platformFinalize() override
    3939    {
     40        // Needed to destroy the SoupSession and SoupCookieJar, e.g. to avoid
     41        // leaking SQLite temporary journaling files.
     42        NetworkProcess::singleton().defaultStorageSession().clearSoupNetworkSession();
    4043    }
    4144};
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp

    r240292 r240340  
    9797    SoupNetworkSession::setInitialAcceptLanguages(acceptLanguages);
    9898    forEachNetworkStorageSession([&acceptLanguages](const auto& session) {
    99         if (auto* soupSession = session.soupNetworkSession())
    100             soupSession->setAcceptLanguages(acceptLanguages);
     99        session.soupNetworkSession().setAcceptLanguages(acceptLanguages);
    101100    });
    102101}
     
    170169    SoupNetworkSession::setProxySettings(settings);
    171170    forEachNetworkStorageSession([](const auto& session) {
    172         if (auto* soupSession = session.soupNetworkSession())
    173             soupSession->setupProxy();
     171        session.soupNetworkSession().setupProxy();
    174172    });
    175173}
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp

    r240292 r240340  
    5353SoupSession* NetworkSessionSoup::soupSession() const
    5454{
    55     return networkStorageSession().getOrCreateSoupNetworkSession().soupSession();
     55    return networkStorageSession().soupNetworkSession().soupSession();
    5656}
    5757
Note: See TracChangeset for help on using the changeset viewer.