Title: [178524] trunk/Source/WebKit2
Revision
178524
Author
[email protected]
Date
2015-01-15 12:24:41 -0800 (Thu, 15 Jan 2015)

Log Message

Give WebsiteDataStore a StorageManager
https://bugs.webkit.org/show_bug.cgi?id=140505

Reviewed by Andreas Kling.

The process pool storage manager is still around but is only used for clearing data. It will be removed
completely in an upcoming commit.

* UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
(API::WebsiteDataStore::defaultDataStoreConfiguration):
Set up the local storage directory.

* UIProcess/API/Cocoa/WKProcessPool.mm:
(websiteDataDirectoryURL):
Export this so it can be called from APIWebsiteDataStoreCocoa.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::createNewPage):
Call WebsiteDataStore::cloneSessionData instead.

* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::websiteDataStore):
Add getter.

* UIProcess/WebProcessPool.cpp:
(WebKit::websiteDataStoreConfiguration):
Update this to take a WebProcessPoolConfiguration object and assign the local storage directory.

(WebKit::WebProcessPool::WebProcessPool):
Pass the configuration to websiteDataStoreConfiguration.

(WebKit::WebProcessPool::processWillOpenConnection):
(WebKit::WebProcessPool::processWillCloseConnection):
Remove storage manager calls.

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::WebsiteDataStore):
When creating a persistent data store, also create a storage manager.

(WebKit::WebsiteDataStore::cloneSessionData):
Clone the session storage namespace.

(WebKit::WebsiteDataStore::webPageWasAdded):
Create a session storage namespace for this page.

(WebKit::WebsiteDataStore::webPageWasRemoved):
Destroy the session storage namespace.

(WebKit::WebsiteDataStore::webProcessWillOpenConnection):
Tell the storage manager about the new process connection.

(WebKit::WebsiteDataStore::webPageWillOpenConnection):
Set the allowed connection.

(WebKit::WebsiteDataStore::webPageDidCloseConnection):
Clear the allowed connection.

(WebKit::WebsiteDataStore::webProcessDidCloseConnection):
Tell the storage manager that the process connection has been closed.

* UIProcess/WebsiteData/WebsiteDataStore.h:
Add new members.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (178523 => 178524)


--- trunk/Source/WebKit2/ChangeLog	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/ChangeLog	2015-01-15 20:24:41 UTC (rev 178524)
@@ -1,5 +1,70 @@
 2015-01-15  Anders Carlsson  <[email protected]>
 
+        Give WebsiteDataStore a StorageManager
+        https://bugs.webkit.org/show_bug.cgi?id=140505
+
+        Reviewed by Andreas Kling.
+
+        The process pool storage manager is still around but is only used for clearing data. It will be removed
+        completely in an upcoming commit.
+
+        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
+        (API::WebsiteDataStore::defaultDataStoreConfiguration):
+        Set up the local storage directory.
+
+        * UIProcess/API/Cocoa/WKProcessPool.mm:
+        (websiteDataDirectoryURL):
+        Export this so it can be called from APIWebsiteDataStoreCocoa.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::createNewPage):
+        Call WebsiteDataStore::cloneSessionData instead.
+
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::websiteDataStore):
+        Add getter.
+
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::websiteDataStoreConfiguration):
+        Update this to take a WebProcessPoolConfiguration object and assign the local storage directory.
+
+        (WebKit::WebProcessPool::WebProcessPool):
+        Pass the configuration to websiteDataStoreConfiguration.
+
+        (WebKit::WebProcessPool::processWillOpenConnection):
+        (WebKit::WebProcessPool::processWillCloseConnection):
+        Remove storage manager calls.
+
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::WebsiteDataStore):
+        When creating a persistent data store, also create a storage manager.
+
+        (WebKit::WebsiteDataStore::cloneSessionData):
+        Clone the session storage namespace.
+
+        (WebKit::WebsiteDataStore::webPageWasAdded):
+        Create a session storage namespace for this page.
+
+        (WebKit::WebsiteDataStore::webPageWasRemoved):
+        Destroy the session storage namespace.
+
+        (WebKit::WebsiteDataStore::webProcessWillOpenConnection):
+        Tell the storage manager about the new process connection.
+
+        (WebKit::WebsiteDataStore::webPageWillOpenConnection):
+        Set the allowed connection.
+
+        (WebKit::WebsiteDataStore::webPageDidCloseConnection):
+        Clear the allowed connection.
+
+        (WebKit::WebsiteDataStore::webProcessDidCloseConnection):
+        Tell the storage manager that the process connection has been closed.
+
+        * UIProcess/WebsiteData/WebsiteDataStore.h:
+        Add new members.
+
+2015-01-15  Anders Carlsson  <[email protected]>
+
         More work on the lifetime observer
         https://bugs.webkit.org/show_bug.cgi?id=140500
 

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm (178523 => 178524)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm	2015-01-15 20:24:41 UTC (rev 178524)
@@ -26,6 +26,9 @@
 #include "config.h"
 #include "APIWebsiteDataStore.h"
 
