Diff
Modified: trunk/Source/WebCore/ChangeLog (240497 => 240498)
--- trunk/Source/WebCore/ChangeLog 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebCore/ChangeLog 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1,3 +1,23 @@
+2019-01-25 Brent Fulgham <[email protected]>
+
+ Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
+ https://bugs.webkit.org/show_bug.cgi?id=193297
+ <rdar://problem/47158841>
+
+ Reviewed by Alex Christensen.
+
+ Trigger logging to the UIProcess when the ResourceLoadObserver is used in the NetworkProcess.
+
+ * Modules/websockets/WebSocket.cpp:
+ (WebCore::WebSocket::connect): Notify NetworkProcess a connection was made to a resource.
+ * loader/ResourceLoadObserver.cpp:
+ (WebCore::ResourceLoadObserver::setLogWebSocketLoadingNotificationCallback): Added.
+ (WebCore::ResourceLoadObserver::setLogSubresourceLoadingNotificationCallback): Added.
+ (WebCore::ResourceLoadObserver::setLogSubresourceRedirectNotificationCallback): Added.
+ (WebCore::ResourceLoadObserver::logSubresourceLoading): Notify NetworkProcess of the load.
+ (WebCore::ResourceLoadObserver::logWebSocketLoading): Ditto.
+ (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution): Ditto.
+
2019-01-25 Zalan Bujtas <[email protected]>
Remove FrameView::m_firstVisuallyNonEmptyLayoutCallbackPending
Modified: trunk/Source/WebCore/Modules/websockets/WebSocket.cpp (240497 => 240498)
--- trunk/Source/WebCore/Modules/websockets/WebSocket.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebCore/Modules/websockets/WebSocket.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -279,8 +279,8 @@
}
}
- RunLoop::main().dispatch([targetURL = m_url.isolatedCopy(), mainFrameURL = context.url().isolatedCopy(), usesEphemeralSession = context.sessionID().isEphemeral()]() {
- ResourceLoadObserver::shared().logWebSocketLoading(targetURL, mainFrameURL, usesEphemeralSession);
+ RunLoop::main().dispatch([targetURL = m_url.isolatedCopy(), mainFrameURL = context.url().isolatedCopy(), sessionID = context.sessionID()]() {
+ ResourceLoadObserver::shared().logWebSocketLoading(targetURL, mainFrameURL, sessionID);
});
if (is<Document>(context)) {
Modified: trunk/Source/WebCore/loader/ResourceLoadObserver.cpp (240497 => 240498)
--- trunk/Source/WebCore/loader/ResourceLoadObserver.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebCore/loader/ResourceLoadObserver.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -75,6 +75,24 @@
m_logUserInteractionNotificationCallback = WTFMove(callback);
}
+void ResourceLoadObserver::setLogWebSocketLoadingNotificationCallback(Function<void(PAL::SessionID, const String&, const String&, WallTime)>&& callback)
+{
+ ASSERT(!m_logWebSocketLoadingNotificationCallback);
+ m_logWebSocketLoadingNotificationCallback = WTFMove(callback);
+}
+
+void ResourceLoadObserver::setLogSubresourceLoadingNotificationCallback(Function<void(PAL::SessionID, const String&, const String&, WallTime)>&& callback)
+{
+ ASSERT(!m_logSubresourceLoadingNotificationCallback);
+ m_logSubresourceLoadingNotificationCallback = WTFMove(callback);
+}
+
+void ResourceLoadObserver::setLogSubresourceRedirectNotificationCallback(Function<void(PAL::SessionID, const String&, const String&)>&& callback)
+{
+ ASSERT(!m_logSubresourceRedirectNotificationCallback);
+ m_logSubresourceRedirectNotificationCallback = WTFMove(callback);
+}
+
ResourceLoadObserver::ResourceLoadObserver()
: m_notificationTimer(*this, &ResourceLoadObserver::notifyObserver)
{
@@ -122,9 +140,12 @@
bool shouldCallNotificationCallback = false;
{
auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
- targetStatistics.lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
+ auto lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
+ targetStatistics.lastSeen = lastSeen;
if (targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain).isNewEntry)
shouldCallNotificationCallback = true;
+
+ m_logSubresourceLoadingNotificationCallback(page->sessionID(), targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
}
if (isRedirect) {
@@ -135,6 +156,8 @@
if (isNewRedirectToEntry || isNewRedirectFromEntry)
shouldCallNotificationCallback = true;
+
+ m_logSubresourceRedirectNotificationCallback(page->sessionID(), sourcePrimaryDomain, targetPrimaryDomain);
}
if (shouldCallNotificationCallback)
@@ -141,9 +164,9 @@
scheduleNotificationIfNeeded();
}
-void ResourceLoadObserver::logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, bool usesEphemeralSession)
+void ResourceLoadObserver::logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, PAL::SessionID sessionID)
{
- if (!shouldLog(usesEphemeralSession))
+ if (!shouldLog(sessionID.isEphemeral()))
return;
auto targetHost = targetURL.host();
@@ -158,10 +181,14 @@
if (targetPrimaryDomain == mainFramePrimaryDomain)
return;
+ auto lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
+
auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
- targetStatistics.lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
+ targetStatistics.lastSeen = lastSeen;
if (targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain).isNewEntry)
scheduleNotificationIfNeeded();
+
+ m_logWebSocketLoadingNotificationCallback(sessionID, targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
}
void ResourceLoadObserver::logUserInteractionWithReducedTimeResolution(const Document& document)
@@ -197,8 +224,7 @@
}
}
- // FIXME(193297): Uncomment this line when ResourceLoadStatistics are no longer gathered in the UI Process.
- // m_logUserInteractionNotificationCallback(document.sessionID(), domain);
+ m_logUserInteractionNotificationCallback(document.sessionID(), domain);
#endif
m_notificationTimer.stop();
Modified: trunk/Source/WebCore/loader/ResourceLoadObserver.h (240497 => 240498)
--- trunk/Source/WebCore/loader/ResourceLoadObserver.h 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebCore/loader/ResourceLoadObserver.h 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,7 +60,7 @@
WEBCORE_EXPORT static ResourceLoadObserver& shared();
void logSubresourceLoading(const Frame*, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse);
- void logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, bool usesEphemeralSession);
+ void logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, PAL::SessionID);
void logUserInteractionWithReducedTimeResolution(const Document&);
void logFontLoad(const Document&, const String& familyName, bool loadStatus);
@@ -72,8 +72,11 @@
WEBCORE_EXPORT String statisticsForOrigin(const String&);
WEBCORE_EXPORT void setNotificationCallback(WTF::Function<void (Vector<ResourceLoadStatistics>&&)>&&);
- WEBCORE_EXPORT void setRequestStorageAccessUnderOpenerCallback(WTF::Function<void(const String&, uint64_t, const String&)>&&);
- WEBCORE_EXPORT void setLogUserInteractionNotificationCallback(WTF::Function<void(PAL::SessionID, const String&)>&&);
+ WEBCORE_EXPORT void setRequestStorageAccessUnderOpenerCallback(Function<void(const String&, uint64_t, const String&)>&&);
+ WEBCORE_EXPORT void setLogUserInteractionNotificationCallback(Function<void(PAL::SessionID, const String&)>&&);
+ WEBCORE_EXPORT void setLogWebSocketLoadingNotificationCallback(Function<void(PAL::SessionID, const String&, const String&, WallTime)>&&);
+ WEBCORE_EXPORT void setLogSubresourceLoadingNotificationCallback(Function<void(PAL::SessionID, const String&, const String&, WallTime)>&&);
+ WEBCORE_EXPORT void setLogSubresourceRedirectNotificationCallback(Function<void(PAL::SessionID, const String&, const String&)>&&);
WEBCORE_EXPORT void notifyObserver();
WEBCORE_EXPORT void clearState();
@@ -98,9 +101,13 @@
HashMap<String, ResourceLoadStatistics> m_resourceStatisticsMap;
HashMap<String, WTF::WallTime> m_lastReportedUserInteractionMap;
- WTF::Function<void (Vector<ResourceLoadStatistics>&&)> m_notificationCallback;
- WTF::Function<void(const String&, uint64_t, const String&)> m_requestStorageAccessUnderOpenerCallback;
- WTF::Function<void(PAL::SessionID, const String&)> m_logUserInteractionNotificationCallback;
+ Function<void(Vector<ResourceLoadStatistics>&&)> m_notificationCallback;
+ Function<void(const String&, uint64_t, const String&)> m_requestStorageAccessUnderOpenerCallback;
+ Function<void(PAL::SessionID, const String&)> m_logUserInteractionNotificationCallback;
+ Function<void(PAL::SessionID, const String&, const String&, WallTime)> m_logWebSocketLoadingNotificationCallback;
+ Function<void(PAL::SessionID, const String&, const String&, WallTime)> m_logSubresourceLoadingNotificationCallback;
+ Function<void(PAL::SessionID, const String&, const String&)> m_logSubresourceRedirectNotificationCallback;
+
Timer m_notificationTimer;
#if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED
uint64_t m_loggingCounter { 0 };
Modified: trunk/Source/WebKit/ChangeLog (240497 => 240498)
--- trunk/Source/WebKit/ChangeLog 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/ChangeLog 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1,3 +1,45 @@
+2019-01-25 Brent Fulgham <[email protected]>
+
+ Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
+ https://bugs.webkit.org/show_bug.cgi?id=193297
+ <rdar://problem/47158841>
+
+ Reviewed by Alex Christensen.
+
+ This patch activates the ResourceLoadStatistics code in the NetworkProcess, and turns
+ it off in the UIProcess. It also updates test infrastructure to work with this change
+ in architecture.
+
+ * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
+ (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceLoading): Added.
+ (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceRedirect): Added.
+ (WebKit::ResourceLoadStatisticsMemoryStore::logWebSocketLoading): Added.
+ * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
+ (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading): Added.
+ (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect): Added.
+ (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading): Added.
+ (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
+ (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
+ (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCapForPrevalentResources): Deleted.
+ * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading): Added.
+ (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect): Added.
+ (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading): Added.
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+ * NetworkProcess/NetworkSession.cpp:
+ (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::ensureNetworkProcess):
+ * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
+ (WebKit::WebsiteDataStore::parameters):
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::removeData):
+ (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
+ (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
+ * Webprocess/WebProcess.cpp:
+ (WebKit::WebProcess::initializeWebProcess): Register new ResourceLoadObserver callbacks.
+
2019-01-25 Ryosuke Niwa <[email protected]>
iOS: inputmode="none" disables hardware keyboard's globe key
Modified: trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -638,6 +638,29 @@
scheduleStatisticsProcessingRequestIfNecessary();
}
+void ResourceLoadStatisticsMemoryStore::logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen)
+{
+ ASSERT(!RunLoop::isMain());
+
+ auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
+ targetStatistics.lastSeen = lastSeen;
+ if (targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain).isNewEntry)
+ scheduleStatisticsProcessingRequestIfNecessary();
+}
+
+void ResourceLoadStatisticsMemoryStore::logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain)
+{
+ ASSERT(!RunLoop::isMain());
+
+ auto& redirectingOriginStatistics = ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);
+ bool isNewRedirectToEntry = redirectingOriginStatistics.subresourceUniqueRedirectsTo.add(targetPrimaryDomain).isNewEntry;
+ auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
+ bool isNewRedirectFromEntry = targetStatistics.subresourceUniqueRedirectsFrom.add(sourcePrimaryDomain).isNewEntry;
+
+ if (isNewRedirectToEntry || isNewRedirectFromEntry)
+ scheduleStatisticsProcessingRequestIfNecessary();
+}
+
void ResourceLoadStatisticsMemoryStore::logUserInteraction(const String& primaryDomain)
{
ASSERT(!RunLoop::isMain());
Modified: trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h 2019-01-25 20:52:11 UTC (rev 240498)
@@ -124,6 +124,8 @@
void logFrameNavigation(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, const String& sourcePrimaryDomain, const String& targetHost, const String& mainFrameHost, bool isRedirect, bool isMainFrame);
void logUserInteraction(const String& primaryDomain);
+ void logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen);
+ void logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain);
void clearUserInteraction(const String& primaryDomain);
bool hasHadUserInteraction(const String& primaryDomain);
Modified: trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -252,6 +252,11 @@
});
}
+void WebResourceLoadStatisticsStore::requestUpdate()
+{
+ resourceLoadStatisticsUpdated({ });
+}
+
void WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated(Vector<WebCore::ResourceLoadStatistics>&& origins)
{
ASSERT(RunLoop::isMain());
@@ -417,12 +422,6 @@
});
}
-void WebResourceLoadStatisticsStore::removeAllStorageAccess()
-{
- if (m_networkSession)
- m_networkSession->networkStorageSession().removeAllStorageAccess();
-}
-
void WebResourceLoadStatisticsStore::removeAllStorageAccess(CompletionHandler<void()>&& completionHandler)
{
ASSERT(RunLoop::isMain());
@@ -431,7 +430,10 @@
m_websiteDataStore->removeAllStorageAccessHandler(WTFMove(completionHandler));
return;
}
- removeAllStorageAccess();
+
+ if (m_networkSession)
+ m_networkSession->networkStorageSession().removeAllStorageAccess();
+
completionHandler();
}
@@ -504,6 +506,36 @@
});
}
+void WebResourceLoadStatisticsStore::logWebSocketLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&& completionHandler)
+{
+ postTask([this, targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), lastSeen, completionHandler = WTFMove(completionHandler)]() mutable {
+ if (m_memoryStore)
+ m_memoryStore->logSubresourceLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
+
+ postTaskReply(WTFMove(completionHandler));
+ });
+}
+
+void WebResourceLoadStatisticsStore::logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&& completionHandler)
+{
+ postTask([this, targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), lastSeen, completionHandler = WTFMove(completionHandler)]() mutable {
+ if (m_memoryStore)
+ m_memoryStore->logSubresourceLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
+
+ postTaskReply(WTFMove(completionHandler));
+ });
+}
+
+void WebResourceLoadStatisticsStore::logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain, CompletionHandler<void()>&& completionHandler)
+{
+ postTask([this, sourcePrimaryDomain = sourcePrimaryDomain.isolatedCopy(), targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), completionHandler = WTFMove(completionHandler)]() mutable {
+ if (m_memoryStore)
+ m_memoryStore->logSubresourceRedirect(sourcePrimaryDomain, targetPrimaryDomain);
+
+ postTaskReply(WTFMove(completionHandler));
+ });
+}
+
void WebResourceLoadStatisticsStore::logUserInteraction(const URL& url, CompletionHandler<void()>&& completionHandler)
{
ASSERT(RunLoop::isMain());
@@ -1080,12 +1112,6 @@
});
}
-void WebResourceLoadStatisticsStore::setCacheMaxAgeCapForPrevalentResources(Seconds seconds)
-{
- if (m_networkSession)
- m_networkSession->networkStorageSession().setCacheMaxAgeCapForPrevalentResources(seconds);
-}
-
void WebResourceLoadStatisticsStore::setCacheMaxAgeCap(Seconds seconds, CompletionHandler<void()>&& completionHandler)
{
ASSERT(RunLoop::isMain());
@@ -1095,14 +1121,11 @@
m_websiteDataStore->setCacheMaxAgeCapForPrevalentResources(seconds, WTFMove(completionHandler));
return;
}
- setCacheMaxAgeCapForPrevalentResources(seconds);
- completionHandler();
-}
-void WebResourceLoadStatisticsStore::updatePrevalentDomainsToBlockCookiesFor(const Vector<String>& domainsToBlock)
-{
if (m_networkSession)
- m_networkSession->networkStorageSession().setPrevalentDomainsToBlockCookiesFor(domainsToBlock);
+ m_networkSession->networkStorageSession().setCacheMaxAgeCapForPrevalentResources(seconds);
+
+ completionHandler();
}
void WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler(const Vector<String>& domainsToBlock, CompletionHandler<void()>&& completionHandler)
@@ -1113,7 +1136,10 @@
m_websiteDataStore->updatePrevalentDomainsToBlockCookiesFor(domainsToBlock, WTFMove(completionHandler));
return;
}
- updatePrevalentDomainsToBlockCookiesFor(domainsToBlock);
+
+ if (m_networkSession)
+ m_networkSession->networkStorageSession().setPrevalentDomainsToBlockCookiesFor(domainsToBlock);
+
completionHandler();
}
@@ -1175,7 +1201,9 @@
m_websiteDataStore->logTestingEvent(event);
return;
}
- // FIXME(193297): Send message to UIProcess
+
+ if (m_networkSession)
+ m_networkSession->networkProcess().parentProcessConnection()->send(Messages::NetworkProcessProxy::LogTestingEvent(m_networkSession->sessionID(), event), 0);
}
void WebResourceLoadStatisticsStore::notifyResourceLoadStatisticsProcessed()
Modified: trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h 2019-01-25 20:52:11 UTC (rev 240498)
@@ -91,6 +91,9 @@
void logFrameNavigation(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, const String& sourcePrimaryDomain, const String& targetHost, const String& mainFrameHost, bool isRedirect, bool isMainFrame);
void logUserInteraction(const URL&, CompletionHandler<void()>&&);
void logUserInteraction(const String& targetPrimaryDomain, CompletionHandler<void()>&&);
+ void logWebSocketLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&&);
+ void logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&&);
+ void logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain, CompletionHandler<void()>&&);
void clearUserInteraction(const URL&, CompletionHandler<void()>&&);
void clearUserInteraction(const String& targetPrimaryDomain, CompletionHandler<void()>&&);
void deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores(OptionSet<WebsiteDataType>, Vector<String>&& topPrivatelyControlledDomains, bool shouldNotifyPage, CompletionHandler<void(const HashSet<String>&)>&&);
@@ -101,6 +104,7 @@
void hasStorageAccess(const String& subFrameHost, const String& topFrameHost, Optional<uint64_t> frameID, uint64_t pageID, CompletionHandler<void(bool)>&& callback);
bool hasStorageAccessForFrame(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID);
void requestStorageAccess(const String& resourceDomain, const String& firstPartyDomain, Optional<uint64_t> frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&&);
+ void requestUpdate();
void setLastSeen(const URL&, Seconds, CompletionHandler<void()>&&);
void setLastSeen(const String& resourceDomain, Seconds, CompletionHandler<void()>&&);
void setPrevalentResource(const URL&, CompletionHandler<void()>&&);
@@ -124,9 +128,7 @@
void setGrandfathered(const String&, bool, CompletionHandler<void()>&&);
void isGrandfathered(const URL&, CompletionHandler<void(bool)>&&);
void isGrandfathered(const String&, CompletionHandler<void(bool)>&&);
- void removeAllStorageAccess();
void removePrevalentDomains(const Vector<String>& domainsToBlock);
- void setCacheMaxAgeCapForPrevalentResources(Seconds);
void setNotifyPagesWhenDataRecordsWereScanned(bool, CompletionHandler<void()>&&);
void setSubframeUnderTopFrameOrigin(const URL& subframe, const URL& topFrame, CompletionHandler<void()>&&);
void setSubframeUnderTopFrameOrigin(const String& subframe, const String& topFrame, CompletionHandler<void()>&&);
@@ -145,7 +147,6 @@
void scheduleClearBlockingStateForDomains(const Vector<String>& domains, CompletionHandler<void()>&&);
void scheduleStatisticsAndDataRecordsProcessing(CompletionHandler<void()>&&);
void submitTelemetry(CompletionHandler<void()>&&);
- void updatePrevalentDomainsToBlockCookiesFor(const Vector<String>& domainsToBlock);
void scheduleClearInMemoryAndPersistent(ShouldGrandfatherStatistics, CompletionHandler<void()>&&);
void scheduleClearInMemoryAndPersistent(WallTime modifiedSince, ShouldGrandfatherStatistics, CompletionHandler<void()>&&);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -595,6 +595,65 @@
#endif
}
+void NetworkConnectionToWebProcess::logWebSocketLoading(PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen)
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ if (auto networkSession = networkProcess().networkSession(sessionID)) {
+ if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
+ resourceLoadStatistics->logWebSocketLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen, [] { });
+ }
+#else
+ UNUSED_PARAM(sessionID);
+ UNUSED_PARAM(targetPrimaryDomain);
+ UNUSED_PARAM(mainFramePrimaryDomain);
+ UNUSED_PARAM(lastSeen);
+#endif
+}
+
+void NetworkConnectionToWebProcess::logSubresourceLoading(PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen)
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ if (auto networkSession = networkProcess().networkSession(sessionID)) {
+ if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
+ resourceLoadStatistics->logSubresourceLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen, [] { });
+ }
+#else
+ UNUSED_PARAM(sessionID);
+ UNUSED_PARAM(targetPrimaryDomain);
+ UNUSED_PARAM(mainFramePrimaryDomain);
+ UNUSED_PARAM(lastSeen);
+#endif
+}
+
+void NetworkConnectionToWebProcess::logSubresourceRedirect(PAL::SessionID sessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain)
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ if (auto networkSession = networkProcess().networkSession(sessionID)) {
+ if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
+ resourceLoadStatistics->logSubresourceRedirect(sourcePrimaryDomain, targetPrimaryDomain, [] { });
+ }
+#else
+ UNUSED_PARAM(sessionID);
+ UNUSED_PARAM(sourcePrimaryDomain);
+ UNUSED_PARAM(targetPrimaryDomain);
+#endif
+}
+
+void NetworkConnectionToWebProcess::requestResourceLoadStatisticsUpdate()
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ for (auto& networkSession : networkProcess().networkSessions().values()) {
+ if (networkSession->sessionID().isEphemeral())
+ continue;
+
+ if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
+ resourceLoadStatistics->requestUpdate();
+ }
+#else
+ UNUSED_PARAM(sessionID);
+#endif
+}
+
void NetworkConnectionToWebProcess::addOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains)
{
SecurityPolicy::addOriginAccessWhitelistEntry(SecurityOrigin::createFromString(sourceOrigin).get(), destinationProtocol, destinationHost, allowDestinationSubdomains);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-01-25 20:52:11 UTC (rev 240498)
@@ -195,6 +195,10 @@
void removeStorageAccessForFrame(PAL::SessionID, uint64_t frameID, uint64_t pageID);
void removeStorageAccessForAllFramesOnPage(PAL::SessionID, uint64_t pageID);
void logUserInteraction(PAL::SessionID, const String& topLevelOrigin);
+ void logWebSocketLoading(PAL::SessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen);
+ void logSubresourceLoading(PAL::SessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen);
+ void logSubresourceRedirect(PAL::SessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain);
+ void requestResourceLoadStatisticsUpdate();
void addOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains);
void removeOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-01-25 20:52:11 UTC (rev 240498)
@@ -60,6 +60,10 @@
RemoveStorageAccessForAllFramesOnPage(PAL::SessionID sessionID, uint64_t pageID);
#if ENABLE(RESOURCE_LOAD_STATISTICS)
LogUserInteraction(PAL::SessionID sessionID, String topLevelOrigin)
+ LogWebSocketLoading(PAL::SessionID sessionID, String targetPrimaryDomain, String mainFramePrimaryDomain, WallTime lastSeen)
+ LogSubresourceLoading(PAL::SessionID sessionID, String targetPrimaryDomain, String mainFramePrimaryDomain, WallTime lastSeen)
+ LogSubresourceRedirect(PAL::SessionID sessionID, String sourcePrimaryDomain, String targetPrimaryDomain)
+ RequestResourceLoadStatisticsUpdate();
#endif
AddOriginAccessWhitelistEntry(String sourceOrigin, String destinationProtocol, String destinationHost, bool allowDestinationSubdomains);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1327,9 +1327,6 @@
swServerForSession(sessionID).clearAll([clearTasksHandler = clearTasksHandler.copyRef()] { });
#endif
- if (websiteDataTypes.contains(WebsiteDataType::DiskCache) && !sessionID.isEphemeral())
- clearDiskCache(modifiedSince, [clearTasksHandler = WTFMove(clearTasksHandler)] { });
-
#if ENABLE(RESOURCE_LOAD_STATISTICS)
if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) {
if (auto* networkSession = this->networkSession(sessionID)) {
@@ -1336,16 +1333,19 @@
if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) {
auto deletedTypesRaw = websiteDataTypes.toRaw();
auto monitoredTypesRaw = WebResourceLoadStatisticsStore::monitoredDataTypes().toRaw();
-
+
// If we are deleting all of the data types that the resource load statistics store monitors
// we do not need to re-grandfather old data.
auto shouldGrandfather = ((monitoredTypesRaw & deletedTypesRaw) == monitoredTypesRaw) ? ShouldGrandfatherStatistics::No : ShouldGrandfatherStatistics::Yes;
-
+
resourceLoadStatistics->scheduleClearInMemoryAndPersistent(modifiedSince, shouldGrandfather, [clearTasksHandler = clearTasksHandler.copyRef()] { });
}
}
}
#endif
+
+ if (websiteDataTypes.contains(WebsiteDataType::DiskCache) && !sessionID.isEphemeral())
+ clearDiskCache(modifiedSince, [clearTasksHandler = WTFMove(clearTasksHandler)] { });
}
static void clearDiskCacheEntries(NetworkCache::Cache* cache, const Vector<SecurityOriginData>& origins, CompletionHandler<void()>&& completionHandler)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-01-25 20:52:11 UTC (rev 240498)
@@ -137,7 +137,10 @@
void setSession(const PAL::SessionID&, Ref<NetworkSession>&&);
NetworkSession* networkSession(const PAL::SessionID&) const override;
void destroySession(const PAL::SessionID&);
-
+
+ // Needed for test infrastructure
+ HashMap<PAL::SessionID, Ref<NetworkSession>>& networkSessions() { return m_networkSessions; }
+
void forEachNetworkStorageSession(const Function<void(WebCore::NetworkStorageSession&)>&);
WebCore::NetworkStorageSession* storageSession(const PAL::SessionID&) const;
WebCore::NetworkStorageSession& defaultStorageSession() const;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (240497 => 240498)
--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -92,6 +92,10 @@
if (m_resourceLoadStatistics)
return;
+ // FIXME(193728): Support ResourceLoadStatistics for ephemeral sessions, too.
+ if (m_sessionID.isEphemeral())
+ return;
+
m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(*this, m_resourceLoadStatisticsDirectory);
}
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (240497 => 240498)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -877,6 +877,12 @@
sendWithAsyncReply(Messages::NetworkProcess::ScheduleClearInMemoryAndPersistent(sessionID, { }, shouldGrandfather), WTFMove(completionHandler));
}
+void NetworkProcessProxy::logTestingEvent(PAL::SessionID sessionID, const String& event)
+{
+ if (auto* websiteDataStore = websiteDataStoreFromSessionID(sessionID))
+ websiteDataStore->logTestingEvent(event);
+}
+
void NetworkProcessProxy::notifyResourceLoadStatisticsProcessed()
{
WebProcessProxy::notifyPageStatisticsAndDataRecordsProcessed();
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (240497 => 240498)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2019-01-25 20:52:11 UTC (rev 240498)
@@ -185,6 +185,7 @@
void logDiagnosticMessageWithValue(uint64_t pageID, const String& message, const String& description, double value, unsigned significantFigures, WebCore::ShouldSample);
void logGlobalDiagnosticMessageWithValue(const String& message, const String& description, double value, unsigned significantFigures, WebCore::ShouldSample);
#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ void logTestingEvent(PAL::SessionID, const String& event);
void notifyResourceLoadStatisticsProcessed();
void notifyWebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished();
void notifyWebsiteDataScanForTopPrivatelyControlledDomainsFinished();
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (240497 => 240498)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2019-01-25 20:52:11 UTC (rev 240498)
@@ -41,6 +41,7 @@
LogGlobalDiagnosticMessageWithValue(String message, String description, double value, unsigned significantFigures, enum:bool WebCore::ShouldSample shouldSample)
#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ LogTestingEvent(PAL::SessionID sessionID, String event)
NotifyResourceLoadStatisticsProcessed()
NotifyWebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished()
NotifyWebsiteDataScanForTopPrivatelyControlledDomainsFinished()
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (240497 => 240498)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -555,8 +555,14 @@
SandboxExtension::createHandleForReadWriteDirectory(parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsDirectory, parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsDirectoryExtensionHandle);
- parameters.defaultDataStoreParameters.networkSessionParameters.enableResourceLoadStatistics = false; // FIXME(193297): Turn on when the feature is on. (m_configuration->resourceLoadStatisticsEnabled()?)
+ bool enableResourceLoadStatistics = false;
+ if (withWebsiteDataStore)
+ enableResourceLoadStatistics = withWebsiteDataStore->resourceLoadStatisticsEnabled();
+ else if (m_websiteDataStore)
+ enableResourceLoadStatistics = m_websiteDataStore->resourceLoadStatisticsEnabled();
+ parameters.defaultDataStoreParameters.networkSessionParameters.enableResourceLoadStatistics = enableResourceLoadStatistics;
+
// Add any platform specific parameters
platformInitializeNetworkProcess(parameters);
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (240497 => 240498)
--- trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm 2019-01-25 20:52:11 UTC (rev 240498)
@@ -102,7 +102,7 @@
WTFMove(httpsProxy),
WTFMove(resourceLoadStatisticsDirectory),
WTFMove(resourceLoadStatisticsDirectoryHandle),
- false // FIXME(193297): Switch to m_configuration->resourceLoadStatisticsEnabled()
+ false
};
auto cookieFile = resolvedCookieStorageFile();
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (240497 => 240498)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1252,15 +1252,12 @@
// If we are deleting all of the data types that the resource load statistics store monitors
// we do not need to re-grandfather old data.
+ auto shouldGrandfather = ((monitoredTypesRaw & deletedTypesRaw) == monitoredTypesRaw) ? ShouldGrandfatherStatistics::No : ShouldGrandfatherStatistics::Yes;
+
callbackAggregator->addPendingCallback();
- if ((monitoredTypesRaw & deletedTypesRaw) == monitoredTypesRaw)
- m_resourceLoadStatistics->scheduleClearInMemoryAndPersistent(ShouldGrandfatherStatistics::No, [callbackAggregator] {
- callbackAggregator->removePendingCallback();
- });
- else
- m_resourceLoadStatistics->scheduleClearInMemoryAndPersistent(ShouldGrandfatherStatistics::Yes, [callbackAggregator] {
- callbackAggregator->removePendingCallback();
- });
+ m_resourceLoadStatistics->scheduleClearInMemoryAndPersistent(shouldGrandfather, [callbackAggregator] {
+ callbackAggregator->removePendingCallback();
+ });
callbackAggregator->addPendingCallback();
clearResourceLoadStatisticsInWebProcesses([callbackAggregator] {
@@ -2325,16 +2322,10 @@
return;
if (enabled) {
- // FIXME(193297): Remove this assert
- ASSERT(!m_resourceLoadStatistics);
enableResourceLoadStatisticsAndSetTestingCallback(nullptr);
return;
}
- // FIXME(193297): Remove these two lines
- unregisterWebResourceLoadStatisticsStoreAsMessageReceiver();
- m_resourceLoadStatistics = nullptr;
-
for (auto& processPool : processPools(std::numeric_limits<size_t>::max(), false)) {
processPool->setResourceLoadStatisticsEnabled(false);
processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(false));
@@ -2395,16 +2386,8 @@
m_resourceLoadStatisticsEnabled = true;
setStatisticsTestingCallback(WTFMove(callback));
- // FIXME(193297): Remove this check
- if (m_resourceLoadStatistics)
- return;
-
resolveDirectoriesIfNecessary();
- // FIXME(193297): Remove these two lines
- m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(*this);
- registerWebResourceLoadStatisticsStoreAsMessageReceiver();
-
for (auto& processPool : processPools(std::numeric_limits<size_t>::max(), false)) {
processPool->setResourceLoadStatisticsEnabled(true);
processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(true));
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (240497 => 240498)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -207,6 +207,8 @@
#if ENABLE(RESOURCE_LOAD_STATISTICS)
ResourceLoadObserver::shared().setNotificationCallback([this] (Vector<ResourceLoadStatistics>&& statistics) {
parentProcessConnection()->send(Messages::WebResourceLoadStatisticsStore::ResourceLoadStatisticsUpdated(WTFMove(statistics)), 0);
+
+ m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::RequestResourceLoadStatisticsUpdate(), 0);
});
ResourceLoadObserver::shared().setRequestStorageAccessUnderOpenerCallback([this] (const String& domainInNeedOfStorageAccess, uint64_t openerPageID, const String& openerDomain) {
@@ -388,6 +390,18 @@
ResourceLoadObserver::shared().setLogUserInteractionNotificationCallback([this] (PAL::SessionID sessionID, const String& topLevelOrigin) {
m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogUserInteraction(sessionID, topLevelOrigin), 0);
});
+
+ ResourceLoadObserver::shared().setLogWebSocketLoadingNotificationCallback([this] (PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen) {
+ m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogWebSocketLoading(sessionID, targetPrimaryDomain, mainFramePrimaryDomain, lastSeen), 0);
+ });
+
+ ResourceLoadObserver::shared().setLogSubresourceLoadingNotificationCallback([this] (PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen) {
+ m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceLoading(sessionID, targetPrimaryDomain, mainFramePrimaryDomain, lastSeen), 0);
+ });
+
+ ResourceLoadObserver::shared().setLogSubresourceRedirectNotificationCallback([this] (PAL::SessionID sessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain) {
+ m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceRedirect(sessionID, sourcePrimaryDomain, targetPrimaryDomain), 0);
+ });
#endif
setTerminationTimeout(parameters.terminationTimeout);
Modified: trunk/Tools/ChangeLog (240497 => 240498)
--- trunk/Tools/ChangeLog 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Tools/ChangeLog 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1,3 +1,17 @@
+2019-01-25 Brent Fulgham <[email protected]>
+
+ Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
+ https://bugs.webkit.org/show_bug.cgi?id=193297
+ <rdar://problem/47158841>
+
+ Reviewed by Alex Christensen.
+
+ * TestWebKitAPI/Tests/WebKit Cocoa/ResourceLoadStatistics.mm:
+ Revise tests to ensure a running NetworkProcess before attempting ResourceLoadStatistics operations.
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
+ activating the message used to trigger the callback when it is set.
+
2019-01-25 Alex Christensen <[email protected]>
WKWebView.goBack should reload if there is a safe browsing warning
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm (240497 => 240498)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm 2019-01-25 20:52:11 UTC (rev 240498)
@@ -57,6 +57,9 @@
TEST(ResourceLoadStatistics, GrandfatherCallback)
{
+ // We need an active NetworkProcess to perform ResourceLoadStatistics operations.
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
+
auto *dataStore = [WKWebsiteDataStore defaultDataStore];
[dataStore _setResourceLoadStatisticsEnabled:NO];
@@ -118,6 +121,9 @@
TEST(ResourceLoadStatistics, ShouldNotGrandfatherOnStartup)
{
+ // We need an active NetworkProcess to perform ResourceLoadStatistics operations.
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
+
auto *dataStore = [WKWebsiteDataStore defaultDataStore];
[dataStore _setResourceLoadStatisticsEnabled:NO];
@@ -146,6 +152,9 @@
EXPECT_EQ((size_t)0, [sharedProcessPool _pluginProcessCount]);
+ // We need an active NetworkProcess to perform ResourceLoadStatistics operations.
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
+
auto *dataStore = [WKWebsiteDataStore defaultDataStore];
[dataStore _setResourceLoadStatisticsEnabled:NO];
@@ -168,6 +177,8 @@
EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:targetURL.path]);
+ webView.clear();
+
EXPECT_EQ((size_t)0, [sharedProcessPool _pluginProcessCount]);
}
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (240497 => 240498)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2019-01-25 20:45:04 UTC (rev 240497)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2019-01-25 20:52:11 UTC (rev 240498)
@@ -1860,6 +1860,13 @@
void TestRunner::installStatisticsDidScanDataRecordsCallback(JSValueRef callback)
{
cacheTestRunnerCallback(StatisticsDidScanDataRecordsCallbackID, callback);
+
+ bool notifyPagesWhenDataRecordsWereScanned = !!callback;
+
+ // Setting a callback implies we expect to receive callbacks. So register for them.
+ WKRetainPtr<WKStringRef> messageName(AdoptWK, WKStringCreateWithUTF8CString("StatisticsNotifyPagesWhenDataRecordsWereScanned"));
+ WKRetainPtr<WKBooleanRef> messageBody(AdoptWK, WKBooleanCreate(notifyPagesWhenDataRecordsWereScanned));
+ WKBundlePostSynchronousMessage(InjectedBundle::singleton().bundle(), messageName.get(), messageBody.get(), nullptr);
}
void TestRunner::statisticsDidScanDataRecordsCallback()