Changeset 218968 in webkit


Ignore:
Timestamp:
Jun 29, 2017 4:40:29 PM (7 years ago)
Author:
Chris Dumez
Message:

Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess
https://bugs.webkit.org/show_bug.cgi?id=173990

Reviewed by Brent Fulgham.

Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess.
They really have different API and there is therefore close to no code duplication.

Source/WebCore:

  • loader/ResourceLoadObserver.cpp:

(WebCore::primaryDomain):
(WebCore::ResourceLoadObserver::setStatisticsQueue):
(WebCore::ResourceLoadObserver::shouldLog):

  • loader/ResourceLoadObserver.h:
  • loader/ResourceLoadStatisticsStore.cpp:

(WebCore::ResourceLoadStatisticsStore::primaryDomain):

  • loader/ResourceLoadStatisticsStore.h:
  • platform/URL.h:

Source/WebKit2:

  • CMakeLists.txt:
  • UIProcess/Cocoa/WebResourceLoadStatisticsManagerCocoa.mm:

(WebKit::WebResourceLoadStatisticsManager::registerUserDefaultsIfNeeded):

  • UIProcess/WebResourceLoadObserver.cpp: Added.

(WebKit::primaryDomain):
(WebKit::WebResourceLoadObserver::sharedObserver):
(WebKit::WebResourceLoadObserver::setStatisticsStore):
(WebKit::WebResourceLoadObserver::setStatisticsQueue):
(WebKit::WebResourceLoadObserver::clearInMemoryStore):
(WebKit::WebResourceLoadObserver::clearInMemoryAndPersistentStore):
(WebKit::WebResourceLoadObserver::logUserInteraction):
(WebKit::WebResourceLoadObserver::clearUserInteraction):
(WebKit::WebResourceLoadObserver::hasHadUserInteraction):
(WebKit::WebResourceLoadObserver::setPrevalentResource):
(WebKit::WebResourceLoadObserver::isPrevalentResource):
(WebKit::WebResourceLoadObserver::clearPrevalentResource):
(WebKit::WebResourceLoadObserver::setGrandfathered):
(WebKit::WebResourceLoadObserver::isGrandfathered):
(WebKit::WebResourceLoadObserver::setSubframeUnderTopFrameOrigin):
(WebKit::WebResourceLoadObserver::setSubresourceUnderTopFrameOrigin):
(WebKit::WebResourceLoadObserver::setSubresourceUniqueRedirectTo):
(WebKit::WebResourceLoadObserver::setTimeToLiveUserInteraction):
(WebKit::WebResourceLoadObserver::setTimeToLiveCookiePartitionFree):
(WebKit::WebResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval):
(WebKit::WebResourceLoadObserver::setGrandfatheringTime):
(WebKit::WebResourceLoadObserver::fireDataModificationHandler):
(WebKit::WebResourceLoadObserver::fireShouldPartitionCookiesHandler):
(WebKit::WebResourceLoadObserver::fireTelemetryHandler):

  • UIProcess/WebResourceLoadObserver.h: Added.
  • UIProcess/WebResourceLoadStatisticsManager.cpp:

(WebKit::WebResourceLoadStatisticsManager::setPrevalentResource):
(WebKit::WebResourceLoadStatisticsManager::isPrevalentResource):
(WebKit::WebResourceLoadStatisticsManager::setHasHadUserInteraction):
(WebKit::WebResourceLoadStatisticsManager::hasHadUserInteraction):
(WebKit::WebResourceLoadStatisticsManager::setGrandfathered):
(WebKit::WebResourceLoadStatisticsManager::isGrandfathered):
(WebKit::WebResourceLoadStatisticsManager::setSubframeUnderTopFrameOrigin):
(WebKit::WebResourceLoadStatisticsManager::setSubresourceUnderTopFrameOrigin):
(WebKit::WebResourceLoadStatisticsManager::setSubresourceUniqueRedirectTo):
(WebKit::WebResourceLoadStatisticsManager::setTimeToLiveUserInteraction):
(WebKit::WebResourceLoadStatisticsManager::setTimeToLiveCookiePartitionFree):
(WebKit::WebResourceLoadStatisticsManager::setMinimumTimeBetweeenDataRecordsRemoval):
(WebKit::WebResourceLoadStatisticsManager::setGrandfatheringTime):
(WebKit::WebResourceLoadStatisticsManager::fireDataModificationHandler):
(WebKit::WebResourceLoadStatisticsManager::fireShouldPartitionCookiesHandler):
(WebKit::WebResourceLoadStatisticsManager::fireShouldPartitionCookiesHandlerForOneDomain):
(WebKit::WebResourceLoadStatisticsManager::fireTelemetryHandler):
(WebKit::WebResourceLoadStatisticsManager::clearInMemoryAndPersistentStore):
(WebKit::WebResourceLoadStatisticsManager::clearInMemoryAndPersistentStoreModifiedSinceHours):
(WebKit::WebResourceLoadStatisticsManager::resetToConsistentState):

  • UIProcess/WebResourceLoadStatisticsStore.cpp:

(WebKit::WebResourceLoadStatisticsStore::registerSharedResourceLoadObserver):

  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::removeData):

  • WebKit2.xcodeproj/project.pbxproj:
