Title: [177090] trunk/Source/WebKit2
Revision
177090
Author
ander...@apple.com
Date
2014-12-10 13:00:09 -0800 (Wed, 10 Dec 2014)

Log Message

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.

Modified Paths

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);
 }
 
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to