~mmach/netext73/webkit2gtk

« back to all changes in this revision

Viewing changes to Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.h

  • Committer: mmach
  • Date: 2023-06-16 17:21:37 UTC
  • Revision ID: netbit73@gmail.com-20230616172137-2rqx6yr96ga9g3kp
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
* Copyright (C) 2019 Apple Inc. All rights reserved.
 
3
*
 
4
* Redistribution and use in source and binary forms, with or without
 
5
* modification, are permitted provided that the following conditions
 
6
* are met:
 
7
* 1. Redistributions of source code must retain the above copyright
 
8
*    notice, this list of conditions and the following disclaimer.
 
9
* 2. Redistributions in binary form must reproduce the above copyright
 
10
*    notice, this list of conditions and the following disclaimer in the
 
11
*    documentation and/or other materials provided with the distribution.
 
12
*
 
13
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 
14
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
15
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 
16
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 
17
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
18
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
19
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 
20
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 
21
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
22
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
23
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
24
*/
 
25
 
 
26
#pragma once
 
27
 
 
28
#if ENABLE(RESOURCE_LOAD_STATISTICS)
 
29
 
 
30
#include <WebCore/PageIdentifier.h>
 
31
#include <WebCore/ResourceLoadObserver.h>
 
32
#include <WebCore/Timer.h>
 
33
#include <wtf/Forward.h>
 
34
 
 
35
namespace WebKit {
 
36
 
 
37
class WebPage;
 
38
 
 
39
class WebResourceLoadObserver final : public WebCore::ResourceLoadObserver {
 
40
public:
 
41
    WebResourceLoadObserver();
 
42
    ~WebResourceLoadObserver();
 
43
 
 
44
    void logSubresourceLoading(const WebCore::Frame*, const WebCore::ResourceRequest& newRequest, const WebCore::ResourceResponse& redirectResponse, FetchDestinationIsScriptLike) final;
 
45
    void logWebSocketLoading(const URL& targetURL, const URL& mainFrameURL) final;
 
46
    void logUserInteractionWithReducedTimeResolution(const WebCore::Document&) final;
 
47
    void logFontLoad(const WebCore::Document&, const String& familyName, bool loadStatus) final;
 
48
    void logCanvasRead(const WebCore::Document&) final;
 
49
    void logCanvasWriteOrMeasure(const WebCore::Document&, const String& textWritten) final;
 
50
    void logNavigatorAPIAccessed(const WebCore::Document&, const WebCore::ResourceLoadStatistics::NavigatorAPI) final;
 
51
    void logScreenAPIAccessed(const WebCore::Document&, const WebCore::ResourceLoadStatistics::ScreenAPI) final;
 
52
    void logSubresourceLoadingForTesting(const WebCore::RegistrableDomain& firstPartyDomain, const WebCore::RegistrableDomain& thirdPartyDomain, bool shouldScheduleNotification);
 
53
 
 
54
#if !RELEASE_LOG_DISABLED
 
55
    static void setShouldLogUserInteraction(bool);
 
56
#endif
 
57
 
 
58
    String statisticsForURL(const URL&) final;
 
59
    void updateCentralStatisticsStore() final;
 
60
    void clearState() final;
 
61
    
 
62
    bool hasStatistics() const final { return !m_resourceStatisticsMap.isEmpty(); }
 
63
 
 
64
private:
 
65
    WebCore::ResourceLoadStatistics& ensureResourceStatisticsForRegistrableDomain(const WebCore::RegistrableDomain&);
 
66
    void scheduleNotificationIfNeeded();
 
67
 
 
68
    Vector<WebCore::ResourceLoadStatistics> takeStatistics();
 
69
    void requestStorageAccessUnderOpener(const WebCore::RegistrableDomain& domainInNeedOfStorageAccess, WebPage& openerPage, WebCore::Document& openerDocument);
 
70
 
 
71
    HashMap<WebCore::RegistrableDomain, WebCore::ResourceLoadStatistics> m_resourceStatisticsMap;
 
72
    HashMap<WebCore::RegistrableDomain, WTF::WallTime> m_lastReportedUserInteractionMap;
 
73
 
 
74
    WebCore::Timer m_notificationTimer;
 
75
 
 
76
#if !RELEASE_LOG_DISABLED
 
77
    uint64_t m_loggingCounter { 0 };
 
78
    static bool shouldLogUserInteraction;
 
79
#endif
 
80
};
 
81
 
 
82
} // namespace WebKit
 
83
 
 
84
#endif // ENABLE(RESOURCE_LOAD_STATISTICS)