Location:
trunk/Source
Files:
2 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r218967 r218968  
     12017-06-29  Chris Dumez  <cdumez@apple.com>
     2
     3        Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=173990
     5
     6        Reviewed by Brent Fulgham.
     7
     8        Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess.
     9        They really have different API and there is therefore close to no code duplication.
     10
     11        * loader/ResourceLoadObserver.cpp:
     12        (WebCore::primaryDomain):
     13        (WebCore::ResourceLoadObserver::setStatisticsQueue):
     14        (WebCore::ResourceLoadObserver::shouldLog):
     15        * loader/ResourceLoadObserver.h:
     16        * loader/ResourceLoadStatisticsStore.cpp:
     17        (WebCore::ResourceLoadStatisticsStore::primaryDomain):
     18        * loader/ResourceLoadStatisticsStore.h:
     19        * platform/URL.h:
     20
    1212017-06-29  Sam Weinig  <sam@webkit.org>
    222
  • trunk/Source/WebCore/loader/ResourceLoadObserver.cpp

    r218966 r218968  
    3131#include "Logging.h"
    3232#include "MainFrame.h"
    33 #include "NetworkStorageSession.h"
    3433#include "Page.h"
    35 #include "PlatformStrategies.h"
    36 #include "PublicSuffix.h"
    37 #include "ResourceLoadStatistics.h"
    3834#include "ResourceLoadStatisticsStore.h"
    3935#include "ResourceRequest.h"
     
    4137#include "SecurityOrigin.h"
    4238#include "Settings.h"
    43 #include "SharedBuffer.h"
    4439#include "URL.h"
    45 #include <wtf/CrossThreadCopier.h>
    4640#include <wtf/NeverDestroyed.h>
    4741#include <wtf/WorkQueue.h>
    48 #include <wtf/text/StringBuilder.h>
    4942
    5043namespace WebCore {
     44
     45template<typename T> static inline String primaryDomain(const T& value)
     46{
     47    return ResourceLoadStatisticsStore::primaryDomain(value);
     48}
    5149
    5250static Seconds timestampResolution { 1_h };
     
    7068    m_queue = WTFMove(queue);
    7169}
    72    
    73 void ResourceLoadObserver::clearInMemoryStore()
    74 {
    75     if (!m_store)
    76         return;
    77    
    78     ASSERT(m_queue);
    79     m_queue->dispatch([this] {
    80         m_store->clearInMemory();
    81     });
    82 }
    83    
    84 void ResourceLoadObserver::clearInMemoryAndPersistentStore()
    85 {
    86     if (!m_store)
    87         return;
    88    
    89     ASSERT(m_queue);
    90     m_queue->dispatch([this] {
    91         m_store->clearInMemoryAndPersistent();
    92     });
    93 }
    94 
    95 void ResourceLoadObserver::clearInMemoryAndPersistentStore(std::chrono::system_clock::time_point modifiedSince)
    96 {
    97     // For now, be conservative and clear everything regardless of modifiedSince
    98     UNUSED_PARAM(modifiedSince);
    99     clearInMemoryAndPersistentStore();
    100 }
    10170
    10271static inline bool is3xxRedirect(const ResourceResponse& response)
     
    10574}
    10675
    107 bool ResourceLoadObserver::shouldLog(Page* page)
     76bool ResourceLoadObserver::shouldLog(Page* page) const
    10877{
    10978    // FIXME: Err on the safe side until we have sorted out what to do in worker contexts
     
    368337}
    369338
    370 void ResourceLoadObserver::logUserInteraction(const URL& url)
    371 {
    372     if (url.isBlankURL() || url.isEmpty())
    373         return;
    374 
    375     ASSERT(m_queue);
    376     m_queue->dispatch([this, primaryDomainString = primaryDomain(url).isolatedCopy()] {
    377         {
    378         auto locker = holdLock(m_store->statisticsLock());
    379         auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomainString);
    380         statistics.hadUserInteraction = true;
    381         statistics.mostRecentUserInteractionTime = WallTime::now();
    382         }
    383        
    384         m_store->fireShouldPartitionCookiesHandler({ primaryDomainString }, { }, false);
    385     });
    386 }
    387 
    388 void ResourceLoadObserver::clearUserInteraction(const URL& url)
    389 {
    390     if (url.isBlankURL() || url.isEmpty())
    391         return;
    392 
    393     auto locker = holdLock(m_store->statisticsLock());
    394     auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
    395    
    396     statistics.hadUserInteraction = false;
    397     statistics.mostRecentUserInteractionTime = { };
    398 }
    399 
    400 bool ResourceLoadObserver::hasHadUserInteraction(const URL& url)
    401 {
    402     if (url.isBlankURL() || url.isEmpty())
    403         return false;
    404 
    405     auto locker = holdLock(m_store->statisticsLock());
    406     auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
    407    
    408     return m_store->hasHadRecentUserInteraction(statistics);
    409 }
    410 
    411 void ResourceLoadObserver::setPrevalentResource(const URL& url)
    412 {
    413     if (url.isBlankURL() || url.isEmpty())
    414         return;
    415 
    416     auto locker = holdLock(m_store->statisticsLock());
    417     auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
    418    
    419     statistics.isPrevalentResource = true;
    420 }
    421 
    422 bool ResourceLoadObserver::isPrevalentResource(const URL& url)
    423 {
    424     if (url.isBlankURL() || url.isEmpty())
    425         return false;
    426 
    427     auto locker = holdLock(m_store->statisticsLock());
    428     auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
    429    
    430     return statistics.isPrevalentResource;
    431 }
    432    
    433 void ResourceLoadObserver::clearPrevalentResource(const URL& url)
    434 {
    435     if (url.isBlankURL() || url.isEmpty())
    436         return;
    437 
    438     auto locker = holdLock(m_store->statisticsLock());
    439     auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
    440    
    441     statistics.isPrevalentResource = false;
    442 }
    443    
    444 void ResourceLoadObserver::setGrandfathered(const URL& url, bool value)
    445 {
    446     if (url.isBlankURL() || url.isEmpty())
    447         return;
    448    
    449     auto locker = holdLock(m_store->statisticsLock());
    450     auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
    451    
    452     statistics.grandfathered = value;
    453 }
    454    
    455 bool ResourceLoadObserver::isGrandfathered(const URL& url)
    456 {
    457     if (url.isBlankURL() || url.isEmpty())
    458         return false;
    459    
    460     auto locker = holdLock(m_store->statisticsLock());
    461     auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
    462    
    463     return statistics.grandfathered;
    464 }
    465 
    466 void ResourceLoadObserver::setSubframeUnderTopFrameOrigin(const URL& subframe, const URL& topFrame)
    467 {
    468     if (subframe.isBlankURL() || subframe.isEmpty() || topFrame.isBlankURL() || topFrame.isEmpty())
    469         return;
    470    
    471     ASSERT(m_queue);
    472     m_queue->dispatch([this, primaryTopFrameDomainString = primaryDomain(topFrame).isolatedCopy(), primarySubFrameDomainString = primaryDomain(subframe).isolatedCopy()] {
    473         auto locker = holdLock(m_store->statisticsLock());
    474         auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primarySubFrameDomainString);
    475         statistics.subframeUnderTopFrameOrigins.add(primaryTopFrameDomainString);
    476     });
    477 }
    478 
    479 void ResourceLoadObserver::setSubresourceUnderTopFrameOrigin(const URL& subresource, const URL& topFrame)
    480 {
    481     if (subresource.isBlankURL() || subresource.isEmpty() || topFrame.isBlankURL() || topFrame.isEmpty())
    482         return;
    483    
    484     ASSERT(m_queue);
    485     m_queue->dispatch([this, primaryTopFrameDomainString = primaryDomain(topFrame).isolatedCopy(), primarySubresourceDomainString = primaryDomain(subresource).isolatedCopy()] {
    486         auto locker = holdLock(m_store->statisticsLock());
    487         auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primarySubresourceDomainString);
    488         statistics.subresourceUnderTopFrameOrigins.add(primaryTopFrameDomainString);
    489     });
    490 }
    491 
    492 void ResourceLoadObserver::setSubresourceUniqueRedirectTo(const URL& subresource, const URL& hostNameRedirectedTo)
    493 {
    494     if (subresource.isBlankURL() || subresource.isEmpty() || hostNameRedirectedTo.isBlankURL() || hostNameRedirectedTo.isEmpty())
    495         return;
    496    
    497     ASSERT(m_queue);
    498     m_queue->dispatch([this, primaryRedirectDomainString = primaryDomain(hostNameRedirectedTo).isolatedCopy(), primarySubresourceDomainString = primaryDomain(subresource).isolatedCopy()] {
    499         auto locker = holdLock(m_store->statisticsLock());
    500         auto& statistics = m_store->ensureResourceStatisticsForPrimaryDomain(primarySubresourceDomainString);
    501         statistics.subresourceUniqueRedirectsTo.add(primaryRedirectDomainString);
    502     });
    503 }
    504 
    505 void ResourceLoadObserver::setTimeToLiveUserInteraction(Seconds seconds)
    506 {
    507     m_store->setTimeToLiveUserInteraction(seconds);
    508 }
    509 
    510 void ResourceLoadObserver::setTimeToLiveCookiePartitionFree(Seconds seconds)
    511 {
    512     m_store->setTimeToLiveCookiePartitionFree(seconds);
    513 }
    514 
    515 void ResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval(Seconds seconds)
    516 {
    517     m_store->setMinimumTimeBetweeenDataRecordsRemoval(seconds);
    518 }
    519    
    520 void ResourceLoadObserver::setReducedTimestampResolution(Seconds seconds)
    521 {
    522     if (seconds > 0_s)
    523         timestampResolution = seconds;
    524 }
    525 
    526 void ResourceLoadObserver::setGrandfatheringTime(Seconds seconds)
    527 {
    528     m_store->setMinimumTimeBetweeenDataRecordsRemoval(seconds);
    529 }
    530    
    531 void ResourceLoadObserver::fireDataModificationHandler()
    532 {
    533     // Helper function used by testing system. Should only be called from the main thread.
    534     ASSERT(isMainThread());
    535     m_queue->dispatch([this] {
    536         m_store->fireDataModificationHandler();
    537     });
    538 }
    539 
    540 void ResourceLoadObserver::fireShouldPartitionCookiesHandler()
    541 {
    542     // Helper function used by testing system. Should only be called from the main thread.
    543     ASSERT(isMainThread());
    544     m_queue->dispatch([this] {
    545         m_store->fireShouldPartitionCookiesHandler();
    546     });
    547 }
    548 
    549 void ResourceLoadObserver::fireShouldPartitionCookiesHandler(const Vector<String>& domainsToRemove, const Vector<String>& domainsToAdd, bool clearFirst)
    550 {
    551     // Helper function used by testing system. Should only be called from the main thread.
    552     ASSERT(isMainThread());
    553     m_queue->dispatch([this, domainsToRemove = CrossThreadCopier<Vector<String>>::copy(domainsToRemove), domainsToAdd = CrossThreadCopier<Vector<String>>::copy(domainsToAdd), clearFirst] {
    554         m_store->fireShouldPartitionCookiesHandler(domainsToRemove, domainsToAdd, clearFirst);
    555     });
    556 }
    557 
    558 void ResourceLoadObserver::fireTelemetryHandler()
    559 {
    560     // Helper function used by testing system. Should only be called from the main thread.
    561     ASSERT(isMainThread());
    562     m_store->fireTelemetryHandler();
    563 }
    564    
    565 String ResourceLoadObserver::primaryDomain(const URL& url)
    566 {
    567     return primaryDomain(url.host());
    568 }
    569 
    570 String ResourceLoadObserver::primaryDomain(const String& host)
    571 {
    572     if (host.isNull() || host.isEmpty())
    573         return ASCIILiteral("nullOrigin");
    574 
    575 #if ENABLE(PUBLIC_SUFFIX_LIST)
    576     String primaryDomain = topPrivatelyControlledDomain(host);
    577     // We will have an empty string here if there is no TLD. Use the host as a fallback.
    578     if (!primaryDomain.isEmpty())
    579         return primaryDomain;
    580 #endif
    581 
    582     return host;
    583 }
    584 
    585339String ResourceLoadObserver::statisticsForOrigin(const String& origin)
    586340{
     
    588342}
    589343
    590 }
     344} // namespace WebCore
  • trunk/Source/WebCore/loader/ResourceLoadObserver.h

    r218865 r218968  
    5656    void logUserInteractionWithReducedTimeResolution(const Document&);
    5757
    58     WEBCORE_EXPORT void logUserInteraction(const URL&);
    59     WEBCORE_EXPORT bool hasHadUserInteraction(const URL&);
    60     WEBCORE_EXPORT void clearUserInteraction(const URL&);
    61 
    62     WEBCORE_EXPORT void setPrevalentResource(const URL&);
    63     WEBCORE_EXPORT bool isPrevalentResource(const URL&);
    64     WEBCORE_EXPORT void clearPrevalentResource(const URL&);
    65     WEBCORE_EXPORT void setGrandfathered(const URL&, bool value);
    66     WEBCORE_EXPORT bool isGrandfathered(const URL&);
    67    
    68     WEBCORE_EXPORT void setSubframeUnderTopFrameOrigin(const URL& subframe, const URL& topFrame);
    69     WEBCORE_EXPORT void setSubresourceUnderTopFrameOrigin(const URL& subresource, const URL& topFrame);
    70     WEBCORE_EXPORT void setSubresourceUniqueRedirectTo(const URL& subresource, const URL& hostNameRedirectedTo);
    71 
    72     WEBCORE_EXPORT void setTimeToLiveUserInteraction(Seconds);
    73     WEBCORE_EXPORT void setTimeToLiveCookiePartitionFree(Seconds);
    74     WEBCORE_EXPORT void setMinimumTimeBetweeenDataRecordsRemoval(Seconds);
    75     WEBCORE_EXPORT void setReducedTimestampResolution(Seconds);
    76     WEBCORE_EXPORT void setGrandfatheringTime(Seconds);
    77    
    78     WEBCORE_EXPORT void fireDataModificationHandler();
    79     WEBCORE_EXPORT void fireShouldPartitionCookiesHandler();
    80     WEBCORE_EXPORT void fireShouldPartitionCookiesHandler(const Vector<String>& domainsToRemove, const Vector<String>& domainsToAdd, bool clearFirst);
    81     WEBCORE_EXPORT void fireTelemetryHandler();
    82 
    8358    WEBCORE_EXPORT void setStatisticsStore(Ref<ResourceLoadStatisticsStore>&&);
    8459    WEBCORE_EXPORT void setStatisticsQueue(Ref<WTF::WorkQueue>&&);
    85     WEBCORE_EXPORT void clearInMemoryStore();
    86     WEBCORE_EXPORT void clearInMemoryAndPersistentStore();
    87     WEBCORE_EXPORT void clearInMemoryAndPersistentStore(std::chrono::system_clock::time_point modifiedSince);
    8860
    8961    WEBCORE_EXPORT String statisticsForOrigin(const String&);
    9062
    9163private:
    92     bool shouldLog(Page*);
    93     static String primaryDomain(const URL&);
    94     static String primaryDomain(const String& host);
     64    bool shouldLog(Page*) const;
    9565
    9666    RefPtr<ResourceLoadStatisticsStore> m_store;
  • trunk/Source/WebCore/loader/ResourceLoadStatisticsStore.cpp

    r218966 r218968  
    3131#include "NetworkStorageSession.h"
    3232#include "PlatformStrategies.h"
     33#include "PublicSuffix.h"
    3334#include "ResourceLoadStatistics.h"
    3435#include "SharedBuffer.h"
     
    466467    return m_statisticsLock;
    467468}
    468    
    469 }
     469
     470String ResourceLoadStatisticsStore::primaryDomain(const URL& url)
     471{
     472    return primaryDomain(url.host());
     473}
     474
     475String ResourceLoadStatisticsStore::primaryDomain(const String& host)
     476{
     477    if (host.isNull() || host.isEmpty())
     478        return ASCIILiteral("nullOrigin");
     479
     480#if ENABLE(PUBLIC_SUFFIX_LIST)
     481    String primaryDomain = topPrivatelyControlledDomain(host);
     482    // We will have an empty string here if there is no TLD. Use the host as a fallback.
     483    if (!primaryDomain.isEmpty())
     484        return primaryDomain;
     485#endif
     486
     487    return host;
     488}
     489   
     490}
  • trunk/Source/WebCore/loader/ResourceLoadStatisticsStore.h

    r218966 r218968  
    6464    size_t size() const { return m_resourceStatisticsMap.size(); }
    6565    WEBCORE_EXPORT void clearInMemory();
    66     void clearInMemoryAndPersistent();
     66    WEBCORE_EXPORT void clearInMemoryAndPersistent();
    6767
    68     ResourceLoadStatistics& ensureResourceStatisticsForPrimaryDomain(const String&);
    69     ResourceLoadStatistics takeResourceStatisticsForPrimaryDomain(const String&);
     68    WEBCORE_EXPORT ResourceLoadStatistics& ensureResourceStatisticsForPrimaryDomain(const String&);
     69    WEBCORE_EXPORT ResourceLoadStatistics takeResourceStatisticsForPrimaryDomain(const String&);
    7070    void setResourceStatisticsForPrimaryDomain(const String&, ResourceLoadStatistics&&);
    7171
     
    8282    WEBCORE_EXPORT void setFireTelemetryCallback(WTF::Function<void()>&& handler);
    8383
    84     void fireDataModificationHandler();
    85     void fireTelemetryHandler();
    86     void setTimeToLiveUserInteraction(Seconds);
    87     void setTimeToLiveCookiePartitionFree(Seconds);
    88     void setMinimumTimeBetweeenDataRecordsRemoval(Seconds);
    89     void setGrandfatheringTime(Seconds);
     84    WEBCORE_EXPORT void fireDataModificationHandler();
     85    WEBCORE_EXPORT void fireTelemetryHandler();
     86    WEBCORE_EXPORT void setTimeToLiveUserInteraction(Seconds);
     87    WEBCORE_EXPORT void setTimeToLiveCookiePartitionFree(Seconds);
     88    WEBCORE_EXPORT void setMinimumTimeBetweeenDataRecordsRemoval(Seconds);
     89    WEBCORE_EXPORT void setGrandfatheringTime(Seconds);
    9090    WEBCORE_EXPORT void fireShouldPartitionCookiesHandler();
    91     void fireShouldPartitionCookiesHandler(const Vector<String>& domainsToRemove, const Vector<String>& domainsToAdd, bool clearFirst);
     91    WEBCORE_EXPORT void fireShouldPartitionCookiesHandler(const Vector<String>& domainsToRemove, const Vector<String>& domainsToAdd, bool clearFirst);
    9292
    9393    WEBCORE_EXPORT void processStatistics(WTF::Function<void(ResourceLoadStatistics&)>&&);
     
    104104   
    105105    WEBCORE_EXPORT WTF::RecursiveLockAdapter<Lock>& statisticsLock();
     106
     107    WEBCORE_EXPORT static String primaryDomain(const URL&);
     108    WEBCORE_EXPORT static String primaryDomain(const String& host);
     109
    106110private:
    107111    ResourceLoadStatisticsStore() = default;
  • trunk/Source/WebCore/platform/URL.h

    r216152 r218968  
    136136    bool protocolIsInHTTPFamily() const;
    137137    WEBCORE_EXPORT bool isLocalFile() const;
    138     bool isBlankURL() const;
     138    WEBCORE_EXPORT bool isBlankURL() const;
    139139    bool cannotBeABaseURL() const { return m_cannotBeABaseURL; }
    140140
  • trunk/Source/WebKit2/CMakeLists.txt

    r218888 r218968  
    329329    UIProcess/WebProcessPool.cpp
    330330    UIProcess/WebProcessProxy.cpp
     331    UIProcess/WebResourceLoadObserver.cpp
    331332    UIProcess/WebURLSchemeHandler.cpp
    332333    UIProcess/WebURLSchemeTask.cpp
  • trunk/Source/WebKit2/ChangeLog

    r218967 r218968  
     12017-06-29  Chris Dumez  <cdumez@apple.com>
     2
     3        Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=173990
     5
     6        Reviewed by Brent Fulgham.
     7
     8        Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess.
     9        They really have different API and there is therefore close to no code duplication.
     10
     11        * CMakeLists.txt:
     12        * UIProcess/Cocoa/WebResourceLoadStatisticsManagerCocoa.mm:
     13        (WebKit::WebResourceLoadStatisticsManager::registerUserDefaultsIfNeeded):
     14        * UIProcess/WebResourceLoadObserver.cpp: Added.
     15        (WebKit::primaryDomain):
     16        (WebKit::WebResourceLoadObserver::sharedObserver):
     17        (WebKit::WebResourceLoadObserver::setStatisticsStore):
     18        (WebKit::WebResourceLoadObserver::setStatisticsQueue):
     19        (WebKit::WebResourceLoadObserver::clearInMemoryStore):
     20        (WebKit::WebResourceLoadObserver::clearInMemoryAndPersistentStore):
     21        (WebKit::WebResourceLoadObserver::logUserInteraction):
     22        (WebKit::WebResourceLoadObserver::clearUserInteraction):
     23        (WebKit::WebResourceLoadObserver::hasHadUserInteraction):
     24        (WebKit::WebResourceLoadObserver::setPrevalentResource):
     25        (WebKit::WebResourceLoadObserver::isPrevalentResource):
     26        (WebKit::WebResourceLoadObserver::clearPrevalentResource):
     27        (WebKit::WebResourceLoadObserver::setGrandfathered):
     28        (WebKit::WebResourceLoadObserver::isGrandfathered):
     29        (WebKit::WebResourceLoadObserver::setSubframeUnderTopFrameOrigin):
     30        (WebKit::WebResourceLoadObserver::setSubresourceUnderTopFrameOrigin):
     31        (WebKit::WebResourceLoadObserver::setSubresourceUniqueRedirectTo):
     32        (WebKit::WebResourceLoadObserver::setTimeToLiveUserInteraction):
     33        (WebKit::WebResourceLoadObserver::setTimeToLiveCookiePartitionFree):
     34        (WebKit::WebResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval):
     35        (WebKit::WebResourceLoadObserver::setGrandfatheringTime):
     36        (WebKit::WebResourceLoadObserver::fireDataModificationHandler):
     37        (WebKit::WebResourceLoadObserver::fireShouldPartitionCookiesHandler):
     38        (WebKit::WebResourceLoadObserver::fireTelemetryHandler):
     39        * UIProcess/WebResourceLoadObserver.h: Added.
     40        * UIProcess/WebResourceLoadStatisticsManager.cpp:
     41        (WebKit::WebResourceLoadStatisticsManager::setPrevalentResource):
     42        (WebKit::WebResourceLoadStatisticsManager::isPrevalentResource):
     43        (WebKit::WebResourceLoadStatisticsManager::setHasHadUserInteraction):
     44        (WebKit::WebResourceLoadStatisticsManager::hasHadUserInteraction):
     45        (WebKit::WebResourceLoadStatisticsManager::setGrandfathered):
     46        (WebKit::WebResourceLoadStatisticsManager::isGrandfathered):
     47        (WebKit::WebResourceLoadStatisticsManager::setSubframeUnderTopFrameOrigin):
     48        (WebKit::WebResourceLoadStatisticsManager::setSubresourceUnderTopFrameOrigin):
     49        (WebKit::WebResourceLoadStatisticsManager::setSubresourceUniqueRedirectTo):
     50        (WebKit::WebResourceLoadStatisticsManager::setTimeToLiveUserInteraction):
     51        (WebKit::WebResourceLoadStatisticsManager::setTimeToLiveCookiePartitionFree):
     52        (WebKit::WebResourceLoadStatisticsManager::setMinimumTimeBetweeenDataRecordsRemoval):
     53        (WebKit::WebResourceLoadStatisticsManager::setGrandfatheringTime):
     54        (WebKit::WebResourceLoadStatisticsManager::fireDataModificationHandler):
     55        (WebKit::WebResourceLoadStatisticsManager::fireShouldPartitionCookiesHandler):
     56        (WebKit::WebResourceLoadStatisticsManager::fireShouldPartitionCookiesHandlerForOneDomain):
     57        (WebKit::WebResourceLoadStatisticsManager::fireTelemetryHandler):
     58        (WebKit::WebResourceLoadStatisticsManager::clearInMemoryAndPersistentStore):
     59        (WebKit::WebResourceLoadStatisticsManager::clearInMemoryAndPersistentStoreModifiedSinceHours):
     60        (WebKit::WebResourceLoadStatisticsManager::resetToConsistentState):
     61        * UIProcess/WebResourceLoadStatisticsStore.cpp:
     62        (WebKit::WebResourceLoadStatisticsStore::registerSharedResourceLoadObserver):
     63        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     64        (WebKit::WebsiteDataStore::removeData):
     65        * WebKit2.xcodeproj/project.pbxproj:
     66
    1672017-06-29  Sam Weinig  <sam@webkit.org>
    268
  • trunk/Source/WebKit2/UIProcess/Cocoa/WebResourceLoadStatisticsManagerCocoa.mm

    r218865 r218968  
    2828
    2929#import "WebPreferencesKeys.h"
    30 #import <WebCore/ResourceLoadObserver.h>
     30#import "WebResourceLoadObserver.h"
    3131
    3232using namespace WebCore;
     
    4444        double timeToLiveUserInteraction = [[NSUserDefaults standardUserDefaults] doubleForKey: WebPreferencesKey::resourceLoadStatisticsTimeToLiveUserInteractionKey()];
    4545        if (timeToLiveUserInteraction > 0 && timeToLiveUserInteraction <= 30 * dayInSeconds)
    46             ResourceLoadObserver::sharedObserver().setTimeToLiveUserInteraction(Seconds { timeToLiveUserInteraction });
     46            WebResourceLoadObserver::sharedObserver().setTimeToLiveUserInteraction(Seconds { timeToLiveUserInteraction });
    4747       
    4848        double timeToLiveCookiePartitionFree = [[NSUserDefaults standardUserDefaults] doubleForKey: WebPreferencesKey::resourceLoadStatisticsTimeToLiveCookiePartitionFreeKey()];
    4949        if (timeToLiveCookiePartitionFree > 0 && timeToLiveCookiePartitionFree <= dayInSeconds)
    50             ResourceLoadObserver::sharedObserver().setTimeToLiveCookiePartitionFree(Seconds { timeToLiveCookiePartitionFree });
    51        
    52         double reducedTimestampResolution = [[NSUserDefaults standardUserDefaults] doubleForKey: WebPreferencesKey::resourceLoadStatisticsReducedTimestampResolutionKey()];
    53         if (reducedTimestampResolution > 0 && reducedTimestampResolution <= hourInSeconds)
    54             ResourceLoadObserver::sharedObserver().setReducedTimestampResolution(Seconds { reducedTimestampResolution });
     50            WebResourceLoadObserver::sharedObserver().setTimeToLiveCookiePartitionFree(Seconds { timeToLiveCookiePartitionFree });
    5551
    5652        double grandfatheringTime = [[NSUserDefaults standardUserDefaults] doubleForKey: WebPreferencesKey::resourceLoadStatisticsGrandfatheringTimeKey()];
    5753        if (grandfatheringTime > 0 && grandfatheringTime <= 7 * dayInSeconds)
    58             ResourceLoadObserver::sharedObserver().setGrandfatheringTime(Seconds { grandfatheringTime });
     54            WebResourceLoadObserver::sharedObserver().setGrandfatheringTime(Seconds { grandfatheringTime });
    5955    });
    6056}
  • trunk/Source/WebKit2/UIProcess/WebResourceLoadStatisticsManager.cpp

    r218965 r218968  
    2828
    2929#include "Logging.h"
     30#include "WebResourceLoadObserver.h"
    3031#include "WebResourceLoadStatisticsStore.h"
    31 #include <WebCore/ResourceLoadObserver.h>
    3232#include <WebCore/URL.h>
    3333
     
    3939{
    4040    if (value)
    41         WebCore::ResourceLoadObserver::sharedObserver().setPrevalentResource(URL(URL(), hostName));
     41        WebResourceLoadObserver::sharedObserver().setPrevalentResource(URL(URL(), hostName));
    4242    else
    43         WebCore::ResourceLoadObserver::sharedObserver().clearPrevalentResource(URL(URL(), hostName));
     43        WebResourceLoadObserver::sharedObserver().clearPrevalentResource(URL(URL(), hostName));
    4444}
    4545
    4646bool WebResourceLoadStatisticsManager::isPrevalentResource(const String& hostName)
    4747{
    48     return WebCore::ResourceLoadObserver::sharedObserver().isPrevalentResource(URL(URL(), hostName));
     48    return WebResourceLoadObserver::sharedObserver().isPrevalentResource(URL(URL(), hostName));
    4949}
    5050   
     
    5252{
    5353    if (value)
    54         WebCore::ResourceLoadObserver::sharedObserver().logUserInteraction(URL(URL(), hostName));
     54        WebResourceLoadObserver::sharedObserver().logUserInteraction(URL(URL(), hostName));
    5555    else
    56         WebCore::ResourceLoadObserver::sharedObserver().clearUserInteraction(URL(URL(), hostName));
     56        WebResourceLoadObserver::sharedObserver().clearUserInteraction(URL(URL(), hostName));
    5757}
    5858
    5959bool WebResourceLoadStatisticsManager::hasHadUserInteraction(const String& hostName)
    6060{
    61     return WebCore::ResourceLoadObserver::sharedObserver().hasHadUserInteraction(URL(URL(), hostName));
     61    return WebResourceLoadObserver::sharedObserver().hasHadUserInteraction(URL(URL(), hostName));
    6262}
    6363
    6464void WebResourceLoadStatisticsManager::setGrandfathered(const String& hostName, bool value)
    6565{
    66     WebCore::ResourceLoadObserver::sharedObserver().setGrandfathered(URL(URL(), hostName), value);
     66    WebResourceLoadObserver::sharedObserver().setGrandfathered(URL(URL(), hostName), value);
    6767}
    6868
    6969bool WebResourceLoadStatisticsManager::isGrandfathered(const String& hostName)
    7070{
    71     return WebCore::ResourceLoadObserver::sharedObserver().isGrandfathered(URL(URL(), hostName));
     71    return WebResourceLoadObserver::sharedObserver().isGrandfathered(URL(URL(), hostName));
    7272}
    7373
    7474void WebResourceLoadStatisticsManager::setSubframeUnderTopFrameOrigin(const String& hostName, const String& topFrameHostName)
    7575{
    76     WebCore::ResourceLoadObserver::sharedObserver().setSubframeUnderTopFrameOrigin(URL(URL(), hostName), URL(URL(), topFrameHostName));
     76    WebResourceLoadObserver::sharedObserver().setSubframeUnderTopFrameOrigin(URL(URL(), hostName), URL(URL(), topFrameHostName));
    7777}
    7878
    7979void WebResourceLoadStatisticsManager::setSubresourceUnderTopFrameOrigin(const String& hostName, const String& topFrameHostName)
    8080{
    81     WebCore::ResourceLoadObserver::sharedObserver().setSubresourceUnderTopFrameOrigin(URL(URL(), hostName), URL(URL(), topFrameHostName));
     81    WebResourceLoadObserver::sharedObserver().setSubresourceUnderTopFrameOrigin(URL(URL(), hostName), URL(URL(), topFrameHostName));
    8282}
    8383
    8484void WebResourceLoadStatisticsManager::setSubresourceUniqueRedirectTo(const String& hostName, const String& hostNameRedirectedTo)
    8585{
    86     WebCore::ResourceLoadObserver::sharedObserver().setSubresourceUniqueRedirectTo(URL(URL(), hostName), URL(URL(), hostNameRedirectedTo));
     86    WebResourceLoadObserver::sharedObserver().setSubresourceUniqueRedirectTo(URL(URL(), hostName), URL(URL(), hostNameRedirectedTo));
    8787}
    8888
    8989void WebResourceLoadStatisticsManager::setTimeToLiveUserInteraction(Seconds seconds)
    9090{
    91     WebCore::ResourceLoadObserver::sharedObserver().setTimeToLiveUserInteraction(seconds);
     91    WebResourceLoadObserver::sharedObserver().setTimeToLiveUserInteraction(seconds);
    9292}
    9393
    9494void WebResourceLoadStatisticsManager::setTimeToLiveCookiePartitionFree(Seconds seconds)
    9595{
    96     WebCore::ResourceLoadObserver::sharedObserver().setTimeToLiveCookiePartitionFree(seconds);
     96    WebResourceLoadObserver::sharedObserver().setTimeToLiveCookiePartitionFree(seconds);
    9797}
    9898
    9999void WebResourceLoadStatisticsManager::setMinimumTimeBetweeenDataRecordsRemoval(Seconds seconds)
    100100{
    101     WebCore::ResourceLoadObserver::sharedObserver().setMinimumTimeBetweeenDataRecordsRemoval(seconds);
     101    WebResourceLoadObserver::sharedObserver().setMinimumTimeBetweeenDataRecordsRemoval(seconds);
    102102}
    103103
    104104void WebResourceLoadStatisticsManager::setGrandfatheringTime(Seconds seconds)
    105105{
    106     WebCore::ResourceLoadObserver::sharedObserver().setGrandfatheringTime(seconds);
     106    WebResourceLoadObserver::sharedObserver().setGrandfatheringTime(seconds);
    107107}
    108108
    109109void WebResourceLoadStatisticsManager::fireDataModificationHandler()
    110110{
    111     WebCore::ResourceLoadObserver::sharedObserver().fireDataModificationHandler();
     111    WebResourceLoadObserver::sharedObserver().fireDataModificationHandler();
    112112}
    113113
    114114void WebResourceLoadStatisticsManager::fireShouldPartitionCookiesHandler()
    115115{
    116     WebCore::ResourceLoadObserver::sharedObserver().fireShouldPartitionCookiesHandler();
     116    WebResourceLoadObserver::sharedObserver().fireShouldPartitionCookiesHandler();
    117117}
    118118
     
    120120{
    121121    if (value)
    122         WebCore::ResourceLoadObserver::sharedObserver().fireShouldPartitionCookiesHandler({ }, {hostName}, false);
     122        WebResourceLoadObserver::sharedObserver().fireShouldPartitionCookiesHandler({ }, {hostName}, false);
    123123    else
    124         WebCore::ResourceLoadObserver::sharedObserver().fireShouldPartitionCookiesHandler({hostName}, { }, false);
     124        WebResourceLoadObserver::sharedObserver().fireShouldPartitionCookiesHandler({hostName}, { }, false);
    125125}
    126126
    127127void WebResourceLoadStatisticsManager::fireTelemetryHandler()
    128128{
    129     WebCore::ResourceLoadObserver::sharedObserver().fireTelemetryHandler();
     129    WebResourceLoadObserver::sharedObserver().fireTelemetryHandler();
    130130}
    131131   
     
    152152void WebResourceLoadStatisticsManager::clearInMemoryAndPersistentStore()
    153153{
    154     WebCore::ResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore();
     154    WebResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore();
    155155}
    156156
    157157void WebResourceLoadStatisticsManager::clearInMemoryAndPersistentStoreModifiedSinceHours(unsigned hours)
    158158{
    159     WebCore::ResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore(std::chrono::system_clock::now() - std::chrono::hours(hours));
     159    WebResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore(std::chrono::system_clock::now() - std::chrono::hours(hours));
    160160}
    161161   
    162162void WebResourceLoadStatisticsManager::resetToConsistentState()
    163163{
    164     WebCore::ResourceLoadObserver::sharedObserver().setTimeToLiveUserInteraction(24_h * 30.);
    165     WebCore::ResourceLoadObserver::sharedObserver().setTimeToLiveCookiePartitionFree(24_h);
    166     WebCore::ResourceLoadObserver::sharedObserver().setMinimumTimeBetweeenDataRecordsRemoval(1_h);
    167     WebCore::ResourceLoadObserver::sharedObserver().setGrandfatheringTime(1_h);
     164    WebResourceLoadObserver::sharedObserver().setTimeToLiveUserInteraction(24_h * 30.);
     165    WebResourceLoadObserver::sharedObserver().setTimeToLiveCookiePartitionFree(24_h);
     166    WebResourceLoadObserver::sharedObserver().setMinimumTimeBetweeenDataRecordsRemoval(1_h);
     167    WebResourceLoadObserver::sharedObserver().setGrandfatheringTime(1_h);
    168168    WebResourceLoadStatisticsStore::setNotifyPagesWhenDataRecordsWereScanned(false);
    169169    WebResourceLoadStatisticsTelemetry::setNotifyPagesWhenTelemetryWasCaptured(false);
    170170    WebResourceLoadStatisticsStore::setShouldClassifyResourcesBeforeDataRecordsRemoval(true);
    171     WebCore::ResourceLoadObserver::sharedObserver().clearInMemoryStore();
     171    WebResourceLoadObserver::sharedObserver().clearInMemoryStore();
    172172}
    173173   
  • trunk/Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp

    r218965 r218968  
    3131#include "WebProcessPool.h"
    3232#include "WebProcessProxy.h"
     33#include "WebResourceLoadObserver.h"
    3334#include "WebResourceLoadStatisticsManager.h"
    3435#include "WebResourceLoadStatisticsStoreMessages.h"
     
    3839#include <WebCore/FileSystem.h>
    3940#include <WebCore/KeyedCoding.h>
    40 #include <WebCore/ResourceLoadObserver.h>
    4141#include <WebCore/ResourceLoadStatistics.h>
    4242#include <wtf/CrossThreadCopier.h>
     
    211211    ASSERT(RunLoop::isMain());
    212212   
    213     ResourceLoadObserver::sharedObserver().setStatisticsStore(m_resourceLoadStatisticsStore.copyRef());
    214     ResourceLoadObserver::sharedObserver().setStatisticsQueue(m_statisticsQueue.copyRef());
     213    WebResourceLoadObserver::sharedObserver().setStatisticsStore(m_resourceLoadStatisticsStore.copyRef());
     214    WebResourceLoadObserver::sharedObserver().setStatisticsQueue(m_statisticsQueue.copyRef());
    215215    m_resourceLoadStatisticsStore->setNotificationCallback([this, protectedThis = makeRef(*this)] {
    216216        if (m_resourceLoadStatisticsStore->isEmpty())
  • trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r218871 r218968  
    3535#include "WebProcessMessages.h"
    3636#include "WebProcessPool.h"
     37#include "WebResourceLoadObserver.h"
    3738#include "WebResourceLoadStatisticsStore.h"
    3839#include "WebResourceLoadStatisticsStoreMessages.h"
     
    4445#include <WebCore/HTMLMediaElement.h>
    4546#include <WebCore/OriginLock.h>
    46 #include <WebCore/ResourceLoadObserver.h>
    4747#include <WebCore/SecurityOrigin.h>
    4848#include <WebCore/SecurityOriginData.h>
     
    817817
    818818    if (dataTypes.contains(WebsiteDataType::ResourceLoadStatistics))
    819         WebCore::ResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore(modifiedSince);
     819        WebResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore(modifiedSince);
    820820
    821821    // There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
     
    10861086
    10871087    if (dataTypes.contains(WebsiteDataType::ResourceLoadStatistics))
    1088         WebCore::ResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore();
     1088        WebResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore();
    10891089
    10901090    // There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r218841 r218968  
    903903                41FAF5F91E3C1025001AE678 /* LibWebRTCResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FAF5F71E3C0B47001AE678 /* LibWebRTCResolver.cpp */; };
    904904                4450AEC01DC3FAE5009943F2 /* SharedMemoryCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4450AEBF1DC3FAE5009943F2 /* SharedMemoryCocoa.cpp */; };
     905                46343B3A1F0599230003F309 /* WebResourceLoadObserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4646AB321F0598D4009D07FC /* WebResourceLoadObserver.cpp */; };
     906                46343B3B1F0599260003F309 /* WebResourceLoadObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4646AB331F0598D4009D07FC /* WebResourceLoadObserver.h */; };
    905907                463FD4801EB9459600A2982C /* WKProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD47F1EB9458400A2982C /* WKProcessTerminationReason.h */; settings = {ATTRIBUTES = (Private, ); }; };
    906908                463FD4821EB94EC000A2982C /* ProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */; };
     
    31443146                463FD47F1EB9458400A2982C /* WKProcessTerminationReason.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKProcessTerminationReason.h; sourceTree = "<group>"; };
    31453147                463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProcessTerminationReason.h; sourceTree = "<group>"; };
     3148                4646AB321F0598D4009D07FC /* WebResourceLoadObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebResourceLoadObserver.cpp; sourceTree = "<group>"; };
     3149                4646AB331F0598D4009D07FC /* WebResourceLoadObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebResourceLoadObserver.h; sourceTree = "<group>"; };
    31463150                465250E51ECF52CD002025CB /* WebKit2InitializeCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebKit2InitializeCocoa.mm; sourceTree = "<group>"; };
    31473151                46A2B6061E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundProcessResponsivenessTimer.cpp; sourceTree = "<group>"; };
     
    68606864                                BC032DCF10F4389F0058C15A /* WebProcessProxy.h */,
    68616865                                BCEE7AB312817095009827DA /* WebProcessProxy.messages.in */,
     6866                                4646AB321F0598D4009D07FC /* WebResourceLoadObserver.cpp */,
     6867                                4646AB331F0598D4009D07FC /* WebResourceLoadObserver.h */,
    68626868                                6BE969A11E43B8A4008B7483 /* WebResourceLoadStatisticsManager.cpp */,
    68636869                                6BE9699F1E43B86E008B7483 /* WebResourceLoadStatisticsManager.h */,
     
    85698575                                0F59479B187B3B6000437857 /* RemoteScrollingCoordinatorProxy.h in Headers */,
    85708576                                0F5947A4187B3B7D00437857 /* RemoteScrollingCoordinatorTransaction.h in Headers */,
     8577                                46343B3B1F0599260003F309 /* WebResourceLoadObserver.h in Headers */,
    85718578                                0F59479D187B3B6000437857 /* RemoteScrollingTree.h in Headers */,
    85728579                                A55BA81F1BA25B27007CD33D /* RemoteWebInspectorProxy.h in Headers */,
     
    1028510292                                BC032DBA10F4380F0058C15A /* WebEventConversion.cpp in Sources */,
    1028610293                                BC111B5E112F629800337BAB /* WebEventFactory.mm in Sources */,
     10294                                46343B3A1F0599230003F309 /* WebResourceLoadObserver.cpp in Sources */,
    1028710295                                BCE469531214E6CB000B98EB /* WebFormClient.cpp in Sources */,
    1028810296                                BCE469551214E6CB000B98EB /* WebFormSubmissionListenerProxy.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.