WebKit Bugzilla
Attachment 373071 Details for
Bug 199228
: Remove unneeded #include <wtf/glib/GRefPtr.h>
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-199228-20190627172918.patch (text/plain), 8.61 KB, created by
youenn fablet
on 2019-06-27 17:29:19 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2019-06-27 17:29:19 PDT
Size:
8.61 KB
patch
obsolete
>Subversion Revision: 246881 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 7ca0b72822fdec42bedd3e3b6e478166f50f5386..63e5f044099ea907b858b1aa3ec4cdb909d2a9d9 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,39 @@ >+2019-06-27 Youenn Fablet <youenn@apple.com> >+ >+ Remove unneeded #include <wtf/glib/GRefPtr.h> >+ https://bugs.webkit.org/show_bug.cgi?id=199228 >+ <rdar://problem/52220285> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Protect NetworkProcess from receiving bad session IDs in service worker code path. >+ If a WebSWClientConnection ever gets a bad session ID, this connection will not send any IPC to the network process. >+ >+ Made some refactoring to remove swOriginStoreForSession method. >+ In the one call site where it is used, the store should already be created. >+ >+ In get/clear data methods, add a check that the path be not empty. >+ This reduces the number of call to swServerForSession. >+ >+ Added a bunch of additional ASSERTs. >+ >+ * NetworkProcess/NetworkProcess.cpp: >+ (WebKit::NetworkProcess::destroySession): >+ (WebKit::NetworkProcess::deleteWebsiteData): >+ (WebKit::NetworkProcess::deleteWebsiteDataForOrigins): >+ (WebKit::NetworkProcess::actualPrepareToSuspend): >+ (WebKit::NetworkProcess::swServerForSession): >+ (WebKit::NetworkProcess::registerSWServerConnection): >+ (WebKit::NetworkProcess::unregisterSWServerConnection): >+ (WebKit::NetworkProcess::swOriginStoreForSession): Deleted. >+ * NetworkProcess/NetworkProcess.h: >+ * WebProcess/Network/NetworkProcessConnection.cpp: >+ (WebKit::NetworkProcessConnection::initializeSWClientConnection): >+ * WebProcess/Storage/WebSWClientConnection.cpp: >+ (WebKit::WebSWClientConnection::WebSWClientConnection): >+ (WebKit::WebSWClientConnection::initializeConnectionIfNeeded): >+ (WebKit::WebSWClientConnection::ensureConnectionAndSend): >+ > 2019-06-27 Youenn Fablet <youenn@apple.com> > > Fix build after revision 246877 >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.cpp b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >index c3bca8127681ad185adc99e0d12198098abc4792..4af3905e29011d746763d95bafd225caf3428069 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >@@ -577,6 +577,10 @@ void NetworkProcess::setSession(const PAL::SessionID& sessionID, Ref<NetworkSess > > void NetworkProcess::destroySession(const PAL::SessionID& sessionID) > { >+ ASSERT(sessionID.isValid()); >+ if (!sessionID.isValid()) >+ return; >+ > ASSERT(sessionID != PAL::SessionID::defaultSessionID()); > > if (auto session = m_networkSessions.take(sessionID)) >@@ -1381,7 +1385,8 @@ void NetworkProcess::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<Websi > #endif > > #if ENABLE(SERVICE_WORKER) >- if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && !sessionID.isEphemeral()) >+ auto path = m_swDatabasePaths.get(sessionID); >+ if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && !sessionID.isEphemeral()) > swServerForSession(sessionID).clearAll([clearTasksHandler = clearTasksHandler.copyRef()] { }); > #endif > >@@ -1481,7 +1486,8 @@ void NetworkProcess::deleteWebsiteDataForOrigins(PAL::SessionID sessionID, Optio > #endif > > #if ENABLE(SERVICE_WORKER) >- if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && !sessionID.isEphemeral()) { >+ auto path = m_swDatabasePaths.get(sessionID); >+ if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && !sessionID.isEphemeral()) { > auto& server = swServerForSession(sessionID); > for (auto& originData : originDatas) > server.clear(originData, [clearTasksHandler = clearTasksHandler.copyRef()] { }); >@@ -2035,8 +2041,10 @@ void NetworkProcess::actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend > connection->cleanupForSuspension([delayedTaskCounter] { }); > > #if ENABLE(SERVICE_WORKER) >- for (auto& server : m_swServers.values()) >+ for (auto& server : m_swServers.values()) { >+ RELEASE_ASSERT(m_swServers.get(server->sessionID()) == server.get()); > server->startSuspension([delayedTaskCounter] { }); >+ } > #endif > > for (auto& session : m_networkSessions) >@@ -2367,7 +2375,7 @@ bool NetworkProcess::needsServerToContextConnectionForRegistrableDomain(const Re > SWServer& NetworkProcess::swServerForSession(PAL::SessionID sessionID) > { > ASSERT(sessionID.isValid()); >- >+ > auto result = m_swServers.ensure(sessionID, [&] { > auto path = m_swDatabasePaths.get(sessionID); > // There should already be a registered path for this PAL::SessionID. >@@ -2383,11 +2391,6 @@ SWServer& NetworkProcess::swServerForSession(PAL::SessionID sessionID) > return *result.iterator->value; > } > >-WebSWOriginStore& NetworkProcess::swOriginStoreForSession(PAL::SessionID sessionID) >-{ >- return static_cast<WebSWOriginStore&>(swServerForSession(sessionID).originStore()); >-} >- > WebSWOriginStore* NetworkProcess::existingSWOriginStoreForSession(PAL::SessionID sessionID) const > { > auto* swServer = m_swServers.get(sessionID); >@@ -2430,7 +2433,10 @@ void NetworkProcess::registerSWServerConnection(WebSWServerConnection& connectio > ASSERT(parentProcessHasServiceWorkerEntitlement()); > ASSERT(!m_swServerConnections.contains(connection.identifier())); > m_swServerConnections.add(connection.identifier(), &connection); >- swOriginStoreForSession(connection.sessionID()).registerSWServerConnection(connection); >+ auto* store = existingSWOriginStoreForSession(connection.sessionID()); >+ ASSERT(store); >+ if (store) >+ store->registerSWServerConnection(connection); > } > > void NetworkProcess::unregisterSWServerConnection(WebSWServerConnection& connection) >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.h b/Source/WebKit/NetworkProcess/NetworkProcess.h >index 0e1dabd00ee4ca94e22b2d25e0c32fbbc4054fdd..4f09984fe4bff176f99fc7d0169380244af9c7d7 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.h >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.h >@@ -463,7 +463,6 @@ private: > > void disableServiceWorkerProcessTerminationDelay(); > >- WebSWOriginStore& swOriginStoreForSession(PAL::SessionID); > WebSWOriginStore* existingSWOriginStoreForSession(PAL::SessionID) const; > bool needsServerToContextConnectionForRegistrableDomain(const WebCore::RegistrableDomain&) const; > >diff --git a/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp b/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp >index 90b4b54d1676595ec2d390165f59676cf4e69fd5..d9adcc21a8a96b2aa545366de095d047c6257edf 100644 >--- a/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp >+++ b/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp >@@ -279,6 +279,7 @@ void NetworkProcessConnection::removeSWClientConnection(WebSWClientConnection& c > > SWServerConnectionIdentifier NetworkProcessConnection::initializeSWClientConnection(WebSWClientConnection& connection) > { >+ ASSERT(connection.sessionID().isValid()); > SWServerConnectionIdentifier identifier; > bool result = m_connection->sendSync(Messages::NetworkConnectionToWebProcess::EstablishSWServerConnection(connection.sessionID()), Messages::NetworkConnectionToWebProcess::EstablishSWServerConnection::Reply(identifier), 0); > ASSERT_UNUSED(result, result); >diff --git a/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp b/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp >index 579054505bbb6626942954408b11b21b04ac5053..2b5ed70d677ba6f58ffd97813f55ee9651b814bb 100644 >--- a/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp >+++ b/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp >@@ -56,7 +56,6 @@ WebSWClientConnection::WebSWClientConnection(SessionID sessionID) > : m_sessionID(sessionID) > , m_swOriginTable(makeUniqueRef<WebSWOriginTable>()) > { >- ASSERT(sessionID.isValid()); > initializeConnectionIfNeeded(); > } > >@@ -68,6 +67,10 @@ WebSWClientConnection::~WebSWClientConnection() > > void WebSWClientConnection::initializeConnectionIfNeeded() > { >+ ASSERT(m_sessionID.isValid()); >+ if (!m_sessionID.isValid()) >+ return; >+ > if (m_connection) > return; > >@@ -83,7 +86,8 @@ template<typename U> > void WebSWClientConnection::ensureConnectionAndSend(const U& message) > { > initializeConnectionIfNeeded(); >- send(message); >+ if (m_connection) >+ send(message); > } > > void WebSWClientConnection::scheduleJobInServer(const ServiceWorkerJobData& jobData)
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 199228
:
372940
|
373068
|
373071