Changeset 242603 in webkit
- Timestamp:
- Mar 7, 2019 11:16:38 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r242598 r242603 1 2019-03-07 John Wilander <wilander@apple.com> 2 3 Resource Load Statistics: Log first-party navigations with link decoration 4 https://bugs.webkit.org/show_bug.cgi?id=195301 5 <rdar://problem/48569971> 6 7 Reviewed by Brent Fulgham. 8 9 * http/tests/resourceLoadStatistics/log-cross-site-load-with-link-decoration-expected.txt: Added. 10 * http/tests/resourceLoadStatistics/log-cross-site-load-with-link-decoration.html: Added. 11 1 12 2019-03-07 John Wilander <wilander@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r242601 r242603 1 2019-03-07 John Wilander <wilander@apple.com> 2 3 Resource Load Statistics: Log first-party navigations with link decoration 4 https://bugs.webkit.org/show_bug.cgi?id=195301 5 <rdar://problem/48569971> 6 7 Reviewed by Brent Fulgham. 8 9 Test: http/tests/resourceLoadStatistics/log-cross-site-load-with-link-decoration.html 10 11 This patch adds two new members to WebCore::ResourceLoadStatistics: 12 - topFrameLinkDecorationsFrom, a set of domains 13 - gotLinkDecorationFromPrevalentResource, a boolean state 14 15 * loader/ResourceLoadStatistics.cpp: 16 (WebCore::ResourceLoadStatistics::encode const): 17 (WebCore::ResourceLoadStatistics::decode): 18 (WebCore::ResourceLoadStatistics::toString const): 19 (WebCore::ResourceLoadStatistics::merge): 20 * loader/ResourceLoadStatistics.h: 21 1 22 2019-03-07 Simon Fraser <simon.fraser@apple.com> 2 23 -
trunk/Source/WebCore/loader/ResourceLoadStatistics.cpp
r242155 r242603 94 94 encodeHashSet(encoder, "topFrameUniqueRedirectsTo"_s, "domain"_s, topFrameUniqueRedirectsTo); 95 95 encodeHashSet(encoder, "topFrameUniqueRedirectsFrom"_s, "domain"_s, topFrameUniqueRedirectsFrom); 96 encodeHashSet(encoder, "topFrameLinkDecorationsFrom"_s, "domain", topFrameLinkDecorationsFrom); 97 encoder.encodeBool("gotLinkDecorationFromPrevalentResource"_s, gotLinkDecorationFromPrevalentResource); 96 98 97 99 // Subframe stats … … 216 218 for (auto& domain : topFrameUniqueRedirectsFromCounted.values()) 217 219 topFrameUniqueRedirectsFrom.add(domain); 220 } 221 222 if (modelVersion >= 16) { 223 decodeHashSet(decoder, "topFrameLinkDecorationsFrom", "domain", topFrameLinkDecorationsFrom); 224 if (!decoder.decodeBool("gotLinkDecorationFromPrevalentResource", gotLinkDecorationFromPrevalentResource)) 225 return false; 218 226 } 219 227 … … 423 431 appendHashSet(builder, "topFrameUniqueRedirectsTo", topFrameUniqueRedirectsTo); 424 432 appendHashSet(builder, "topFrameUniqueRedirectsFrom", topFrameUniqueRedirectsFrom); 433 appendHashSet(builder, "topFrameLinkDecorationsFrom", topFrameLinkDecorationsFrom); 434 appendBoolean(builder, "gotLinkDecorationFromPrevalentResource", gotLinkDecorationFromPrevalentResource); 425 435 426 436 // Subframe stats … … 497 507 mergeHashSet(topFrameUniqueRedirectsTo, other.topFrameUniqueRedirectsTo); 498 508 mergeHashSet(topFrameUniqueRedirectsFrom, other.topFrameUniqueRedirectsFrom); 509 mergeHashSet(topFrameLinkDecorationsFrom, other.topFrameLinkDecorationsFrom); 510 gotLinkDecorationFromPrevalentResource |= other.gotLinkDecorationFromPrevalentResource; 499 511 500 512 // Subframe stats -
trunk/Source/WebCore/loader/ResourceLoadStatistics.h
r242155 r242603 79 79 HashSet<RegistrableDomain> topFrameUniqueRedirectsTo; 80 80 HashSet<RegistrableDomain> topFrameUniqueRedirectsFrom; 81 HashSet<RegistrableDomain> topFrameLinkDecorationsFrom; 82 bool gotLinkDecorationFromPrevalentResource { false }; 81 83 82 84 // Subframe stats -
trunk/Source/WebKit/ChangeLog
r242600 r242603 1 2019-03-07 John Wilander <wilander@apple.com> 2 3 Resource Load Statistics: Log first-party navigations with link decoration 4 https://bugs.webkit.org/show_bug.cgi?id=195301 5 <rdar://problem/48569971> 6 7 Reviewed by Brent Fulgham. 8 9 This patch adds a call to the network process' resource load statistics to 10 log cross-site navigations with link decoration. The logging checks if the 11 source of the navigation is a prevalent resource and if so, sets the 12 appropriate flag for the destination. 13 14 * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp: 15 (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore): 16 (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema): 17 (WebKit::ResourceLoadStatisticsDatabaseStore::logSubresourceRedirect): 18 (WebKit::ResourceLoadStatisticsDatabaseStore::logCrossSiteLoadWithLinkDecoration): 19 * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h: 20 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp: 21 (WebKit::ResourceLoadStatisticsMemoryStore::logCrossSiteLoadWithLinkDecoration): 22 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h: 23 * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h: 24 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp: 25 (WebKit::WebResourceLoadStatisticsStore::logCrossSiteLoadWithLinkDecoration): 26 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h: 27 * NetworkProcess/NetworkProcess.cpp: 28 (WebKit::NetworkProcess::committedCrossSiteLoadWithLinkDecoration): 29 This now receives a completion handler. This is in preparation for 30 test cases where we need to log such an event and wait for it to 31 finish before continuing. 32 * NetworkProcess/NetworkProcess.h: 33 * NetworkProcess/NetworkProcess.messages.in: 34 * UIProcess/Network/NetworkProcessProxy.cpp: 35 (WebKit::NetworkProcessProxy::committedCrossSiteLoadWithLinkDecoration): 36 * UIProcess/Network/NetworkProcessProxy.h: 37 * UIProcess/WebPageProxy.cpp: 38 (WebKit::WebPageProxy::didCommitLoadForFrame): 39 * UIProcess/WebProcessPool.cpp: 40 (WebKit::WebProcessPool::committedCrossSiteLoadWithLinkDecoration): 41 * UIProcess/WebProcessPool.h: 42 1 43 2019-03-07 Per Arne Vollan <pvollan@apple.com> 2 44 -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp
r242409 r242603 76 76 constexpr auto topFrameUniqueRedirectsFromExistsQuery = "SELECT EXISTS (SELECT 1 FROM TopFrameUniqueRedirectsFrom WHERE targetDomainID = ? " 77 77 "AND fromDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))"_s; 78 constexpr auto topFrameLinkDecorationsFromQuery = "INSERT INTO TopFrameLinkDecorationsFrom (fromDomainID, toDomainID) " 79 "SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain = ?"_s; 80 constexpr auto topFrameLinkDecorationsFromExistsQuery = "SELECT EXISTS (SELECT 1 FROM TopFrameLinkDecorationsFrom WHERE fromDomainID = ? " 81 "AND toDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))"_s; 78 82 constexpr auto subframeUnderTopFrameDomainsQuery = "INSERT INTO SubframeUnderTopFrameDomains (subFrameDomainID, topFrameDomainID) " 79 83 "SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain = ?"_s; … … 129 133 "FOREIGN KEY(targetDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE, " 130 134 "FOREIGN KEY(fromDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE);"_s; 131 135 136 constexpr auto createTopFrameLinkDecorationsFrom = "CREATE TABLE TopFrameLinkDecorationsFrom (" 137 "fromDomainID INTEGER NOT NULL, toDomainID INTEGER NOT NULL, " 138 "FOREIGN KEY(fromDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE, " 139 "FOREIGN KEY(toDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE);"_s; 140 132 141 constexpr auto createSubframeUnderTopFrameDomains = "CREATE TABLE SubframeUnderTopFrameDomains (" 133 142 "subFrameDomainID INTEGER NOT NULL, topFrameDomainID INTEGER NOT NULL, " … … 162 171 , m_topFrameUniqueRedirectsFrom(m_database, topFrameUniqueRedirectsFromQuery) 163 172 , m_topFrameUniqueRedirectsFromExists(m_database, topFrameUniqueRedirectsFromExistsQuery) 173 , m_topFrameLinkDecorationsFrom(m_database, topFrameLinkDecorationsFromQuery) 174 , m_topFrameLinkDecorationsFromExists(m_database, topFrameLinkDecorationsFromExistsQuery) 164 175 , m_subframeUnderTopFrameDomains(m_database, subframeUnderTopFrameDomainsQuery) 165 176 , m_subframeUnderTopFrameDomainExists(m_database, subframeUnderTopFrameDomainExistsQuery) … … 260 271 } 261 272 273 if (!m_database.executeCommand(createTopFrameLinkDecorationsFrom)) { 274 LOG_ERROR("Could not create TopFrameLinkDecorationsFrom table in database (%i) - %s", m_database.lastError(), m_database.lastErrorMsg()); 275 return false; 276 } 277 262 278 if (!m_database.executeCommand(createSubframeUnderTopFrameDomains)) { 263 279 LOG_ERROR("Could not create SubframeUnderTopFrameDomains table in database (%i) - %s", m_database.lastError(), m_database.lastErrorMsg()); … … 967 983 } 968 984 985 void ResourceLoadStatisticsDatabaseStore::logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain& fromDomain, const NavigatedToDomain& toDomain) 986 { 987 ASSERT(!RunLoop::isMain()); 988 ASSERT(fromDomain != toDomain); 989 990 auto fromDomainResult = ensureResourceStatisticsForRegistrableDomain(fromDomain); 991 992 if (!relationshipExists(m_topFrameLinkDecorationsFromExists, fromDomainResult.second, toDomain)) { 993 insertDomainRelationship(m_topFrameLinkDecorationsFrom, fromDomainResult.second, toDomain); 994 scheduleStatisticsProcessingRequestIfNecessary(); 995 } 996 } 997 969 998 void ResourceLoadStatisticsDatabaseStore::setUserInteraction(const RegistrableDomain& domain, bool hadUserInteraction, WallTime mostRecentInteraction) 970 999 { -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h
r242406 r242603 99 99 void logSubresourceLoading(const SubResourceDomain&, const TopFrameDomain&, WallTime lastSeen) override; 100 100 void logSubresourceRedirect(const RedirectedFromDomain&, const RedirectedToDomain&) override; 101 void logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain&, const NavigatedToDomain&) override; 101 102 102 103 void clearUserInteraction(const RegistrableDomain&) override; … … 175 176 WebCore::SQLiteStatement m_topFrameUniqueRedirectsFrom; 176 177 mutable WebCore::SQLiteStatement m_topFrameUniqueRedirectsFromExists; 178 WebCore::SQLiteStatement m_topFrameLinkDecorationsFrom; 179 mutable WebCore::SQLiteStatement m_topFrameLinkDecorationsFromExists; 177 180 WebCore::SQLiteStatement m_subframeUnderTopFrameDomains; 178 181 mutable WebCore::SQLiteStatement m_subframeUnderTopFrameDomainExists; -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp
r242406 r242603 49 49 using namespace WebCore; 50 50 51 constexpr unsigned statisticsModelVersion { 1 5};51 constexpr unsigned statisticsModelVersion { 16 }; 52 52 53 53 struct StatisticsLastSeen { … … 425 425 } 426 426 427 void ResourceLoadStatisticsMemoryStore::logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain& fromDomain, const NavigatedToDomain& toDomain) 428 { 429 ASSERT(!RunLoop::isMain()); 430 ASSERT(fromDomain != toDomain); 431 432 auto& toStatistics = ensureResourceStatisticsForRegistrableDomain(toDomain); 433 toStatistics.topFrameLinkDecorationsFrom.add(fromDomain); 434 435 auto& fromStatistics = ensureResourceStatisticsForRegistrableDomain(fromDomain); 436 if (fromStatistics.isPrevalentResource) 437 toStatistics.gotLinkDecorationFromPrevalentResource = true; 438 } 439 427 440 void ResourceLoadStatisticsMemoryStore::clearUserInteraction(const RegistrableDomain& domain) 428 441 { -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h
r242406 r242603 104 104 void logSubresourceLoading(const SubResourceDomain&, const TopFrameDomain&, WallTime lastSeen) override; 105 105 void logSubresourceRedirect(const RedirectedFromDomain&, const RedirectedToDomain&) override; 106 void logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain&, const NavigatedToDomain&) override; 106 107 107 108 void clearUserInteraction(const RegistrableDomain&) override; -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h
r242406 r242603 164 164 virtual void logSubresourceLoading(const SubResourceDomain&, const TopFrameDomain&, WallTime lastSeen) = 0; 165 165 virtual void logSubresourceRedirect(const RedirectedFromDomain&, const RedirectedToDomain&) = 0; 166 virtual void logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain&, const NavigatedToDomain&) = 0; 166 167 167 168 virtual void clearUserInteraction(const RegistrableDomain&) = 0; -
trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp
r242598 r242603 544 544 } 545 545 546 void WebResourceLoadStatisticsStore::logCrossSiteLoadWithLinkDecoration(const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, CompletionHandler<void()>&& completionHandler) 547 { 548 ASSERT(RunLoop::isMain()); 549 ASSERT(fromDomain != toDomain); 550 551 postTask([this, fromDomain = fromDomain.isolatedCopy(), toDomain = toDomain.isolatedCopy(), completionHandler = WTFMove(completionHandler)]() mutable { 552 if (m_statisticsStore) 553 m_statisticsStore->logCrossSiteLoadWithLinkDecoration(fromDomain, toDomain); 554 postTaskReply(WTFMove(completionHandler)); 555 }); 556 } 557 546 558 void WebResourceLoadStatisticsStore::clearUserInteraction(const RegistrableDomain& domain, CompletionHandler<void()>&& completionHandler) 547 559 { -
trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h
r242598 r242603 104 104 void logSubresourceLoading(const SubResourceDomain&, const TopFrameDomain&, WallTime lastSeen, CompletionHandler<void()>&&); 105 105 void logSubresourceRedirect(const RedirectedFromDomain&, const RedirectedToDomain&, CompletionHandler<void()>&&); 106 void logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain&, const NavigatedToDomain&, CompletionHandler<void()>&&); 106 107 void clearUserInteraction(const TopFrameDomain&, CompletionHandler<void()>&&); 107 108 void deleteWebsiteDataForRegistrableDomainsInAllPersistentDataStores(OptionSet<WebsiteDataType>, Vector<RegistrableDomain>&&, bool shouldNotifyPage, WebCore::IncludeHttpOnlyCookies, CompletionHandler<void(const HashSet<RegistrableDomain>&)>&&); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r242599 r242603 1188 1188 } 1189 1189 1190 void NetworkProcess::committedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID )1190 void NetworkProcess::committedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID, CompletionHandler<void()>&& completionHandler) 1191 1191 { 1192 1192 if (auto* networkStorageSession = storageSession(sessionID)) … … 1194 1194 else 1195 1195 ASSERT_NOT_REACHED(); 1196 1197 if (auto* networkSession = this->networkSession(sessionID)) { 1198 if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) 1199 resourceLoadStatistics->logCrossSiteLoadWithLinkDecoration(fromDomain, toDomain, WTFMove(completionHandler)); 1200 else 1201 completionHandler(); 1202 } else { 1203 ASSERT_NOT_REACHED(); 1204 completionHandler(); 1205 } 1196 1206 } 1197 1207 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r242599 r242603 257 257 void setTopFrameUniqueRedirectFrom(PAL::SessionID, const TopFrameDomain&, const RedirectedFromDomain&, CompletionHandler<void()>&&); 258 258 void registrableDomainsWithWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, bool shouldNotifyPage, CompletionHandler<void(HashSet<RegistrableDomain>&&)>&&); 259 void committedCrossSiteLoadWithLinkDecoration(PAL::SessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID );259 void committedCrossSiteLoadWithLinkDecoration(PAL::SessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID, CompletionHandler<void()>&&); 260 260 void resetCrossSiteLoadsWithLinkDecorationForTesting(PAL::SessionID, CompletionHandler<void()>&&); 261 261 #endif -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
r242598 r242603 133 133 SetTopFrameUniqueRedirectFrom(PAL::SessionID sessionID, WebCore::RegistrableDomain topFrameDomain, WebCore::RegistrableDomain redirectedFromDomain) -> () Async 134 134 ResetCacheMaxAgeCapForPrevalentResources(PAL::SessionID sessionID) -> () Async 135 CommittedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, WebCore::RegistrableDomain fromDomain, WebCore::RegistrableDomain toDomain, uint64_t pageID) 135 CommittedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, WebCore::RegistrableDomain fromDomain, WebCore::RegistrableDomain toDomain, uint64_t pageID) -> () Async 136 136 ResetCrossSiteLoadsWithLinkDecorationForTesting(PAL::SessionID sessionID) -> () Async 137 137 DeleteCookiesForTesting(PAL::SessionID sessionID, WebCore::RegistrableDomain domain, bool includeHttpOnlyCookies) -> () Async -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r242598 r242603 933 933 } 934 934 935 void NetworkProcessProxy::committedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID, CompletionHandler<void()>&& completionHandler) 936 { 937 if (!canSendMessage()) { 938 completionHandler(); 939 return; 940 } 941 942 sendWithAsyncReply(Messages::NetworkProcess::CommittedCrossSiteLoadWithLinkDecoration(sessionID, fromDomain, toDomain, pageID), WTFMove(completionHandler)); 943 } 944 935 945 void NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting(PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler) 936 946 { -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r242598 r242603 145 145 void setShouldClassifyResourcesBeforeDataRecordsRemoval(PAL::SessionID, bool, CompletionHandler<void()>&&); 146 146 void resetCacheMaxAgeCapForPrevalentResources(PAL::SessionID, CompletionHandler<void()>&&); 147 void committedCrossSiteLoadWithLinkDecoration(PAL::SessionID, const NavigatedFromDomain&, const NavigatedToDomain&, PageID, CompletionHandler<void()>&&); 147 148 void resetCrossSiteLoadsWithLinkDecorationForTesting(PAL::SessionID, CompletionHandler<void()>&&); 148 149 void deleteCookiesForTesting(PAL::SessionID, const RegistrableDomain&, bool includeHttpOnlyCookies, CompletionHandler<void()>&&); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r242521 r242603 4084 4084 URL requesterURL { URL(), requesterOrigin.toString() }; 4085 4085 if (!currentDomain.matches(requesterURL)) 4086 m_process->processPool(). sendToNetworkingProcess(Messages::NetworkProcess::CommittedCrossSiteLoadWithLinkDecoration(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, m_pageID));4086 m_process->processPool().committedCrossSiteLoadWithLinkDecoration(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, m_pageID); 4087 4087 } 4088 4088 #endif -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r242496 r242603 2473 2473 m_networkProcess->clearAdClickAttribution(sessionID, WTFMove(completionHandler)); 2474 2474 } 2475 2476 void WebProcessPool::committedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID) 2477 { 2478 #if ENABLE(RESOURCE_LOAD_STATISTICS) 2479 if (!m_networkProcess) 2480 return; 2481 2482 m_networkProcess->committedCrossSiteLoadWithLinkDecoration(sessionID, fromDomain, toDomain, pageID, [] { }); 2483 #else 2484 UNUSED_PARAM(sessionID); 2485 UNUSED_PARAM(fromDomain); 2486 UNUSED_PARAM(toDomain); 2487 UNUSED_PARAM(pageID); 2488 #endif 2489 } 2475 2490 2476 2491 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r242496 r242603 45 45 #include "WebContextConnectionClient.h" 46 46 #include "WebProcessProxy.h" 47 #include <WebCore/RegistrableDomain.h> 47 48 #include <WebCore/SecurityOriginHash.h> 48 49 #include <WebCore/SharedStringHash.h> … … 487 488 void dumpAdClickAttribution(PAL::SessionID, CompletionHandler<void(const String&)>&&); 488 489 void clearAdClickAttribution(PAL::SessionID, CompletionHandler<void()>&&); 490 void committedCrossSiteLoadWithLinkDecoration(PAL::SessionID, const WebCore::RegistrableDomain& fromDomain, const WebCore::RegistrableDomain& toDomain, uint64_t pageID); 489 491 490 492 #if PLATFORM(GTK) || PLATFORM(WPE)
Note: See TracChangeset
for help on using the changeset viewer.