Modified: trunk/Source/WebKit2/ChangeLog (214972 => 214973)
--- trunk/Source/WebKit2/ChangeLog 2017-04-05 22:17:50 UTC (rev 214972)
+++ trunk/Source/WebKit2/ChangeLog 2017-04-05 22:38:24 UTC (rev 214973)
@@ -1,3 +1,27 @@
+2017-04-05 Brady Eidson <[email protected]>
+
+ Refactor so WebsiteDataStores always have a StorageManager.
+ https://bugs.webkit.org/show_bug.cgi?id=170521
+
+ Reviewed by Geoff Garen.
+
+ This basically involves teaching StorageManager how to work without a LocalStorageDatabaseTracker,
+ since there will never be ephemeral bits on disk to track.
+
+ * UIProcess/Storage/StorageManager.cpp:
+ (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):
+ (WebKit::StorageManager::createEphemeral):
+ (WebKit::StorageManager::StorageManager):
+ (WebKit::StorageManager::getLocalStorageOrigins):
+ (WebKit::StorageManager::getLocalStorageOriginDetails):
+ (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
+ (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
+ (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
+ * UIProcess/Storage/StorageManager.h:
+
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::WebsiteDataStore):
+
2017-04-05 Brent Fulgham <[email protected]>
[WK2][iOS] Add entitlements to enable audio/video capture in WebProcess
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (214972 => 214973)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2017-04-05 22:17:50 UTC (rev 214972)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2017-04-05 22:38:24 UTC (rev 214973)
@@ -281,12 +281,12 @@
void StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded() const
{
- if (!m_localStorageNamespace)
+ if (!m_localStorageNamespace || !m_localStorageNamespace->storageManager()->m_localStorageDatabaseTracker)
return;
// We open the database here even if we've already imported our items to ensure that the database is open if we need to write to it.
if (!m_localStorageDatabase)
- m_localStorageDatabase = LocalStorageDatabase::create(m_localStorageNamespace->storageManager()->m_queue.copyRef(), m_localStorageNamespace->storageManager()->m_localStorageDatabaseTracker.copyRef(), m_securityOrigin);
+ m_localStorageDatabase = LocalStorageDatabase::create(m_localStorageNamespace->storageManager()->m_queue.copyRef(), *m_localStorageNamespace->storageManager()->m_localStorageDatabaseTracker, m_securityOrigin);
if (m_didImportItemsFromDatabase)
return;
@@ -451,10 +451,17 @@
return adoptRef(*new StorageManager(localStorageDirectory));
}
+Ref<StorageManager> StorageManager::createEphemeral()
+{
+ return adoptRef(*new StorageManager({ }));
+}
+
StorageManager::StorageManager(const String& localStorageDirectory)
: m_queue(WorkQueue::create("com.apple.WebKit.StorageManager"))
- , m_localStorageDatabaseTracker(LocalStorageDatabaseTracker::create(m_queue.copyRef(), localStorageDirectory))
{
+ if (!localStorageDirectory.isEmpty())
+ m_localStorageDatabaseTracker = LocalStorageDatabaseTracker::create(m_queue.copyRef(), localStorageDirectory);
+
// Make sure the encoding is initialized before we start dispatching things to the queue.
UTF8Encoding();
}
@@ -580,8 +587,10 @@
m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
HashSet<SecurityOriginData> origins;
- for (auto& origin : m_localStorageDatabaseTracker->origins())
- origins.add(origin);
+ if (m_localStorageDatabaseTracker) {
+ for (auto& origin : m_localStorageDatabaseTracker->origins())
+ origins.add(origin);
+ }
for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values()) {
for (auto& origin : transientLocalStorageNamespace->origins())
@@ -597,7 +606,9 @@
void StorageManager::getLocalStorageOriginDetails(std::function<void (Vector<LocalStorageDatabaseTracker::OriginDetails>)>&& completionHandler)
{
m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
- auto originDetails = m_localStorageDatabaseTracker->originDetails();
+ Vector<LocalStorageDatabaseTracker::OriginDetails> originDetails;
+ if (m_localStorageDatabaseTracker)
+ originDetails = m_localStorageDatabaseTracker->originDetails();
RunLoop::main().dispatch([originDetails = WTFMove(originDetails), completionHandler = WTFMove(completionHandler)]() mutable {
completionHandler(WTFMove(originDetails));
@@ -614,7 +625,8 @@
for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(copiedOrigin);
- m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(copiedOrigin);
+ if (m_localStorageDatabaseTracker)
+ m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(copiedOrigin);
});
}
@@ -621,7 +633,9 @@
void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void()>&& completionHandler)
{
m_queue->dispatch([this, protectedThis = makeRef(*this), time, completionHandler = WTFMove(completionHandler)]() mutable {
- auto deletedOrigins = m_localStorageDatabaseTracker->deleteDatabasesModifiedSince(time);
+ Vector<WebCore::SecurityOriginData> deletedOrigins;
+ if (m_localStorageDatabaseTracker)
+ deletedOrigins = m_localStorageDatabaseTracker->deleteDatabasesModifiedSince(time);
for (const auto& origin : deletedOrigins) {
for (auto& localStorageNamespace : m_localStorageNamespaces.values())
@@ -651,7 +665,8 @@
for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(origin);
- m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(origin);
+ if (m_localStorageDatabaseTracker)
+ m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(origin);
}
RunLoop::main().dispatch(WTFMove(completionHandler));
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (214972 => 214973)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2017-04-05 22:17:50 UTC (rev 214972)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2017-04-05 22:38:24 UTC (rev 214973)
@@ -47,6 +47,7 @@
class StorageManager : public IPC::Connection::WorkQueueMessageReceiver {
public:
static Ref<StorageManager> create(const String& localStorageDirectory);
+ static Ref<StorageManager> createEphemeral();
~StorageManager();
void createSessionStorageNamespace(uint64_t storageNamespaceID, unsigned quotaInBytes);
@@ -99,7 +100,7 @@
Ref<WorkQueue> m_queue;
- Ref<LocalStorageDatabaseTracker> m_localStorageDatabaseTracker;
+ RefPtr<LocalStorageDatabaseTracker> m_localStorageDatabaseTracker;
HashMap<uint64_t, RefPtr<LocalStorageNamespace>> m_localStorageNamespaces;
HashMap<std::pair<uint64_t, WebCore::SecurityOriginData>, RefPtr<TransientLocalStorageNamespace>> m_transientLocalStorageNamespaces;
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (214972 => 214973)
--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-04-05 22:17:50 UTC (rev 214972)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-04-05 22:38:24 UTC (rev 214973)
@@ -91,6 +91,7 @@
: m_identifier(generateIdentifier())
, m_sessionID(sessionID)
, m_configuration()
+ , m_storageManager(StorageManager::createEphemeral())
, m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore"))
{
platformInitialize();