Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (144694 => 144695)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2013-03-05 00:22:27 UTC (rev 144694)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2013-03-05 00:31:18 UTC (rev 144695)
@@ -32,6 +32,7 @@
#include "WebProcessProxy.h"
#include "WorkQueue.h"
#include <WebCore/SecurityOriginHash.h>
+#include <WebCore/StorageMap.h>
using namespace WebCore;
@@ -39,7 +40,7 @@
class StorageManager::StorageArea : public ThreadSafeRefCounted<StorageManager::StorageArea> {
public:
- static PassRefPtr<StorageArea> create();
+ static PassRefPtr<StorageArea> create(unsigned quotaInBytes);
~StorageArea();
void addListener(CoreIPC::Connection*, uint64_t storageAreaID);
@@ -48,19 +49,21 @@
bool setItem(CoreIPC::Connection*, uint64_t storageAreaID, const String& key, const String& value, const String& urlString);
private:
- StorageArea();
+ explicit StorageArea(unsigned quotaInBytes);
void dispatchEvents(CoreIPC::Connection*, uint64_t storageAreaID, const String& key, const String& oldValue, const String& newValue, const String& urlString) const;
+ RefPtr<StorageMap> m_storageMap;
HashSet<std::pair<RefPtr<CoreIPC::Connection>, uint64_t> > m_eventListeners;
};
-PassRefPtr<StorageManager::StorageArea> StorageManager::StorageArea::create()
+PassRefPtr<StorageManager::StorageArea> StorageManager::StorageArea::create(unsigned quotaInBytes)
{
- return adoptRef(new StorageArea());
+ return adoptRef(new StorageArea(quotaInBytes));
}
-StorageManager::StorageArea::StorageArea()
+StorageManager::StorageArea::StorageArea(unsigned quotaInBytes)
+ : m_storageMap(StorageMap::create(quotaInBytes))
{
}
@@ -105,7 +108,7 @@
class StorageManager::SessionStorageNamespace : public ThreadSafeRefCounted<SessionStorageNamespace> {
public:
- static PassRefPtr<SessionStorageNamespace> create(CoreIPC::Connection* allowedConnection);
+ static PassRefPtr<SessionStorageNamespace> create(CoreIPC::Connection* allowedConnection, unsigned quotaInBytes);
~SessionStorageNamespace();
bool isEmpty() const { return m_storageAreaMap.isEmpty(); }
@@ -118,19 +121,22 @@
void cloneTo(SessionStorageNamespace& newSessionStorageNamespace);
private:
- explicit SessionStorageNamespace(CoreIPC::Connection* allowedConnection);
+ SessionStorageNamespace(CoreIPC::Connection* allowedConnection, unsigned quotaInBytes);
RefPtr<CoreIPC::Connection> m_allowedConnection;
+ unsigned m_quotaInBytes;
+
HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageArea> > m_storageAreaMap;
};
-PassRefPtr<StorageManager::SessionStorageNamespace> StorageManager::SessionStorageNamespace::create(CoreIPC::Connection* allowedConnection)
+PassRefPtr<StorageManager::SessionStorageNamespace> StorageManager::SessionStorageNamespace::create(CoreIPC::Connection* allowedConnection, unsigned quotaInBytes)
{
- return adoptRef(new SessionStorageNamespace(allowedConnection));
+ return adoptRef(new SessionStorageNamespace(allowedConnection, quotaInBytes));
}
-StorageManager::SessionStorageNamespace::SessionStorageNamespace(CoreIPC::Connection* allowedConnection)
+StorageManager::SessionStorageNamespace::SessionStorageNamespace(CoreIPC::Connection* allowedConnection, unsigned quotaInBytes)
: m_allowedConnection(allowedConnection)
+ , m_quotaInBytes(quotaInBytes)
{
}
@@ -149,7 +155,7 @@
{
HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageArea> >::AddResult result = m_storageAreaMap.add(securityOrigin, 0);
if (result.isNewEntry)
- result.iterator->value = StorageArea::create();
+ result.iterator->value = StorageArea::create(m_quotaInBytes);
return result.iterator->value;
}
@@ -175,9 +181,9 @@
{
}
-void StorageManager::createSessionStorageNamespace(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection)
+void StorageManager::createSessionStorageNamespace(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection, unsigned quotaInBytes)
{
- m_queue->dispatch(bind(&StorageManager::createSessionStorageNamespaceInternal, this, storageNamespaceID, RefPtr<CoreIPC::Connection>(allowedConnection)));
+ m_queue->dispatch(bind(&StorageManager::createSessionStorageNamespaceInternal, this, storageNamespaceID, RefPtr<CoreIPC::Connection>(allowedConnection), quotaInBytes));
}
void StorageManager::destroySessionStorageNamespace(uint64_t storageNamespaceID)
@@ -269,11 +275,11 @@
connection->send(Messages::StorageAreaProxy::DidSetItem(key, quotaError), storageAreaID);
}
-void StorageManager::createSessionStorageNamespaceInternal(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection)
+void StorageManager::createSessionStorageNamespaceInternal(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection, unsigned quotaInBytes)
{
ASSERT(!m_sessionStorageNamespaces.contains(storageNamespaceID));
- m_sessionStorageNamespaces.set(storageNamespaceID, SessionStorageNamespace::create(allowedConnection));
+ m_sessionStorageNamespaces.set(storageNamespaceID, SessionStorageNamespace::create(allowedConnection, quotaInBytes));
}
void StorageManager::destroySessionStorageNamespaceInternal(uint64_t storageNamespaceID)
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (144694 => 144695)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2013-03-05 00:22:27 UTC (rev 144694)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2013-03-05 00:31:18 UTC (rev 144695)
@@ -43,7 +43,7 @@
static PassRefPtr<StorageManager> create();
~StorageManager();
- void createSessionStorageNamespace(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection);
+ void createSessionStorageNamespace(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection, unsigned quotaInBytes);
void destroySessionStorageNamespace(uint64_t storageNamespaceID);
void setAllowedSessionStorageNamespaceConnection(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection);
void cloneSessionStorageNamespace(uint64_t storageNamespaceID, uint64_t newStorageNamespaceID);
@@ -64,7 +64,7 @@
void getValues(CoreIPC::Connection*, uint64_t storageAreaID, HashMap<String, String>& values);
void setItem(CoreIPC::Connection*, uint64_t storageAreaID, const String& key, const String& value, const String& urlString);
- void createSessionStorageNamespaceInternal(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection);
+ void createSessionStorageNamespaceInternal(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection, unsigned quotaInBytes);
void destroySessionStorageNamespaceInternal(uint64_t storageNamespaceID);
void setAllowedSessionStorageNamespaceConnectionInternal(uint64_t storageNamespaceID, CoreIPC::Connection* allowedConnection);
void cloneSessionStorageNamespaceInternal(uint64_t storageNamespaceID, uint64_t newStorageNamespaceID);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (144694 => 144695)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-03-05 00:22:27 UTC (rev 144694)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-03-05 00:31:18 UTC (rev 144695)
@@ -267,7 +267,9 @@
#endif
m_process->addMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_pageID, this);
- m_process->context()->storageManager().createSessionStorageNamespace(m_pageID, m_process->isValid() ? m_process->connection() : 0);
+
+ // FIXME: If we ever expose the session storage size as a preference, we need to pass it here.
+ m_process->context()->storageManager().createSessionStorageNamespace(m_pageID, m_process->isValid() ? m_process->connection() : 0, std::numeric_limits<unsigned>::max());
}
WebPageProxy::~WebPageProxy()