Title: [144695] trunk/Source/WebKit2
Revision
144695
Author
[email protected]
Date
2013-03-04 16:31:18 -0800 (Mon, 04 Mar 2013)

Log Message

UI process storage areas should hold on to storage maps
https://bugs.webkit.org/show_bug.cgi?id=111374

Reviewed by Beth Dakin.

Pass the session storage quota size through to the storage area constructor and
create a StorageMap with the given quota size.

* UIProcess/Storage/StorageManager.cpp:
(StorageManager::StorageArea):
(WebKit::StorageManager::StorageArea::create):
(WebKit::StorageManager::StorageArea::StorageArea):
(StorageManager::SessionStorageNamespace):
(WebKit::StorageManager::SessionStorageNamespace::create):
(WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace):
(WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
(WebKit::StorageManager::createSessionStorageNamespace):
(WebKit::StorageManager::createSessionStorageNamespaceInternal):
* UIProcess/Storage/StorageManager.h:
(StorageManager):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (144694 => 144695)


--- trunk/Source/WebKit2/ChangeLog	2013-03-05 00:22:27 UTC (rev 144694)
+++ trunk/Source/WebKit2/ChangeLog	2013-03-05 00:31:18 UTC (rev 144695)
@@ -1,3 +1,28 @@
+2013-03-04  Anders Carlsson  <[email protected]>
+
+        UI process storage areas should hold on to storage maps
+        https://bugs.webkit.org/show_bug.cgi?id=111374
+
+        Reviewed by Beth Dakin.
+
+        Pass the session storage quota size through to the storage area constructor and
+        create a StorageMap with the given quota size.
+
+        * UIProcess/Storage/StorageManager.cpp:
+        (StorageManager::StorageArea):
+        (WebKit::StorageManager::StorageArea::create):
+        (WebKit::StorageManager::StorageArea::StorageArea):
+        (StorageManager::SessionStorageNamespace):
+        (WebKit::StorageManager::SessionStorageNamespace::create):
+        (WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace):
+        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
+        (WebKit::StorageManager::createSessionStorageNamespace):
+        (WebKit::StorageManager::createSessionStorageNamespaceInternal):
+        * UIProcess/Storage/StorageManager.h:
+        (StorageManager):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::WebPageProxy):
+
 2013-03-04  Raphael Kubo da Costa  <[email protected]>
 
         Unreviewed build fix after r144675.

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()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to