WebKit Bugzilla
Attachment 359850 Details for
Bug 193707
: [SOUP] Clean up NetworkStorageSession
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193707-20190122233704.patch (text/plain), 15.17 KB, created by
Michael Catanzaro
on 2019-01-22 21:37:05 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Michael Catanzaro
Created:
2019-01-22 21:37:05 PST
Size:
15.17 KB
patch
obsolete
>Subversion Revision: 240323 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 6591a435ecd2904a73dc568bab5781942a7e73ee..2fe869fe59a4d8eb025523d1045ec7b9f8806de3 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,37 @@ >+2019-01-22 Michael Catanzaro <mcatanzaro@igalia.com> >+ >+ [SOUP] Clean up NetworkStorageSession >+ https://bugs.webkit.org/show_bug.cgi?id=193707 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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): >+ > 2019-01-22 Devin Rousso <drousso@apple.com> > > Web Inspector: InspectorInstrumentation::willEvaluateScript should include column number >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index ad3bd102453dfda6b6c59b2e4e2ab76c16b4aff2..8aa50d9f4a62df768935d0abd6b5bac2172f9147 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,22 @@ >+2019-01-22 Michael Catanzaro <mcatanzaro@igalia.com> >+ >+ [SOUP] Clean up NetworkStorageSession >+ https://bugs.webkit.org/show_bug.cgi?id=193707 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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): >+ > 2019-01-22 Michael Catanzaro <mcatanzaro@igalia.com> > > Unreviewed attempt to fix GTK/WPE bots >diff --git a/Source/WebCore/platform/network/NetworkStorageSession.h b/Source/WebCore/platform/network/NetworkStorageSession.h >index 457e435e435c66db358c10056932f2d9c1ee7bb6..07896874262e21146f4ad026a2d6de52c837f4e1 100644 >--- a/Source/WebCore/platform/network/NetworkStorageSession.h >+++ b/Source/WebCore/platform/network/NetworkStorageSession.h >@@ -97,9 +97,8 @@ public: > WEBCORE_EXPORT NetworkStorageSession(PAL::SessionID, std::unique_ptr<SoupNetworkSession>&&); > ~NetworkStorageSession(); > >- SoupNetworkSession* soupNetworkSession() const { return m_session.get(); }; >- SoupNetworkSession& getOrCreateSoupNetworkSession() const; >- void clearSoupNetworkSessionAndCookieStorage(); >+ SoupNetworkSession& soupNetworkSession() const; >+ void clearSoupNetworkSession(); > SoupCookieJar* cookieStorage() const; > void setCookieStorage(SoupCookieJar*); > void setCookieObserverHandler(Function<void ()>&&); >@@ -168,7 +167,6 @@ private: > static void cookiesDidChange(NetworkStorageSession*); > > mutable std::unique_ptr<SoupNetworkSession> m_session; >- GRefPtr<SoupCookieJar> m_cookieStorage; > Function<void ()> m_cookieObserverHandler; > #elif USE(CURL) > RefPtr<NetworkingContext> m_context; >diff --git a/Source/WebCore/platform/network/soup/DNSResolveQueueSoup.cpp b/Source/WebCore/platform/network/soup/DNSResolveQueueSoup.cpp >index ed2c4eb5b8dacc0572e31b9c467ada90a734d71c..f39982ccf46c2c8cd20029e33ea8d882ac943ee8 100644 >--- a/Source/WebCore/platform/network/soup/DNSResolveQueueSoup.cpp >+++ b/Source/WebCore/platform/network/soup/DNSResolveQueueSoup.cpp >@@ -92,7 +92,7 @@ void DNSResolveQueueSoup::setGlobalDefaultNetworkStorageSessionAccessor(Function > void DNSResolveQueueSoup::updateIsUsingProxy() > { > GRefPtr<GProxyResolver> resolver; >- g_object_get(globalDefaultNetworkStorageSessionAccessor()().getOrCreateSoupNetworkSession().soupSession(), "proxy-resolver", &resolver.outPtr(), nullptr); >+ g_object_get(globalDefaultNetworkStorageSessionAccessor()().soupNetworkSession().soupSession(), "proxy-resolver", &resolver.outPtr(), nullptr); > ASSERT(resolver); > > g_proxy_resolver_lookup_async(resolver.get(), "http://example.com/", nullptr, proxyResolvedForHttpUriCallback, &m_isUsingProxy); >@@ -175,7 +175,7 @@ void DNSResolveQueueSoup::platformResolve(const String& hostname) > { > ASSERT(isMainThread()); > >- soup_session_prefetch_dns(globalDefaultNetworkStorageSessionAccessor()().getOrCreateSoupNetworkSession().soupSession(), hostname.utf8().data(), nullptr, resolvedCallback, nullptr); >+ soup_session_prefetch_dns(globalDefaultNetworkStorageSessionAccessor()().soupNetworkSession().soupSession(), hostname.utf8().data(), nullptr, resolvedCallback, nullptr); > } > > void DNSResolveQueueSoup::resolve(const String& hostname, uint64_t identifier, DNSCompletionHandler&& completionHandler) >@@ -184,7 +184,7 @@ void DNSResolveQueueSoup::resolve(const String& hostname, uint64_t identifier, D > > auto address = adoptGRef(soup_address_new(hostname.utf8().data(), 0)); > auto cancellable = adoptGRef(g_cancellable_new()); >- soup_address_resolve_async(address.get(), soup_session_get_async_context(WebCore::globalDefaultNetworkStorageSessionAccessor()().getOrCreateSoupNetworkSession().soupSession()), cancellable.get(), resolvedWithObserverCallback, this); >+ soup_address_resolve_async(address.get(), soup_session_get_async_context(WebCore::globalDefaultNetworkStorageSessionAccessor()().soupNetworkSession().soupSession()), cancellable.get(), resolvedWithObserverCallback, this); > > g_object_set_data(G_OBJECT(address.get()), "identifier", GUINT_TO_POINTER(identifier)); > >diff --git a/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp b/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp >index e75113a6cc8e001be1ca5b606979f76a81838880..3dae1b0451ce513f71c4517b1bf6a7bd3ed4006f 100644 >--- a/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp >+++ b/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp >@@ -57,26 +57,30 @@ NetworkStorageSession::NetworkStorageSession(PAL::SessionID sessionID, std::uniq > : m_sessionID(sessionID) > , m_session(WTFMove(session)) > { >- setCookieStorage(m_session ? m_session->cookieJar() : nullptr); >+ ASSERT(m_session->cookieJar()); >+ g_signal_connect_swapped(m_session->cookieJar(), "changed", G_CALLBACK(cookiesDidChange), this); > } > > NetworkStorageSession::~NetworkStorageSession() > { >- g_signal_handlers_disconnect_matched(m_cookieStorage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this); >+ clearSoupNetworkSession(); > } > >-SoupNetworkSession& NetworkStorageSession::getOrCreateSoupNetworkSession() const >+SoupNetworkSession& NetworkStorageSession::soupNetworkSession() const > { >- if (!m_session) >- m_session = std::make_unique<SoupNetworkSession>(m_sessionID, m_cookieStorage.get()); >- return *m_session; >-} >+ ASSERT(m_session); >+ return *m_session.get(); >+}; > >-void NetworkStorageSession::clearSoupNetworkSessionAndCookieStorage() >+void NetworkStorageSession::clearSoupNetworkSession() > { >+ if (m_session) { >+ ASSERT(m_session->cookieJar()); >+ g_signal_handlers_disconnect_matched(m_session->cookieJar(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this); >+ } >+ > m_session = nullptr; > m_cookieObserverHandler = nullptr; >- m_cookieStorage = nullptr; > } > > void NetworkStorageSession::cookiesDidChange(NetworkStorageSession* session) >@@ -87,25 +91,23 @@ void NetworkStorageSession::cookiesDidChange(NetworkStorageSession* session) > > SoupCookieJar* NetworkStorageSession::cookieStorage() const > { >- RELEASE_ASSERT(!m_session || m_session->cookieJar() == m_cookieStorage.get()); >- return m_cookieStorage.get(); >+ ASSERT(m_session); >+ ASSERT(m_session->cookieJar()); >+ return m_session->cookieJar(); > } > > void NetworkStorageSession::setCookieStorage(SoupCookieJar* jar) > { >- if (m_cookieStorage) >- g_signal_handlers_disconnect_matched(m_cookieStorage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this); >- >- // We always have a valid cookieStorage. >- if (jar) >- m_cookieStorage = jar; >- else { >- m_cookieStorage = adoptGRef(soup_cookie_jar_new()); >- soup_cookie_jar_set_accept_policy(m_cookieStorage.get(), SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY); >- } >- g_signal_connect_swapped(m_cookieStorage.get(), "changed", G_CALLBACK(cookiesDidChange), this); >- if (m_session && m_session->cookieJar() != m_cookieStorage.get()) >- m_session->setCookieJar(m_cookieStorage.get()); >+ ASSERT(jar); >+ ASSERT(m_session); >+ ASSERT(m_session->cookieJar()); >+ >+ if (m_session->cookieJar() == jar) >+ return; >+ >+ g_signal_handlers_disconnect_matched(m_session->cookieJar(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this); >+ m_session->setCookieJar(jar); >+ g_signal_connect_swapped(m_session->cookieJar(), "changed", G_CALLBACK(cookiesDidChange), this); > } > > void NetworkStorageSession::setCookieObserverHandler(Function<void ()>&& handler) >diff --git a/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp b/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp >index 2c4a7ed7bbefae7c03bac5612d5b320cbe833253..ed78e4ddd59586a89ba78126e9415bde1867a7ee 100644 >--- a/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp >+++ b/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp >@@ -93,7 +93,7 @@ Ref<SocketStreamHandleImpl> SocketStreamHandleImpl::create(const URL& url, Socke > > auto uri = urlToSoupURI(url); > Ref<SocketStreamHandle> protectedSocketStreamHandle = socket.copyRef(); >- soup_session_connect_async(networkStorageSession->getOrCreateSoupNetworkSession().soupSession(), uri.get(), socket->m_cancellable.get(), >+ soup_session_connect_async(networkStorageSession->soupNetworkSession().soupSession(), uri.get(), socket->m_cancellable.get(), > url.protocolIs("wss") ? reinterpret_cast<SoupSessionConnectProgressCallback>(connectProgressCallback) : nullptr, > reinterpret_cast<GAsyncReadyCallback>(connectedCallback), &protectedSocketStreamHandle.leakRef()); > #else >diff --git a/Source/WebKit/NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp b/Source/WebKit/NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp >index c585bf7955f5e6bc3212ba62836adf6731f3e32a..800751f2abdb01600ae0d3613a8670a834a352cc 100644 >--- a/Source/WebKit/NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp >+++ b/Source/WebKit/NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp >@@ -103,8 +103,7 @@ void LegacyCustomProtocolManager::registerScheme(const String& scheme) > ASSERT(genericRequestClass); > genericRequestClass->schemes = const_cast<const char**>(reinterpret_cast<char**>(m_registeredSchemes->pdata)); > lastCreatedNetworkProcess()->forEachNetworkStorageSession([](const auto& session) { >- if (auto* soupSession = session.soupNetworkSession()) >- soupSession->setupCustomProtocols(); >+ session.soupNetworkSession().setupCustomProtocols(); > }); > } > >diff --git a/Source/WebKit/NetworkProcess/soup/NetworkProcessMainSoup.cpp b/Source/WebKit/NetworkProcess/soup/NetworkProcessMainSoup.cpp >index 0c5f19f7af438d2181569b1b7d058053d55be43e..f76ba791ae29e866893a973d08cfc2a127ee6e5a 100644 >--- a/Source/WebKit/NetworkProcess/soup/NetworkProcessMainSoup.cpp >+++ b/Source/WebKit/NetworkProcess/soup/NetworkProcessMainSoup.cpp >@@ -37,6 +37,9 @@ class NetworkProcessMain final: public ChildProcessMainBase { > public: > void platformFinalize() override > { >+ // Needed to destroy the SoupSession and SoupCookieJar, e.g. to avoid >+ // leaking SQLite temporary journaling files. >+ NetworkProcess::singleton().defaultStorageSession().clearSoupNetworkSession(); > } > }; > >diff --git a/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp b/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp >index c7ce1d27a001bfedded26224e8737acb409cb9bc..37bd6c27eab080a8bc4281ba50108e656355b3f8 100644 >--- a/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp >+++ b/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp >@@ -96,8 +96,7 @@ void NetworkProcess::userPreferredLanguagesChanged(const Vector<String>& languag > auto acceptLanguages = buildAcceptLanguages(languages); > SoupNetworkSession::setInitialAcceptLanguages(acceptLanguages); > forEachNetworkStorageSession([&acceptLanguages](const auto& session) { >- if (auto* soupSession = session.soupNetworkSession()) >- soupSession->setAcceptLanguages(acceptLanguages); >+ session.soupNetworkSession().setAcceptLanguages(acceptLanguages); > }); > } > >@@ -169,8 +168,7 @@ void NetworkProcess::setNetworkProxySettings(const SoupNetworkProxySettings& set > { > SoupNetworkSession::setProxySettings(settings); > forEachNetworkStorageSession([](const auto& session) { >- if (auto* soupSession = session.soupNetworkSession()) >- soupSession->setupProxy(); >+ session.soupNetworkSession().setupProxy(); > }); > } > >diff --git a/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp b/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp >index 60fca87b6034c2581e57e82dca86ff54eaa9c0e6..59de9f504b88da964250e5d908e49b0547ae80c0 100644 >--- a/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp >+++ b/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp >@@ -52,7 +52,7 @@ NetworkSessionSoup::~NetworkSessionSoup() > > SoupSession* NetworkSessionSoup::soupSession() const > { >- return networkStorageSession().getOrCreateSoupNetworkSession().soupSession(); >+ return networkStorageSession().soupNetworkSession().soupSession(); > } > > void NetworkSessionSoup::clearCredentials()
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193707
: 359850