Title: [236425] trunk/Source/WebKit
Revision
236425
Author
[email protected]
Date
2018-09-24 13:31:31 -0700 (Mon, 24 Sep 2018)

Log Message

Unreviewed, rolling out r236368.

Caused WebKit.NetworkProcessCrashWithPendingConnection API
test to crash (Bug 189926)

Reverted changeset:

"Extending the lifetime of a NetworkProcessProxy /
StorageProcessProxy may cause it to have a stale
WebProcessPool pointer"
https://bugs.webkit.org/show_bug.cgi?id=189851
https://trac.webkit.org/changeset/236368

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (236424 => 236425)


--- trunk/Source/WebKit/ChangeLog	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/ChangeLog	2018-09-24 20:31:31 UTC (rev 236425)
@@ -1,3 +1,18 @@
+2018-09-24  Chris Dumez  <[email protected]>
+
+        Unreviewed, rolling out r236368.
+
+        Caused WebKit.NetworkProcessCrashWithPendingConnection API
+        test to crash (Bug 189926)
+
+        Reverted changeset:
+
+        "Extending the lifetime of a NetworkProcessProxy /
+        StorageProcessProxy may cause it to have a stale
+        WebProcessPool pointer"
+        https://bugs.webkit.org/show_bug.cgi?id=189851
+        https://trac.webkit.org/changeset/236368
+
 2018-09-21  Simon Fraser  <[email protected]>
 
         Remove the old "AcceleratedCompositingForOverflowScroll" code

