[IPC] MESSAGE_CHECK() parameters for AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPCs
https://bugs.webkit.org/show_bug.cgi?id=204962

Reviewed by Ryosuke Niwa.

MESSAGE_CHECK() parameters for AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPCs. Those parameters
are used as keys in HashMaps.

* UIProcess/Plugins/PlugInAutoStartProvider.cpp:
(WebKit::PlugInAutoStartProvider::PlugInAutoStartProvider):
(WebKit::PlugInAutoStartProvider::addAutoStartOriginHash):
(WebKit::PlugInAutoStartProvider::setAutoStartOriginsTableWithItemsPassingTest):
(WebKit::PlugInAutoStartProvider::didReceiveUserInteraction):
* UIProcess/Plugins/PlugInAutoStartProvider.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::addPlugInAutoStartOriginHash):
(WebKit::WebProcessProxy::plugInDidReceiveUserInteraction):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@253232 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 702b830..8aaf5b1 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,23 @@
+2019-12-06  Chris Dumez  <cdumez@apple.com>
+
+        [IPC] MESSAGE_CHECK() parameters for AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPCs
+        https://bugs.webkit.org/show_bug.cgi?id=204962
+
+        Reviewed by Ryosuke Niwa.
+
+        MESSAGE_CHECK() parameters for AddPlugInAutoStartOriginHash / PlugInDidReceiveUserInteraction IPCs. Those parameters
+        are used as keys in HashMaps.
+
+        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
+        (WebKit::PlugInAutoStartProvider::PlugInAutoStartProvider):
+        (WebKit::PlugInAutoStartProvider::addAutoStartOriginHash):
+        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTableWithItemsPassingTest):
+        (WebKit::PlugInAutoStartProvider::didReceiveUserInteraction):
+        * UIProcess/Plugins/PlugInAutoStartProvider.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::addPlugInAutoStartOriginHash):
+        (WebKit::WebProcessProxy::plugInDidReceiveUserInteraction):
+
 2019-12-06  Per Arne Vollan  <pvollan@apple.com>
 
         [iOS] Calls to device orientation API should be done in the UI process
diff --git a/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.cpp b/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.cpp
index d2b351c..a0cff0c 100644
--- a/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.cpp
+++ b/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.cpp
@@ -41,7 +41,7 @@
 PlugInAutoStartProvider::PlugInAutoStartProvider(WebProcessPool* processPool)
     : m_processPool(processPool)
 {
-    m_hashToOriginMap.add(PAL::SessionID::defaultSessionID(), HashMap<unsigned, String>());
+    m_hashToOriginMap.add(PAL::SessionID::defaultSessionID(), HashToOriginMap());
     m_autoStartTable.add(PAL::SessionID::defaultSessionID(), AutoStartTable());
 }
 
@@ -56,7 +56,7 @@
     if (sessionIterator == m_hashToOriginMap.end()) {
         if (m_hashToOriginMap.get(PAL::SessionID::defaultSessionID()).contains(plugInOriginHash))
             return;
-        sessionIterator = m_hashToOriginMap.set(sessionID, HashMap<unsigned, String>()).iterator;
+        sessionIterator = m_hashToOriginMap.set(sessionID, HashToOriginMap()).iterator;
     } else if (sessionIterator->value.contains(plugInOriginHash) || m_hashToOriginMap.get(PAL::SessionID::defaultSessionID()).contains(plugInOriginHash))
         return;
 
@@ -126,7 +126,7 @@
     m_hashToOriginMap.clear();
     m_autoStartTable.clear();
     HashMap<unsigned, WallTime> hashMap;
-    HashMap<unsigned, String>& hashToOriginMap = m_hashToOriginMap.add(PAL::SessionID::defaultSessionID(), HashMap<unsigned, String>()).iterator->value;
+    auto& hashToOriginMap = m_hashToOriginMap.add(PAL::SessionID::defaultSessionID(), HashToOriginMap()).iterator->value;
     AutoStartTable& ast = m_autoStartTable.add(PAL::SessionID::defaultSessionID(), AutoStartTable()).iterator->value;
 
     for (auto& strDict : table.map()) {
@@ -165,8 +165,8 @@
 
 void PlugInAutoStartProvider::didReceiveUserInteraction(unsigned plugInOriginHash, PAL::SessionID sessionID)
 {
-    HashMap<PAL::SessionID, HashMap<unsigned, String>>::const_iterator sessionIterator = m_hashToOriginMap.find(sessionID);
-    HashMap<unsigned, String>::const_iterator it;
+    auto sessionIterator = m_hashToOriginMap.find(sessionID);
+    HashToOriginMap::const_iterator it;
     bool contains = false;
     if (sessionIterator != m_hashToOriginMap.end()) {
         it = sessionIterator->value.find(plugInOriginHash);
diff --git a/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.h b/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.h
index 735b760..542d16e 100644
--- a/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.h
+++ b/Source/WebKit/UIProcess/Plugins/PlugInAutoStartProvider.h
@@ -64,16 +64,19 @@
     PlugInAutoStartOriginMap autoStartOriginHashesCopy(PAL::SessionID) const;
     const PlugInAutoStartOrigins& autoStartOrigins() const { return m_autoStartOrigins; }
 
+    using HashToOriginMap = HashMap<unsigned, String>;
+    using PerSessionHashToOriginMap = HashMap<PAL::SessionID, HashToOriginMap>;
+    using AutoStartTable = HashMap<String, PlugInAutoStartOriginMap, ASCIICaseInsensitiveHash>;
+
 private:
     WebProcessPool* m_processPool;
 
     void setAutoStartOriginsTableWithItemsPassingTest(API::Dictionary&, WTF::Function<bool(WallTime expirationTimestamp)>&&);
 
-    typedef HashMap<String, PlugInAutoStartOriginMap, ASCIICaseInsensitiveHash> AutoStartTable;
     typedef HashMap<PAL::SessionID, AutoStartTable> SessionAutoStartTable;
     SessionAutoStartTable m_autoStartTable;
 
-    HashMap<PAL::SessionID, HashMap<unsigned, String>> m_hashToOriginMap;
+    PerSessionHashToOriginMap m_hashToOriginMap;
 
     PlugInAutoStartOrigins m_autoStartOrigins;
 };
diff --git a/Source/WebKit/UIProcess/WebProcessProxy.cpp b/Source/WebKit/UIProcess/WebProcessProxy.cpp
index 37dd5e9..906ba08 100644
--- a/Source/WebKit/UIProcess/WebProcessProxy.cpp
+++ b/Source/WebKit/UIProcess/WebProcessProxy.cpp
@@ -1511,11 +1511,14 @@
 
 void WebProcessProxy::addPlugInAutoStartOriginHash(String&& pageOrigin, uint32_t hash)
 {
+    MESSAGE_CHECK(PlugInAutoStartProvider::AutoStartTable::isValidKey(pageOrigin));
+    MESSAGE_CHECK(PlugInAutoStartProvider::HashToOriginMap::isValidKey(hash));
     processPool().plugInAutoStartProvider().addAutoStartOriginHash(WTFMove(pageOrigin), hash, sessionID());
 }
 
 void WebProcessProxy::plugInDidReceiveUserInteraction(uint32_t hash)
 {
+    MESSAGE_CHECK(PlugInAutoStartProvider::HashToOriginMap::isValidKey(hash));
     processPool().plugInAutoStartProvider().didReceiveUserInteraction(hash, sessionID());
 }