Make sure only WebsiteDataStores with valid SessionIDs register themselves.
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 15 Dec 2017 21:15:17 +0000 (21:15 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 15 Dec 2017 21:15:17 +0000 (21:15 +0000)
https://bugs.webkit.org/show_bug.cgi?id=180869

Reviewed by Chris Dumez.

Some code in WebsiteDataStore assumes an invalid SessionID is a possibility,
but we didn't account for that in the map added in r225935.

Seems prudent to make sure we're not doing hash table operations with invalid keys.

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::~WebsiteDataStore):
(WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap):
(WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID):
* UIProcess/WebsiteData/WebsiteDataStore.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@225982 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

index b4a32d0..fc8a005 100644 (file)
@@ -1,3 +1,22 @@
+2017-12-15  Brady Eidson  <beidson@apple.com>
+
+        Make sure only WebsiteDataStores with valid SessionIDs register themselves.
+        https://bugs.webkit.org/show_bug.cgi?id=180869
+
+        Reviewed by Chris Dumez.
+
+        Some code in WebsiteDataStore assumes an invalid SessionID is a possibility,
+        but we didn't account for that in the map added in r225935.
+
+        Seems prudent to make sure we're not doing hash table operations with invalid keys.
+
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::WebsiteDataStore):
+        (WebKit::WebsiteDataStore::~WebsiteDataStore):
+        (WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap):
+        (WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID):
+        * UIProcess/WebsiteData/WebsiteDataStore.h:
+
 2017-12-14  Simon Fraser  <simon.fraser@apple.com>
 
         Rotating when zoomed in with fingers down can result in a broken tab
index 793557c..4c9267e 100644 (file)
@@ -78,11 +78,7 @@ WebsiteDataStore::WebsiteDataStore(Configuration configuration, PAL::SessionID s
     , m_storageManager(StorageManager::create(m_configuration.localStorageDirectory))
     , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore"))
 {
-    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
-        auto result = nonDefaultDataStores().add(sessionID, this);
-        ASSERT_UNUSED(result, result.isNewEntry);
-    }
-
+    maybeRegisterWithSessionIDMap();
     platformInitialize();
 }
 
@@ -91,32 +87,33 @@ WebsiteDataStore::WebsiteDataStore(PAL::SessionID sessionID)
     , m_configuration()
     , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore"))
 {
-    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
-        auto result = nonDefaultDataStores().add(sessionID, this);
-        ASSERT_UNUSED(result, result.isNewEntry);
-    }
-    
+    maybeRegisterWithSessionIDMap();
     platformInitialize();
 }
 
 WebsiteDataStore::~WebsiteDataStore()
 {
-    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
-        ASSERT(nonDefaultDataStores().get(m_sessionID) == this);
-        nonDefaultDataStores().remove(m_sessionID);
-    }
-
     platformDestroy();
 
     if (m_sessionID.isValid() && m_sessionID != PAL::SessionID::defaultSessionID()) {
+        ASSERT(nonDefaultDataStores().get(m_sessionID) == this);
+        nonDefaultDataStores().remove(m_sessionID);
         for (auto& processPool : WebProcessPool::allProcessPools())
             processPool->sendToNetworkingProcess(Messages::NetworkProcess::DestroySession(m_sessionID));
     }
 }
 
+void WebsiteDataStore::maybeRegisterWithSessionIDMap()
+{
+    if (m_sessionID.isValid() && m_sessionID != PAL::SessionID::defaultSessionID()) {
+        auto result = nonDefaultDataStores().add(m_sessionID, this);
+        ASSERT_UNUSED(result, result.isNewEntry);
+    }
+}
+
 WebsiteDataStore* WebsiteDataStore::existingNonDefaultDataStoreForSessionID(PAL::SessionID sessionID)
 {
-    return nonDefaultDataStores().get(sessionID);
+    return sessionID.isValid() && sessionID != PAL::SessionID::defaultSessionID() ? nonDefaultDataStores().get(sessionID) : nullptr;
 }
 
 WebProcessPool* WebsiteDataStore::processPoolForCookieStorageOperations()
index 356d2bf..1dca31d 100644 (file)
@@ -183,6 +183,8 @@ private:
     static void removeMediaKeys(const String& mediaKeysStorageDirectory, std::chrono::system_clock::time_point modifiedSince);
     static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>&);
 
+    void maybeRegisterWithSessionIDMap();
+
     const PAL::SessionID m_sessionID;
 
     const Configuration m_configuration;