Diff
Modified: trunk/Source/WebKit2/ChangeLog (177089 => 177090)
--- trunk/Source/WebKit2/ChangeLog 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/ChangeLog 2014-12-10 21:00:09 UTC (rev 177090)
@@ -1,5 +1,46 @@
2014-12-10 Anders Carlsson <ander...@apple.com>
+ Begin fixing transient local storage handling
+ https://bugs.webkit.org/show_bug.cgi?id=139503
+
+ Reviewed by Sam Weinig.
+
+ * UIProcess/Storage/StorageManager.cpp:
+ (WebKit::StorageManager::createTransientLocalStorageMap):
+ * UIProcess/Storage/StorageManager.h:
+ Add empty stub implementation of createTransientLocalStorageMap.
+
+ * UIProcess/Storage/StorageManager.messages.in:
+ Add CreateTransientLocalStorageMap message.
+
+ * WebProcess/Storage/StorageAreaMap.cpp:
+ (WebKit::StorageAreaMap::StorageAreaMap):
+ If we have a local storage namespace with a non-null top-level origin, create a
+ transient local storage map.
+
+ * WebProcess/Storage/StorageNamespaceImpl.cpp:
+ (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
+ Pass a null top-level origin to the StorageNamespaceImpl constructor.
+
+ (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
+ Create a new StorageNamespaceImpl, passing the top-level origin to the constructor.
+
+ (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
+ Pass a null top-level origin to the StorageNamespaceImpl constructor.
+
+ (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
+ Add a top-level origin parameter.
+
+ * WebProcess/Storage/StorageNamespaceImpl.h:
+ (WebKit::StorageNamespaceImpl::topLevelOrigin):
+ Add top-level origin member and getter.
+
+ * WebProcess/Storage/WebStorageNamespaceProvider.cpp:
+ (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
+ Call StorageNamespaceImpl::createTransientLocalStorageNamespace.
+
+2014-12-10 Anders Carlsson <ander...@apple.com>
+
Implement WebStorageNamespaceProvider::createLocalStorageNamespace
https://bugs.webkit.org/show_bug.cgi?id=139498
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (177089 => 177090)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2014-12-10 21:00:09 UTC (rev 177090)
@@ -494,6 +494,11 @@
result.iterator->value = storageArea.release();
}
+void StorageManager::createTransientLocalStorageMap(IPC::Connection* connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& topLevelOriginData, const SecurityOriginData& securityOriginData)
+{
+ // FIXME: Implement this.
+}
+
void StorageManager::createSessionStorageMap(IPC::Connection* connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& securityOriginData)
{
// FIXME: This should be a message check.
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (177089 => 177090)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2014-12-10 21:00:09 UTC (rev 177090)
@@ -76,6 +76,7 @@
// Message handlers.
void createLocalStorageMap(IPC::Connection*, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData&);
+ void createTransientLocalStorageMap(IPC::Connection*, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& topLevelOriginData, const SecurityOriginData&);
void createSessionStorageMap(IPC::Connection*, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData&);
void destroyStorageMap(IPC::Connection*, uint64_t storageMapID);
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.messages.in (177089 => 177090)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.messages.in 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.messages.in 2014-12-10 21:00:09 UTC (rev 177090)
@@ -22,6 +22,7 @@
messages -> StorageManager {
CreateLocalStorageMap(uint64_t storageMapID, uint64_t storageNamespaceID, WebKit::SecurityOriginData securityOriginData) WantsConnection
+ CreateTransientLocalStorageMap(uint64_t storageMapID, uint64_t storageNamespaceID, WebKit::SecurityOriginData topLevelSecurityOriginData, WebKit::SecurityOriginData securityOriginData) WantsConnection
CreateSessionStorageMap(uint64_t storageMapID, uint64_t storageNamespaceID, WebKit::SecurityOriginData securityOriginData) WantsConnection
DestroyStorageMap(uint64_t storageMapID) WantsConnection
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp (177089 => 177090)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp 2014-12-10 21:00:09 UTC (rev 177090)
@@ -68,10 +68,20 @@
, m_hasPendingClear(false)
, m_hasPendingGetValues(false)
{
- if (m_storageType == LocalStorage)
- WebProcess::shared().parentProcessConnection()->send(Messages::StorageManager::CreateLocalStorageMap(m_storageMapID, storageNamespace->storageNamespaceID(), SecurityOriginData::fromSecurityOrigin(m_securityOrigin.get())), 0);
- else
+ switch (m_storageType) {
+ case WebCore::LocalStorage:
+ if (SecurityOrigin* topLevelOrigin = storageNamespace->topLevelOrigin())
+ WebProcess::shared().parentProcessConnection()->send(Messages::StorageManager::CreateTransientLocalStorageMap(m_storageMapID, storageNamespace->storageNamespaceID(), SecurityOriginData::fromSecurityOrigin(topLevelOrigin), SecurityOriginData::fromSecurityOrigin(m_securityOrigin.get())), 0);
+ else
+ WebProcess::shared().parentProcessConnection()->send(Messages::StorageManager::CreateLocalStorageMap(m_storageMapID, storageNamespace->storageNamespaceID(), SecurityOriginData::fromSecurityOrigin(m_securityOrigin.get())), 0);
+
+ break;
+
+ case WebCore::SessionStorage:
WebProcess::shared().parentProcessConnection()->send(Messages::StorageManager::CreateSessionStorageMap(m_storageMapID, storageNamespace->storageNamespaceID(), SecurityOriginData::fromSecurityOrigin(m_securityOrigin.get())), 0);
+ break;
+ }
+
WebProcess::shared().addMessageReceiver(Messages::StorageAreaMap::messageReceiverName(), m_storageMapID, *this);
}
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp (177089 => 177090)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp 2014-12-10 21:00:09 UTC (rev 177090)
@@ -49,21 +49,26 @@
return localStorageNamespaceMap;
}
-PassRefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes)
+RefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes)
{
LocalStorageNamespaceMap::AddResult result = localStorageNamespaceMap().add(identifier, nullptr);
if (!result.isNewEntry)
return result.iterator->value;
- RefPtr<StorageNamespaceImpl> localStorageNamespace = adoptRef(new StorageNamespaceImpl(LocalStorage, identifier, quotaInBytes));
+ RefPtr<StorageNamespaceImpl> localStorageNamespace = adoptRef(new StorageNamespaceImpl(LocalStorage, identifier, nullptr, quotaInBytes));
result.iterator->value = localStorageNamespace.get();
return localStorageNamespace.release();
}
+RefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createTransientLocalStorageNamespace(uint64_t identifier, WebCore::SecurityOrigin& topLevelOrigin, uint64_t quotaInBytes)
+{
+ return adoptRef(new StorageNamespaceImpl(LocalStorage, identifier, &topLevelOrigin, quotaInBytes));
+}
+
PassRefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createSessionStorageNamespace(WebPage* webPage)
{
- return adoptRef(new StorageNamespaceImpl(SessionStorage, webPage->pageID(), webPage->corePage()->settings().sessionStorageQuota()));
+ return adoptRef(new StorageNamespaceImpl(SessionStorage, webPage->pageID(), nullptr, webPage->corePage()->settings().sessionStorageQuota()));
}
PassRefPtr<StorageNamespaceImpl> StorageNamespaceImpl::createLocalStorageNamespace(PageGroup* pageGroup)
@@ -74,9 +79,10 @@
return createLocalStorageNamespace(pageGroupID, quota);
}
-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)
{
}
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h (177089 => 177090)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h 2014-12-10 21:00:09 UTC (rev 177090)
@@ -38,19 +38,22 @@
class StorageNamespaceImpl : public WebCore::StorageNamespace {
public:
- static PassRefPtr<StorageNamespaceImpl> createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes);
+ static RefPtr<StorageNamespaceImpl> createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes);
+ static RefPtr<StorageNamespaceImpl> createTransientLocalStorageNamespace(uint64_t identifier, WebCore::SecurityOrigin& topLevelOrigin, uint64_t quotaInBytes);
+
static PassRefPtr<StorageNamespaceImpl> createSessionStorageNamespace(WebPage*);
virtual ~StorageNamespaceImpl();
WebCore::StorageType storageType() const { return m_storageType; }
uint64_t storageNamespaceID() const { return m_storageNamespaceID; }
+ WebCore::SecurityOrigin* topLevelOrigin() const { return m_topLevelOrigin.get(); }
unsigned quotaInBytes() const { return m_quotaInBytes; }
// FIXME: Remove this deprecated overload.
static PassRefPtr<StorageNamespaceImpl> createLocalStorageNamespace(WebCore::PageGroup*);
private:
- explicit StorageNamespaceImpl(WebCore::StorageType, uint64_t storageNamespaceID, unsigned quotaInBytes);
+ explicit StorageNamespaceImpl(WebCore::StorageType, uint64_t storageNamespaceID, WebCore::SecurityOrigin* topLevelOrigin, unsigned quotaInBytes);
virtual PassRefPtr<WebCore::StorageArea> storageArea(PassRefPtr<WebCore::SecurityOrigin>) override;
virtual PassRefPtr<WebCore::StorageNamespace> copy(WebCore::Page*) override;
@@ -60,10 +63,14 @@
virtual void sync() override;
virtual void closeIdleLocalStorageDatabases() override;
- WebCore::StorageType m_storageType;
- uint64_t m_storageNamespaceID;
- unsigned m_quotaInBytes;
+ const WebCore::StorageType m_storageType;
+ const uint64_t m_storageNamespaceID;
+ // Only used for transient local storage namespaces.
+ const RefPtr<WebCore::SecurityOrigin> m_topLevelOrigin;
+
+ const unsigned m_quotaInBytes;
+
HashMap<RefPtr<WebCore::SecurityOrigin>, RefPtr<StorageAreaMap>> m_storageAreaMaps;
};
Modified: trunk/Source/WebKit2/WebProcess/Storage/WebStorageNamespaceProvider.cpp (177089 => 177090)
--- trunk/Source/WebKit2/WebProcess/Storage/WebStorageNamespaceProvider.cpp 2014-12-10 20:46:15 UTC (rev 177089)
+++ trunk/Source/WebKit2/WebProcess/Storage/WebStorageNamespaceProvider.cpp 2014-12-10 21:00:09 UTC (rev 177090)
@@ -70,10 +70,9 @@
return StorageNamespaceImpl::createLocalStorageNamespace(m_identifier, quota);
}
-RefPtr<WebCore::StorageNamespace> WebStorageNamespaceProvider::createTransientLocalStorageNamespace(WebCore::SecurityOrigin&, unsigned quota)
+RefPtr<WebCore::StorageNamespace> WebStorageNamespaceProvider::createTransientLocalStorageNamespace(WebCore::SecurityOrigin& topLevelOrigin, unsigned quota)
{
- // FIXME: Implement.
- return nullptr;
+ return StorageNamespaceImpl::createTransientLocalStorageNamespace(m_identifier, topLevelOrigin, quota);
}
}