Changeset 240446 in webkit


Ignore:
Timestamp:
Jan 24, 2019 1:09:37 PM (5 years ago)
Author:
Brent Fulgham
Message:

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.

Source/WebCore:

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.

Source/WebKit:

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.

Tools:

  • WebKitTestRunner/InjectedBundle/TestRunner.cpp:

(WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
activating the message used to trigger the callback when it is set.

Location:
trunk
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r240444 r240446  
     12019-01-24  Brent Fulgham  <bfulgham@apple.com>
     2
     3        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
     4        https://bugs.webkit.org/show_bug.cgi?id=193297
     5        <rdar://problem/47158841>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Trigger logging to the UIProcess when the ResourceLoadObserver is used in the NetworkProcess.
     10
     11        * Modules/websockets/WebSocket.cpp:
     12        (WebCore::WebSocket::connect): Notify NetworkProcess a connection was made to a resource.
     13        * loader/ResourceLoadObserver.cpp:
     14        (WebCore::ResourceLoadObserver::setLogWebSocketLoadingNotificationCallback): Added.
     15        (WebCore::ResourceLoadObserver::setLogSubresourceLoadingNotificationCallback): Added.
     16        (WebCore::ResourceLoadObserver::setLogSubresourceRedirectNotificationCallback): Added.
     17        (WebCore::ResourceLoadObserver::logSubresourceLoading): Notify NetworkProcess of the load.
     18        (WebCore::ResourceLoadObserver::logWebSocketLoading): Ditto.
     19        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution): Ditto.
     20
    1212019-01-24  John Wilander  <wilander@apple.com>
    222
  • trunk/Source/WebCore/Modules/websockets/WebSocket.cpp

    r240237 r240446  
    280280    }
    281281
    282     RunLoop::main().dispatch([targetURL = m_url.isolatedCopy(), mainFrameURL = context.url().isolatedCopy(), usesEphemeralSession = context.sessionID().isEphemeral()]() {
    283         ResourceLoadObserver::shared().logWebSocketLoading(targetURL, mainFrameURL, usesEphemeralSession);
     282    RunLoop::main().dispatch([targetURL = m_url.isolatedCopy(), mainFrameURL = context.url().isolatedCopy(), sessionID = context.sessionID()]() {
     283        ResourceLoadObserver::shared().logWebSocketLoading(targetURL, mainFrameURL, sessionID);
    284284    });
    285285
  • trunk/Source/WebCore/loader/ResourceLoadObserver.cpp

    r240243 r240446  
    11/*
    2  * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    7676}
    7777
     78void ResourceLoadObserver::setLogWebSocketLoadingNotificationCallback(WTF::Function<void(PAL::SessionID, const String&, const String&, WallTime)>&& callback)
     79{
     80    ASSERT(!m_logWebSocketLoadingNotificationCallback);
     81    m_logWebSocketLoadingNotificationCallback = WTFMove(callback);
     82}
     83
     84void ResourceLoadObserver::setLogSubresourceLoadingNotificationCallback(WTF::Function<void(PAL::SessionID, const String&, const String&, WallTime)>&& callback)
     85{
     86    ASSERT(!m_logSubresourceLoadingNotificationCallback);
     87    m_logSubresourceLoadingNotificationCallback = WTFMove(callback);
     88}
     89
     90void ResourceLoadObserver::setLogSubresourceRedirectNotificationCallback(WTF::Function<void(PAL::SessionID, const String&, const String&)>&& callback)
     91{
     92    ASSERT(!m_logSubresourceRedirectNotificationCallback);
     93    m_logSubresourceRedirectNotificationCallback = WTFMove(callback);
     94}
     95   
    7896ResourceLoadObserver::ResourceLoadObserver()
    7997    : m_notificationTimer(*this, &ResourceLoadObserver::notifyObserver)
     
    123141    {
    124142        auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
    125         targetStatistics.lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
     143        auto lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
     144        targetStatistics.lastSeen = lastSeen;
    126145        if (targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain).isNewEntry)
    127146            shouldCallNotificationCallback = true;
     147
     148        m_logSubresourceLoadingNotificationCallback(page->sessionID(), targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
    128149    }
    129150
     
    136157        if (isNewRedirectToEntry || isNewRedirectFromEntry)
    137158            shouldCallNotificationCallback = true;
     159
     160        m_logSubresourceRedirectNotificationCallback(page->sessionID(), sourcePrimaryDomain, targetPrimaryDomain);
    138161    }
    139162
     
    142165}
    143166
    144 void ResourceLoadObserver::logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, bool usesEphemeralSession)
    145 {
    146     if (!shouldLog(usesEphemeralSession))
     167void ResourceLoadObserver::logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, PAL::SessionID sessionID)
     168{
     169    if (!shouldLog(sessionID.isEphemeral()))
    147170        return;
    148171
     
    159182        return;
    160183
     184    auto lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
     185
    161186    auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
    162     targetStatistics.lastSeen = ResourceLoadStatistics::reduceTimeResolution(WallTime::now());
     187    targetStatistics.lastSeen = lastSeen;
    163188    if (targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain).isNewEntry)
    164189        scheduleNotificationIfNeeded();
     190
     191    m_logWebSocketLoadingNotificationCallback(sessionID, targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
    165192}
    166193
     
    198225    }
    199226
    200     // FIXME(193297): Uncomment this line when ResourceLoadStatistics are no longer gathered in the UI Process.
    201     // m_logUserInteractionNotificationCallback(document.sessionID(), domain);
     227    m_logUserInteractionNotificationCallback(document.sessionID(), domain);
    202228#endif
    203229
  • trunk/Source/WebCore/loader/ResourceLoadObserver.h

    r240243 r240446  
    11/*
    2  * Copyright (C) 2016-2017 Apple Inc.  All rights reserved.
     2 * Copyright (C) 2016-2019 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    6161
    6262    void logSubresourceLoading(const Frame*, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse);
    63     void logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, bool usesEphemeralSession);
     63    void logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL, PAL::SessionID);
    6464    void logUserInteractionWithReducedTimeResolution(const Document&);
    6565   
     
    7575    WEBCORE_EXPORT void setRequestStorageAccessUnderOpenerCallback(WTF::Function<void(const String&, uint64_t, const String&)>&&);
    7676    WEBCORE_EXPORT void setLogUserInteractionNotificationCallback(WTF::Function<void(PAL::SessionID, const String&)>&&);
     77    WEBCORE_EXPORT void setLogWebSocketLoadingNotificationCallback(WTF::Function<void(PAL::SessionID, const String&, const String&, WallTime)>&&);
     78    WEBCORE_EXPORT void setLogSubresourceLoadingNotificationCallback(WTF::Function<void(PAL::SessionID, const String&, const String&, WallTime)>&&);
     79    WEBCORE_EXPORT void setLogSubresourceRedirectNotificationCallback(WTF::Function<void(PAL::SessionID, const String&, const String&)>&&);
    7780
    7881    WEBCORE_EXPORT void notifyObserver();
     
    99102    HashMap<String, ResourceLoadStatistics> m_resourceStatisticsMap;
    100103    HashMap<String, WTF::WallTime> m_lastReportedUserInteractionMap;
    101     WTF::Function<void (Vector<ResourceLoadStatistics>&&)> m_notificationCallback;
    102     WTF::Function<void(const String&, uint64_t, const String&)> m_requestStorageAccessUnderOpenerCallback;
    103     WTF::Function<void(PAL::SessionID, const String&)> m_logUserInteractionNotificationCallback;
     104    Function<void(Vector<ResourceLoadStatistics>&&)> m_notificationCallback;
     105    Function<void(const String&, uint64_t, const String&)> m_requestStorageAccessUnderOpenerCallback;
     106    Function<void(PAL::SessionID, const String&)> m_logUserInteractionNotificationCallback;
     107    Function<void(PAL::SessionID, const String&, const String&, WallTime)> m_logWebSocketLoadingNotificationCallback;
     108    Function<void(PAL::SessionID, const String&, const String&, WallTime)> m_logSubresourceLoadingNotificationCallback;
     109    Function<void(PAL::SessionID, const String&, const String&)> m_logSubresourceRedirectNotificationCallback;
     110
    104111    Timer m_notificationTimer;
    105112#if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED
  • trunk/Source/WebKit/ChangeLog

    r240444 r240446  
     12019-01-24  Brent Fulgham  <bfulgham@apple.com>
     2
     3        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
     4        https://bugs.webkit.org/show_bug.cgi?id=193297
     5        <rdar://problem/47158841>
     6
     7        Reviewed by Alex Christensen.
     8
     9        This patch activates the ResourceLoadStatistics code in the NetworkProcess, and turns
     10        it off in the UIProcess. It also updates test infrastructure to work with this change
     11        in architecture.
     12
     13        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
     14        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceLoading): Added.
     15        (WebKit::ResourceLoadStatisticsMemoryStore::logSubresourceRedirect): Added.
     16        (WebKit::ResourceLoadStatisticsMemoryStore::logWebSocketLoading): Added.
     17        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
     18        (WebKit::WebResourceLoadStatisticsStore::logSubresourceLoading): Added.
     19        (WebKit::WebResourceLoadStatisticsStore::logSubresourceRedirect): Added.
     20        (WebKit::WebResourceLoadStatisticsStore::logWebSocketLoading): Added.
     21        (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess):
     22        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCap):
     23        (WebKit::WebResourceLoadStatisticsStore::setCacheMaxAgeCapForPrevalentResources): Deleted.
     24        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
     25        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     26        (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading): Added.
     27        (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect): Added.
     28        (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading): Added.
     29        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
     30        * NetworkProcess/NetworkSession.cpp:
     31        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
     32        * UIProcess/WebProcessPool.cpp:
     33        (WebKit::WebProcessPool::ensureNetworkProcess):
     34        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     35        (WebKit::WebsiteDataStore::parameters):
     36        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     37        (WebKit::WebsiteDataStore::removeData):
     38        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
     39        (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback):
     40        * Webprocess/WebProcess.cpp:
     41        (WebKit::WebProcess::initializeWebProcess): Register new ResourceLoadObserver callbacks.
     42
    1432019-01-24  John Wilander  <wilander@apple.com>
    244
  • trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp

    r240360 r240446  
    639639}
    640640
     641void ResourceLoadStatisticsMemoryStore::logWebSocketLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen)
     642{
     643    auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
     644    targetStatistics.lastSeen = lastSeen;
     645    if (targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain).isNewEntry)
     646        scheduleStatisticsProcessingRequestIfNecessary();
     647}
     648
     649void ResourceLoadStatisticsMemoryStore::logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen)
     650{
     651    auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
     652    targetStatistics.lastSeen = lastSeen;
     653    if (targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain).isNewEntry)
     654        scheduleStatisticsProcessingRequestIfNecessary();
     655}
     656
     657void ResourceLoadStatisticsMemoryStore::logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain)
     658{
     659    auto& redirectingOriginStatistics = ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);
     660    bool isNewRedirectToEntry = redirectingOriginStatistics.subresourceUniqueRedirectsTo.add(targetPrimaryDomain).isNewEntry;
     661    auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
     662    bool isNewRedirectFromEntry = targetStatistics.subresourceUniqueRedirectsFrom.add(sourcePrimaryDomain).isNewEntry;
     663   
     664    if (isNewRedirectToEntry || isNewRedirectFromEntry)
     665        scheduleStatisticsProcessingRequestIfNecessary();
     666}
     667
    641668void ResourceLoadStatisticsMemoryStore::logUserInteraction(const String& primaryDomain)
    642669{
  • trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h

    r240243 r240446  
    125125    void logFrameNavigation(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, const String& sourcePrimaryDomain, const String& targetHost, const String& mainFrameHost, bool isRedirect, bool isMainFrame);
    126126    void logUserInteraction(const String& primaryDomain);
     127    void logWebSocketLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen);
     128    void logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen);
     129    void logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain);
    127130
    128131    void clearUserInteraction(const String& primaryDomain);
  • trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp

    r240360 r240446  
    418418}
    419419
    420 void WebResourceLoadStatisticsStore::removeAllStorageAccess()
    421 {
     420void WebResourceLoadStatisticsStore::removeAllStorageAccess(CompletionHandler<void()>&& completionHandler)
     421{
     422    ASSERT(RunLoop::isMain());
     423
     424    if (m_websiteDataStore) {
     425        m_websiteDataStore->removeAllStorageAccessHandler(WTFMove(completionHandler));
     426        return;
     427    }
     428
    422429    if (m_networkSession)
    423430        m_networkSession->networkStorageSession().removeAllStorageAccess();
    424 }
    425 
    426 void WebResourceLoadStatisticsStore::removeAllStorageAccess(CompletionHandler<void()>&& completionHandler)
    427 {
    428     ASSERT(RunLoop::isMain());
    429 
    430     if (m_websiteDataStore) {
    431         m_websiteDataStore->removeAllStorageAccessHandler(WTFMove(completionHandler));
    432         return;
    433     }
    434     removeAllStorageAccess();
     431
    435432    completionHandler();
    436433}
     
    502499        if (m_memoryStore)
    503500            m_memoryStore->logFrameNavigation(targetPrimaryDomain, mainFramePrimaryDomain, sourcePrimaryDomain, targetHost, mainFrameHost, isRedirect, isMainFrame);
     501    });
     502}
     503
     504void WebResourceLoadStatisticsStore::logWebSocketLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&& completionHandler)
     505{
     506    postTask([this, targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), lastSeen, completionHandler = WTFMove(completionHandler)]() mutable {
     507        if (m_memoryStore)
     508            m_memoryStore->logWebSocketLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
     509
     510        postTaskReply(WTFMove(completionHandler));
     511    });
     512}
     513
     514void WebResourceLoadStatisticsStore::logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&& completionHandler)
     515{
     516    postTask([this, targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), lastSeen, completionHandler = WTFMove(completionHandler)]() mutable {
     517        if (m_memoryStore)
     518            m_memoryStore->logSubresourceLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen);
     519       
     520        postTaskReply(WTFMove(completionHandler));
     521    });
     522}
     523
     524void WebResourceLoadStatisticsStore::logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain, CompletionHandler<void()>&& completionHandler)
     525{
     526    postTask([this, sourcePrimaryDomain = sourcePrimaryDomain.isolatedCopy(), targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), completionHandler = WTFMove(completionHandler)]() mutable {
     527        if (m_memoryStore)
     528            m_memoryStore->logSubresourceRedirect(sourcePrimaryDomain, targetPrimaryDomain);
     529       
     530        postTaskReply(WTFMove(completionHandler));
    504531    });
    505532}
     
    10811108}
    10821109
    1083 void WebResourceLoadStatisticsStore::setCacheMaxAgeCapForPrevalentResources(Seconds seconds)
    1084 {
     1110void WebResourceLoadStatisticsStore::setCacheMaxAgeCap(Seconds seconds, CompletionHandler<void()>&& completionHandler)
     1111{
     1112    ASSERT(RunLoop::isMain());
     1113    ASSERT(seconds >= 0_s);
     1114   
     1115    if (m_websiteDataStore) {
     1116        m_websiteDataStore->setCacheMaxAgeCapForPrevalentResources(seconds, WTFMove(completionHandler));
     1117        return;
     1118    }
     1119
    10851120    if (m_networkSession)
    10861121        m_networkSession->networkStorageSession().setCacheMaxAgeCapForPrevalentResources(seconds);
    1087 }
    1088 
    1089 void WebResourceLoadStatisticsStore::setCacheMaxAgeCap(Seconds seconds, CompletionHandler<void()>&& completionHandler)
    1090 {
    1091     ASSERT(RunLoop::isMain());
    1092     ASSERT(seconds >= 0_s);
    1093    
    1094     if (m_websiteDataStore) {
    1095         m_websiteDataStore->setCacheMaxAgeCapForPrevalentResources(seconds, WTFMove(completionHandler));
    1096         return;
    1097     }
    1098     setCacheMaxAgeCapForPrevalentResources(seconds);
     1122
    10991123    completionHandler();
    11001124}
  • trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h

    r240360 r240446  
    9292    void logUserInteraction(const URL&, CompletionHandler<void()>&&);
    9393    void logUserInteraction(const String& targetPrimaryDomain, CompletionHandler<void()>&&);
     94    void logWebSocketLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&&);
     95    void logSubresourceLoading(const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen, CompletionHandler<void()>&&);
     96    void logSubresourceRedirect(const String& sourcePrimaryDomain, const String& targetPrimaryDomain, CompletionHandler<void()>&&);
    9497    void clearUserInteraction(const URL&, CompletionHandler<void()>&&);
    9598    void clearUserInteraction(const String& targetPrimaryDomain, CompletionHandler<void()>&&);
     
    125128    void isGrandfathered(const URL&, CompletionHandler<void(bool)>&&);
    126129    void isGrandfathered(const String&, CompletionHandler<void(bool)>&&);
    127     void removeAllStorageAccess();
    128130    void removePrevalentDomains(const Vector<String>& domainsToBlock);
    129     void setCacheMaxAgeCapForPrevalentResources(Seconds);
    130131    void setNotifyPagesWhenDataRecordsWereScanned(bool, CompletionHandler<void()>&&);
    131132    void setSubframeUnderTopFrameOrigin(const URL& subframe, const URL& topFrame, CompletionHandler<void()>&&);
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r240292 r240446  
    596596}
    597597
     598void NetworkConnectionToWebProcess::logWebSocketLoading(PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen)
     599{
     600#if ENABLE(RESOURCE_LOAD_STATISTICS)
     601    if (auto networkSession = networkProcess().networkSession(sessionID)) {
     602        if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
     603            resourceLoadStatistics->logWebSocketLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen, [] { });
     604    }
     605#else
     606    UNUSED_PARAM(sessionID);
     607    UNUSED_PARAM(targetPrimaryDomain);
     608    UNUSED_PARAM(mainFramePrimaryDomain);
     609    UNUSED_PARAM(lastSeen);
     610#endif
     611}
     612
     613void NetworkConnectionToWebProcess::logSubresourceLoading(PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen)
     614{
     615#if ENABLE(RESOURCE_LOAD_STATISTICS)
     616    if (auto networkSession = networkProcess().networkSession(sessionID)) {
     617        if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
     618            resourceLoadStatistics->logSubresourceLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen, [] { });
     619    }
     620#else
     621    UNUSED_PARAM(sessionID);
     622    UNUSED_PARAM(targetPrimaryDomain);
     623    UNUSED_PARAM(mainFramePrimaryDomain);
     624    UNUSED_PARAM(lastSeen);
     625#endif
     626}
     627
     628void NetworkConnectionToWebProcess::logSubresourceRedirect(PAL::SessionID sessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain)
     629{
     630#if ENABLE(RESOURCE_LOAD_STATISTICS)
     631    if (auto networkSession = networkProcess().networkSession(sessionID)) {
     632        if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
     633            resourceLoadStatistics->logSubresourceRedirect(sourcePrimaryDomain, targetPrimaryDomain, [] { });
     634    }
     635#else
     636    UNUSED_PARAM(sessionID);
     637    UNUSED_PARAM(sourcePrimaryDomain);
     638    UNUSED_PARAM(targetPrimaryDomain);
     639#endif
     640}
     641
    598642void NetworkConnectionToWebProcess::addOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains)
    599643{
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r240243 r240446  
    196196    void removeStorageAccessForAllFramesOnPage(PAL::SessionID, uint64_t pageID);
    197197    void logUserInteraction(PAL::SessionID, const String& topLevelOrigin);
     198    void logWebSocketLoading(PAL::SessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen);
     199    void logSubresourceLoading(PAL::SessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen);
     200    void logSubresourceRedirect(PAL::SessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain);
    198201
    199202    void addOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains);
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in

    r240243 r240446  
    6161#if ENABLE(RESOURCE_LOAD_STATISTICS)
    6262    LogUserInteraction(PAL::SessionID sessionID, String topLevelOrigin)
     63    LogWebSocketLoading(PAL::SessionID sessionID, String targetPrimaryDomain, String mainFramePrimaryDomain, WallTime lastSeen)
     64    LogSubresourceLoading(PAL::SessionID sessionID, String targetPrimaryDomain, String mainFramePrimaryDomain, WallTime lastSeen)
     65    LogSubresourceRedirect(PAL::SessionID sessionID, String sourcePrimaryDomain, String targetPrimaryDomain)
    6366#endif
    6467
  • trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp

    r240292 r240446  
    9393        return;
    9494
     95    // FIXME(193728): Support ResourceLoadStatistics for ephemeral sessions, too.
     96    if (m_sessionID.isEphemeral())
     97        return;
     98   
    9599    m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(*this, m_resourceLoadStatisticsDirectory);
    96100}
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r240443 r240446  
    556556    SandboxExtension::createHandleForReadWriteDirectory(parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsDirectory, parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsDirectoryExtensionHandle);
    557557
    558     parameters.defaultDataStoreParameters.networkSessionParameters.enableResourceLoadStatistics = false; // FIXME(193297): Turn on when the feature is on. (m_configuration->resourceLoadStatisticsEnabled()?)
     558    parameters.defaultDataStoreParameters.networkSessionParameters.enableResourceLoadStatistics = true; // FIXME(193705): m_configuration->resourceLoadStatisticsEnabled();
    559559
    560560    // Add any platform specific parameters
  • trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r240437 r240446  
    103103        WTFMove(resourceLoadStatisticsDirectory),
    104104        WTFMove(resourceLoadStatisticsDirectoryHandle),
    105         false // FIXME(193297): Switch to m_configuration->resourceLoadStatisticsEnabled()
     105        true // FIXME(193705): m_configuration->resourceLoadStatisticsEnabled()
    106106    };
    107107
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r240437 r240446  
    12531253        // If we are deleting all of the data types that the resource load statistics store monitors
    12541254        // we do not need to re-grandfather old data.
     1255        auto shouldGrandfather = ((monitoredTypesRaw & deletedTypesRaw) == monitoredTypesRaw) ? ShouldGrandfatherStatistics::No : ShouldGrandfatherStatistics::Yes;
     1256
    12551257        callbackAggregator->addPendingCallback();
    1256         if ((monitoredTypesRaw & deletedTypesRaw) == monitoredTypesRaw)
    1257             m_resourceLoadStatistics->scheduleClearInMemoryAndPersistent(ShouldGrandfatherStatistics::No, [callbackAggregator] {
    1258                 callbackAggregator->removePendingCallback();
    1259             });
    1260         else
    1261             m_resourceLoadStatistics->scheduleClearInMemoryAndPersistent(ShouldGrandfatherStatistics::Yes, [callbackAggregator] {
    1262                 callbackAggregator->removePendingCallback();
    1263             });
     1258        m_resourceLoadStatistics->scheduleClearInMemoryAndPersistent(shouldGrandfather, [callbackAggregator] {
     1259            callbackAggregator->removePendingCallback();
     1260        });
    12641261
    12651262        callbackAggregator->addPendingCallback();
     
    23262323
    23272324    if (enabled) {
    2328         // FIXME(193297): Remove this assert
    2329         ASSERT(!m_resourceLoadStatistics);
    23302325        enableResourceLoadStatisticsAndSetTestingCallback(nullptr);
    23312326        return;
    23322327    }
    2333 
    2334     // FIXME(193297): Remove these two lines
    2335     unregisterWebResourceLoadStatisticsStoreAsMessageReceiver();
    2336     m_resourceLoadStatistics = nullptr;
    23372328
    23382329    for (auto& processPool : processPools(std::numeric_limits<size_t>::max(), false)) {
     
    23962387    setStatisticsTestingCallback(WTFMove(callback));
    23972388
    2398     // FIXME(193297): Remove this check
    2399     if (m_resourceLoadStatistics)
    2400         return;
    2401 
    24022389    resolveDirectoriesIfNecessary();
    2403 
    2404     // FIXME(193297): Remove these two lines
    2405     m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(*this);
    2406     registerWebResourceLoadStatisticsStoreAsMessageReceiver();
    24072390
    24082391    for (auto& processPool : processPools(std::numeric_limits<size_t>::max(), false)) {
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r240292 r240446  
    389389        m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogUserInteraction(sessionID, topLevelOrigin), 0);
    390390    });
     391
     392    ResourceLoadObserver::shared().setLogWebSocketLoadingNotificationCallback([this] (PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen) {
     393        m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogWebSocketLoading(sessionID, targetPrimaryDomain, mainFramePrimaryDomain, lastSeen), 0);
     394    });
     395   
     396    ResourceLoadObserver::shared().setLogSubresourceLoadingNotificationCallback([this] (PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen) {
     397        m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceLoading(sessionID, targetPrimaryDomain, mainFramePrimaryDomain, lastSeen), 0);
     398    });
     399
     400    ResourceLoadObserver::shared().setLogSubresourceRedirectNotificationCallback([this] (PAL::SessionID sessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain) {
     401        m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceRedirect(sessionID, sourcePrimaryDomain, targetPrimaryDomain), 0);
     402    });
    391403#endif
    392404
  • trunk/Tools/ChangeLog

    r240444 r240446  
     12019-01-24  Brent Fulgham  <bfulgham@apple.com>
     2
     3        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
     4        https://bugs.webkit.org/show_bug.cgi?id=193297
     5        <rdar://problem/47158841>
     6
     7        Reviewed by Alex Christensen.
     8
     9        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
     10        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
     11        activating the message used to trigger the callback when it is set.
     12
    1132019-01-24  John Wilander  <wilander@apple.com>
    214
  • trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp

    r240156 r240446  
    18611861{
    18621862    cacheTestRunnerCallback(StatisticsDidScanDataRecordsCallbackID, callback);
     1863
     1864    bool notifyPagesWhenDataRecordsWereScanned = !!callback;
     1865
     1866    // Setting a callback implies we expect to receive callbacks. So register for them.
     1867    WKRetainPtr<WKStringRef> messageName(AdoptWK, WKStringCreateWithUTF8CString("StatisticsNotifyPagesWhenDataRecordsWereScanned"));
     1868    WKRetainPtr<WKBooleanRef> messageBody(AdoptWK, WKBooleanCreate(notifyPagesWhenDataRecordsWereScanned));
     1869    WKBundlePostSynchronousMessage(InjectedBundle::singleton().bundle(), messageName.get(), messageBody.get(), nullptr);
    18631870}
    18641871
Note: See TracChangeset for help on using the changeset viewer.