Add assertions to help diagnose crash at WebProcessProxy::processPool()
https://bugs.webkit.org/show_bug.cgi?id=197856
<rdar://problem/49341366>

Reviewed by Chris Dumez.

* UIProcess/WebProcessCache.cpp:
(WebKit::WebProcessCache::CachedProcess::CachedProcess):
* UIProcess/WebProcessLifetimeObserver.cpp:
(WebKit::WebProcessLifetimeObserver::addWebPage):
(WebKit::WebProcessLifetimeObserver::removeWebPage):
* UIProcess/WebProcessLifetimeObserver.h:
(WebKit::WebProcessLifetimeObserver::hasProcess const):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@245339 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index d154f67..10205c8 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,19 @@
+2019-05-15  Sihui Liu  <sihui_liu@apple.com>
+
+        Add assertions to help diagnose crash at WebProcessProxy::processPool()
+        https://bugs.webkit.org/show_bug.cgi?id=197856
+        <rdar://problem/49341366>
+
+        Reviewed by Chris Dumez.
+
+        * UIProcess/WebProcessCache.cpp:
+        (WebKit::WebProcessCache::CachedProcess::CachedProcess):
+        * UIProcess/WebProcessLifetimeObserver.cpp:
+        (WebKit::WebProcessLifetimeObserver::addWebPage):
+        (WebKit::WebProcessLifetimeObserver::removeWebPage):
+        * UIProcess/WebProcessLifetimeObserver.h:
+        (WebKit::WebProcessLifetimeObserver::hasProcess const):
+
 2019-05-15  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         inputmode="numeric" should show a number pad with digits 0-9, instead of the numeric keyplane
diff --git a/Source/WebKit/UIProcess/WebProcessCache.cpp b/Source/WebKit/UIProcess/WebProcessCache.cpp
index 797d7e5..88177b1 100644
--- a/Source/WebKit/UIProcess/WebProcessCache.cpp
+++ b/Source/WebKit/UIProcess/WebProcessCache.cpp
@@ -246,6 +246,8 @@
     : m_process(WTFMove(process))
     , m_evictionTimer(RunLoop::main(), this, &CachedProcess::evictionTimerFired)
 {
+    RELEASE_ASSERT(!m_process->pageCount());
+    RELEASE_ASSERT_WITH_MESSAGE(!m_process->websiteDataStore().hasProcess(process.ptr()), "Only processes with pages should be registered with the data store");
     m_process->setIsInProcessCache(true);
     m_evictionTimer.startOneShot(cachedProcessLifetime);
 }
diff --git a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp
index 3d75abd..c8023de 100644
--- a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp
+++ b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.cpp
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "WebProcessLifetimeObserver.h"
 
+#include "Logging.h"
 #include "WebPageProxy.h"
 #include "WebProcessProxy.h"
 
@@ -42,9 +43,13 @@
 void WebProcessLifetimeObserver::addWebPage(WebPageProxy& webPageProxy, WebProcessProxy& process)
 {
     ASSERT(process.state() == WebProcessProxy::State::Running);
+    RELEASE_ASSERT(!process.isInProcessCache());
+    RELEASE_ASSERT(!process.isPrewarmed());
 
-    if (m_processes.add(&process).isNewEntry)
+    if (m_processes.add(&process).isNewEntry) {
+        RELEASE_LOG(Loading, "%p - WebProcessLifetimeObserver::addWebPage: webPID = %i, pageID = %" PRIu64, this, process.processIdentifier(), webPageProxy.pageID());
         webProcessWillOpenConnection(process, *process.connection());
+    }
 
     webPageWillOpenConnection(webPageProxy, *process.connection());
 }
@@ -57,8 +62,10 @@
 
     webPageDidCloseConnection(webPageProxy, *process.connection());
 
-    if (m_processes.remove(&process))
+    if (m_processes.remove(&process)) {
+        RELEASE_LOG(Loading, "%p - WebProcessLifetimeObserver::removeWebPage: webPID = %i, pageID = %" PRIu64, this, process.processIdentifier(), webPageProxy.pageID());
         webProcessDidCloseConnection(process, *process.connection());
+    }
 }
 
 WTF::IteratorRange<HashCountedSet<WebProcessProxy*>::const_iterator::Keys> WebProcessLifetimeObserver::processes() const
diff --git a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h
index 61ce22b..6693973 100644
--- a/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h
+++ b/Source/WebKit/UIProcess/WebProcessLifetimeObserver.h
@@ -48,6 +48,8 @@
 
     WTF::IteratorRange<HashCountedSet<WebProcessProxy*>::const_iterator::Keys> processes() const;
 
+    bool hasProcess(WebProcessProxy* process) const { return m_processes.contains(process); }
+
 private:
     friend class WebProcessLifetimeTracker;