summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
commit881da28418d380042aa95a97f0cbd42560a64f7c (patch)
treea794dff3274695e99c651902dde93d934ea7a5af /Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp
parent7e104c57a70fdf551bb3d22a5d637cdcbc69dbea (diff)
parent0fcedcd17cc00d3dd44c718b3cb36c1033319671 (diff)
downloadqtwebkit-881da28418d380042aa95a97f0cbd42560a64f7c.tar.gz
Merge 'wip/next' into dev
Change-Id: Iff9ee5e23bb326c4371ec8ed81d56f2f05d680e9
Diffstat (limited to 'Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp')
-rw-r--r--Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp82
1 files changed, 23 insertions, 59 deletions
diff --git a/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp b/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp
index a13e469d5..18c77f967 100644
--- a/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp
+++ b/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp
@@ -31,102 +31,66 @@
#include "WebPage.h"
#include "WebPageGroupProxy.h"
#include "WebProcess.h"
-#include <WebCore/GroupSettings.h>
#include <WebCore/PageGroup.h>
#include <WebCore/SecurityOrigin.h>
#include <WebCore/Settings.h>
+#include <wtf/NeverDestroyed.h>
using namespace WebCore;
namespace WebKit {
-typedef HashMap<uint64_t, StorageNamespaceImpl*> LocalStorageNamespaceMap;
-
-static LocalStorageNamespaceMap& localStorageNamespaceMap()
+RefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createSessionStorageNamespace(uint64_t identifier, unsigned quotaInBytes)
{
- DEFINE_STATIC_LOCAL(LocalStorageNamespaceMap, localStorageNamespaceMap, ());
- return localStorageNamespaceMap;
+ return adoptRef(new StorageNamespaceImpl(SessionStorage, identifier, nullptr, quotaInBytes));
}
-PassRefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createLocalStorageNamespace(PageGroup* pageGroup)
+RefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes)
{
- uint64_t pageGroupID = WebProcess::shared().webPageGroup(pageGroup)->pageGroupID();
-
- LocalStorageNamespaceMap::AddResult result = localStorageNamespaceMap().add(pageGroupID, 0);
- if (!result.isNewEntry)
- return result.iterator->value;
-
- unsigned quota = pageGroup->groupSettings()->localStorageQuotaBytes();
- RefPtr<StorageNamespaceImpl> localStorageNamespace = adoptRef(new StorageNamespaceImpl(LocalStorage, pageGroupID, quota));
-
- result.iterator->value = localStorageNamespace.get();
- return localStorageNamespace.release();
+ return adoptRef(new StorageNamespaceImpl(LocalStorage, identifier, nullptr, quotaInBytes));
}
-PassRefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createSessionStorageNamespace(WebPage* webPage)
+RefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createTransientLocalStorageNamespace(uint64_t identifier, WebCore::SecurityOrigin& topLevelOrigin, uint64_t quotaInBytes)
{
- return adoptRef(new StorageNamespaceImpl(SessionStorage, webPage->pageID(), webPage->corePage()->settings()->sessionStorageQuota()));
+ return adoptRef(new StorageNamespaceImpl(LocalStorage, identifier, &topLevelOrigin, quotaInBytes));
}
-StorageNamespaceImpl::StorageNamespaceImpl(WebCore::StorageType storageType, uint64_t storageNamespaceID, unsigned quotaInBytes)
+StorageNamespaceImpl::StorageNamespaceImpl(WebCore::StorageType storageType, uint64_t storageNamespaceID, WebCore::SecurityOrigin* topLevelOrigin, unsigned quotaInBytes)
: m_storageType(storageType)
, m_storageNamespaceID(storageNamespaceID)
+ , m_topLevelOrigin(topLevelOrigin)
, m_quotaInBytes(quotaInBytes)
{
}
StorageNamespaceImpl::~StorageNamespaceImpl()
{
- if (m_storageType == LocalStorage) {
- ASSERT(localStorageNamespaceMap().contains(m_storageNamespaceID));
- localStorageNamespaceMap().remove(m_storageNamespaceID);
- }
}
-PassRefPtr<StorageArea> StorageNamespaceImpl::storageArea(PassRefPtr<SecurityOrigin> securityOrigin)
+void StorageNamespaceImpl::didDestroyStorageAreaMap(StorageAreaMap& map)
{
- HashMap<RefPtr<WebCore::SecurityOrigin>, RefPtr<StorageAreaMap> >::AddResult result = m_storageAreaMaps.add(securityOrigin.get(), 0);
- if (result.isNewEntry)
- result.iterator->value = StorageAreaMap::create(this, securityOrigin);
-
- return StorageAreaImpl::create(result.iterator->value);
+ m_storageAreaMaps.remove(&map.securityOrigin());
}
-PassRefPtr<StorageNamespace> StorageNamespaceImpl::copy(Page* newPage)
+RefPtr<StorageArea> StorageNamespaceImpl::storageArea(RefPtr<SecurityOrigin>&& securityOrigin)
{
- ASSERT(m_storageNamespaceID);
+ RefPtr<StorageAreaMap> map;
- return createSessionStorageNamespace(WebPage::fromCorePage(newPage));
-}
+ auto& slot = m_storageAreaMaps.add(securityOrigin.get(), nullptr).iterator->value;
+ if (!slot) {
+ map = StorageAreaMap::create(this, *securityOrigin);
+ slot = map.get();
+ } else
+ map = slot;
-void StorageNamespaceImpl::close()
-{
- // FIXME: Implement this.
- ASSERT_NOT_REACHED();
+ return StorageAreaImpl::create(WTFMove(map));
}
-void StorageNamespaceImpl::clearOriginForDeletion(SecurityOrigin*)
+RefPtr<StorageNamespace> StorageNamespaceImpl::copy(Page* newPage)
{
- // FIXME: Implement this.
- ASSERT_NOT_REACHED();
-}
-
-void StorageNamespaceImpl::clearAllOriginsForDeletion()
-{
- // FIXME: Implement this.
- ASSERT_NOT_REACHED();
-}
-
-void StorageNamespaceImpl::sync()
-{
- // FIXME: Implement this.
- ASSERT_NOT_REACHED();
-}
+ ASSERT(m_storageNamespaceID);
-void StorageNamespaceImpl::closeIdleLocalStorageDatabases()
-{
- // FIXME: Implement this.
- ASSERT_NOT_REACHED();
+ return createSessionStorageNamespace(WebPage::fromCorePage(newPage)->pageID(), m_quotaInBytes);
}
} // namespace WebKit