Diff
Modified: trunk/LayoutTests/ChangeLog (262970 => 262971)
--- trunk/LayoutTests/ChangeLog 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/LayoutTests/ChangeLog 2020-06-12 19:47:15 UTC (rev 262971)
@@ -1,3 +1,17 @@
+2020-06-12 Takashi Komori <takashi.kom...@sony.com>
+
+ [Curl] Implement functions to use ResourceLoadStatistics.
+ https://bugs.webkit.org/show_bug.cgi?id=207692
+
+ Reviewed by Don Olmstead.
+
+ Implement functions which are required to implement ResourceLoadStatistics for Curl port.
+
+ Tests: http/tests/resourceLoadStatistics/
+
+ * platform/wincairo-wk1/TestExpectations:
+ * platform/wincairo/TestExpectations:
+
2020-06-12 Yusuke Suzuki <ysuz...@apple.com>
[ Mojave wk2 Release ] js/dom/unhandled-promise-rejection-console-no-report.html is flaky failing.
Modified: trunk/LayoutTests/platform/wincairo/TestExpectations (262970 => 262971)
--- trunk/LayoutTests/platform/wincairo/TestExpectations 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/LayoutTests/platform/wincairo/TestExpectations 2020-06-12 19:47:15 UTC (rev 262971)
@@ -1175,9 +1175,37 @@
http/tests/referrer-policy/unsafe-url/cross-origin-http-http.html [ Skip ]
http/tests/referrer-policy/unsafe-url/cross-origin-http.https.html [ Skip ]
+# ResourceLoadStatistics
+http/tests/resourceLoadStatistics [ Pass ]
+http/tests/resourceLoadStatistics/exemptDomains [ Skip ]
+http/tests/resourceLoadStatistics/add-blocking-to-redirect-database.html [ Skip ]
+http/tests/resourceLoadStatistics/add-blocking-to-redirect.html [ Skip ]
+http/tests/resourceLoadStatistics/cookie-deletion-database.html [ Skip ]
+http/tests/resourceLoadStatistics/cookie-deletion.html [ Skip ]
+http/tests/resourceLoadStatistics/cookies-with-and-without-user-interaction-database.html [ Skip ]
+http/tests/resourceLoadStatistics/cookies-with-and-without-user-interaction.html [ Skip ]
+http/tests/resourceLoadStatistics/do-not-remove-blocking-in-redirect-database.html [ Skip ]
+http/tests/resourceLoadStatistics/do-not-remove-blocking-in-redirect.html [ Skip ]
+http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database.html [ Skip ]
+http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to.html [ Skip ]
+http/tests/resourceLoadStatistics/ping-to-prevalent-resource-database.html [ Skip ]
+http/tests/resourceLoadStatistics/ping-to-prevalent-resource.html [ Skip ]
+http/tests/resourceLoadStatistics/set-all-cookies-to-same-site-strict.html [ Skip ]
+http/tests/resourceLoadStatistics/standalone-web-application-exempt-from-website-data-deletion-database.html [ Skip ]
+http/tests/resourceLoadStatistics/standalone-web-application-exempt-from-website-data-deletion.html [ Skip ]
+http/tests/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction-database.php [ Skip ]
+http/tests/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction.php [ Skip ]
+http/tests/resourceLoadStatistics/telemetry-generation.html [ Skip ]
+http/tests/resourceLoadStatistics/third-party-cookie-blocking-ephemeral-database.html [ Skip ]
+http/tests/resourceLoadStatistics/third-party-cookie-blocking-ephemeral.html [ Skip ]
+http/tests/resourceLoadStatistics/third-party-cookie-blocking-on-sites-without-user-interaction-database.html [ Skip ]
+http/tests/resourceLoadStatistics/third-party-cookie-blocking-on-sites-without-user-interaction.html [ Skip ]
+http/tests/resourceLoadStatistics/user-interaction-only-reported-once-within-short-period-of-time-database.html [ Skip ]
+http/tests/resourceLoadStatistics/user-interaction-only-reported-once-within-short-period-of-time.html [ Skip ]
+http/tests/resourceLoadStatistics/user-interaction-reported-after-website-data-removal-database.html [ Skip ]
+http/tests/resourceLoadStatistics/user-interaction-reported-after-website-data-removal.html [ Skip ]
+
# All timing out
-http/tests/resourceLoadStatistics [ Skip ]
-
http/tests/security [ Skip ]
http/tests/security/401-logout/401-logout.php [ Pass ]
http/tests/security/cookies/third-party-cookie-blocking.html [ Pass ]
Modified: trunk/LayoutTests/platform/wincairo-wk1/TestExpectations (262970 => 262971)
--- trunk/LayoutTests/platform/wincairo-wk1/TestExpectations 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/LayoutTests/platform/wincairo-wk1/TestExpectations 2020-06-12 19:47:15 UTC (rev 262971)
@@ -309,3 +309,6 @@
# Skip IsLoggedIn
http/tests/is-logged-in/ [ Skip ]
+
+# Skip ResourceLoadStatistics
+http/tests/resourceLoadStatistics [ Skip ]
Modified: trunk/Source/WebCore/CMakeLists.txt (262970 => 262971)
--- trunk/Source/WebCore/CMakeLists.txt 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebCore/CMakeLists.txt 2020-06-12 19:47:15 UTC (rev 262971)
@@ -696,6 +696,7 @@
dom/DocumentFragment.idl
dom/DocumentFullscreen.idl
dom/DocumentOrShadowRoot.idl
+ dom/DocumentStorageAccess.idl
dom/DocumentTouch.idl
dom/DocumentType.idl
dom/DragEvent.idl
Modified: trunk/Source/WebCore/ChangeLog (262970 => 262971)
--- trunk/Source/WebCore/ChangeLog 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebCore/ChangeLog 2020-06-12 19:47:15 UTC (rev 262971)
@@ -1,3 +1,27 @@
+2020-06-12 Takashi Komori <takashi.kom...@sony.com>
+
+ [Curl] Implement functions to use ResourceLoadStatistics.
+ https://bugs.webkit.org/show_bug.cgi?id=207692
+
+ Reviewed by Don Olmstead.
+
+ Implement functions which are required to implement ResourceLoadStatistics for Curl port.
+
+ Tests: http/tests/resourceLoadStatistics/
+
+ * CMakeLists.txt:
+ * platform/network/curl/CookieJarDB.cpp:
+ (WebCore::CookieJarDB::openDatabase):
+ (WebCore::CookieJarDB::setCookie):
+ (WebCore::CookieJarDB::allDomains):
+ (WebCore::CookieJarDB::deleteCookiesForHostname):
+ * platform/network/curl/CookieJarDB.h:
+ * platform/network/curl/NetworkStorageSessionCurl.cpp:
+ (WebCore::NetworkStorageSession::setCookiesFromDOM const):
+ (WebCore::NetworkStorageSession::setCookies):
+ (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
+ (WebCore::NetworkStorageSession::getHostnamesWithCookies):
+
2020-06-12 Andres Gonzalez <andresg...@apple.com>
In isolated tree mode 2, AXIsolatedObject::setChildrenIDs should be called only on secondary thread.
Modified: trunk/Source/WebCore/platform/network/curl/CookieJarDB.cpp (262970 => 262971)
--- trunk/Source/WebCore/platform/network/curl/CookieJarDB.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebCore/platform/network/curl/CookieJarDB.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -24,6 +24,7 @@
#include "config.h"
#include "CookieJarDB.h"
+#include "cookieJar.h"
#include "CookieUtil.h"
#include "Logging.h"
@@ -63,6 +64,8 @@
"CREATE INDEX IF NOT EXISTS domain_index ON Cookie(domain);"
#define CREATE_PATH_INDEX_SQL \
"CREATE INDEX IF NOT EXISTS path_index ON Cookie(path);"
+#define SELECT_ALL_DOMAINS_SQL \
+ "SELECT DISTINCT domain FROM Cookie;"
#define CHECK_EXISTS_COOKIE_SQL \
"SELECT domain FROM Cookie WHERE ((domain = ?) OR (domain GLOB ?));"
#define CHECK_EXISTS_HTTPONLY_COOKIE_SQL \
@@ -76,6 +79,10 @@
"DELETE FROM Cookie WHERE name = ? AND domain = ?;"
#define DELETE_ALL_SESSION_COOKIE_SQL \
"DELETE FROM Cookie WHERE session = 1;"
+#define DELETE_COOKIES_BY_DOMAIN_SQL \
+ "DELETE FROM Cookie WHERE domain = ? ;"
+#define DELETE_COOKIES_BY_DOMAIN_EXCEPT_HTTP_ONLY_SQL \
+ "DELETE FROM Cookie WHERE (domain = ?) AND (httponly = 0);"
#define DELETE_ALL_COOKIE_SQL \
"DELETE FROM Cookie;"
@@ -165,6 +172,8 @@
createPrepareStatement(CHECK_EXISTS_HTTPONLY_COOKIE_SQL);
createPrepareStatement(DELETE_COOKIE_BY_NAME_DOMAIN_PATH_SQL);
createPrepareStatement(DELETE_COOKIE_BY_NAME_DOMAIN_SQL);
+ createPrepareStatement(DELETE_COOKIES_BY_DOMAIN_SQL);
+ createPrepareStatement(DELETE_COOKIES_BY_DOMAIN_EXCEPT_HTTP_ONLY_SQL);
return true;
}
@@ -529,7 +538,7 @@
return checkSQLiteReturnCode(statement.step());
}
-bool CookieJarDB::setCookie(const URL& firstParty, const URL& url, const String& body, CookieJarDB::Source source)
+bool CookieJarDB::setCookie(const URL& firstParty, const URL& url, const String& body, CookieJarDB::Source source, Optional<Seconds> cappedLifetime)
{
if (!isEnabled() || !m_database.isOpen())
return false;
@@ -550,9 +559,31 @@
if (!canAcceptCookie(*cookie, firstParty, url, source))
return false;
+ if (cappedLifetime && cookie->expires) {
+ ASSERT(*cappedLifetime >= 0_s);
+ auto cappedExpires = WallTime::now() + *cappedLifetime;
+ if (cappedExpires < WallTime::fromRawSeconds(*cookie->expires / WTF::msPerSecond))
+ cookie->expires = cappedExpires.secondsSinceEpoch().milliseconds();
+ }
+
return setCookie(*cookie);
}
+HashSet<String> CookieJarDB::allDomains()
+{
+ SQLiteStatement statement(m_database, SELECT_ALL_DOMAINS_SQL);
+ statement.prepare();
+
+ HashSet<String> domains;
+ while (statement.step() == SQLITE_ROW) {
+ auto domain = statement.getColumnText(0);
+ domains.add(domain);
+ }
+
+ statement.finalize();
+ return domains;
+}
+
bool CookieJarDB::deleteCookie(const String& url, const String& name)
{
if (!isEnabled() || !m_database.isOpen())
@@ -589,6 +620,13 @@
return false;
}
+bool CookieJarDB::deleteCookiesForHostname(const String& hostname, IncludeHttpOnlyCookies includeHttpOnlyCookies)
+{
+ auto& statement = preparedStatement(includeHttpOnlyCookies == IncludeHttpOnlyCookies::Yes ? DELETE_COOKIES_BY_DOMAIN_SQL : DELETE_COOKIES_BY_DOMAIN_EXCEPT_HTTP_ONLY_SQL);
+ statement.bindText(1, hostname);
+ return checkSQLiteReturnCode(statement.step());
+}
+
bool CookieJarDB::deleteAllCookies()
{
if (!isEnabled() || !m_database.isOpen())
Modified: trunk/Source/WebCore/platform/network/curl/CookieJarDB.h (262970 => 262971)
--- trunk/Source/WebCore/platform/network/curl/CookieJarDB.h 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebCore/platform/network/curl/CookieJarDB.h 2020-06-12 19:47:15 UTC (rev 262971)
@@ -25,6 +25,7 @@
#pragma once
#include "Cookie.h"
+#include "CookieJar.h"
#include "SQLiteDatabase.h"
#include "SQLiteStatement.h"
#include <wtf/HashMap.h>
@@ -56,13 +57,15 @@
void setAcceptPolicy(CookieAcceptPolicy policy) { m_acceptPolicy = policy; }
CookieAcceptPolicy acceptPolicy() const { return m_acceptPolicy; }
+ HashSet<String> allDomains();
Optional<Vector<Cookie>> searchCookies(const URL& firstParty, const URL& requestUrl, const Optional<bool>& httpOnly, const Optional<bool>& secure, const Optional<bool>& session);
Vector<Cookie> getAllCookies();
- bool setCookie(const URL& firstParty, const URL&, const String& cookie, Source);
+ bool setCookie(const URL& firstParty, const URL&, const String& cookie, Source, Optional<Seconds> cappedLifetime = WTF::nullopt);
bool setCookie(const Cookie&);
bool deleteCookie(const String& url, const String& name);
bool deleteCookies(const String& url);
+ bool deleteCookiesForHostname(const String& hostname, IncludeHttpOnlyCookies);
bool deleteAllCookies();
WEBCORE_EXPORT CookieJarDB(const String& databasePath);
Modified: trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp (262970 => 262971)
--- trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -95,9 +95,14 @@
return m_cookieDatabase;
}
-void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier>, Optional<PageIdentifier>, ShouldAskITP, const String& value, ShouldRelaxThirdPartyCookieBlocking) const
+void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL& url, Optional<FrameIdentifier> frameID, Optional<PageIdentifier> pageID, ShouldAskITP, const String& value, ShouldRelaxThirdPartyCookieBlocking shouldRelaxThirdPartyCookieBlocking) const
{
- cookieDatabase().setCookie(firstParty, url, value, CookieJarDB::Source::Script);
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ Optional<Seconds> cappedLifetime = clientSideCookieCap(RegistrableDomain { firstParty }, pageID);
+#else
+ Optional<Seconds> cappedLifetime = WTF::nullopt;
+#endif
+ cookieDatabase().setCookie(firstParty, url, value, CookieJarDB::Source::Script, cappedLifetime);
}
void NetworkStorageSession::setCookiesFromHTTPResponse(const URL& firstParty, const URL& url, const String& value) const
@@ -133,9 +138,10 @@
return { cookiesForSession(*this, firstParty, url, false), false };
}
-void NetworkStorageSession::setCookies(const Vector<Cookie>&, const URL&, const URL& /* mainDocumentURL */)
+void NetworkStorageSession::setCookies(const Vector<Cookie>& cookies, const URL&, const URL& /* mainDocumentURL */)
{
- // FIXME: Implement for WebKit to use.
+ for (const auto& cookie : cookies)
+ cookieDatabase().setCookie(cookie);
}
void NetworkStorageSession::setCookie(const Cookie& cookie)
@@ -164,9 +170,10 @@
// FIXME: Not yet implemented
}
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& /* cookieHostNames */, IncludeHttpOnlyCookies)
+void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& cookieHostNames, IncludeHttpOnlyCookies includeHttpOnlyCookies)
{
- // FIXME: Not yet implemented.
+ for (auto hostname : cookieHostNames)
+ cookieDatabase().deleteCookiesForHostname(hostname, includeHttpOnlyCookies);
}
void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& cookieHostNames)
@@ -179,9 +186,9 @@
return cookieDatabase().getAllCookies();
}
-void NetworkStorageSession::getHostnamesWithCookies(HashSet<String>& /* hostnames */)
+void NetworkStorageSession::getHostnamesWithCookies(HashSet<String>& hostnames)
{
- // FIXME: Not yet implemented
+ hostnames = cookieDatabase().allDomains();
}
Vector<Cookie> NetworkStorageSession::getCookies(const URL&)
Modified: trunk/Source/WebKit/ChangeLog (262970 => 262971)
--- trunk/Source/WebKit/ChangeLog 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/ChangeLog 2020-06-12 19:47:15 UTC (rev 262971)
@@ -1,3 +1,35 @@
+2020-06-12 Takashi Komori <takashi.kom...@sony.com>
+
+ [Curl] Implement functions to use ResourceLoadStatistics.
+ https://bugs.webkit.org/show_bug.cgi?id=207692
+
+ Reviewed by Don Olmstead.
+
+ Implement functions which are required to implement ResourceLoadStatistics for Curl port.
+
+ In NetworkDataTaskCurl.cpp we check if we should block cookies and block if needed.
+
+ Tests: http/tests/resourceLoadStatistics/
+
+ * NetworkProcess/NetworkDataTask.cpp:
+ (WebKit::NetworkDataTask::create):
+ * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
+ (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
+ (WebKit::NetworkDataTaskCurl::createCurlRequest):
+ (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
+ (WebKit::NetworkDataTaskCurl::blockCookies):
+ (WebKit::NetworkDataTaskCurl::unblockCookies):
+ (WebKit::NetworkDataTaskCurl::shouldBlockCookies):
+ (WebKit::NetworkDataTaskCurl::isThirdPartyRequest):
+ * NetworkProcess/curl/NetworkDataTaskCurl.h:
+ * NetworkProcess/curl/NetworkSessionCurl.cpp:
+ (WebKit::NetworkSessionCurl::NetworkSessionCurl):
+ * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
+ (WKWebsiteDataStoreGetAllStorageAccessEntries):
+ * UIProcess/API/C/WKWebsiteDataStoreRef.h:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::parameters):
+
2020-06-12 Antoine Quint <grao...@webkit.org>
Double tap to zoom out doesn't work after upgrading to iOS 13
Modified: trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp (262970 => 262971)
--- trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -60,7 +60,7 @@
return NetworkDataTaskSoup::create(session, client, parameters.request, parameters.webFrameID, parameters.webPageID, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation);
#endif
#if USE(CURL)
- return NetworkDataTaskCurl::create(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation);
+ return NetworkDataTaskCurl::create(session, client, parameters.request, parameters.webFrameID, parameters.webPageID, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation, parameters.shouldRelaxThirdPartyCookieBlocking);
#endif
}
Modified: trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp (262970 => 262971)
--- trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -44,8 +44,11 @@
using namespace WebCore;
-NetworkDataTaskCurl::NetworkDataTaskCurl(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentialsPolicy storedCredentialsPolicy, ContentSniffingPolicy shouldContentSniff, ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation)
+NetworkDataTaskCurl::NetworkDataTaskCurl(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, FrameIdentifier frameID, PageIdentifier& pageID, StoredCredentialsPolicy storedCredentialsPolicy, ContentSniffingPolicy shouldContentSniff, ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation, WebCore::ShouldRelaxThirdPartyCookieBlocking shouldRelaxThirdPartyCookieBlocking)
: NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation)
+ , m_frameID(frameID)
+ , m_pageID(pageID)
+ , m_shouldRelaxThirdPartyCookieBlocking(shouldRelaxThirdPartyCookieBlocking)
{
if (m_scheduledFailureType != NoFailure)
return;
@@ -67,6 +70,12 @@
}
}
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ if (shouldBlockCookies(request))
+ blockCookies();
+#endif
+ restrictRequestReferrerToOriginIfNeeded(request);
+
m_curlRequest = createCurlRequest(WTFMove(request));
if (!m_initialCredential.isEmpty()) {
m_curlRequest->setUserPass(m_initialCredential.user(), m_initialCredential.password());
@@ -124,7 +133,7 @@
Ref<CurlRequest> NetworkDataTaskCurl::createCurlRequest(ResourceRequest&& request, RequestStatus status)
{
- if (status == RequestStatus::NewRequest)
+ if (status == RequestStatus::NewRequest && !m_blockingCookies)
appendCookieHeader(request);
// Creates a CurlRequest in suspended state.
@@ -296,6 +305,10 @@
}
}
+#if ENABLE(RESOURCE_LOAD_STATISTCS)
+ if (!m_blockingCookies && shouldBlockCookies(request))
+ blockCookies();
+#endif
auto response = ResourceResponse(m_response);
m_client->willPerformHTTPRedirection(WTFMove(response), WTFMove(request), [this, protectedThis = makeRef(*this), didChangeCredential, isCrossOrigin](const ResourceRequest& newRequest) {
if (newRequest.isNull() || m_state == State::Canceling)
@@ -308,6 +321,7 @@
m_startTime = MonotonicTime::now();
auto requestCopy = newRequest;
+ restrictRequestReferrerToOriginIfNeeded(requestCopy);
m_curlRequest = createCurlRequest(WTFMove(requestCopy));
if (didChangeCredential && !m_initialCredential.isEmpty()) {
m_curlRequest->setUserPass(m_initialCredential.user(), m_initialCredential.password());
@@ -463,4 +477,37 @@
}
}
+void NetworkDataTaskCurl::blockCookies()
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ m_blockingCookies = true;
+#endif
+}
+
+void NetworkDataTaskCurl::unblockCookies()
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ m_blockingCookies = false;
+#endif
+}
+
+bool NetworkDataTaskCurl::shouldBlockCookies(const WebCore::ResourceRequest& request)
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ bool shouldBlockCookies = m_storedCredentialsPolicy == WebCore::StoredCredentialsPolicy::EphemeralStateless;
+
+ if (!shouldBlockCookies && m_session->networkStorageSession())
+ shouldBlockCookies = m_session->networkStorageSession()->shouldBlockCookies(request, m_frameID, m_pageID, m_shouldRelaxThirdPartyCookieBlocking);
+
+ if (shouldBlockCookies)
+ return true;
+#endif
+ return false;
+}
+
+bool NetworkDataTaskCurl::isThirdPartyRequest(const WebCore::ResourceRequest& request)
+{
+ return !WebCore::areRegistrableDomainsEqual(request.url(), request.firstPartyForCookies());
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h (262970 => 262971)
--- trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h 2020-06-12 19:47:15 UTC (rev 262971)
@@ -27,8 +27,11 @@
#include "NetworkDataTask.h"
#include <WebCore/CurlRequestClient.h>
+#include <WebCore/FrameIdentifier.h>
+#include <WebCore/PageIdentifier.h>
#include <WebCore/ProtectionSpace.h>
#include <WebCore/ResourceResponse.h>
+#include <WebCore/ShouldRelaxThirdPartyCookieBlocking.h>
namespace WebCore {
class CurlRequest;
@@ -38,9 +41,9 @@
class NetworkDataTaskCurl final : public NetworkDataTask, public WebCore::CurlRequestClient {
public:
- static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation)
+ static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation, WebCore::ShouldRelaxThirdPartyCookieBlocking shouldRelaxThirdPartyCookieBlocking)
{
- return adoptRef(*new NetworkDataTaskCurl(session, client, request, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation));
+ return adoptRef(*new NetworkDataTaskCurl(session, client, request, frameID, pageID, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation, shouldRelaxThirdPartyCookieBlocking));
}
~NetworkDataTaskCurl();
@@ -54,7 +57,7 @@
ReusedRequest
};
- NetworkDataTaskCurl(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation);
+ NetworkDataTaskCurl(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::FrameIdentifier, WebCore::PageIdentifier&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation, WebCore::ShouldRelaxThirdPartyCookieBlocking);
void cancel() override;
void resume() override;
@@ -82,6 +85,11 @@
void appendCookieHeader(WebCore::ResourceRequest&);
void handleCookieHeaders(const WebCore::ResourceRequest&, const WebCore::CurlResponse&);
+ bool isThirdPartyRequest(const WebCore::ResourceRequest&);
+ bool shouldBlockCookies(const WebCore::ResourceRequest&);
+ void blockCookies();
+ void unblockCookies();
+
State m_state { State::Suspended };
RefPtr<WebCore::CurlRequest> m_curlRequest;
@@ -89,6 +97,13 @@
unsigned m_redirectCount { 0 };
unsigned m_authFailureCount { 0 };
MonotonicTime m_startTime;
+
+ WebCore::FrameIdentifier m_frameID;
+ WebCore::PageIdentifier m_pageID;
+
+ bool m_blockingCookies { false };
+
+ WebCore::ShouldRelaxThirdPartyCookieBlocking m_shouldRelaxThirdPartyCookieBlocking { WebCore::ShouldRelaxThirdPartyCookieBlocking::No };
};
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/curl/NetworkSessionCurl.cpp (262970 => 262971)
--- trunk/Source/WebKit/NetworkProcess/curl/NetworkSessionCurl.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/NetworkProcess/curl/NetworkSessionCurl.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -43,6 +43,14 @@
if (!parameters.cookiePersistentStorageFile.isEmpty())
networkStorageSession()->setCookieDatabase(makeUniqueRef<CookieJarDB>(parameters.cookiePersistentStorageFile));
networkStorageSession()->setProxySettings(WTFMove(parameters.proxySettings));
+
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ m_resourceLoadStatisticsDirectory = parameters.resourceLoadStatisticsParameters.directory;
+ m_shouldIncludeLocalhostInResourceLoadStatistics = parameters.resourceLoadStatisticsParameters.shouldIncludeLocalhost ? ShouldIncludeLocalhost::Yes : ShouldIncludeLocalhost::No;
+ m_enableResourceLoadStatisticsDebugMode = parameters.resourceLoadStatisticsParameters.enableDebugMode ? EnableResourceLoadStatisticsDebugMode::Yes : EnableResourceLoadStatisticsDebugMode::No;
+ m_resourceLoadStatisticsManualPrevalentResource = parameters.resourceLoadStatisticsParameters.manualPrevalentResource;
+ setResourceLoadStatisticsEnabled(parameters.resourceLoadStatisticsParameters.enabled);
+#endif
}
NetworkSessionCurl::~NetworkSessionCurl()
Modified: trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp (262970 => 262971)
--- trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -36,6 +36,7 @@
#include "WKSecurityOriginRef.h"
#include "WKString.h"
#include "WebDeviceOrientationAndMotionAccessController.h"
+#include "WebPageProxy.h"
#include "WebResourceLoadStatisticsStore.h"
#include "WebsiteData.h"
#include "WebsiteDataFetchOption.h"
@@ -819,3 +820,18 @@
completionHandler(context);
});
}
+
+void WKWebsiteDataStoreGetAllStorageAccessEntries(WKWebsiteDataStoreRef dataStoreRef, WKPageRef pageRef, void* context, WKWebsiteDataStoreGetAllStorageAccessEntriesFunction callback)
+{
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ WebKit::toImpl(dataStoreRef)->getAllStorageAccessEntries(toImpl(pageRef)->identifier(), [context, callback] (Vector<String>&& domains) {
+ auto domainArrayRef = WKMutableArrayCreate();
+ for (auto domain : domains)
+ WKArrayAppendItem(domainArrayRef, adoptWK(WKStringCreateWithUTF8CString(domain.utf8().data())).get());
+
+ callback(context, domainArrayRef);
+ });
+#else
+ callback(context, WKMutableArrayCreate());
+#endif
+}
Modified: trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h (262970 => 262971)
--- trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h 2020-06-12 19:47:15 UTC (rev 262971)
@@ -162,6 +162,9 @@
WK_EXPORT void WKWebsiteDataStoreSetPerOriginStorageQuota(WKWebsiteDataStoreRef dataStoreRef, uint64_t quota) WK_C_API_DEPRECATED_WITH_REPLACEMENT(WKWebsiteDataStoreConfigurationSetPerOriginStorageQuota);
+typedef void(*WKWebsiteDataStoreGetAllStorageAccessEntriesFunction)(void* context, WKArrayRef domains);
+WK_EXPORT void WKWebsiteDataStoreGetAllStorageAccessEntries(WKWebsiteDataStoreRef dataStoreRef, WKPageRef pageRef, void* context, WKWebsiteDataStoreGetAllStorageAccessEntriesFunction callback);
+
WK_EXPORT void WKWebsiteDataStoreClearAllDeviceOrientationPermissions(WKWebsiteDataStoreRef dataStoreRef);
typedef void (*WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemovalFunction)(void* functionContext);
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (262970 => 262971)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -2324,6 +2324,9 @@
parameters.perOriginStorageQuota = perOriginStorageQuota();
parameters.perThirdPartyOriginStorageQuota = perThirdPartyOriginStorageQuota();
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ parameters.networkSessionParameters.resourceLoadStatisticsParameters.enabled = m_resourceLoadStatisticsEnabled;
+#endif
platformSetNetworkParameters(parameters);
return parameters;
Modified: trunk/Tools/ChangeLog (262970 => 262971)
--- trunk/Tools/ChangeLog 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Tools/ChangeLog 2020-06-12 19:47:15 UTC (rev 262971)
@@ -1,3 +1,19 @@
+2020-06-12 Takashi Komori <takashi.kom...@sony.com>
+
+ [Curl] Implement functions to use ResourceLoadStatistics.
+ https://bugs.webkit.org/show_bug.cgi?id=207692
+
+ Reviewed by Don Olmstead.
+
+ Implement functions which are required to implement ResourceLoadStatistics for Curl port.
+
+ Tests: http/tests/resourceLoadStatistics/
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::GetAllStorageAccessEntriesCallbackContext::GetAllStorageAccessEntriesCallbackContext):
+ (WTR::getAllStorageAccessEntriesCallback):
+ (WTR::TestController::getAllStorageAccessEntries):
+
2020-06-12 Jonathan Bedard <jbed...@apple.com>
Support building test runners for watchOS and tvOS
Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (262970 => 262971)
--- trunk/Tools/WebKitTestRunner/TestController.cpp 2020-06-12 19:38:50 UTC (rev 262970)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp 2020-06-12 19:47:15 UTC (rev 262971)
@@ -3168,8 +3168,47 @@
{
}
+struct GetAllStorageAccessEntriesCallbackContext {
+ GetAllStorageAccessEntriesCallbackContext(TestController& controller, CompletionHandler<void(Vector<String>&&)>&& handler)
+ : testController(controller)
+ , completionHandler(WTFMove(handler))
+ {
+ }
+
+ TestController& testController;
+ CompletionHandler<void(Vector<String>&&)> completionHandler;
+ bool done { false };
+};
+
+void getAllStorageAccessEntriesCallback(void* userData, WKArrayRef domainList)
+{
+ auto* context = static_cast<GetAllStorageAccessEntriesCallbackContext*>(userData);
+
+ Vector<String> resultDomains;
+ for (int i = 0; i < WKArrayGetSize(domainList); i++) {
+ auto domain = reinterpret_cast<WKStringRef>(WKArrayGetItemAtIndex(domainList, i));
+ auto buffer = std::vector<char>(WKStringGetMaximumUTF8CStringSize(domain));
+ auto stringLength = WKStringGetUTF8CString(domain, buffer.data(), buffer.size());
+
+ resultDomains.append(String::fromUTF8(buffer.data(), stringLength - 1));
+ }
+
+ if (context->completionHandler)
+ context->completionHandler(WTFMove(resultDomains));
+
+ context->done = true;
+ context->testController.notifyDone();
+}
+
void TestController::getAllStorageAccessEntries()
{
+ auto dataStore = WKContextGetWebsiteDataStore(platformContext());
+ GetAllStorageAccessEntriesCallbackContext context(*this, [this] (Vector<String>&& domains) {
+ m_currentInvocation->didReceiveAllStorageAccessEntries(WTFMove(domains));
+ });
+
+ WKWebsiteDataStoreGetAllStorageAccessEntries(dataStore, m_mainWebView->page(), &context, getAllStorageAccessEntriesCallback);
+ runUntil(context.done, noTimeout);
}
struct LoadedThirdPartyDomainsCallbackContext {