Diff
Modified: trunk/Source/WebKit/ChangeLog (233358 => 233359)
--- trunk/Source/WebKit/ChangeLog 2018-06-29 15:24:59 UTC (rev 233358)
+++ trunk/Source/WebKit/ChangeLog 2018-06-29 16:54:05 UTC (rev 233359)
@@ -1,3 +1,25 @@
+2018-06-29 Chris Dumez <[email protected]>
+
+ Stop using lambdas for WebResourceLoadStatisticsStore to interact with its WebsiteDataStore
+ https://bugs.webkit.org/show_bug.cgi?id=187165
+
+ Reviewed by Brent Fulgham.
+
+ Stop using lambdas for WebResourceLoadStatisticsStore to interact with its WebsiteDataStore. Instead,
+ WebResourceLoadStatisticsStore now holds a weak pointer to its WebsiteDataStore and is able to call
+ methods on it directly. Reducing the indirection makes the code less complex and more understandable.
+
+ * UIProcess/WebResourceLoadStatisticsStore.cpp:
+ (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
+ (WebKit::WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler):
+ (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
+ (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
+ (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToPartitionOrBlockCookiesHandler):
+ (WebKit::WebResourceLoadStatisticsStore::callRemoveDomainsHandler):
+ * UIProcess/WebResourceLoadStatisticsStore.h:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
+
2018-06-29 Miguel Gomez <[email protected]>
[WPE] Some frames are dropped when using rAF to animate an element
Modified: trunk/Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp (233358 => 233359)
--- trunk/Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp 2018-06-29 15:24:59 UTC (rev 233358)
+++ trunk/Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp 2018-06-29 16:54:05 UTC (rev 233359)
@@ -111,21 +111,16 @@
});
}
-WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore(const String& resourceLoadStatisticsDirectory, Function<void(const String&)>&& testingCallback, bool isEphemeral, UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler&& updatePrevalentDomainsToPartitionOrBlockCookiesHandler, HasStorageAccessForFrameHandler&& hasStorageAccessForFrameHandler, GrantStorageAccessHandler&& grantStorageAccessHandler, RemoveAllStorageAccessHandler&& removeAllStorageAccessHandler, RemovePrevalentDomainsHandler&& removeDomainsHandler)
- : m_statisticsQueue(WorkQueue::create("WebResourceLoadStatisticsStore Process Data Queue", WorkQueue::Type::Serial, WorkQueue::QOS::Utility))
- , m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler(WTFMove(updatePrevalentDomainsToPartitionOrBlockCookiesHandler))
- , m_hasStorageAccessForFrameHandler(WTFMove(hasStorageAccessForFrameHandler))
- , m_grantStorageAccessHandler(WTFMove(grantStorageAccessHandler))
- , m_removeAllStorageAccessHandler(WTFMove(removeAllStorageAccessHandler))
- , m_removeDomainsHandler(WTFMove(removeDomainsHandler))
+WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore(WebsiteDataStore& websiteDataStore)
+ : m_websiteDataStore(makeWeakPtr(websiteDataStore))
+ , m_statisticsQueue(WorkQueue::create("WebResourceLoadStatisticsStore Process Data Queue", WorkQueue::Type::Serial, WorkQueue::QOS::Utility))
, m_dailyTasksTimer(RunLoop::main(), this, &WebResourceLoadStatisticsStore::performDailyTasks)
- , m_statisticsTestingCallback(WTFMove(testingCallback))
{
ASSERT(RunLoop::isMain());
- m_statisticsQueue->dispatch([this, protectedThis = makeRef(*this), isEphemeral, resourceLoadStatisticsDirectory = resourceLoadStatisticsDirectory.isolatedCopy()] {
+ m_statisticsQueue->dispatch([this, protectedThis = makeRef(*this), isPersistent = websiteDataStore.isPersistent(), resourceLoadStatisticsDirectory = websiteDataStore.resolvedResourceLoadStatisticsDirectory().isolatedCopy()] {
m_memoryStore = std::make_unique<ResourceLoadStatisticsMemoryStore>(*this, m_statisticsQueue);
- m_persistentStorage = std::make_unique<ResourceLoadStatisticsPersistentStorage>(*m_memoryStore, m_statisticsQueue, resourceLoadStatisticsDirectory, isEphemeral ? ResourceLoadStatisticsPersistentStorage::IsReadOnly::Yes : ResourceLoadStatisticsPersistentStorage::IsReadOnly::No);
+ m_persistentStorage = std::make_unique<ResourceLoadStatisticsPersistentStorage>(*m_memoryStore, m_statisticsQueue, resourceLoadStatisticsDirectory, isPersistent ? ResourceLoadStatisticsPersistentStorage::IsReadOnly::No : ResourceLoadStatisticsPersistentStorage::IsReadOnly::Yes);
});
m_statisticsQueue->dispatchAfter(5_s, [this, protectedThis = makeRef(*this)] {
@@ -227,7 +222,13 @@
{
ASSERT(RunLoop::isMain());
- m_hasStorageAccessForFrameHandler(resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(callback));
+#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
+ if (m_websiteDataStore) {
+ m_websiteDataStore->hasStorageAccessForFrameHandler(resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(callback));
+ return;
+ }
+#endif
+ callback(false);
}
void WebResourceLoadStatisticsStore::requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&& completionHandler)
@@ -294,7 +295,13 @@
{
ASSERT(RunLoop::isMain());
- m_grantStorageAccessHandler(subFramePrimaryDomain, topFramePrimaryDomain, frameID, pageID, WTFMove(callback));
+#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
+ if (m_websiteDataStore) {
+ m_websiteDataStore->grantStorageAccessHandler(subFramePrimaryDomain, topFramePrimaryDomain, frameID, pageID, WTFMove(callback));
+ return;
+ }
+#endif
+ callback(false);
}
void WebResourceLoadStatisticsStore::removeAllStorageAccess()
@@ -301,7 +308,10 @@
{
ASSERT(RunLoop::isMain());
- m_removeAllStorageAccessHandler();
+#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
+ if (m_websiteDataStore)
+ m_websiteDataStore->removeAllStorageAccessHandler();
+#endif
}
@@ -804,7 +814,14 @@
void WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToPartitionOrBlockCookiesHandler(const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst shouldClearFirst, CompletionHandler<void()>&& completionHandler)
{
ASSERT(RunLoop::isMain());
- m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, shouldClearFirst, WTFMove(completionHandler));
+
+#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
+ if (m_websiteDataStore) {
+ m_websiteDataStore->updatePrevalentDomainsToPartitionOrBlockCookies(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, shouldClearFirst, WTFMove(completionHandler));
+ return;
+ }
+#endif
+ completionHandler();
}
void WebResourceLoadStatisticsStore::callRemoveDomainsHandler(const Vector<String>& domains)
@@ -811,7 +828,10 @@
{
ASSERT(RunLoop::isMain());
- m_removeDomainsHandler(domains);
+#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
+ if (m_websiteDataStore)
+ m_websiteDataStore->removePrevalentDomains(domains);
+#endif
}
void WebResourceLoadStatisticsStore::setMaxStatisticsEntries(size_t maximumEntryCount)
Modified: trunk/Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h (233358 => 233359)
--- trunk/Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h 2018-06-29 15:24:59 UTC (rev 233358)
+++ trunk/Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h 2018-06-29 16:54:05 UTC (rev 233359)
@@ -32,6 +32,7 @@
#include <wtf/ThreadSafeRefCounted.h>
#include <wtf/Vector.h>
#include <wtf/WallTime.h>
+#include <wtf/WeakPtr.h>
#include <wtf/text/WTFString.h>
namespace WTF {
@@ -50,6 +51,7 @@
class ResourceLoadStatisticsPersistentStorage;
class WebFrameProxy;
class WebProcessProxy;
+class WebsiteDataStore;
enum class ShouldClearFirst;
enum class StorageAccessStatus {
@@ -60,14 +62,9 @@
class WebResourceLoadStatisticsStore final : public ThreadSafeRefCounted<WebResourceLoadStatisticsStore, WTF::DestructionThread::Main>, private IPC::MessageReceiver {
public:
- using UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler = WTF::Function<void(const WTF::Vector<String>& domainsToPartition, const WTF::Vector<String>& domainsToBlock, const WTF::Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst, CompletionHandler<void()>&&)>;
- using HasStorageAccessForFrameHandler = WTF::Function<void(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::Function<void(bool hasAccess)>&& callback)>;
- using GrantStorageAccessHandler = WTF::Function<void(const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::Function<void(bool wasGranted)>&& callback)>;
- using RemoveAllStorageAccessHandler = WTF::Function<void()>;
- using RemovePrevalentDomainsHandler = WTF::Function<void(const WTF::Vector<String>&)>;
- static Ref<WebResourceLoadStatisticsStore> create(const String& resourceLoadStatisticsDirectory, WTF::Function<void(const String&)>&& testingCallback, bool isEphemeral, UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler&& updatePrevalentDomainsToPartitionOrBlockCookiesHandler = [](const WTF::Vector<String>&, const WTF::Vector<String>&, const WTF::Vector<String>&, ShouldClearFirst, CompletionHandler<void()>&& callback) { callback(); }, HasStorageAccessForFrameHandler&& hasStorageAccessForFrameHandler = [](const String&, const String&, uint64_t, uint64_t, WTF::Function<void(bool)>&&) { }, GrantStorageAccessHandler&& grantStorageAccessHandler = [](const String&, const String&, std::optional<uint64_t>, uint64_t, WTF::Function<void(bool)>&&) { }, RemoveAllStorageAccessHandler&& removeAllStorageAccessHandler = []() { }, RemovePre
valentDomainsHandler&& removeDomainsHandler = [] (const WTF::Vector<String>&) { })
+ static Ref<WebResourceLoadStatisticsStore> create(WebsiteDataStore& websiteDataStore)
{
- return adoptRef(*new WebResourceLoadStatisticsStore(resourceLoadStatisticsDirectory, WTFMove(testingCallback), isEphemeral, WTFMove(updatePrevalentDomainsToPartitionOrBlockCookiesHandler), WTFMove(hasStorageAccessForFrameHandler), WTFMove(grantStorageAccessHandler), WTFMove(removeAllStorageAccessHandler), WTFMove(removeDomainsHandler)));
+ return adoptRef(*new WebResourceLoadStatisticsStore(websiteDataStore));
}
~WebResourceLoadStatisticsStore();
@@ -146,7 +143,7 @@
void callHasStorageAccessForFrameHandler(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::Function<void(bool)>&&);
private:
- WebResourceLoadStatisticsStore(const String&, WTF::Function<void(const String&)>&& testingCallback, bool isEphemeral, UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler&&, HasStorageAccessForFrameHandler&&, GrantStorageAccessHandler&&, RemoveAllStorageAccessHandler&&, RemovePrevalentDomainsHandler&&);
+ explicit WebResourceLoadStatisticsStore(WebsiteDataStore&);
// IPC::MessageReceiver.
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
@@ -161,16 +158,11 @@
void flushAndDestroyPersistentStore();
+ WeakPtr<WebsiteDataStore> m_websiteDataStore;
Ref<WorkQueue> m_statisticsQueue;
std::unique_ptr<ResourceLoadStatisticsMemoryStore> m_memoryStore;
std::unique_ptr<ResourceLoadStatisticsPersistentStorage> m_persistentStorage;
- UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler;
- HasStorageAccessForFrameHandler m_hasStorageAccessForFrameHandler;
- GrantStorageAccessHandler m_grantStorageAccessHandler;
- RemoveAllStorageAccessHandler m_removeAllStorageAccessHandler;
- RemovePrevalentDomainsHandler m_removeDomainsHandler;
-
RunLoop::Timer<WebResourceLoadStatisticsStore> m_dailyTasksTimer;
bool m_hasScheduledProcessStats { false };
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (233358 => 233359)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2018-06-29 15:24:59 UTC (rev 233358)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2018-06-29 16:54:05 UTC (rev 233359)
@@ -1476,26 +1476,8 @@
return;
}
-#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
- m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(m_configuration.resourceLoadStatisticsDirectory, WTFMove(callback), m_sessionID.isEphemeral(), [weakThis = makeWeakPtr(*this)] (const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst shouldClearFirst, CompletionHandler<void()>&& completionHandler) {
- if (weakThis)
- weakThis->updatePrevalentDomainsToPartitionOrBlockCookies(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, shouldClearFirst, WTFMove(completionHandler));
- }, [weakThis = makeWeakPtr(*this)] (const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, CompletionHandler<void(bool hasAccess)>&& completionHandler) {
- if (weakThis)
- weakThis->hasStorageAccessForFrameHandler(resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(completionHandler));
- }, [weakThis = makeWeakPtr(*this)] (const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::CompletionHandler<void(bool wasGranted)>&& completionHandler) {
- if (weakThis)
- weakThis->grantStorageAccessHandler(resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(completionHandler));
- }, [weakThis = makeWeakPtr(*this)] () {
- if (weakThis)
- weakThis->removeAllStorageAccessHandler();
- }, [weakThis = makeWeakPtr(*this)] (const Vector<String>& domainsToRemove) {
- if (weakThis)
- weakThis->removePrevalentDomains(domainsToRemove);
- });
-#else
- m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(m_configuration.resourceLoadStatisticsDirectory, WTFMove(callback), m_sessionID.isEphemeral());
-#endif
+ m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(*this);
+ m_resourceLoadStatistics->setStatisticsTestingCallback(WTFMove(callback));
for (auto& processPool : processPools(std::numeric_limits<size_t>::max(), false))
processPool->setResourceLoadStatisticsEnabled(true);
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (233358 => 233359)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2018-06-29 15:24:59 UTC (rev 233358)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2018-06-29 16:54:05 UTC (rev 233359)
@@ -150,6 +150,7 @@
const String& resolvedCookieStorageFile() const { return m_resolvedConfiguration.cookieStorageFile; }
const String& resolvedIndexedDatabaseDirectory() const { return m_resolvedConfiguration.indexedDBDatabaseDirectory; }
const String& resolvedServiceWorkerRegistrationDirectory() const { return m_resolvedConfiguration.serviceWorkerRegistrationDirectory; }
+ const String& resolvedResourceLoadStatisticsDirectory() const { return m_resolvedConfiguration.resourceLoadStatisticsDirectory; }
StorageManager* storageManager() { return m_storageManager.get(); }