+// FIXME: This function is currently in WKProcessPool. It should be moved to this file instead.
+NSURL *websiteDataDirectoryURL(NSString *directoryName);
+
 namespace API {
 
 WebKit::WebsiteDataStore::Configuration WebsiteDataStore::defaultDataStoreConfiguration()
@@ -33,6 +36,8 @@
     // FIXME: Fill everything in.
     WebKit::WebsiteDataStore::Configuration configuration;
 
+    configuration.localStorageDirectory = websiteDataDirectoryURL(@"LocalStorage").absoluteURL.path.fileSystemRepresentation;
+
     return configuration;
 }
 

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm (178523 => 178524)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm	2015-01-15 20:24:41 UTC (rev 178524)
@@ -49,6 +49,9 @@
 #import "WKGeolocationProviderIOS.h"
 #endif
 
+// FIXME: Move this from WKProcessPool to APIWebsiteDataStoreCocoa.
+NSURL *websiteDataDirectoryURL(NSString *directoryName);
+
 @implementation WKProcessPool {
     WebKit::WeakObjCPtr<id <_WKDownloadDelegate>> _downloadDelegate;
 
@@ -113,7 +116,7 @@
     return [url URLByAppendingPathComponent:@"WebsiteData" isDirectory:YES];
 }
 
-static NSURL *websiteDataDirectoryURL(NSString *directoryName)
+NSURL *websiteDataDirectoryURL(NSString *directoryName)
 {
     static dispatch_once_t onceToken;
     static NSURL *websiteDataURL;

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (178523 => 178524)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-01-15 20:24:41 UTC (rev 178524)
@@ -3093,7 +3093,8 @@
 
     newPageID = newPage->pageID();
     newPageParameters = newPage->creationParameters();
-    process().processPool().storageManager().cloneSessionStorageNamespace(m_pageID, newPage->pageID());
+
+    WebsiteDataStore::cloneSessionData(*this, *newPage);
 }
     
 void WebPageProxy::showPage()

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (178523 => 178524)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-01-15 20:24:41 UTC (rev 178524)
@@ -270,6 +270,8 @@
 
     WebNavigationState& navigationState() { return *m_navigationState.get(); }
 
+    WebsiteDataStore& websiteDataStore() { return m_websiteDataStore; }
+
 #if ENABLE(ASYNC_SCROLLING)
     RemoteScrollingCoordinatorProxy* scrollingCoordinatorProxy() const { return m_scrollingCoordinatorProxy.get(); }
 #endif

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (178523 => 178524)


--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2015-01-15 20:24:41 UTC (rev 178524)
@@ -150,11 +150,12 @@
     return processPools();
 }
 
-static WebsiteDataStore::Configuration websiteDataStoreConfiguration()
+static WebsiteDataStore::Configuration websiteDataStoreConfiguration(const WebProcessPoolConfiguration& processPoolConfiguration)
 {
     WebsiteDataStore::Configuration configuration;
 
-    // FIXME: Fill in the configuration.
+    configuration.localStorageDirectory = processPoolConfiguration.localStorageDirectory;
+
     return configuration;
 }
 
@@ -175,7 +176,7 @@
     , m_cacheModel(CacheModelDocumentViewer)
     , m_memorySamplerEnabled(false)
     , m_memorySamplerInterval(1400.0)
-    , m_websiteDataStore(WebsiteDataStore::create(websiteDataStoreConfiguration()))
+    , m_websiteDataStore(WebsiteDataStore::create(websiteDataStoreConfiguration(configuration)))
     , m_storageManager(StorageManager::create(configuration.localStorageDirectory))
 #if USE(SOUP)
     , m_initialHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain)
@@ -777,12 +778,10 @@
 
 void WebProcessPool::processWillOpenConnection(WebProcessProxy* process)
 {
-    m_storageManager->processWillOpenConnection(process);
 }
 
 void WebProcessPool::processWillCloseConnection(WebProcessProxy* process)
 {
-    m_storageManager->processWillCloseConnection(process);
 }
 
 void WebProcessPool::applicationWillTerminate()

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (178523 => 178524)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2015-01-15 20:24:41 UTC (rev 178524)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "WebsiteDataStore.h"
 
+#include "StorageManager.h"
 #include "WebProcessPool.h"
 #include <wtf/RunLoop.h>
 
@@ -56,9 +57,10 @@
     return adoptRef(new WebsiteDataStore(WTF::move(configuration)));
 }
 
