Changeset 244572 in webkit
- Timestamp:
- Apr 23, 2019 5:13:00 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r244563 r244572 1 2019-04-23 John Wilander <wilander@apple.com> 2 3 Remove Ad Click Attribution data when removing website data 4 https://bugs.webkit.org/show_bug.cgi?id=197215 5 <rdar://problem/47668988> 6 7 Reviewed by Chris Dumez. 8 9 * http/tests/adClickAttribution/clear-through-website-data-removal-expected.txt: Added. 10 * http/tests/adClickAttribution/clear-through-website-data-removal.html: Added. 11 1 12 2019-04-23 Devin Rousso <drousso@apple.com> 2 13 -
trunk/Source/WebKit/ChangeLog
r244570 r244572 1 2019-04-23 John Wilander <wilander@apple.com> 2 3 Remove Ad Click Attribution data when removing website data 4 https://bugs.webkit.org/show_bug.cgi?id=197215 5 <rdar://problem/47668988> 6 7 Reviewed by Chris Dumez. 8 9 This patch adds a new WebsiteDataType called AdClickAttributions and flags 10 it as owned by the network process. 11 12 The new website data type is added to the Cocoa API layer for 13 website data records management. 14 15 When either of the two WebsiteDataStore::removeData() functions calls 16 NetworkProcess::deleteWebsiteData() or 17 NetworkProcess::deleteWebsiteDataForOrigins() over IPC, the network 18 process now calls into AdClickAttributionManager::clear() and 19 AdClickAttributionManager::clearForRegistrableDomain() respectively, 20 if the website datatypes include WebsiteDataType::AdClickAttributions. 21 22 The patch removes a couple of completion handlers in NetworkSession function 23 calls are because those are not asynchronous. 24 25 * NetworkProcess/AdClickAttributionManager.cpp: 26 (WebKit::AdClickAttributionManager::clear): 27 (WebKit::AdClickAttributionManager::clearForRegistrableDomain): 28 (WebKit::AdClickAttributionManager::toString const): 29 * NetworkProcess/AdClickAttributionManager.h: 30 * NetworkProcess/NetworkProcess.cpp: 31 (WebKit::NetworkProcess::deleteWebsiteData): 32 (WebKit::NetworkProcess::deleteWebsiteDataForOrigins): 33 (WebKit::NetworkProcess::clearAdClickAttribution): 34 * NetworkProcess/NetworkSession.cpp: 35 (WebKit::NetworkSession::clearAdClickAttribution): 36 (WebKit::NetworkSession::clearAdClickAttributionForRegistrableDomain): 37 * NetworkProcess/NetworkSession.h: 38 * Shared/WebsiteData/WebsiteData.cpp: 39 (WebKit::WebsiteData::ownerProcess): 40 * Shared/WebsiteData/WebsiteDataType.h: 41 * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: 42 (WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval): 43 * UIProcess/API/C/WKWebsiteDataStoreRef.h: 44 * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm: 45 (dataTypesToString): 46 * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h: 47 (WebKit::toWebsiteDataType): 48 (WebKit::toWKWebsiteDataTypes): 49 * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h: 50 * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: 51 (+[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]): 52 1 53 2019-04-23 Tim Horton <timothy_horton@apple.com> 2 54 -
trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp
r244475 r244572 170 170 } 171 171 172 void AdClickAttributionManager::clear( CompletionHandler<void()>&& completionHandler)172 void AdClickAttributionManager::clear() 173 173 { 174 174 m_firePendingConversionRequestsTimer.stop(); 175 175 m_unconvertedAdClickAttributionMap.clear(); 176 176 m_convertedAdClickAttributionMap.clear(); 177 completionHandler(); 177 } 178 179 void AdClickAttributionManager::clearForRegistrableDomain(const RegistrableDomain& domain) 180 { 181 m_unconvertedAdClickAttributionMap.removeIf([&domain](auto& keyAndValue) { 182 return keyAndValue.key.first.registrableDomain == domain || keyAndValue.key.second.registrableDomain == domain; 183 }); 184 185 m_convertedAdClickAttributionMap.removeIf([&domain](auto& keyAndValue) { 186 return keyAndValue.key.first.registrableDomain == domain || keyAndValue.key.second.registrableDomain == domain; 187 }); 178 188 } 179 189 … … 198 208 unsigned convertedAttributionNumber = 0; 199 209 for (auto& attribution : m_convertedAdClickAttributionMap.values()) { 210 if (unconvertedAttributionNumber) 211 builder.append('\n'); 200 212 if (!convertedAttributionNumber) 201 213 builder.appendLiteral("Converted Ad Click Attributions:\n"); -
trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.h
r244402 r244572 58 58 void storeUnconverted(AdClickAttribution&&); 59 59 void convert(const Source&, const Destination&, Conversion&&); 60 void clear(CompletionHandler<void()>&&); 60 void clear(); 61 void clearForRegistrableDomain(const RegistrableDomain&); 61 62 void toString(CompletionHandler<void(String)>&&) const; 62 63 void setPingLoadFunction(Function<void(NetworkResourceLoadParameters&&, CompletionHandler<void(const WebCore::ResourceError&, const WebCore::ResourceResponse&)>&&)>&& pingLoadFunction) { m_pingLoadFunction = WTFMove(pingLoadFunction); } -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r244521 r244572 1426 1426 if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases) || websiteDataTypes.contains(WebsiteDataType::DOMCache)) 1427 1427 clearStorageQuota(sessionID); 1428 1429 if (websiteDataTypes.contains(WebsiteDataType::AdClickAttributions)) { 1430 if (auto* networkSession = this->networkSession(sessionID)) 1431 networkSession->clearAdClickAttribution(); 1432 } 1428 1433 } 1429 1434 … … 1466 1471 #endif 1467 1472 1473 if (websiteDataTypes.contains(WebsiteDataType::AdClickAttributions)) { 1474 if (auto* networkSession = this->networkSession(sessionID)) { 1475 for (auto& originData : originDatas) 1476 networkSession->clearAdClickAttributionForRegistrableDomain(RegistrableDomain::uncheckedCreateFromHost(originData.host)); 1477 } 1478 } 1479 1468 1480 auto clearTasksHandler = WTF::CallbackAggregator::create([this, callbackID] { 1469 1481 parentProcessConnection()->send(Messages::NetworkProcessProxy::DidDeleteWebsiteDataForOrigins(callbackID), 0); … … 2516 2528 { 2517 2529 if (auto* session = networkSession(sessionID)) 2518 return session->clearAdClickAttribution(WTFMove(completionHandler));2530 session->clearAdClickAttribution(); 2519 2531 2520 2532 completionHandler(); -
trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp
r244402 r244572 159 159 } 160 160 161 void NetworkSession::clearAdClickAttribution( CompletionHandler<void()>&& completionHandler)161 void NetworkSession::clearAdClickAttribution() 162 162 { 163 m_adClickAttribution->clear(WTFMove(completionHandler)); 163 m_adClickAttribution->clear(); 164 } 165 166 void NetworkSession::clearAdClickAttributionForRegistrableDomain(WebCore::RegistrableDomain&& domain) 167 { 168 m_adClickAttribution->clearForRegistrableDomain(WTFMove(domain)); 164 169 } 165 170 -
trunk/Source/WebKit/NetworkProcess/NetworkSession.h
r244288 r244572 83 83 void convertAdClickAttribution(const WebCore::AdClickAttribution::Source&, const WebCore::AdClickAttribution::Destination&, WebCore::AdClickAttribution::Conversion&&); 84 84 void dumpAdClickAttribution(CompletionHandler<void(String)>&&); 85 void clearAdClickAttribution(CompletionHandler<void()>&&); 85 void clearAdClickAttribution(); 86 void clearAdClickAttributionForRegistrableDomain(WebCore::RegistrableDomain&&); 86 87 void setAdClickAttributionOverrideTimerForTesting(bool value); 87 88 void setAdClickAttributionConversionURLForTesting(URL&&); -
trunk/Source/WebKit/Shared/WebsiteData/WebsiteData.cpp
r243902 r244572 129 129 case WebsiteDataType::DeviceIdHashSalt: 130 130 return WebsiteDataProcessType::UI; 131 case WebsiteDataType::AdClickAttributions: 132 return WebsiteDataProcessType::Network; 131 133 } 132 134 -
trunk/Source/WebKit/Shared/WebsiteData/WebsiteDataType.h
r237031 r244572 51 51 DOMCache = 1 << 15, 52 52 DeviceIdHashSalt = 1 << 16, 53 AdClickAttributions = 1 << 17, 53 54 }; 54 55 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp
r244382 r244572 659 659 #endif 660 660 } 661 662 void WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemovalFunction callback) 663 { 664 OptionSet<WebKit::WebsiteDataType> dataTypes = WebKit::WebsiteDataType::AdClickAttributions; 665 WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, WallTime::fromRawSeconds(0), [context, callback] { 666 callback(context); 667 }); 668 } 669 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h
r244382 r244572 132 132 WK_EXPORT void WKWebsiteDataStoreClearAllDeviceOrientationPermissions(WKWebsiteDataStoreRef dataStoreRef); 133 133 134 typedef void (*WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemovalFunction)(void* functionContext); 135 WK_EXPORT void WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemovalFunction callback); 136 134 137 #ifdef __cplusplus 135 138 } -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm
r242339 r244572 49 49 NSString * const _WKWebsiteDataTypeResourceLoadStatistics = @"_WKWebsiteDataTypeResourceLoadStatistics"; 50 50 NSString * const _WKWebsiteDataTypeCredentials = @"_WKWebsiteDataTypeCredentials"; 51 NSString * const _WKWebsiteDataTypeAdClickAttributions = @"_WKWebsiteDataTypeAdClickAttributions"; 51 52 52 53 #if PLATFORM(MAC) … … 101 102 if ([dataTypes containsObject:_WKWebsiteDataTypeCredentials]) 102 103 [array addObject:@"Credentials"]; 104 if ([dataTypes containsObject:_WKWebsiteDataTypeAdClickAttributions]) 105 [array addObject:@"Ad Click Attributions"]; 103 106 104 107 return [array componentsJoinedByString:@", "]; -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h
r242339 r244572 75 75 if ([websiteDataType isEqualToString:_WKWebsiteDataTypeCredentials]) 76 76 return WebsiteDataType::Credentials; 77 if ([websiteDataType isEqualToString:_WKWebsiteDataTypeAdClickAttributions]) 78 return WebsiteDataType::AdClickAttributions; 77 79 return WTF::nullopt; 78 80 } … … 130 132 if (websiteDataTypes.contains(WebsiteDataType::Credentials)) 131 133 [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeCredentials]; 134 if (websiteDataTypes.contains(WebsiteDataType::AdClickAttributions)) 135 [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeAdClickAttributions]; 132 136 133 137 return wkWebsiteDataTypes; -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h
r243376 r244572 35 35 WK_EXTERN NSString * const _WKWebsiteDataTypeResourceLoadStatistics WK_API_AVAILABLE(macos(10.12), ios(10.0)); 36 36 WK_EXTERN NSString * const _WKWebsiteDataTypeCredentials WK_API_AVAILABLE(macos(10.13), ios(11.0)); 37 WK_EXTERN NSString * const _WKWebsiteDataTypeAdClickAttributions WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 37 38 38 39 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm
r243911 r244572 203 203 static NSSet *allWebsiteDataTypes; 204 204 dispatch_once(&onceToken, ^ { 205 auto *privateTypes = @[_WKWebsiteDataTypeHSTSCache, _WKWebsiteDataTypeMediaKeys, _WKWebsiteDataTypeSearchFieldRecentSearches, _WKWebsiteDataTypeResourceLoadStatistics, _WKWebsiteDataTypeCredentials 205 auto *privateTypes = @[_WKWebsiteDataTypeHSTSCache, _WKWebsiteDataTypeMediaKeys, _WKWebsiteDataTypeSearchFieldRecentSearches, _WKWebsiteDataTypeResourceLoadStatistics, _WKWebsiteDataTypeCredentials, _WKWebsiteDataTypeAdClickAttributions 206 206 #if !TARGET_OS_IPHONE 207 207 , _WKWebsiteDataTypePlugInData -
trunk/Tools/ChangeLog
r244571 r244572 1 2019-04-23 John Wilander <wilander@apple.com> 2 3 Remove Ad Click Attribution data when removing website data 4 https://bugs.webkit.org/show_bug.cgi?id=197215 5 <rdar://problem/47668988> 6 7 Reviewed by Chris Dumez. 8 9 This patch adds test infrastructure to delete Ad Click Attribution data 10 through WebsiteDataStore::removeData(). 11 12 * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: 13 * WebKitTestRunner/InjectedBundle/TestRunner.cpp: 14 (WTR::TestRunner::clearAdClickAttribution): 15 (WTR::TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval): 16 * WebKitTestRunner/InjectedBundle/TestRunner.h: 17 * WebKitTestRunner/TestController.cpp: 18 (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval): 19 * WebKitTestRunner/TestController.h: 20 * WebKitTestRunner/TestInvocation.cpp: 21 (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): 22 1 23 2019-04-23 Jonathan Bedard <jbedard@apple.com> 2 24 -
trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
r244557 r244572 387 387 // Ad Click Attribution 388 388 void clearAdClickAttribution(); 389 void clearAdClickAttributionsThroughWebsiteDataRemoval(); 389 390 void setAdClickAttributionOverrideTimerForTesting(boolean value); 390 391 void setAdClickAttributionConversionURLForTesting(DOMString url); -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
r244565 r244572 2877 2877 } 2878 2878 2879 void TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval() 2880 { 2881 auto messageName = adoptWK(WKStringCreateWithUTF8CString("ClearAdClickAttributionsThroughWebsiteDataRemoval")); 2882 WKBundlePostSynchronousMessage(InjectedBundle::singleton().bundle(), messageName.get(), nullptr, nullptr); 2883 } 2884 2879 2885 void TestRunner::setAdClickAttributionOverrideTimerForTesting(bool value) 2880 2886 { -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
r244557 r244572 501 501 void dumpAdClickAttribution(); 502 502 void clearAdClickAttribution(); 503 void clearAdClickAttributionsThroughWebsiteDataRemoval(); 503 504 void setAdClickAttributionOverrideTimerForTesting(bool value); 504 505 void setAdClickAttributionConversionURLForTesting(JSStringRef); -
trunk/Tools/WebKitTestRunner/TestController.cpp
r244557 r244572 3606 3606 } 3607 3607 3608 void TestController::clearAdClickAttributionsThroughWebsiteDataRemoval() 3609 { 3610 auto* dataStore = WKContextGetWebsiteDataStore(platformContext()); 3611 AdClickAttributionVoidCallbackContext callbackContext(*this); 3612 WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval(dataStore, &callbackContext, adClickAttributionVoidCallback); 3613 runUntil(callbackContext.done, noTimeout); 3614 } 3615 3608 3616 void TestController::setAdClickAttributionOverrideTimerForTesting(bool value) 3609 3617 { -
trunk/Tools/WebKitTestRunner/TestController.h
r244557 r244572 315 315 String dumpAdClickAttribution(); 316 316 void clearAdClickAttribution(); 317 void clearAdClickAttributionsThroughWebsiteDataRemoval(); 317 318 void setAdClickAttributionOverrideTimerForTesting(bool value); 318 319 void setAdClickAttributionConversionURLForTesting(WKURLRef); -
trunk/Tools/WebKitTestRunner/TestInvocation.cpp
r244557 r244572 1644 1644 return nullptr; 1645 1645 } 1646 1646 1647 if (WKStringIsEqualToUTF8CString(messageName, "ClearAdClickAttributionsThroughWebsiteDataRemoval")) { 1648 TestController::singleton().clearAdClickAttributionsThroughWebsiteDataRemoval(); 1649 return nullptr; 1650 } 1651 1647 1652 if (WKStringIsEqualToUTF8CString(messageName, "SetAdClickAttributionOverrideTimerForTesting")) { 1648 1653 ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());
Note: See TracChangeset
for help on using the changeset viewer.