Changeset 254556 in webkit
- Timestamp:
- Jan 14, 2020 7:10:56 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 35 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r254555 r254556 1 2020-01-14 Chris Dumez <cdumez@apple.com> 2 3 document.cookie should not do a sync IPC to the network process for iframes that do not have storage access 4 https://bugs.webkit.org/show_bug.cgi?id=206108 5 6 Reviewed by Geoff Garen and John Wilander. 7 8 When ITP is enabled and ThirdPartyCookieBlockingMode::All mode is used (default in Safari), we can now detect 9 that a third-party iframe does not have cookie access completely on the WebContent process side, instead of 10 doing the check on the Network process side. The benefit is that this avoids doing a synchronous IPC every 11 time a third-party iframe which does not have storage access tries to access document.cookie in JavaScript. 12 Given that this should apply to a lot of iframes, this change is very beneficial to performance. 13 14 No new tests, covered by existing tests that are still passing. 15 16 * loader/CookieJar.cpp: 17 (WebCore::CookieJar::cookies const): 18 (WebCore::CookieJar::setCookies): 19 (WebCore::CookieJar::cookieRequestHeaderFieldValue const): 20 (WebCore::CookieJar::getRawCookies const): 21 * platform/network/CacheValidation.cpp: 22 (WebCore::cookieRequestHeaderFieldValue): 23 * platform/network/NetworkStorageSession.h: 24 * platform/network/cf/NetworkStorageSessionCFNetWin.cpp: 25 (WebCore::NetworkStorageSession::setCookiesFromDOM const): 26 (WebCore::NetworkStorageSession::cookiesForDOM const): 27 (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const): 28 (WebCore::NetworkStorageSession::getRawCookies const): 29 * platform/network/cocoa/NetworkStorageSessionCocoa.mm: 30 (WebCore::cookiesForURL): 31 (WebCore::cookiesForSession): 32 (WebCore::NetworkStorageSession::cookiesForDOM const): 33 (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const): 34 (WebCore::NetworkStorageSession::setCookiesFromDOM const): 35 (WebCore::NetworkStorageSession::getRawCookies const): 36 * platform/network/curl/NetworkStorageSessionCurl.cpp: 37 (WebCore::NetworkStorageSession::setCookiesFromDOM const): 38 (WebCore::NetworkStorageSession::cookiesForDOM const): 39 (WebCore::NetworkStorageSession::getRawCookies const): 40 (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const): 41 * platform/network/soup/NetworkStorageSessionSoup.cpp: 42 (WebCore::NetworkStorageSession::setCookiesFromDOM const): 43 (WebCore::NetworkStorageSession::getRawCookies const): 44 (WebCore::NetworkStorageSession::cookiesForDOM const): 45 (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const): 46 1 47 2020-01-14 Peng Liu <peng.liu6@apple.com> 2 48 -
trunk/Source/WebCore/loader/CookieJar.cpp
r250191 r254556 81 81 std::pair<String, bool> result; 82 82 if (auto* session = m_storageSessionProvider->storageSession()) 83 result = session->cookiesForDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, includeSecureCookies );83 result = session->cookiesForDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, includeSecureCookies, ShouldAskITP::Yes); 84 84 else 85 85 ASSERT_NOT_REACHED(); … … 115 115 116 116 if (auto* session = m_storageSessionProvider->storageSession()) 117 session->setCookiesFromDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, cookieString);117 session->setCookiesFromDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, ShouldAskITP::Yes, cookieString); 118 118 else 119 119 ASSERT_NOT_REACHED(); … … 132 132 { 133 133 if (auto* session = m_storageSessionProvider->storageSession()) { 134 std::pair<String, bool> result = session->cookieRequestHeaderFieldValue(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies );134 std::pair<String, bool> result = session->cookieRequestHeaderFieldValue(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies, ShouldAskITP::Yes); 135 135 return { result.first, result.second ? SecureCookiesAccessed::Yes : SecureCookiesAccessed::No }; 136 136 } … … 165 165 166 166 if (auto* session = m_storageSessionProvider->storageSession()) 167 return session->getRawCookies(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, cookies);167 return session->getRawCookies(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, ShouldAskITP::Yes, cookies); 168 168 169 169 ASSERT_NOT_REACHED(); -
trunk/Source/WebCore/platform/network/CacheValidation.cpp
r252397 r254556 341 341 static String cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const ResourceRequest& request) 342 342 { 343 return session.cookieRequestHeaderFieldValue(request.firstPartyForCookies(), SameSiteInfo::create(request), request.url(), WTF::nullopt, WTF::nullopt, request.url().protocolIs("https") ? IncludeSecureCookies::Yes : IncludeSecureCookies::No ).first;343 return session.cookieRequestHeaderFieldValue(request.firstPartyForCookies(), SameSiteInfo::create(request), request.url(), WTF::nullopt, WTF::nullopt, request.url().protocolIs("https") ? IncludeSecureCookies::Yes : IncludeSecureCookies::No, ShouldAskITP::Yes).first; 344 344 } 345 345 -
trunk/Source/WebCore/platform/network/NetworkStorageSession.h
r254374 r254556 77 77 enum class ThirdPartyCookieBlockingMode : uint8_t { All, AllOnSitesWithoutUserInteraction, OnlyAccordingToPerDomainPolicy }; 78 78 enum class FirstPartyWebsiteDataRemovalMode : uint8_t { AllButCookies, None, AllButCookiesLiveOnTestingTimeout, AllButCookiesReproTestingTimeout }; 79 enum class ShouldAskITP : bool { No, Yes }; 79 80 80 81 class NetworkStorageSession { … … 128 129 WEBCORE_EXPORT void setCookie(const Cookie&); 129 130 WEBCORE_EXPORT void setCookies(const Vector<Cookie>&, const URL&, const URL& mainDocumentURL); 130 WEBCORE_EXPORT void setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, const String&) const;131 WEBCORE_EXPORT void setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, ShouldAskITP, const String&) const; 131 132 WEBCORE_EXPORT void deleteCookie(const Cookie&); 132 133 WEBCORE_EXPORT void deleteCookie(const URL&, const String&) const; … … 138 139 WEBCORE_EXPORT Vector<Cookie> getCookies(const URL&); 139 140 WEBCORE_EXPORT void hasCookies(const RegistrableDomain&, CompletionHandler<void(bool)>&&) const; 140 WEBCORE_EXPORT bool getRawCookies(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, Vector<Cookie>&) const;141 WEBCORE_EXPORT bool getRawCookies(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, ShouldAskITP, Vector<Cookie>&) const; 141 142 WEBCORE_EXPORT void flushCookieStore(); 142 143 WEBCORE_EXPORT void getHostnamesWithCookies(HashSet<String>& hostnames); 143 WEBCORE_EXPORT std::pair<String, bool> cookiesForDOM(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, IncludeSecureCookies ) const;144 WEBCORE_EXPORT std::pair<String, bool> cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, IncludeSecureCookies ) const;144 WEBCORE_EXPORT std::pair<String, bool> cookiesForDOM(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, IncludeSecureCookies, ShouldAskITP) const; 145 WEBCORE_EXPORT std::pair<String, bool> cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL&, Optional<FrameIdentifier>, Optional<PageIdentifier>, IncludeSecureCookies, ShouldAskITP) const; 145 146 WEBCORE_EXPORT std::pair<String, bool> cookieRequestHeaderFieldValue(const CookieRequestHeaderFieldProxy&) const; 146 147 -
trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNetWin.cpp
r248713 r254556 190 190 } 191 191 192 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, const String& value) const192 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP, const String& value) const 193 193 { 194 194 UNUSED_PARAM(frameID); … … 226 226 } 227 227 228 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const228 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP) const 229 229 { 230 230 UNUSED_PARAM(frameID); … … 241 241 } 242 242 243 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const243 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP) const 244 244 { 245 245 UNUSED_PARAM(frameID); … … 256 256 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const CookieRequestHeaderFieldProxy& headerFieldProxy) const 257 257 { 258 return cookieRequestHeaderFieldValue(headerFieldProxy.firstParty, headerFieldProxy.sameSiteInfo, headerFieldProxy.url, headerFieldProxy.frameID, headerFieldProxy.pageID, headerFieldProxy.includeSecureCookies );258 return cookieRequestHeaderFieldValue(headerFieldProxy.firstParty, headerFieldProxy.sameSiteInfo, headerFieldProxy.url, headerFieldProxy.frameID, headerFieldProxy.pageID, headerFieldProxy.includeSecureCookies, ShouldAskITP::Yes); 259 259 } 260 260 … … 265 265 } 266 266 267 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, Vector<Cookie>& rawCookies) const267 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP, Vector<Cookie>& rawCookies) const 268 268 { 269 269 UNUSED_PARAM(frameID); -
trunk/Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm
r250589 r254556 309 309 } 310 310 311 static NSArray *cookiesForURL(const NetworkStorageSession& session, const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID )311 static NSArray *cookiesForURL(const NetworkStorageSession& session, const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP shouldAskITP) 312 312 { 313 313 #if ENABLE(RESOURCE_LOAD_STATISTICS) 314 if (s ession.shouldBlockCookies(firstParty, url, frameID, pageID))314 if (shouldAskITP == ShouldAskITP::Yes && session.shouldBlockCookies(firstParty, url, frameID, pageID)) 315 315 return nil; 316 316 #else 317 317 UNUSED_PARAM(frameID); 318 318 UNUSED_PARAM(pageID); 319 UNUSED_PARAM(shouldAskITP); 319 320 #endif 320 321 return httpCookiesForURL(session.cookieStorage().get(), firstParty, sameSiteInfo, url); … … 322 323 323 324 enum IncludeHTTPOnlyOrNot { DoNotIncludeHTTPOnly, IncludeHTTPOnly }; 324 static std::pair<String, bool> cookiesForSession(const NetworkStorageSession& session, const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeHTTPOnlyOrNot includeHTTPOnly, IncludeSecureCookies includeSecureCookies )325 { 326 ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies)); 327 328 BEGIN_BLOCK_OBJC_EXCEPTIONS; 329 330 NSArray *cookies = cookiesForURL(session, firstParty, sameSiteInfo, url, frameID, pageID );325 static std::pair<String, bool> cookiesForSession(const NetworkStorageSession& session, const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeHTTPOnlyOrNot includeHTTPOnly, IncludeSecureCookies includeSecureCookies, ShouldAskITP shouldAskITP = ShouldAskITP::Yes) 326 { 327 ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies)); 328 329 BEGIN_BLOCK_OBJC_EXCEPTIONS; 330 331 NSArray *cookies = cookiesForURL(session, firstParty, sameSiteInfo, url, frameID, pageID, shouldAskITP); 331 332 if (![cookies count]) 332 333 return { String(), false }; // Return a null string, not an empty one that StringBuilder would create below. … … 378 379 } 379 380 380 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const381 { 382 return cookiesForSession(*this, firstParty, sameSiteInfo, url, frameID, pageID, DoNotIncludeHTTPOnly, includeSecureCookies );383 } 384 385 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const386 { 387 return cookiesForSession(*this, firstParty, sameSiteInfo, url, frameID, pageID, IncludeHTTPOnly, includeSecureCookies );381 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP shouldAskITP) const 382 { 383 return cookiesForSession(*this, firstParty, sameSiteInfo, url, frameID, pageID, DoNotIncludeHTTPOnly, includeSecureCookies, shouldAskITP); 384 } 385 386 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP shouldAskITP) const 387 { 388 return cookiesForSession(*this, firstParty, sameSiteInfo, url, frameID, pageID, IncludeHTTPOnly, includeSecureCookies, shouldAskITP); 388 389 } 389 390 … … 393 394 } 394 395 395 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, const String& cookieStr) const 396 { 397 ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies)); 398 399 BEGIN_BLOCK_OBJC_EXCEPTIONS; 396 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP shouldAskITP, const String& cookieStr) const 397 { 398 ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies)); 399 400 BEGIN_BLOCK_OBJC_EXCEPTIONS; 401 402 #if ENABLE(RESOURCE_LOAD_STATISTICS) 403 if (shouldAskITP == ShouldAskITP::Yes && shouldBlockCookies(firstParty, url, frameID, pageID)) 404 return; 405 #else 406 UNUSED_PARAM(frameID); 407 UNUSED_PARAM(pageID); 408 UNUSED_PARAM(shouldAskITP); 409 #endif 400 410 401 411 // <rdar://problem/5632883> On 10.5, NSHTTPCookieStorage would store an empty cookie, … … 424 434 ASSERT([filteredCookies.get() count] <= 1); 425 435 426 #if ENABLE(RESOURCE_LOAD_STATISTICS)427 if (shouldBlockCookies(firstParty, url, frameID, pageID))428 return;429 #else430 UNUSED_PARAM(frameID);431 UNUSED_PARAM(pageID);432 #endif433 434 436 setHTTPCookiesForURL(cookieStorage().get(), filteredCookies.get(), cookieURL, firstParty, sameSiteInfo); 435 437 … … 458 460 } 459 461 460 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, Vector<Cookie>& rawCookies) const462 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP shouldAskITP, Vector<Cookie>& rawCookies) const 461 463 { 462 464 rawCookies.clear(); 463 465 BEGIN_BLOCK_OBJC_EXCEPTIONS; 464 466 465 NSArray *cookies = cookiesForURL(*this, firstParty, sameSiteInfo, url, frameID, pageID );467 NSArray *cookies = cookiesForURL(*this, firstParty, sameSiteInfo, url, frameID, pageID, shouldAskITP); 466 468 NSUInteger count = [cookies count]; 467 469 rawCookies.reserveCapacity(count); -
trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp
r250589 r254556 81 81 } 82 82 83 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, const String& value) const83 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP, const String& value) const 84 84 { 85 85 cookieStorage().setCookiesFromDOM(*this, firstParty, sameSiteInfo, url, frameID, pageID, value); … … 91 91 } 92 92 93 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const93 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP) const 94 94 { 95 95 return cookieStorage().cookiesForDOM(*this, firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies); … … 161 161 } 162 162 163 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, Vector<Cookie>& rawCookies) const163 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP, Vector<Cookie>& rawCookies) const 164 164 { 165 165 return cookieStorage().getRawCookies(*this, firstParty, sameSiteInfo, url, frameID, pageID, rawCookies); … … 171 171 } 172 172 173 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const173 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP) const 174 174 { 175 175 return cookieStorage().cookieRequestHeaderFieldValue(*this, firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies); -
trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp
r253431 r254556 262 262 } 263 263 264 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, const String& value) const264 void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP, const String& value) const 265 265 { 266 266 UNUSED_PARAM(frameID); … … 433 433 } 434 434 435 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, Vector<Cookie>& rawCookies) const435 bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP, Vector<Cookie>& rawCookies) const 436 436 { 437 437 UNUSED_PARAM(firstParty); … … 503 503 } 504 504 505 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const505 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP) const 506 506 { 507 507 UNUSED_PARAM(firstParty); … … 511 511 } 512 512 513 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies ) const513 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP) const 514 514 { 515 515 UNUSED_PARAM(firstParty); … … 522 522 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const CookieRequestHeaderFieldProxy& headerFieldProxy) const 523 523 { 524 return cookieRequestHeaderFieldValue(headerFieldProxy.firstParty, headerFieldProxy.sameSiteInfo, headerFieldProxy.url, headerFieldProxy.frameID, headerFieldProxy.pageID, headerFieldProxy.includeSecureCookies );524 return cookieRequestHeaderFieldValue(headerFieldProxy.firstParty, headerFieldProxy.sameSiteInfo, headerFieldProxy.url, headerFieldProxy.frameID, headerFieldProxy.pageID, headerFieldProxy.includeSecureCookies, ShouldAskITP::Yes); 525 525 } 526 526 -
trunk/Source/WebKit/ChangeLog
r254555 r254556 1 2020-01-14 Chris Dumez <cdumez@apple.com> 2 3 document.cookie should not do a sync IPC to the network process for iframes that do not have storage access 4 https://bugs.webkit.org/show_bug.cgi?id=206108 5 6 Reviewed by Geoff Garen and John Wilander. 7 8 When ITP is enabled and ThirdPartyCookieBlockingMode::All mode is used (default in Safari), we can now detect 9 that a third-party iframe does not have cookie access completely on the WebContent process side, instead of 10 doing the check on the Network process side. The benefit is that this avoids doing a synchronous IPC every 11 time a third-party iframe which does not have storage access tries to access document.cookie in JavaScript. 12 Given that this should apply to a lot of iframes, this change is very beneficial to performance. 13 14 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 15 (WebKit::NetworkConnectionToWebProcess::cookiesForDOM): 16 (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM): 17 (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue): 18 (WebKit::NetworkConnectionToWebProcess::getRawCookies): 19 * NetworkProcess/NetworkConnectionToWebProcess.h: 20 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 21 * NetworkProcess/NetworkResourceLoader.cpp: 22 (WebKit::logCookieInformationInternal): 23 * NetworkProcess/NetworkSessionCreationParameters.cpp: 24 (WebKit::NetworkSessionCreationParameters::encode const): 25 (WebKit::NetworkSessionCreationParameters::decode): 26 * NetworkProcess/NetworkSessionCreationParameters.h: 27 * Scripts/webkit/messages.py: 28 * Shared/WebProcessDataStoreParameters.h: 29 (WebKit::WebProcessDataStoreParameters::encode const): 30 (WebKit::WebProcessDataStoreParameters::decode): 31 * UIProcess/Network/NetworkProcessProxy.cpp: 32 (WebKit::NetworkProcessProxy::setShouldBlockThirdPartyCookiesForTesting): 33 * UIProcess/WebProcessPool.cpp: 34 (WebKit::WebProcessPool::ensureNetworkProcess): 35 (WebKit::WebProcessPool::webProcessDataStoreParameters): 36 * UIProcess/WebProcessProxy.cpp: 37 (WebKit::WebProcessProxy::setShouldBlockThirdPartyCookiesForTesting): 38 * UIProcess/WebProcessProxy.h: 39 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: 40 (WebKit::WebsiteDataStore::thirdPartyCookieBlockingMode const): 41 (WebKit::WebsiteDataStore::parameters): 42 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 43 (WebKit::WebsiteDataStore::thirdPartyCookieBlockingMode const): 44 (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting): 45 * UIProcess/WebsiteData/WebsiteDataStore.h: 46 * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp: 47 (WebKit::WebResourceLoadObserver::requestStorageAccessUnderOpener): 48 (WebKit::WebResourceLoadObserver::logUserInteractionWithReducedTimeResolution): 49 * WebProcess/WebCoreSupport/WebResourceLoadObserver.h: 50 * WebProcess/WebPage/WebCookieJar.cpp: 51 (WebKit::shouldBlockCookies): 52 (WebKit::WebCookieJar::cookies const): 53 (WebKit::WebCookieJar::setCookies): 54 (WebKit::WebCookieJar::cookieRequestHeaderFieldValue const): 55 (WebKit::WebCookieJar::getRawCookies const): 56 * WebProcess/WebPage/WebPage.cpp: 57 (WebKit::WebPage::addDomainWithPageLevelStorageAccess): 58 (WebKit::WebPage::hasPageLevelStorageAccess const): 59 * WebProcess/WebPage/WebPage.h: 60 * WebProcess/WebProcess.cpp: 61 (WebKit::WebProcess::setWebsiteDataStoreParameters): 62 (WebKit::WebProcess::setShouldBlockThirdPartyCookiesForTesting): 63 * WebProcess/WebProcess.h: 64 (WebKit::WebProcess::thirdPartyCookieBlockingMode const): 65 * WebProcess/WebProcess.messages.in: 66 1 67 2020-01-14 Peng Liu <peng.liu6@apple.com> 2 68 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r253740 r254556 565 565 } 566 566 567 void NetworkConnectionToWebProcess::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, CompletionHandler<void(String cookieString, bool secureCookiesAccessed)>&& completionHandler)567 void NetworkConnectionToWebProcess::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, FrameIdentifier frameID, PageIdentifier pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP shouldAskITP, CompletionHandler<void(String cookieString, bool secureCookiesAccessed)>&& completionHandler) 568 568 { 569 569 auto* networkStorageSession = storageSession(); 570 570 if (!networkStorageSession) 571 571 return completionHandler({ }, false); 572 auto result = networkStorageSession->cookiesForDOM(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies );572 auto result = networkStorageSession->cookiesForDOM(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies, shouldAskITP); 573 573 #if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED 574 574 if (auto* session = networkSession()) { … … 580 580 } 581 581 582 void NetworkConnectionToWebProcess::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<WebCore::FrameIdentifier> frameID, Optional<PageIdentifier> pageID, const String& cookieString)582 void NetworkConnectionToWebProcess::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, WebCore::FrameIdentifier frameID, PageIdentifier pageID, ShouldAskITP shouldAskITP, const String& cookieString) 583 583 { 584 584 auto* networkStorageSession = storageSession(); 585 585 if (!networkStorageSession) 586 586 return; 587 networkStorageSession->setCookiesFromDOM(firstParty, sameSiteInfo, url, frameID, pageID, cookieString);587 networkStorageSession->setCookiesFromDOM(firstParty, sameSiteInfo, url, frameID, pageID, shouldAskITP, cookieString); 588 588 #if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED 589 589 if (auto* session = networkSession()) { … … 602 602 } 603 603 604 void NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, CompletionHandler<void(String, bool)>&& completionHandler)604 void NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP shouldAskITP, CompletionHandler<void(String, bool)>&& completionHandler) 605 605 { 606 606 auto* networkStorageSession = storageSession(); 607 607 if (!networkStorageSession) 608 608 return completionHandler({ }, false); 609 auto result = networkStorageSession->cookieRequestHeaderFieldValue(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies );609 auto result = networkStorageSession->cookieRequestHeaderFieldValue(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies, shouldAskITP); 610 610 completionHandler(WTFMove(result.first), result.second); 611 611 } 612 612 613 void NetworkConnectionToWebProcess::getRawCookies(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&& completionHandler)613 void NetworkConnectionToWebProcess::getRawCookies(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP shouldAskITP, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&& completionHandler) 614 614 { 615 615 auto* networkStorageSession = storageSession(); … … 617 617 return completionHandler({ }); 618 618 Vector<WebCore::Cookie> result; 619 networkStorageSession->getRawCookies(firstParty, sameSiteInfo, url, frameID, pageID, result);619 networkStorageSession->getRawCookies(firstParty, sameSiteInfo, url, frameID, pageID, shouldAskITP, result); 620 620 completionHandler(WTFMove(result)); 621 621 } -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r253452 r254556 59 59 enum class StorageAccessPromptWasShown : bool; 60 60 enum class StorageAccessWasGranted : bool; 61 enum class ShouldAskITP : bool; 61 62 struct SameSiteInfo; 62 63 … … 198 199 void registerURLSchemesAsCORSEnabled(Vector<String>&& schemes); 199 200 200 void cookiesForDOM(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, Optional<WebCore::FrameIdentifier>, Optional<WebCore::PageIdentifier>, WebCore::IncludeSecureCookies, CompletionHandler<void(String cookieString, bool secureCookiesAccessed)>&&);201 void setCookiesFromDOM(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, Optional<WebCore::FrameIdentifier>, Optional<WebCore::PageIdentifier>, const String&);201 void cookiesForDOM(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, WebCore::FrameIdentifier, WebCore::PageIdentifier, WebCore::IncludeSecureCookies, WebCore::ShouldAskITP, CompletionHandler<void(String cookieString, bool secureCookiesAccessed)>&&); 202 void setCookiesFromDOM(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, WebCore::FrameIdentifier, WebCore::PageIdentifier, WebCore::ShouldAskITP, const String&); 202 203 void cookiesEnabled(CompletionHandler<void(bool)>&&); 203 void cookieRequestHeaderFieldValue(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, Optional<WebCore::FrameIdentifier>, Optional<WebCore::PageIdentifier>, WebCore::IncludeSecureCookies, CompletionHandler<void(String cookieString, bool secureCookiesAccessed)>&&);204 void getRawCookies(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, Optional<WebCore::FrameIdentifier>, Optional<WebCore::PageIdentifier>, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&&);204 void cookieRequestHeaderFieldValue(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, Optional<WebCore::FrameIdentifier>, Optional<WebCore::PageIdentifier>, WebCore::IncludeSecureCookies, WebCore::ShouldAskITP, CompletionHandler<void(String cookieString, bool secureCookiesAccessed)>&&); 205 void getRawCookies(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, Optional<WebCore::FrameIdentifier>, Optional<WebCore::PageIdentifier>, WebCore::ShouldAskITP, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&&); 205 206 void deleteCookie(const URL&, const String& cookieName); 206 207 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r253452 r254556 35 35 ConvertMainResourceLoadToDownload(uint64_t mainResourceLoadIdentifier, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, WebCore::ResourceResponse response) 36 36 37 CookiesForDOM(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, Optional<WebCore::FrameIdentifier> frameID, Optional<WebCore::PageIdentifier> pageID, enum:bool WebCore::IncludeSecureCookies includeSecureCookies) -> (String cookieString, bool didAccessSecureCookies) Synchronous38 SetCookiesFromDOM(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, Optional<WebCore::FrameIdentifier> frameID, Optional<WebCore::PageIdentifier> pageID, String cookieString)37 CookiesForDOM(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID, enum:bool WebCore::IncludeSecureCookies includeSecureCookies, enum:bool WebCore::ShouldAskITP shouldAskITP) -> (String cookieString, bool didAccessSecureCookies) Synchronous 38 SetCookiesFromDOM(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID, enum:bool WebCore::ShouldAskITP shouldAskITP, String cookieString) 39 39 CookiesEnabled() -> (bool enabled) Synchronous 40 CookieRequestHeaderFieldValue(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, Optional<WebCore::FrameIdentifier> frameID, Optional<WebCore::PageIdentifier> pageID, enum:bool WebCore::IncludeSecureCookies includeSecureCookies ) -> (String cookieString, bool didAccessSecureCookies) Synchronous41 GetRawCookies(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, Optional<WebCore::FrameIdentifier> frameID, Optional<WebCore::PageIdentifier> pageID ) -> (Vector<WebCore::Cookie> cookies) Synchronous40 CookieRequestHeaderFieldValue(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, Optional<WebCore::FrameIdentifier> frameID, Optional<WebCore::PageIdentifier> pageID, enum:bool WebCore::IncludeSecureCookies includeSecureCookies, enum:bool WebCore::ShouldAskITP shouldAskITP) -> (String cookieString, bool didAccessSecureCookies) Synchronous 41 GetRawCookies(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, Optional<WebCore::FrameIdentifier> frameID, Optional<WebCore::PageIdentifier> pageID, enum:bool WebCore::ShouldAskITP shouldAskITP) -> (Vector<WebCore::Cookie> cookies) Synchronous 42 42 DeleteCookie(URL url, String cookieName) 43 43 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
r254409 r254556 1226 1226 1227 1227 Vector<WebCore::Cookie> cookies; 1228 if (!networkStorageSession.getRawCookies(firstParty, sameSiteInfo, url, frameID, pageID, cookies))1228 if (!networkStorageSession.getRawCookies(firstParty, sameSiteInfo, url, frameID, pageID, ShouldAskITP::Yes, cookies)) 1229 1229 return; 1230 1230 -
trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp
r253277 r254556 69 69 encoder << enableResourceLoadStatisticsDebugMode; 70 70 encoder << resourceLoadStatisticsManualPrevalentResource; 71 #if ENABLE(RESOURCE_LOAD_STATISTICS) 71 72 encoder << thirdPartyCookieBlockingMode; 73 #endif 72 74 encoder << firstPartyWebsiteDataRemovalMode; 73 75 … … 203 205 return WTF::nullopt; 204 206 207 #if ENABLE(RESOURCE_LOAD_STATISTICS) 205 208 Optional<WebCore::ThirdPartyCookieBlockingMode> thirdPartyCookieBlockingMode; 206 209 decoder >> thirdPartyCookieBlockingMode; 207 210 if (!thirdPartyCookieBlockingMode) 208 211 return WTF::nullopt; 212 #endif 209 213 210 214 Optional<WebCore::FirstPartyWebsiteDataRemovalMode> firstPartyWebsiteDataRemovalMode; … … 301 305 , WTFMove(*shouldIncludeLocalhostInResourceLoadStatistics) 302 306 , WTFMove(*enableResourceLoadStatisticsDebugMode) 307 #if ENABLE(RESOURCE_LOAD_STATISTICS) 303 308 , WTFMove(*thirdPartyCookieBlockingMode) 309 #endif 304 310 , WTFMove(*firstPartyWebsiteDataRemovalMode) 305 311 , WTFMove(*deviceManagementRestrictionsEnabled) -
trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h
r254293 r254556 87 87 bool shouldIncludeLocalhostInResourceLoadStatistics { true }; 88 88 bool enableResourceLoadStatisticsDebugMode { false }; 89 #if ENABLE(RESOURCE_LOAD_STATISTICS) 89 90 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All }; 91 #endif 90 92 WebCore::FirstPartyWebsiteDataRemovalMode firstPartyWebsiteDataRemovalMode { WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies }; 91 93 bool deviceManagementRestrictionsEnabled { false }; -
trunk/Source/WebKit/Scripts/webkit/messages.py
r254516 r254556 586 586 'WebCore::ShippingContactUpdate': ['<WebCore/ApplePaySessionPaymentRequest.h>'], 587 587 'WebCore::ShippingMethodUpdate': ['<WebCore/ApplePaySessionPaymentRequest.h>'], 588 'WebCore::ShouldAskITP': ['<WebCore/NetworkStorageSession.h>'], 588 589 'WebCore::ShouldNotifyWhenResolved': ['<WebCore/ServiceWorkerTypes.h>'], 589 590 'WebCore::ShouldSample': ['<WebCore/DiagnosticLoggingClient.h>'], -
trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h
r250016 r254556 27 27 28 28 #include "SandboxExtension.h" 29 #include <WebCore/NetworkStorageSession.h> 29 30 #include <pal/SessionID.h> 30 31 #include <wtf/HashMap.h> … … 46 47 SandboxExtension::Handle javaScriptConfigurationDirectoryExtensionHandle; 47 48 HashMap<unsigned, WallTime> plugInAutoStartOriginHashes; 49 #if ENABLE(RESOURCE_LOAD_STATISTICS) 50 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All }; 51 #endif 48 52 bool resourceLoadStatisticsEnabled { false }; 49 53 … … 68 72 encoder << javaScriptConfigurationDirectoryExtensionHandle; 69 73 encoder << plugInAutoStartOriginHashes; 74 #if ENABLE(RESOURCE_LOAD_STATISTICS) 75 encoder << thirdPartyCookieBlockingMode; 76 #endif 70 77 encoder << resourceLoadStatisticsEnabled; 71 78 } … … 133 140 return WTF::nullopt; 134 141 142 #if ENABLE(RESOURCE_LOAD_STATISTICS) 143 Optional<WebCore::ThirdPartyCookieBlockingMode> thirdPartyCookieBlockingMode; 144 decoder >> thirdPartyCookieBlockingMode; 145 if (!thirdPartyCookieBlockingMode) 146 return WTF::nullopt; 147 #endif 148 135 149 bool resourceLoadStatisticsEnabled = false; 136 150 if (!decoder.decode(resourceLoadStatisticsEnabled)) … … 151 165 WTFMove(*javaScriptConfigurationDirectoryExtensionHandle), 152 166 WTFMove(*plugInAutoStartOriginHashes), 167 #if ENABLE(RESOURCE_LOAD_STATISTICS) 168 *thirdPartyCookieBlockingMode, 169 #endif 153 170 resourceLoadStatisticsEnabled 154 171 }; -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r254345 r254556 1116 1116 void NetworkProcessProxy::setShouldBlockThirdPartyCookiesForTesting(PAL::SessionID sessionID, ThirdPartyCookieBlockingMode blockingMode, CompletionHandler<void()>&& completionHandler) 1117 1117 { 1118 if (!canSendMessage()) {1119 completionHandler();1120 return;1121 }1122 1123 1118 sendWithAsyncReply(Messages::NetworkProcess::SetShouldBlockThirdPartyCookiesForTesting(sessionID, blockingMode), WTFMove(completionHandler)); 1124 1119 } -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r254487 r254556 581 581 bool shouldIncludeLocalhost = true; 582 582 bool enableResourceLoadStatisticsDebugMode = false; 583 #if ENABLE(RESOURCE_LOAD_STATISTICS) 583 584 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::All; 585 #endif 584 586 WebCore::FirstPartyWebsiteDataRemovalMode firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies; 585 587 WebCore::RegistrableDomain manualPrevalentResource { }; … … 593 595 shouldIncludeLocalhost = networkSessionParameters.shouldIncludeLocalhostInResourceLoadStatistics; 594 596 enableResourceLoadStatisticsDebugMode = networkSessionParameters.enableResourceLoadStatisticsDebugMode; 597 #if ENABLE(RESOURCE_LOAD_STATISTICS) 595 598 thirdPartyCookieBlockingMode = networkSessionParameters.thirdPartyCookieBlockingMode; 599 #endif 596 600 firstPartyWebsiteDataRemovalMode = networkSessionParameters.firstPartyWebsiteDataRemovalMode; 597 601 manualPrevalentResource = networkSessionParameters.resourceLoadStatisticsManualPrevalentResource; … … 615 619 shouldIncludeLocalhost = networkSessionParameters.shouldIncludeLocalhostInResourceLoadStatistics; 616 620 enableResourceLoadStatisticsDebugMode = networkSessionParameters.enableResourceLoadStatisticsDebugMode; 621 #if ENABLE(RESOURCE_LOAD_STATISTICS) 617 622 thirdPartyCookieBlockingMode = networkSessionParameters.thirdPartyCookieBlockingMode; 623 #endif 618 624 firstPartyWebsiteDataRemovalMode = networkSessionParameters.firstPartyWebsiteDataRemovalMode; 619 625 manualPrevalentResource = networkSessionParameters.resourceLoadStatisticsManualPrevalentResource; … … 640 646 parameters.defaultDataStoreParameters.networkSessionParameters.shouldIncludeLocalhostInResourceLoadStatistics = shouldIncludeLocalhost; 641 647 parameters.defaultDataStoreParameters.networkSessionParameters.enableResourceLoadStatisticsDebugMode = enableResourceLoadStatisticsDebugMode; 648 #if ENABLE(RESOURCE_LOAD_STATISTICS) 642 649 parameters.defaultDataStoreParameters.networkSessionParameters.thirdPartyCookieBlockingMode = thirdPartyCookieBlockingMode; 650 #endif 643 651 parameters.defaultDataStoreParameters.networkSessionParameters.firstPartyWebsiteDataRemovalMode = firstPartyWebsiteDataRemovalMode; 644 652 … … 946 954 WTFMove(javaScriptConfigurationDirectoryExtensionHandle), 947 955 WTFMove(plugInAutoStartOriginHashes), 956 #if ENABLE(RESOURCE_LOAD_STATISTICS) 957 websiteDataStore.thirdPartyCookieBlockingMode(), 958 #endif 948 959 websiteDataStore.resourceLoadStatisticsEnabled() 949 960 }; -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r254392 r254556 434 434 page.value->postMessageToInjectedBundle("ResourceLoadStatisticsTelemetryFinished", messageBody); 435 435 } 436 437 void WebProcessProxy::setShouldBlockThirdPartyCookiesForTesting(ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode, CompletionHandler<void()>&& completionHandler) 438 { 439 sendWithAsyncReply(Messages::WebProcess::SetShouldBlockThirdPartyCookiesForTesting(thirdPartyCookieBlockingMode), WTFMove(completionHandler)); 440 } 436 441 #endif 437 442 -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r254392 r254556 67 67 struct PrewarmInformation; 68 68 struct SecurityOriginData; 69 enum class ThirdPartyCookieBlockingMode : uint8_t; 69 70 } 70 71 … … 207 208 static void notifyWebsiteDataDeletionForRegistrableDomainsFinished(); 208 209 static void notifyWebsiteDataScanForRegistrableDomainsFinished(); 210 211 void setShouldBlockThirdPartyCookiesForTesting(WebCore::ThirdPartyCookieBlockingMode, CompletionHandler<void()>&&); 209 212 #endif 210 213 -
trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
r254344 r254556 62 62 static NSString * const WebKitNetworkLoadThrottleLatencyMillisecondsDefaultsKey = @"WebKitNetworkLoadThrottleLatencyMilliseconds"; 63 63 64 #if ENABLE(RESOURCE_LOAD_STATISTICS) 65 WebCore::ThirdPartyCookieBlockingMode WebsiteDataStore::thirdPartyCookieBlockingMode() const 66 { 67 if (!m_thirdPartyCookieBlockingMode) { 68 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 69 if ([defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::isThirdPartyCookieBlockingDisabledKey().createCFString().get()]]) 70 m_thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::AllOnSitesWithoutUserInteraction; 71 else 72 m_thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::All; 73 } 74 return *m_thirdPartyCookieBlockingMode; 75 } 76 #endif 77 64 78 WebsiteDataStoreParameters WebsiteDataStore::parameters() 65 79 { … … 71 85 bool shouldLogCookieInformation = false; 72 86 bool enableResourceLoadStatisticsDebugMode = false; 73 auto thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::All;74 87 auto firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies; 75 88 bool enableLegacyTLS = configuration().legacyTLSEnabled(); … … 86 99 #if ENABLE(RESOURCE_LOAD_STATISTICS) 87 100 enableResourceLoadStatisticsDebugMode = [defaults boolForKey:@"ITPDebugMode"]; 88 if ([defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::isThirdPartyCookieBlockingDisabledKey().createCFString().get()]])89 thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::AllOnSitesWithoutUserInteraction;90 else91 thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::All;92 101 if ([defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::isFirstPartyWebsiteDataRemovalDisabledKey().createCFString().get()]]) 93 102 firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::None; … … 163 172 shouldIncludeLocalhostInResourceLoadStatistics, 164 173 enableResourceLoadStatisticsDebugMode, 165 thirdPartyCookieBlockingMode ,174 thirdPartyCookieBlockingMode(), 166 175 firstPartyWebsiteDataRemovalMode, 167 176 m_configuration->deviceManagementRestrictionsEnabled(), -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r254392 r254556 1800 1800 } 1801 1801 1802 #if !PLATFORM(COCOA) 1803 WebCore::ThirdPartyCookieBlockingMode WebsiteDataStore::thirdPartyCookieBlockingMode() const 1804 { 1805 if (!m_thirdPartyCookieBlockingMode) 1806 m_thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::All; 1807 return *m_thirdPartyCookieBlockingMode; 1808 } 1809 #endif 1810 1802 1811 void WebsiteDataStore::setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting(bool enabled, bool onlyOnSitesWithoutUserInteraction, CompletionHandler<void()>&& completionHandler) 1803 1812 { … … 1806 1815 if (enabled) 1807 1816 blockingMode = onlyOnSitesWithoutUserInteraction ? WebCore::ThirdPartyCookieBlockingMode::AllOnSitesWithoutUserInteraction : WebCore::ThirdPartyCookieBlockingMode::All; 1817 1818 if (thirdPartyCookieBlockingMode() != blockingMode) { 1819 m_thirdPartyCookieBlockingMode = blockingMode; 1820 for (auto& webProcess : processes()) 1821 webProcess.setShouldBlockThirdPartyCookiesForTesting(blockingMode, [callbackAggregator = callbackAggregator.copyRef()] { }); 1822 } 1808 1823 1809 1824 for (auto& processPool : processPools()) { -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
r254342 r254556 195 195 void setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting(bool enabled, bool onlyOnSitesWithoutUserInteraction, CompletionHandler<void()>&&); 196 196 void setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting(bool enabled, CompletionHandler<void()>&&); 197 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode() const; 197 198 #endif 198 199 void setCacheMaxAgeCapForPrevalentResources(Seconds, CompletionHandler<void()>&&); … … 374 375 UniqueRef<SOAuthorizationCoordinator> m_soAuthorizationCoordinator; 375 376 #endif 377 #if ENABLE(RESOURCE_LOAD_STATISTICS) 378 mutable Optional<WebCore::ThirdPartyCookieBlockingMode> m_thirdPartyCookieBlockingMode; // Lazily computed. 379 #endif 376 380 }; 377 381 -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp
r252641 r254556 72 72 } 73 73 74 void WebResourceLoadObserver::requestStorageAccessUnderOpener(const RegistrableDomain& domainInNeedOfStorageAccess, PageIdentifier openerPageID, Document& openerDocument)74 void WebResourceLoadObserver::requestStorageAccessUnderOpener(const RegistrableDomain& domainInNeedOfStorageAccess, WebPage& openerPage, Document& openerDocument) 75 75 { 76 76 auto openerUrl = openerDocument.url(); … … 79 79 && !openerDocument.hasRequestedPageSpecificStorageAccessWithUserInteraction(domainInNeedOfStorageAccess) 80 80 && !equalIgnoringASCIICase(openerUrl.string(), WTF::blankURL())) { 81 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RequestStorageAccessUnderOpener(domainInNeedOfStorageAccess, openerPage ID, openerDomain), 0);81 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RequestStorageAccessUnderOpener(domainInNeedOfStorageAccess, openerPage.identifier(), openerDomain), 0); 82 82 83 openerPage.addDomainWithPageLevelStorageAccess(openerDomain, domainInNeedOfStorageAccess); 84 83 85 // Remember user interaction-based requests since they don't need to be repeated. 84 86 openerDocument.setHasRequestedPageSpecificStorageAccessWithUserInteraction(domainInNeedOfStorageAccess); … … 336 338 if (auto* opener = frame->loader().opener()) { 337 339 if (auto* openerDocument = opener->document()) { 338 if (auto* openerFrame = openerDocument->frame()) { 339 if (auto openerPageID = openerFrame->loader().client().pageID()) 340 requestStorageAccessUnderOpener(topFrameDomain, openerPageID.value(), *openerDocument); 341 } 340 if (auto* openerPage = openerDocument->page()) 341 requestStorageAccessUnderOpener(topFrameDomain, WebPage::fromCorePage(*openerPage), *openerDocument); 342 342 } 343 343 } -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.h
r252641 r254556 35 35 namespace WebKit { 36 36 37 class WebPage; 38 37 39 class WebResourceLoadObserver final : public WebCore::ResourceLoadObserver { 38 40 public: … … 65 67 66 68 Vector<WebCore::ResourceLoadStatistics> takeStatistics(); 67 void requestStorageAccessUnderOpener(const WebCore::RegistrableDomain& domainInNeedOfStorageAccess, Web Core::PageIdentifier openerPageID, WebCore::Document& openerDocument);69 void requestStorageAccessUnderOpener(const WebCore::RegistrableDomain& domainInNeedOfStorageAccess, WebPage& openerPage, WebCore::Document& openerDocument); 68 70 69 71 HashMap<WebCore::RegistrableDomain, WebCore::ResourceLoadStatistics> m_resourceStatisticsMap; -
trunk/Source/WebKit/WebProcess/WebPage/WebCookieJar.cpp
r250153 r254556 29 29 #include "NetworkConnectionToWebProcessMessages.h" 30 30 #include "NetworkProcessConnection.h" 31 #include "WebFrame.h" 32 #include "WebPage.h" 31 33 #include "WebProcess.h" 32 34 #include <WebCore/CookieRequestHeaderFieldProxy.h> 35 #include <WebCore/DeprecatedGlobalSettings.h> 33 36 #include <WebCore/Document.h> 34 37 #include <WebCore/Frame.h> … … 49 52 : WebCore::CookieJar(adoptRef(*new WebStorageSessionProvider)) { } 50 53 54 #if ENABLE(RESOURCE_LOAD_STATISTICS) 55 static bool shouldBlockCookies(WebFrame* frame, const URL& firstPartyForCookies, const URL& resourceURL, ShouldAskITP& shouldAskITPInNetworkProcess) 56 { 57 if (!WebCore::DeprecatedGlobalSettings::resourceLoadStatisticsEnabled()) 58 return false; 59 60 if (frame && frame->isMainFrame()) 61 return false; 62 63 RegistrableDomain firstPartyDomain { firstPartyForCookies }; 64 if (firstPartyDomain.isEmpty()) 65 return false; 66 67 RegistrableDomain resourceDomain { resourceURL }; 68 if (resourceDomain.isEmpty()) 69 return false; 70 71 if (firstPartyDomain == resourceDomain) 72 return false; 73 74 if (frame && frame->frameLoaderClient()->hasFrameSpecificStorageAccess()) 75 return false; 76 77 if (frame && frame->page() && frame->page()->hasPageLevelStorageAccess(firstPartyDomain, resourceDomain)) 78 return false; 79 80 // The WebContent process does not have enough information to deal with other policies than ThirdPartyCookieBlockingMode::All so we have to go to the NetworkProcess for all 81 // other policies and the request may end up getting blocked on NetworkProcess side. 82 if (WebProcess::singleton().thirdPartyCookieBlockingMode() != ThirdPartyCookieBlockingMode::All) { 83 shouldAskITPInNetworkProcess = ShouldAskITP::Yes; 84 return false; 85 } 86 87 return true; 88 } 89 #endif 90 51 91 String WebCookieJar::cookies(WebCore::Document& document, const URL& url) const 52 92 { 53 Optional<FrameIdentifier> frameID; 54 Optional<PageIdentifier> pageID; 55 if (auto* frame = document.frame()) { 56 frameID = frame->loader().client().frameID(); 57 pageID = frame->loader().client().pageID(); 58 } 93 auto* webFrame = document.frame() ? WebFrame::fromCoreFrame(*document.frame()) : nullptr; 94 if (!webFrame || !webFrame->page()) 95 return { }; 96 97 ShouldAskITP shouldAskITPInNetworkProcess = ShouldAskITP::No; 98 #if ENABLE(RESOURCE_LOAD_STATISTICS) 99 if (shouldBlockCookies(webFrame, document.firstPartyForCookies(), url, shouldAskITPInNetworkProcess)) 100 return { }; 101 #endif 102 103 auto frameID = webFrame->frameID(); 104 auto pageID = webFrame->page()->identifier(); 59 105 60 106 String cookieString; 61 107 bool secureCookiesAccessed = false; 62 if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookiesForDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, shouldIncludeSecureCookies(document, url) ), Messages::NetworkConnectionToWebProcess::CookiesForDOM::Reply(cookieString, secureCookiesAccessed), 0))108 if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookiesForDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, shouldIncludeSecureCookies(document, url), shouldAskITPInNetworkProcess), Messages::NetworkConnectionToWebProcess::CookiesForDOM::Reply(cookieString, secureCookiesAccessed), 0)) 63 109 return { }; 64 110 … … 68 114 void WebCookieJar::setCookies(WebCore::Document& document, const URL& url, const String& cookieString) 69 115 { 70 Optional<FrameIdentifier> frameID; 71 Optional<PageIdentifier> pageID; 72 if (auto* frame = document.frame()) { 73 frameID = frame->loader().client().frameID(); 74 pageID = frame->loader().client().pageID(); 75 } 116 auto* webFrame = document.frame() ? WebFrame::fromCoreFrame(*document.frame()) : nullptr; 117 if (!webFrame || !webFrame->page()) 118 return; 76 119 77 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, cookieString), 0); 120 ShouldAskITP shouldAskITPInNetworkProcess = ShouldAskITP::No; 121 #if ENABLE(RESOURCE_LOAD_STATISTICS) 122 if (shouldBlockCookies(webFrame, document.firstPartyForCookies(), url, shouldAskITPInNetworkProcess)) 123 return; 124 #endif 125 126 auto frameID = webFrame->frameID(); 127 auto pageID = webFrame->page()->identifier(); 128 129 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, shouldAskITPInNetworkProcess, cookieString), 0); 78 130 } 79 131 … … 88 140 std::pair<String, WebCore::SecureCookiesAccessed> WebCookieJar::cookieRequestHeaderFieldValue(const URL& firstParty, const WebCore::SameSiteInfo& sameSiteInfo, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, WebCore::IncludeSecureCookies includeSecureCookies) const 89 141 { 142 ShouldAskITP shouldAskITPInNetworkProcess = ShouldAskITP::No; 143 #if ENABLE(RESOURCE_LOAD_STATISTICS) 144 auto* webFrame = frameID ? WebProcess::singleton().webFrame(*frameID) : nullptr; 145 if (shouldBlockCookies(webFrame, firstParty, url, shouldAskITPInNetworkProcess)) 146 return { }; 147 #endif 148 90 149 String cookieString; 91 150 bool secureCookiesAccessed = false; 92 if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies ), Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue::Reply(cookieString, secureCookiesAccessed), 0))151 if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue(firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies, shouldAskITPInNetworkProcess), Messages::NetworkConnectionToWebProcess::CookieRequestHeaderFieldValue::Reply(cookieString, secureCookiesAccessed), 0)) 93 152 return { }; 94 153 return { cookieString, secureCookiesAccessed ? WebCore::SecureCookiesAccessed::Yes : WebCore::SecureCookiesAccessed::No }; … … 97 156 bool WebCookieJar::getRawCookies(const WebCore::Document& document, const URL& url, Vector<WebCore::Cookie>& rawCookies) const 98 157 { 99 Optional<FrameIdentifier> frameID;100 Optional<PageIdentifier> pageID;101 if (auto* frame = document.frame()) { 102 frameID = frame->loader().client().frameID();103 pageID = frame->loader().client().pageID();104 } 158 auto* webFrame = document.frame() ? WebFrame::fromCoreFrame(*document.frame()) : nullptr; 159 ShouldAskITP shouldAskITPInNetworkProcess = ShouldAskITP::No; 160 #if ENABLE(RESOURCE_LOAD_STATISTICS) 161 if (shouldBlockCookies(webFrame, document.firstPartyForCookies(), url, shouldAskITPInNetworkProcess)) 162 return { }; 163 #endif 105 164 106 if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::GetRawCookies(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID), Messages::NetworkConnectionToWebProcess::GetRawCookies::Reply(rawCookies), 0)) 165 Optional<FrameIdentifier> frameID = webFrame ? makeOptional(webFrame->frameID()) : WTF::nullopt; 166 Optional<PageIdentifier> pageID = webFrame && webFrame->page() ? makeOptional(webFrame->page()->identifier()) : WTF::nullopt; 167 if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::GetRawCookies(document.firstPartyForCookies(), sameSiteInfo(document), url, frameID, pageID, shouldAskITPInNetworkProcess), Messages::NetworkConnectionToWebProcess::GetRawCookies::Reply(rawCookies), 0)) 107 168 return false; 108 169 return true; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r254384 r254556 6606 6606 } 6607 6607 6608 void WebPage::addDomainWithPageLevelStorageAccess(const RegistrableDomain& topLevelDomain, const RegistrableDomain& resourceDomain) 6609 { 6610 m_domainsWithPageLevelStorageAccess.add(topLevelDomain, resourceDomain); 6611 } 6612 6613 bool WebPage::hasPageLevelStorageAccess(const RegistrableDomain& topLevelDomain, const RegistrableDomain& resourceDomain) const 6614 { 6615 auto it = m_domainsWithPageLevelStorageAccess.find(topLevelDomain); 6616 return it != m_domainsWithPageLevelStorageAccess.end() && it->value == resourceDomain; 6617 } 6618 6608 6619 void WebPage::wasLoadedWithDataTransferFromPrevalentResource() 6609 6620 { -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r254387 r254556 1169 1169 void hasStorageAccess(WebCore::RegistrableDomain&& subFrameDomain, WebCore::RegistrableDomain&& topFrameDomain, WebFrame&, CompletionHandler<void(bool)>&&); 1170 1170 void requestStorageAccess(WebCore::RegistrableDomain&& subFrameDomain, WebCore::RegistrableDomain&& topFrameDomain, WebFrame&, CompletionHandler<void(WebCore::StorageAccessWasGranted, WebCore::StorageAccessPromptWasShown)>&&); 1171 bool hasPageLevelStorageAccess(const WebCore::RegistrableDomain& topLevelDomain, const WebCore::RegistrableDomain& resourceDomain) const; 1172 void addDomainWithPageLevelStorageAccess(const WebCore::RegistrableDomain& topLevelDomain, const WebCore::RegistrableDomain& resourceDomain); 1171 1173 void wasLoadedWithDataTransferFromPrevalentResource(); 1172 1174 #endif … … 2037 2039 #endif 2038 2040 2041 #if ENABLE(RESOURCE_LOAD_STATISTICS) 2042 HashMap<WebCore::RegistrableDomain, WebCore::RegistrableDomain> m_domainsWithPageLevelStorageAccess; 2043 #endif 2044 2039 2045 String m_overriddenMediaType; 2040 2046 }; -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r254392 r254556 478 478 479 479 #if ENABLE(RESOURCE_LOAD_STATISTICS) 480 m_thirdPartyCookieBlockingMode = parameters.thirdPartyCookieBlockingMode; 480 481 if (parameters.resourceLoadStatisticsEnabled && !parameters.sessionID.isEphemeral() && !ResourceLoadObserver::sharedIfExists()) 481 482 ResourceLoadObserver::setShared(*new WebResourceLoadObserver); … … 1978 1979 } 1979 1980 1981 #if ENABLE(RESOURCE_LOAD_STATISTICS) 1982 void WebProcess::setShouldBlockThirdPartyCookiesForTesting(ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode, CompletionHandler<void()>&& completionHandler) 1983 { 1984 m_thirdPartyCookieBlockingMode = thirdPartyCookieBlockingMode; 1985 completionHandler(); 1986 } 1987 #endif 1988 1980 1989 } // namespace WebKit 1981 1990 -
trunk/Source/WebKit/WebProcess/WebProcess.h
r254433 r254556 45 45 #include <WebCore/ActivityState.h> 46 46 #include <WebCore/FrameIdentifier.h> 47 #include <WebCore/NetworkStorageSession.h> 47 48 #include <WebCore/PageIdentifier.h> 48 49 #include <WebCore/RegistrableDomain.h> … … 166 167 PAL::SessionID sessionID() const { ASSERT(m_sessionID); return *m_sessionID; } 167 168 169 #if ENABLE(RESOURCE_LOAD_STATISTICS) 170 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode() const { return m_thirdPartyCookieBlockingMode; } 171 #endif 172 168 173 #if PLATFORM(COCOA) 169 174 const WTF::MachSendRight& compositingRenderServerPort() const { return m_compositingRenderServerPort; } … … 438 443 #endif 439 444 445 #if ENABLE(RESOURCE_LOAD_STATISTICS) 446 void setShouldBlockThirdPartyCookiesForTesting(WebCore::ThirdPartyCookieBlockingMode, CompletionHandler<void()>&&); 447 #endif 448 440 449 void platformInitializeProcess(const AuxiliaryProcessInitializationParameters&); 441 450 … … 605 614 // By the time the WebProcess gets a WebPage, it is guaranteed to have a sessionID. 606 615 Optional<PAL::SessionID> m_sessionID; 616 617 #if ENABLE(RESOURCE_LOAD_STATISTICS) 618 WebCore::ThirdPartyCookieBlockingMode m_thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All }; 619 #endif 607 620 }; 608 621 -
trunk/Source/WebKit/WebProcess/WebProcess.messages.in
r254433 r254556 163 163 #if ENABLE(RESOURCE_LOAD_STATISTICS) 164 164 SeedResourceLoadStatisticsForTesting(WebCore::RegistrableDomain firstPartyDomain, WebCore::RegistrableDomain thirdPartyDomain, bool shouldScheduleNotification) -> () Async 165 SetShouldBlockThirdPartyCookiesForTesting(enum:uint8_t WebCore::ThirdPartyCookieBlockingMode blockingMode) -> () Async 165 166 #endif 166 167 } -
trunk/Tools/ChangeLog
r254554 r254556 1 2020-01-14 Chris Dumez <cdumez@apple.com> 2 3 document.cookie should not do a sync IPC to the network process for iframes that do not have storage access 4 https://bugs.webkit.org/show_bug.cgi?id=206108 5 6 Reviewed by Geoff Garen and John Wilander. 7 8 Make setStatisticsShouldBlockThirdPartyCookies IPC from the WebProcess to the UIProcess asynchronous 9 since this ends up sending an IPC back to the WebProcess now (which would deadlock). 10 11 * WebKitTestRunner/InjectedBundle/TestRunner.cpp: 12 (WTR::TestRunner::setStatisticsShouldBlockThirdPartyCookies): 13 * WebKitTestRunner/TestInvocation.cpp: 14 (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): 15 (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): 16 1 17 2020-01-10 Jiewen Tan <jiewen_tan@apple.com> 2 18 -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
r253149 r254556 2236 2236 messageName = adoptWK(WKStringCreateWithUTF8CString("SetStatisticsShouldBlockThirdPartyCookiesOnSitesWithoutUserInteraction")); 2237 2237 WKRetainPtr<WKBooleanRef> messageBody = adoptWK(WKBooleanCreate(value)); 2238 WKBundlePost SynchronousMessage(InjectedBundle::singleton().bundle(), messageName.get(), messageBody.get(), nullptr);2238 WKBundlePostMessage(InjectedBundle::singleton().bundle(), messageName.get(), messageBody.get()); 2239 2239 m_hasSetBlockThirdPartyCookiesCallback = true; 2240 2240 } -
trunk/Tools/WebKitTestRunner/TestInvocation.cpp
r253149 r254556 748 748 } 749 749 750 if (WKStringIsEqualToUTF8CString(messageName, "SetStatisticsShouldBlockThirdPartyCookiesOnSitesWithoutUserInteraction")) { 751 ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID()); 752 WKBooleanRef value = static_cast<WKBooleanRef>(messageBody); 753 TestController::singleton().setStatisticsShouldBlockThirdPartyCookies(WKBooleanGetValue(value), true); 754 return; 755 } 756 757 if (WKStringIsEqualToUTF8CString(messageName, "SetStatisticsShouldBlockThirdPartyCookies")) { 758 ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID()); 759 WKBooleanRef value = static_cast<WKBooleanRef>(messageBody); 760 TestController::singleton().setStatisticsShouldBlockThirdPartyCookies(WKBooleanGetValue(value), false); 761 return; 762 } 763 750 764 if (WKStringIsEqualToUTF8CString(messageName, "RunUIProcessScript")) { 751 765 WKDictionaryRef messageBodyDictionary = static_cast<WKDictionaryRef>(messageBody); … … 1560 1574 } 1561 1575 1562 if (WKStringIsEqualToUTF8CString(messageName, "SetStatisticsShouldBlockThirdPartyCookiesOnSitesWithoutUserInteraction")) {1563 ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());1564 WKBooleanRef value = static_cast<WKBooleanRef>(messageBody);1565 TestController::singleton().setStatisticsShouldBlockThirdPartyCookies(WKBooleanGetValue(value), true);1566 return nullptr;1567 }1568 1569 if (WKStringIsEqualToUTF8CString(messageName, "SetStatisticsShouldBlockThirdPartyCookies")) {1570 ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());1571 WKBooleanRef value = static_cast<WKBooleanRef>(messageBody);1572 TestController::singleton().setStatisticsShouldBlockThirdPartyCookies(WKBooleanGetValue(value), false);1573 return nullptr;1574 }1575 1576 1576 if (WKStringIsEqualToUTF8CString(messageName, "SetStatisticsFirstPartyWebsiteDataRemovalMode")) { 1577 1577 ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());
Note: See TracChangeset
for help on using the changeset viewer.