- 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;
};
}