Modified: trunk/Source/WebKit/UIProcess/ChildProcessProxy.h (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/ChildProcessProxy.h	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/ChildProcessProxy.h	2018-09-24 20:31:31 UTC (rev 236425)
@@ -36,7 +36,7 @@
 
 namespace WebKit {
 
-class ChildProcessProxy : ProcessLauncher::Client, public IPC::Connection::Client {
+class ChildProcessProxy : ProcessLauncher::Client, public IPC::Connection::Client, public ThreadSafeRefCounted<ChildProcessProxy> {
     WTF_MAKE_NONCOPYABLE(ChildProcessProxy);
 
 protected:

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2018-09-24 20:31:31 UTC (rev 236425)
@@ -66,6 +66,11 @@
     return ++callbackID;
 }
 
+Ref<NetworkProcessProxy> NetworkProcessProxy::create(WebProcessPool& processPool)
+{
+    return adoptRef(*new NetworkProcessProxy(processPool));
+}
+
 NetworkProcessProxy::NetworkProcessProxy(WebProcessPool& processPool)
     : ChildProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
     , m_processPool(processPool)
@@ -92,16 +97,6 @@
 #endif
 }
 
-void NetworkProcessProxy::ref()
-{
-    m_processPool.ref();
-}
-
-void NetworkProcessProxy::deref()
-{
-    m_processPool.deref();
-}
-
 void NetworkProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
 {
     launchOptions.processType = ProcessLauncher::ProcessType::Network;
@@ -253,7 +248,7 @@
 
 void NetworkProcessProxy::didClose(IPC::Connection&)
 {
-    auto protectedThis = makeRef(*this);
+    auto protectedProcessPool = makeRef(m_processPool);
 
     if (m_downloadProxyMap)
         m_downloadProxyMap->processDidClose();
@@ -405,7 +400,7 @@
     }
     
     auto callbackId = generateCallbackID();
-    auto addResult = m_updateBlockCookiesCallbackMap.add(callbackId, [protectedThis = makeRef(*this), token = throttler().backgroundActivityToken(), completionHandler = WTFMove(completionHandler)]() mutable {
+    auto addResult = m_updateBlockCookiesCallbackMap.add(callbackId, [protectedProcessPool = makeRef(m_processPool), token = throttler().backgroundActivityToken(), completionHandler = WTFMove(completionHandler)]() mutable {
         completionHandler();
     });
     ASSERT_UNUSED(addResult, addResult.isNewEntry);

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2018-09-24 20:31:31 UTC (rev 236425)
@@ -64,9 +64,9 @@
 class WebUserContentControllerProxy;
 struct WebsiteData;
 
-class NetworkProcessProxy final : public ChildProcessProxy, private ProcessThrottlerClient {
+class NetworkProcessProxy : public ChildProcessProxy, private ProcessThrottlerClient {
 public:
-    explicit NetworkProcessProxy(WebProcessPool&);
+    static Ref<NetworkProcessProxy> create(WebProcessPool&);
     ~NetworkProcessProxy();
 
     void getNetworkProcessConnection(Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply&&);
@@ -87,9 +87,6 @@
     void resetCacheMaxAgeCapForPrevalentResources(PAL::SessionID, CompletionHandler<void()>&&);
 #endif
 
-    void ref();
-    void deref();
-
     void writeBlobToFilePath(const WebCore::URL&, const String& path, CompletionHandler<void(bool)>&& callback);
 
     void processReadyToSuspend();
@@ -113,6 +110,8 @@
     void removeSession(PAL::SessionID);
 
 private:
+    NetworkProcessProxy(WebProcessPool&);
+
     // ChildProcessProxy
     void getLaunchOptions(ProcessLauncher::LaunchOptions&) override;
     void connectionWillOpen(IPC::Connection&) override;

Modified: trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.h (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.h	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.h	2018-09-24 20:31:31 UTC (rev 236425)
@@ -66,7 +66,7 @@
 int pluginProcessThroughputQOS();
 #endif
 
-class PluginProcessProxy final : public ChildProcessProxy, public ThreadSafeRefCounted<PluginProcessProxy> {
+class PluginProcessProxy : public ChildProcessProxy {
 public:
     static Ref<PluginProcessProxy> create(PluginProcessManager*, const PluginProcessAttributes&, uint64_t pluginProcessToken);
     ~PluginProcessProxy();

Modified: trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp	2018-09-24 20:31:31 UTC (rev 236425)
@@ -44,6 +44,11 @@
     return ++callbackID;
 }
 
+Ref<StorageProcessProxy> StorageProcessProxy::create(WebProcessPool& processPool)
+{
+    return adoptRef(*new StorageProcessProxy(processPool));
+}
+
 StorageProcessProxy::StorageProcessProxy(WebProcessPool& processPool)
     : ChildProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
     , m_processPool(processPool)
@@ -52,16 +57,6 @@
     connect();
 }
 
-void StorageProcessProxy::ref()
-{
-    m_processPool.ref();
-}
-
-void StorageProcessProxy::deref()
-{
-    m_processPool.deref();
-}
-
 StorageProcessProxy::~StorageProcessProxy()
 {
     ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());

Modified: trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h	2018-09-24 20:31:31 UTC (rev 236425)
@@ -47,14 +47,11 @@
 enum class WebsiteDataType;
 struct WebsiteData;
 
-class StorageProcessProxy final : public ChildProcessProxy {
+class StorageProcessProxy : public ChildProcessProxy {
 public:
-    explicit StorageProcessProxy(WebProcessPool&);
+    static Ref<StorageProcessProxy> create(WebProcessPool&);
     ~StorageProcessProxy();
 
-    void ref();
-    void deref();
-
     void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, CompletionHandler<void(WebsiteData)>&&);
     void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, WallTime modifiedSince, CompletionHandler<void()>&&);
     void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>&, CompletionHandler<void()>&&);
@@ -64,6 +61,8 @@
     void terminateForTesting();
 
 private:
+    StorageProcessProxy(WebProcessPool&);
+
     // ChildProcessProxy
     void getLaunchOptions(ProcessLauncher::LaunchOptions&) override;
     void processWillShutDown(IPC::Connection&) override;

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-09-24 20:31:31 UTC (rev 236425)
@@ -471,7 +471,7 @@
         return *m_networkProcess;
     }
 
-    m_networkProcess = std::make_unique<NetworkProcessProxy>(*this);
+    m_networkProcess = NetworkProcessProxy::create(*this);
 
     NetworkProcessCreationParameters parameters;
 
@@ -612,7 +612,7 @@
         parameters.shouldDisableServiceWorkerProcessTerminationDelay = m_shouldDisableServiceWorkerProcessTerminationDelay;
 #endif
 
-        m_storageProcess = std::make_unique<StorageProcessProxy>(*this);
+        m_storageProcess = StorageProcessProxy::create(*this);
         m_storageProcess->send(Messages::StorageProcess::InitializeWebsiteDataStore(parameters), 0);
     }
 
@@ -648,7 +648,7 @@
 #if ENABLE(SERVICE_WORKER)
 void WebProcessPool::establishWorkerContextConnectionToStorageProcess(StorageProcessProxy& proxy, SecurityOriginData&& securityOrigin, std::optional<PAL::SessionID> sessionID)
 {
-    ASSERT_UNUSED(proxy, &proxy == m_storageProcess.get());
+    ASSERT_UNUSED(proxy, &proxy == m_storageProcess);
 
     if (m_serviceWorkerProcesses.contains(securityOrigin))
         return;

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2018-09-24 20:31:31 UTC (rev 236425)
@@ -626,8 +626,8 @@
 
     bool m_canHandleHTTPSServerTrustEvaluation { true };
     bool m_didNetworkProcessCrash { false };
-    std::unique_ptr<NetworkProcessProxy> m_networkProcess;
-    std::unique_ptr<StorageProcessProxy> m_storageProcess;
+    RefPtr<NetworkProcessProxy> m_networkProcess;
+    RefPtr<StorageProcessProxy> m_storageProcess;
 
     HashMap<uint64_t, RefPtr<DictionaryCallback>> m_dictionaryCallbacks;
     HashMap<uint64_t, RefPtr<StatisticsRequest>> m_statisticsRequests;

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (236424 => 236425)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2018-09-24 20:19:46 UTC (rev 236424)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2018-09-24 20:31:31 UTC (rev 236425)
@@ -91,7 +91,7 @@
 typedef BackgroundWebProcessCounter::Token BackgroundWebProcessToken;
 #endif
 
-class WebProcessProxy : public ChildProcessProxy, public ResponsivenessTimer::Client, public ThreadSafeRefCounted<WebProcessProxy>, private ProcessThrottlerClient {
+class WebProcessProxy : public ChildProcessProxy, public ResponsivenessTimer::Client, private ProcessThrottlerClient {
 public:
     typedef HashMap<uint64_t, RefPtr<WebFrameProxy>> WebFrameProxyMap;
     typedef HashMap<uint64_t, WebPageProxy*> WebPageProxyMap;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to