Diff
Modified: trunk/Source/WebCore/ChangeLog (242898 => 242899)
--- trunk/Source/WebCore/ChangeLog 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/ChangeLog 2019-03-13 19:53:41 UTC (rev 242899)
@@ -1,3 +1,25 @@
+2019-03-13 Chris Dumez <[email protected]>
+
+ Drop legacy WebCore::toRegistrableDomain() utility function
+ https://bugs.webkit.org/show_bug.cgi?id=195637
+
+ Reviewed by Geoffrey Garen.
+
+ Drop legacy toRegistrableDomain() / registrableDomainAreEqual() utility functions.
+ Update call sites to use modern RegistrableDomain type instead.
+
+ * loader/CrossOriginAccessControl.cpp:
+ (WebCore::shouldCrossOriginResourcePolicyCancelLoad):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::setFirstPartyForCookies):
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::failedToRegisterDeviceMotionEventListener):
+ * platform/RegistrableDomain.h:
+ (WebCore::registrableDomainsAreEqual):
+ * platform/network/ResourceRequestBase.h:
+ * platform/network/cf/ResourceRequestCFNet.cpp:
+ * platform/network/cocoa/ResourceRequestCocoa.mm:
+
2019-03-13 Alex Christensen <[email protected]>
Prevent checked_cf_cast crashes in ResourceResponse::platformCertificateInfo
Modified: trunk/Source/WebCore/dom/Document.cpp (242898 => 242899)
--- trunk/Source/WebCore/dom/Document.cpp 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/dom/Document.cpp 2019-03-13 19:53:41 UTC (rev 242899)
@@ -3450,7 +3450,7 @@
// Only prevent cross-site navigations.
auto* targetDocument = targetFrame.document();
- if (targetDocument && (targetDocument->securityOrigin().canAccess(SecurityOrigin::create(destinationURL)) || registrableDomainsAreEqual(targetDocument->url(), destinationURL)))
+ if (targetDocument && (targetDocument->securityOrigin().canAccess(SecurityOrigin::create(destinationURL)) || areRegistrableDomainsEqual(targetDocument->url(), destinationURL)))
return false;
return true;
Modified: trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp (242898 => 242899)
--- trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp 2019-03-13 19:53:41 UTC (rev 242899)
@@ -230,7 +230,7 @@
if (origin.isUnique())
return true;
#if ENABLE(PUBLIC_SUFFIX_LIST)
- if (!registrableDomainsAreEqual(response.url(), ResourceRequest::partitionName(origin.host())))
+ if (!RegistrableDomain::uncheckedCreateFromHost(origin.host()).matches(response.url()))
return true;
#endif
if (origin.protocol() == "http" && response.url().protocol() == "https")
Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (242898 => 242899)
--- trunk/Source/WebCore/loader/FrameLoader.cpp 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp 2019-03-13 19:53:41 UTC (rev 242899)
@@ -1107,9 +1107,9 @@
for (Frame* frame = &m_frame; frame; frame = frame->tree().traverseNext(&m_frame))
frame->document()->setFirstPartyForCookies(url);
- String registrableDomain = ResourceRequest::partitionName(url.host().toString());
+ RegistrableDomain registrableDomain(url);
for (Frame* frame = &m_frame; frame; frame = frame->tree().traverseNext(&m_frame)) {
- if (SecurityPolicy::shouldInheritSecurityOriginFromOwner(frame->document()->url()) || registrableDomainsAreEqual(frame->document()->url(), registrableDomain))
+ if (SecurityPolicy::shouldInheritSecurityOriginFromOwner(frame->document()->url()) || registrableDomain.matches(frame->document()->url()))
frame->document()->setSiteForCookies(url);
}
}
@@ -2970,7 +2970,7 @@
request.setIsSameSite(true);
return;
}
- request.setIsSameSite(registrableDomainsAreEqual(initiator->siteForCookies(), request.url()));
+ request.setIsSameSite(areRegistrableDomainsEqual(initiator->siteForCookies(), request.url()));
}
void FrameLoader::addHTTPUpgradeInsecureRequestsIfNeeded(ResourceRequest& request)
Modified: trunk/Source/WebCore/page/DOMWindow.cpp (242898 => 242899)
--- trunk/Source/WebCore/page/DOMWindow.cpp 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/page/DOMWindow.cpp 2019-03-13 19:53:41 UTC (rev 242899)
@@ -1944,7 +1944,7 @@
return;
// FIXME: This is a quirk for chase.com on iPad (<rdar://problem/48423023>).
- if (toRegistrableDomain(document()->url()) == "chase.com") {
+ if (RegistrableDomain::uncheckedCreateFromRegistrableDomainString("chase.com"_s).matches(document()->url())) {
// Fire a fake DeviceMotionEvent with acceleration data to unblock the site's login flow.
document()->postTask([](auto& context) {
if (auto* window = downcast<Document>(context).domWindow()) {
Modified: trunk/Source/WebCore/platform/RegistrableDomain.h (242898 => 242899)
--- trunk/Source/WebCore/platform/RegistrableDomain.h 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/platform/RegistrableDomain.h 2019-03-13 19:53:41 UTC (rev 242899)
@@ -131,6 +131,11 @@
return registrableDomain;
}
+inline bool areRegistrableDomainsEqual(const URL& a, const URL& b)
+{
+ return RegistrableDomain(a).matches(b);
+}
+
} // namespace WebCore
namespace WTF {
Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.h (242898 => 242899)
--- trunk/Source/WebCore/platform/network/ResourceRequestBase.h 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.h 2019-03-13 19:53:41 UTC (rev 242899)
@@ -31,8 +31,8 @@
#include "FormData.h"
#include "HTTPHeaderMap.h"
#include "IntRect.h"
+#include "ResourceLoadPriority.h"
#include <wtf/URL.h>
-#include "ResourceLoadPriority.h"
namespace WebCore {
@@ -258,24 +258,6 @@
bool equalIgnoringHeaderFields(const ResourceRequestBase&, const ResourceRequestBase&);
-// FIXME: Find a better place for these functions.
-inline String toRegistrableDomain(const URL& a)
-{
- auto host = a.host().toString();
- auto registrableDomain = ResourceRequestBase::partitionName(host);
- // Fall back to the host if we cannot determine the registrable domain.
- return registrableDomain.isEmpty() ? host : registrableDomain;
-}
-
-inline bool registrableDomainsAreEqual(const URL& a, const URL& b)
-{
- return toRegistrableDomain(a) == toRegistrableDomain(b);
-}
-inline bool registrableDomainsAreEqual(const URL& a, const String& registrableDomain)
-{
- return toRegistrableDomain(a) == registrableDomain;
-}
-
inline bool operator==(const ResourceRequest& a, const ResourceRequest& b) { return ResourceRequestBase::equal(a, b); }
inline bool operator!=(ResourceRequest& a, const ResourceRequest& b) { return !(a == b); }
Modified: trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp (242898 => 242899)
--- trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp 2019-03-13 19:53:41 UTC (rev 242899)
@@ -27,6 +27,7 @@
#include "ResourceRequestCFNet.h"
#include "HTTPHeaderNames.h"
+#include "RegistrableDomain.h"
#include "ResourceRequest.h"
#include <pal/spi/cf/CFNetworkSPI.h>
#include <wtf/cf/TypeCastsCF.h>
@@ -286,7 +287,7 @@
#if PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000
RetainPtr<CFURLRef> siteForCookies = adoptCF(checked_cf_cast<CFURLRef>(_CFURLRequestCopyProtocolPropertyForKey(m_cfRequest.get(), CFSTR("_kCFHTTPCookiePolicyPropertySiteForCookies"))));
- m_sameSiteDisposition = !siteForCookies ? SameSiteDisposition::Unspecified : (registrableDomainsAreEqual(siteForCookies.get(), m_url) ? SameSiteDisposition::SameSite : SameSiteDisposition::CrossSite);
+ m_sameSiteDisposition = !siteForCookies ? SameSiteDisposition::Unspecified : (areRegistrableDomainsEqual(siteForCookies.get(), m_url) ? SameSiteDisposition::SameSite : SameSiteDisposition::CrossSite);
RetainPtr<CFNumberRef> isTopSiteCF = adoptCF(checked_cf_cast<CFNumber>(_CFURLRequestCopyProtocolPropertyForKey(m_cfRequest.get(), CFSTR("_kCFHTTPCookiePolicyPropertyisTopSite"))));
if (!isTopSiteCF)
Modified: trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm (242898 => 242899)
--- trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm 2019-03-13 19:53:41 UTC (rev 242899)
@@ -30,6 +30,7 @@
#import "FormDataStreamMac.h"
#import "HTTPHeaderNames.h"
+#import "RegistrableDomain.h"
#import "ResourceRequestCFNet.h"
#import "RuntimeApplicationChecks.h"
#import <Foundation/Foundation.h>
@@ -89,7 +90,7 @@
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000)
URL siteForCookies { [m_nsRequest.get() _propertyForKey:@"_kCFHTTPCookiePolicyPropertySiteForCookies"] };
- m_sameSiteDisposition = siteForCookies.isNull() ? SameSiteDisposition::Unspecified : (registrableDomainsAreEqual(siteForCookies, m_url) ? SameSiteDisposition::SameSite : SameSiteDisposition::CrossSite);
+ m_sameSiteDisposition = siteForCookies.isNull() ? SameSiteDisposition::Unspecified : (areRegistrableDomainsEqual(siteForCookies, m_url) ? SameSiteDisposition::SameSite : SameSiteDisposition::CrossSite);
m_isTopSite = static_cast<NSNumber*>([m_nsRequest.get() _propertyForKey:@"_kCFHTTPCookiePolicyPropertyIsTopLevelNavigation"]).boolValue;
#endif
Modified: trunk/Source/WebKit/ChangeLog (242898 => 242899)
--- trunk/Source/WebKit/ChangeLog 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebKit/ChangeLog 2019-03-13 19:53:41 UTC (rev 242899)
@@ -1,3 +1,16 @@
+2019-03-13 Chris Dumez <[email protected]>
+
+ Drop legacy WebCore::toRegistrableDomain() utility function
+ https://bugs.webkit.org/show_bug.cgi?id=195637
+
+ Reviewed by Geoffrey Garen.
+
+ Drop legacy toRegistrableDomain() / registrableDomainAreEqual() utility functions.
+ Update call sites to use modern RegistrableDomain type instead.
+
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::processForNavigationInternal):
+
2019-03-12 Brady Eidson <[email protected]>
Take UnboundedNetworking assertion when a file upload is in progress.
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (242898 => 242899)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2019-03-13 19:53:41 UTC (rev 242899)
@@ -145,7 +145,7 @@
bool NetworkDataTaskCocoa::isThirdPartyRequest(const WebCore::ResourceRequest& request)
{
- return !WebCore::registrableDomainsAreEqual(request.url(), request.firstPartyForCookies());
+ return !WebCore::areRegistrableDomainsEqual(request.url(), request.firstPartyForCookies());
}
static void updateTaskWithFirstPartyForSameSiteCookies(NSURLSessionDataTask* task, const WebCore::ResourceRequest& request)
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (242898 => 242899)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-03-13 19:53:41 UTC (rev 242899)
@@ -1313,7 +1313,7 @@
if (initiatingPage) {
URL initiatingPageURL = URL { URL { }, initiatingPage->pageLoadState().url() };
updatedRequest.setFirstPartyForCookies(initiatingPageURL);
- updatedRequest.setIsSameSite(registrableDomainsAreEqual(initiatingPageURL, request.url()));
+ updatedRequest.setIsSameSite(areRegistrableDomainsEqual(initiatingPageURL, request.url()));
if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent))
updatedRequest.setHTTPUserAgent(initiatingPage->userAgent());
} else {
@@ -2212,14 +2212,14 @@
void WebProcessPool::processForNavigationInternal(WebPageProxy& page, const API::Navigation& navigation, Ref<WebProcessProxy>&& sourceProcess, const URL& pageSourceURL, ProcessSwapRequestedByClient processSwapRequestedByClient, Ref<WebsiteDataStore>&& dataStore, CompletionHandler<void(Ref<WebProcessProxy>&&, SuspendedPageProxy*, const String&)>&& completionHandler)
{
auto& targetURL = navigation.currentRequest().url();
- auto registrableDomain = WebCore::RegistrableDomain { targetURL };
+ auto targetRegistrableDomain = WebCore::RegistrableDomain { targetURL };
- auto createNewProcess = [this, protectedThis = makeRef(*this), page = makeRef(page), targetURL, registrableDomain, dataStore = dataStore.copyRef()] () -> Ref<WebProcessProxy> {
- if (auto process = webProcessCache().takeProcess(registrableDomain, dataStore))
+ auto createNewProcess = [this, protectedThis = makeRef(*this), page = makeRef(page), targetURL, targetRegistrableDomain, dataStore = dataStore.copyRef()] () -> Ref<WebProcessProxy> {
+ if (auto process = webProcessCache().takeProcess(targetRegistrableDomain, dataStore))
return process.releaseNonNull();
// Check if we have a suspended page for the given registrable domain and use its process if we do, for performance reasons.
- if (auto process = findReusableSuspendedPageProcess(registrableDomain, page, dataStore)) {
+ if (auto process = findReusableSuspendedPageProcess(targetRegistrableDomain, page, dataStore)) {
RELEASE_LOG(ProcessSwapping, "Using WebProcess %i from a SuspendedPage", process->processIdentifier());
return process.releaseNonNull();
}
@@ -2300,15 +2300,15 @@
RELEASE_LOG(ProcessSwapping, "Using related page %p's URL as source URL for process swap decision", page.configuration().relatedPage());
}
- if (!sourceURL.isValid() || !targetURL.isValid() || sourceURL.isEmpty() || sourceURL.protocolIsAbout() || registrableDomainsAreEqual(sourceURL, targetURL))
+ if (!sourceURL.isValid() || !targetURL.isValid() || sourceURL.isEmpty() || sourceURL.protocolIsAbout() || targetRegistrableDomain.matches(sourceURL))
return completionHandler(WTFMove(sourceProcess), nullptr, "Navigation is same-site"_s);
String reason = "Navigation is cross-site"_s;
if (m_configuration->alwaysKeepAndReuseSwappedProcesses()) {
- LOG(ProcessSwapping, "(ProcessSwapping) Considering re-use of a previously cached process for domain %s", registrableDomain.string().utf8().data());
+ LOG(ProcessSwapping, "(ProcessSwapping) Considering re-use of a previously cached process for domain %s", targetRegistrableDomain.string().utf8().data());
- if (auto* process = m_swappedProcessesPerRegistrableDomain.get(registrableDomain)) {
+ if (auto* process = m_swappedProcessesPerRegistrableDomain.get(targetRegistrableDomain)) {
if (&process->websiteDataStore() == dataStore.ptr()) {
LOG(ProcessSwapping, "(ProcessSwapping) Reusing a previously cached process with pid %i to continue navigation to URL %s", process->processIdentifier(), targetURL.string().utf8().data());
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (242898 => 242899)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2019-03-13 19:28:26 UTC (rev 242898)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2019-03-13 19:53:41 UTC (rev 242899)
@@ -395,7 +395,7 @@
if (!webPage)
return;
- if (m_hasFrameSpecificStorageAccess && !WebCore::registrableDomainsAreEqual(currentUrl, newUrl)) {
+ if (m_hasFrameSpecificStorageAccess && !WebCore::areRegistrableDomainsEqual(currentUrl, newUrl)) {
WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RemoveStorageAccessForFrame(sessionID(), frameID().value(), pageID().value()), 0);
m_hasFrameSpecificStorageAccess = false;
}