-WebsiteDataStore::WebsiteDataStore(Configuration)
+WebsiteDataStore::WebsiteDataStore(Configuration configuration)
     : m_identifier(generateIdentifier())
     , m_sessionID(WebCore::SessionID::defaultSessionID())
+    , m_storageManager(StorageManager::create(WTF::move(configuration.localStorageDirectory)))
 {
 }
 
@@ -72,6 +74,21 @@
 {
 }
 
+void WebsiteDataStore::cloneSessionData(WebPageProxy& sourcePage, WebPageProxy& newPage)
+{
+    auto& sourceDataStore = sourcePage.websiteDataStore();
+    auto& newDataStore = newPage.websiteDataStore();
+
+    // FIXME: Handle this.
+    if (&sourceDataStore != &newDataStore)
+        return;
+
+    if (!sourceDataStore.m_storageManager)
+        return;
+
+    sourceDataStore.m_storageManager->cloneSessionStorageNamespace(sourcePage.pageID(), newPage.pageID());
+}
+
 enum class ProcessAccessType {
     None,
     OnlyIfLaunched,
@@ -160,4 +177,40 @@
     callbackAggregator->callIfNeeded();
 }
 
+void WebsiteDataStore::webPageWasAdded(WebPageProxy& webPageProxy)
+{
+    if (m_storageManager)
+        m_storageManager->createSessionStorageNamespace(webPageProxy.pageID(), std::numeric_limits<unsigned>::max());
 }
+
+void WebsiteDataStore::webPageWasRemoved(WebPageProxy& webPageProxy)
+{
+    if (m_storageManager)
+        m_storageManager->destroySessionStorageNamespace(webPageProxy.pageID());
+}
+
+void WebsiteDataStore::webProcessWillOpenConnection(WebProcessProxy& webProcessProxy, IPC::Connection&)
+{
+    if (m_storageManager)
+        m_storageManager->processWillOpenConnection(&webProcessProxy);
+}
+
+void WebsiteDataStore::webPageWillOpenConnection(WebPageProxy& webPageProxy, IPC::Connection& connection)
+{
+    if (m_storageManager)
+        m_storageManager->setAllowedSessionStorageNamespaceConnection(webPageProxy.pageID(), &connection);
+}
+
+void WebsiteDataStore::webPageDidCloseConnection(WebPageProxy& webPageProxy, IPC::Connection&)
+{
+    if (m_storageManager)
+        m_storageManager->setAllowedSessionStorageNamespaceConnection(webPageProxy.pageID(), nullptr);
+}
+
+void WebsiteDataStore::webProcessDidCloseConnection(WebProcessProxy& webProcessProxy, IPC::Connection&)
+{
+    if (m_storageManager)
+        m_storageManager->processWillCloseConnection(&webProcessProxy);
+}
+
+}

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h (178523 => 178524)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h	2015-01-15 20:16:38 UTC (rev 178523)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h	2015-01-15 20:24:41 UTC (rev 178524)
@@ -33,14 +33,17 @@
 #include <wtf/HashSet.h>
 #include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebKit {
 
+class StorageManager;
 class WebPageProxy;
 
 class WebsiteDataStore : public RefCounted<WebsiteDataStore>, public WebProcessLifetimeObserver {
 public:
     struct Configuration {
+        String localStorageDirectory;
     };
     static RefPtr<WebsiteDataStore> createNonPersistent();
     static RefPtr<WebsiteDataStore> create(Configuration);
@@ -51,14 +54,26 @@
     bool isNonPersistent() const { return m_sessionID.isEphemeral(); }
     WebCore::SessionID sessionID() const { return m_sessionID; }
 
+    static void cloneSessionData(WebPageProxy& sourcePage, WebPageProxy& newPage);
+
     void removeData(WebsiteDataTypes, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler);
 
 private:
     explicit WebsiteDataStore(WebCore::SessionID);
     explicit WebsiteDataStore(Configuration);
 
-    uint64_t m_identifier;
-    WebCore::SessionID m_sessionID;
+    // WebProcessLifetimeObserver.
+    virtual void webPageWasAdded(WebPageProxy&) override;
+    virtual void webPageWasRemoved(WebPageProxy&) override;
+    virtual void webProcessWillOpenConnection(WebProcessProxy&, IPC::Connection&) override;
+    virtual void webPageWillOpenConnection(WebPageProxy&, IPC::Connection&) override;
+    virtual void webPageDidCloseConnection(WebPageProxy&, IPC::Connection&) override;
+    virtual void webProcessDidCloseConnection(WebProcessProxy&, IPC::Connection&) override;
+
+    const uint64_t m_identifier;
+    const WebCore::SessionID m_sessionID;
+
+    const RefPtr<StorageManager> m_storageManager;
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to