Diff
Modified: trunk/Source/WebKit/ChangeLog (258666 => 258667)
--- trunk/Source/WebKit/ChangeLog 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/ChangeLog 2020-03-18 23:09:54 UTC (rev 258667)
@@ -1,3 +1,89 @@
+2020-03-18 Kate Cheney <[email protected]>
+
+ Pass isNavigatingToAppBoundDomain for speculative loads, preconnect tasks and downloads
+ https://bugs.webkit.org/show_bug.cgi?id=209246
+ <rdar://problem/60552712>
+
+ Reviewed by Alex Christensen.
+
+ Pass isNavigatingToAppBoundDomain in 4 new places:
+
+ 1) Speculative Loads
+ 2) Preconnect Tasks
+ 3) Downloads
+ 4) CORS preflight checker
+
+ These loads should happen in an app-bound session if isNavigatingToAppBoundDomain
+ is true.
+
+ * NetworkProcess/Downloads/DownloadManager.cpp:
+ (WebKit::DownloadManager::startDownload):
+ * NetworkProcess/Downloads/DownloadManager.h:
+ (WebKit::DownloadManager::startDownload):
+ * NetworkProcess/Downloads/PendingDownload.cpp:
+ (WebKit::PendingDownload::PendingDownload):
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::startDownload):
+ (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ (WebKit::NetworkConnectionToWebProcess::startDownload):
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::preconnectTo):
+ (WebKit::NetworkProcess::downloadRequest):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+ * NetworkProcess/NetworkResourceLoader.cpp:
+ (WebKit::NetworkResourceLoader::start):
+ (WebKit::NetworkResourceLoader::retrieveCacheEntry):
+ (WebKit::NetworkResourceLoader::convertToDownload):
+ * NetworkProcess/PreconnectTask.cpp:
+ * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
+ (WebKit::ServiceWorkerSoftUpdateLoader::ServiceWorkerSoftUpdateLoader):
+ The service worker script should be considered an app-bound load.
+
+ * NetworkProcess/cache/AsyncRevalidation.cpp:
+ (WebKit::NetworkCache::AsyncRevalidation::AsyncRevalidation):
+ * NetworkProcess/cache/AsyncRevalidation.h:
+ * NetworkProcess/cache/NetworkCache.cpp:
+ (WebKit::NetworkCache::Cache::startAsyncRevalidationIfNeeded):
+ (WebKit::NetworkCache::Cache::retrieve):
+ * NetworkProcess/cache/NetworkCache.h:
+ * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
+ (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
+ * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
+ * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
+ (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
+ (WebKit::NetworkCache::SpeculativeLoadManager::preconnectForSubresource):
+ (WebKit::NetworkCache::SpeculativeLoadManager::revalidateSubresource):
+ (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
+ (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
+ * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
+ * NetworkProcess/cocoa/NetworkSessionCocoa.h:
+ * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+ (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
+ * Shared/NavigatingToAppBoundDomain.h:
+ Separates NavigatingToAppBoundDomain to its own file to allow for
+ sending over IPC.
+
+ * Shared/PolicyDecision.h:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::preconnectTo):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::setIsNavigatingToAppBoundDomain):
+ (WebKit::WebPageProxy::preconnectTo):
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::isNavigatingToAppBoundDomain const):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::download):
+ * WebKit.xcodeproj/project.pbxproj:
+ * WebProcess/Network/WebLoaderStrategy.cpp:
+ (WebKit::WebLoaderStrategy::preconnectTo):
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::startDownload):
+ (WebKit::WebFrame::convertMainResourceLoadToDownload):
+
2020-03-18 Sihui Liu <[email protected]>
Remove unused IPC message NetworkProcess::ClearCacheForAllOrigins
Modified: trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -43,7 +43,7 @@
{
}
-void DownloadManager::startDownload(PAL::SessionID sessionID, DownloadID downloadID, const ResourceRequest& request, const String& suggestedName)
+void DownloadManager::startDownload(PAL::SessionID sessionID, DownloadID downloadID, const ResourceRequest& request, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, const String& suggestedName)
{
auto* networkSession = client().networkSession(sessionID);
if (!networkSession)
@@ -52,6 +52,7 @@
NetworkLoadParameters parameters;
parameters.request = request;
parameters.clientCredentialPolicy = ClientCredentialPolicy::MayAskClientForCredentials;
+ parameters.isNavigatingToAppBoundDomain = isNavigatingToAppBoundDomain;
if (request.url().protocolIsBlob())
parameters.blobFileReferences = client().networkSession(sessionID)->blobRegistry().filesInBlob(request.url());
parameters.storedCredentialsPolicy = sessionID.isEphemeral() ? StoredCredentialsPolicy::DoNotUse : StoredCredentialsPolicy::Use;
Modified: trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -29,6 +29,7 @@
#include "DownloadMap.h"
#include "NetworkDataTask.h"
#include "PendingDownload.h"
+#include "PolicyDecision.h"
#include "SandboxExtension.h"
#include <WebCore/NotImplemented.h>
#include <wtf/Forward.h>
@@ -80,7 +81,7 @@
explicit DownloadManager(Client&);
- void startDownload(PAL::SessionID, DownloadID, const WebCore::ResourceRequest&, const String& suggestedName = { });
+ void startDownload(PAL::SessionID, DownloadID, const WebCore::ResourceRequest&, NavigatingToAppBoundDomain, const String& suggestedName = { });
void dataTaskBecameDownloadTask(DownloadID, std::unique_ptr<Download>&&);
void continueWillSendRequest(DownloadID, WebCore::ResourceRequest&&);
void willDecidePendingDownloadDestination(NetworkDataTask&, ResponseCompletionHandler&&);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -576,18 +576,18 @@
return session;
}
-void NetworkConnectionToWebProcess::startDownload(DownloadID downloadID, const ResourceRequest& request, const String& suggestedName)
+void NetworkConnectionToWebProcess::startDownload(DownloadID downloadID, const ResourceRequest& request, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, const String& suggestedName)
{
- m_networkProcess->downloadManager().startDownload(m_sessionID, downloadID, request, suggestedName);
+ m_networkProcess->downloadManager().startDownload(m_sessionID, downloadID, request, isNavigatingToAppBoundDomain, suggestedName);
}
-void NetworkConnectionToWebProcess::convertMainResourceLoadToDownload(uint64_t mainResourceLoadIdentifier, DownloadID downloadID, const ResourceRequest& request, const ResourceResponse& response)
+void NetworkConnectionToWebProcess::convertMainResourceLoadToDownload(uint64_t mainResourceLoadIdentifier, DownloadID downloadID, const ResourceRequest& request, const ResourceResponse& response, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
RELEASE_ASSERT(RunLoop::isMain());
// In case a response is served from service worker, we do not have yet the ability to convert the load.
if (!mainResourceLoadIdentifier || response.source() == ResourceResponse::Source::ServiceWorker) {
- m_networkProcess->downloadManager().startDownload(m_sessionID, downloadID, request);
+ m_networkProcess->downloadManager().startDownload(m_sessionID, downloadID, request, isNavigatingToAppBoundDomain);
return;
}
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -33,6 +33,7 @@
#include "NetworkMDNSRegister.h"
#include "NetworkRTCProvider.h"
#include "NetworkResourceLoadMap.h"
+#include "PolicyDecision.h"
#include "SandboxExtension.h"
#include "WebPageProxyIdentifier.h"
#include "WebPaymentCoordinatorProxy.h"
@@ -199,8 +200,8 @@
void pageLoadCompleted(WebCore::PageIdentifier);
void browsingContextRemoved(WebPageProxyIdentifier, WebCore::PageIdentifier, WebCore::FrameIdentifier);
void crossOriginRedirectReceived(ResourceLoadIdentifier, const URL& redirectURL);
- void startDownload(DownloadID, const WebCore::ResourceRequest&, const String& suggestedName = { });
- void convertMainResourceLoadToDownload(uint64_t mainResourceLoadIdentifier, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+ void startDownload(DownloadID, const WebCore::ResourceRequest&, NavigatingToAppBoundDomain, const String& suggestedName = { });
+ void convertMainResourceLoadToDownload(uint64_t mainResourceLoadIdentifier, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, NavigatingToAppBoundDomain);
void registerURLSchemesAsCORSEnabled(Vector<String>&& schemes);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2020-03-18 23:09:54 UTC (rev 258667)
@@ -32,8 +32,8 @@
PrefetchDNS(String hostname)
PreconnectTo(Optional<uint64_t> preconnectionIdentifier, WebKit::NetworkResourceLoadParameters loadParameters);
- StartDownload(WebKit::DownloadID downloadID, WebCore::ResourceRequest request, String suggestedName)
- ConvertMainResourceLoadToDownload(uint64_t mainResourceLoadIdentifier, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, WebCore::ResourceResponse response)
+ StartDownload(WebKit::DownloadID downloadID, WebCore::ResourceRequest request, enum:bool WebKit::NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, String suggestedName)
+ ConvertMainResourceLoadToDownload(uint64_t mainResourceLoadIdentifier, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, WebCore::ResourceResponse response, enum:bool WebKit::NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
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
SetCookiesFromDOM(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID, enum:bool WebCore::ShouldAskITP shouldAskITP, String cookieString)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -1309,7 +1309,7 @@
}
#endif // ENABLE(RESOURCE_LOAD_STATISTICS)
-void NetworkProcess::preconnectTo(PAL::SessionID sessionID, const URL& url, const String& userAgent, WebCore::StoredCredentialsPolicy storedCredentialsPolicy)
+void NetworkProcess::preconnectTo(PAL::SessionID sessionID, const URL& url, const String& userAgent, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
#if ENABLE(SERVER_PRECONNECT)
#if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
@@ -1319,6 +1319,7 @@
NetworkLoadParameters parameters;
parameters.request = ResourceRequest { url };
+ parameters.isNavigatingToAppBoundDomain = isNavigatingToAppBoundDomain;
if (!userAgent.isEmpty()) {
// FIXME: we add user-agent to the preconnect request because otherwise the preconnect
// gets thrown away by CFNetwork when using an HTTPS proxy (<rdar://problem/59434166>).
@@ -2034,9 +2035,9 @@
m_cacheEngines.remove(sessionID);
}
-void NetworkProcess::downloadRequest(PAL::SessionID sessionID, DownloadID downloadID, const ResourceRequest& request, const String& suggestedFilename)
+void NetworkProcess::downloadRequest(PAL::SessionID sessionID, DownloadID downloadID, const ResourceRequest& request, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, const String& suggestedFilename)
{
- downloadManager().startDownload(sessionID, downloadID, request, suggestedFilename);
+ downloadManager().startDownload(sessionID, downloadID, request, isNavigatingToAppBoundDomain, suggestedFilename);
}
void NetworkProcess::resumeDownload(PAL::SessionID sessionID, DownloadID downloadID, const IPC::DataReference& resumeData, const String& path, WebKit::SandboxExtension::Handle&& sandboxExtensionHandle)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -270,7 +270,7 @@
using CacheStorageRootPathCallback = CompletionHandler<void(String&&)>;
void cacheStorageRootPath(PAL::SessionID, CacheStorageRootPathCallback&&);
- void preconnectTo(PAL::SessionID, const URL&, const String&, WebCore::StoredCredentialsPolicy);
+ void preconnectTo(PAL::SessionID, const URL&, const String&, WebCore::StoredCredentialsPolicy, NavigatingToAppBoundDomain);
void setSessionIsControlledByAutomation(PAL::SessionID, bool);
bool sessionIsControlledByAutomation(PAL::SessionID) const;
@@ -401,7 +401,7 @@
// FIXME: This should take a session ID so we can identify which disk cache to delete.
void clearDiskCache(WallTime modifiedSince, CompletionHandler<void()>&&);
- void downloadRequest(PAL::SessionID, DownloadID, const WebCore::ResourceRequest&, const String& suggestedFilename);
+ void downloadRequest(PAL::SessionID, DownloadID, const WebCore::ResourceRequest&, NavigatingToAppBoundDomain, const String& suggestedFilename);
void resumeDownload(PAL::SessionID, DownloadID, const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&&);
void cancelDownload(DownloadID);
#if PLATFORM(COCOA)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2020-03-18 23:09:54 UTC (rev 258667)
@@ -47,7 +47,7 @@
DeleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, WallTime modifiedSince, uint64_t callbackID)
DeleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, Vector<WebCore::SecurityOriginData> origins, Vector<String> cookieHostNames, Vector<String> HSTSCacheHostNames, uint64_t callbackID)
- DownloadRequest(PAL::SessionID sessionID, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, String suggestedFilename)
+ DownloadRequest(PAL::SessionID sessionID, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, enum:bool WebKit::NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, String suggestedFilename)
ResumeDownload(PAL::SessionID sessionID, WebKit::DownloadID downloadID, IPC::DataReference resumeData, String path, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
CancelDownload(WebKit::DownloadID downloadID)
#if PLATFORM(COCOA)
@@ -79,7 +79,7 @@
PrepareToSuspend(bool isSuspensionImminent) -> () Async
ProcessDidResume()
- PreconnectTo(PAL::SessionID sessionID, URL url, String userAgent, enum:uint8_t WebCore::StoredCredentialsPolicy storedCredentialsPolicy);
+ PreconnectTo(PAL::SessionID sessionID, URL url, String userAgent, enum:uint8_t WebCore::StoredCredentialsPolicy storedCredentialsPolicy, enum:bool WebKit::NavigatingToAppBoundDomain isNavigatingToAppBoundDomain);
#if ENABLE(RESOURCE_LOAD_STATISTICS)
ClearPrevalentResource(PAL::SessionID sessionID, WebCore::RegistrableDomain resourceDomain) -> () Async
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -247,7 +247,7 @@
}
RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Checking the HTTP disk cache");
- m_cache->retrieve(request, globalFrameID(), [this, weakThis = makeWeakPtr(*this), request = ResourceRequest { request }](auto entry, auto info) mutable {
+ m_cache->retrieve(request, globalFrameID(), m_parameters.isNavigatingToAppBoundDomain, [this, weakThis = makeWeakPtr(*this), request = ResourceRequest { request }](auto entry, auto info) mutable {
if (!weakThis)
return;
@@ -466,7 +466,7 @@
// This can happen if the resource came from the disk cache.
if (!m_networkLoad) {
- m_connection->networkProcess().downloadManager().startDownload(sessionID(), downloadID, request);
+ m_connection->networkProcess().downloadManager().startDownload(sessionID(), downloadID, request, m_parameters.isNavigatingToAppBoundDomain);
abort();
return;
}
Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -59,8 +59,8 @@
if (session.cache()) {
// We set cache policy to disable speculative loading/async revalidation from the cache.
request.setCachePolicy(ResourceRequestCachePolicy::ReturnCacheDataDontLoad);
-
- session.cache()->retrieve(request, NetworkCache::GlobalFrameID { }, [this, weakThis = makeWeakPtr(*this), request, shouldRefreshCache](auto&& entry, auto&&) mutable {
+
+ session.cache()->retrieve(request, NetworkCache::GlobalFrameID { }, NavigatingToAppBoundDomain::No, [this, weakThis = makeWeakPtr(*this), request, shouldRefreshCache](auto&& entry, auto&&) mutable {
if (!weakThis)
return;
if (!m_session) {
Modified: trunk/Source/WebKit/NetworkProcess/cache/AsyncRevalidation.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/AsyncRevalidation.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/AsyncRevalidation.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -66,7 +66,7 @@
m_completionHandler(Result::Timeout);
}
-AsyncRevalidation::AsyncRevalidation(Cache& cache, const GlobalFrameID& frameID, const WebCore::ResourceRequest& request, std::unique_ptr<NetworkCache::Entry>&& entry, CompletionHandler<void(Result)>&& handler)
+AsyncRevalidation::AsyncRevalidation(Cache& cache, const GlobalFrameID& frameID, const WebCore::ResourceRequest& request, std::unique_ptr<NetworkCache::Entry>&& entry, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, CompletionHandler<void(Result)>&& handler)
: m_timer(*this, &AsyncRevalidation::staleWhileRevalidateEnding)
, m_completionHandler(WTFMove(handler))
{
@@ -77,7 +77,7 @@
auto responseMaxStaleness = entry->response().cacheControlStaleWhileRevalidate();
ASSERT(responseMaxStaleness);
m_timer.startOneShot(*responseMaxStaleness + (lifetime - age));
- m_load = makeUnique<SpeculativeLoad>(cache, frameID, WTFMove(revalidationRequest), WTFMove(entry), [this, key, revalidationRequest](auto&& revalidatedEntry) {
+ m_load = makeUnique<SpeculativeLoad>(cache, frameID, WTFMove(revalidationRequest), WTFMove(entry), isNavigatingToAppBoundDomain, [this, key, revalidationRequest](auto&& revalidatedEntry) {
ASSERT(!revalidatedEntry || !revalidatedEntry->needsValidation());
ASSERT(!revalidatedEntry || revalidatedEntry->key() == key);
if (m_completionHandler)
Modified: trunk/Source/WebKit/NetworkProcess/cache/AsyncRevalidation.h (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/AsyncRevalidation.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/AsyncRevalidation.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -51,7 +51,7 @@
Timeout,
Success,
};
- AsyncRevalidation(Cache&, const GlobalFrameID&, const WebCore::ResourceRequest&, std::unique_ptr<NetworkCache::Entry>&&, CompletionHandler<void(Result)>&&);
+ AsyncRevalidation(Cache&, const GlobalFrameID&, const WebCore::ResourceRequest&, std::unique_ptr<NetworkCache::Entry>&&, NavigatingToAppBoundDomain, CompletionHandler<void(Result)>&&);
void cancel();
const SpeculativeLoad& load() const { return *m_load; }
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -337,13 +337,13 @@
#endif
#if ENABLE(NETWORK_CACHE_STALE_WHILE_REVALIDATE)
-void Cache::startAsyncRevalidationIfNeeded(const WebCore::ResourceRequest& request, const NetworkCache::Key& key, std::unique_ptr<Entry>&& entry, const GlobalFrameID& frameID)
+void Cache::startAsyncRevalidationIfNeeded(const WebCore::ResourceRequest& request, const NetworkCache::Key& key, std::unique_ptr<Entry>&& entry, const GlobalFrameID& frameID, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
m_pendingAsyncRevalidations.ensure(key, [&] {
auto addResult = m_pendingAsyncRevalidationByPage.ensure(frameID, [] {
return WeakHashSet<AsyncRevalidation>();
});
- auto revalidation = makeUnique<AsyncRevalidation>(*this, frameID, request, WTFMove(entry), [this, key](auto result) {
+ auto revalidation = makeUnique<AsyncRevalidation>(*this, frameID, request, WTFMove(entry), isNavigatingToAppBoundDomain, [this, key](auto result) {
ASSERT(m_pendingAsyncRevalidations.contains(key));
m_pendingAsyncRevalidations.remove(key);
LOG(NetworkCache, "(NetworkProcess) Async revalidation completed for '%s' with result %d", key.identifier().utf8().data(), static_cast<int>(result));
@@ -363,7 +363,7 @@
#endif
}
-void Cache::retrieve(const WebCore::ResourceRequest& request, const GlobalFrameID& frameID, RetrieveCompletionHandler&& completionHandler)
+void Cache::retrieve(const WebCore::ResourceRequest& request, const GlobalFrameID& frameID, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, RetrieveCompletionHandler&& completionHandler)
{
ASSERT(request.url().protocolIsInHTTPFamily());
@@ -379,7 +379,7 @@
#if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
bool canUseSpeculativeRevalidation = m_speculativeLoadManager && canRequestUseSpeculativeRevalidation(request);
if (canUseSpeculativeRevalidation)
- m_speculativeLoadManager->registerLoad(frameID, request, storageKey);
+ m_speculativeLoadManager->registerLoad(frameID, request, storageKey, isNavigatingToAppBoundDomain);
#endif
auto retrieveDecision = makeRetrieveDecision(request);
@@ -401,7 +401,7 @@
}
#endif
- m_storage->retrieve(storageKey, priority, [this, protectedThis = makeRef(*this), request, completionHandler = WTFMove(completionHandler), info = WTFMove(info), storageKey, networkProcess = makeRef(networkProcess()), sessionID = m_sessionID, frameID](auto record, auto timings) mutable {
+ m_storage->retrieve(storageKey, priority, [this, protectedThis = makeRef(*this), request, completionHandler = WTFMove(completionHandler), info = WTFMove(info), storageKey, networkProcess = makeRef(networkProcess()), sessionID = m_sessionID, frameID, isNavigatingToAppBoundDomain](auto record, auto timings) mutable {
info.storageTimings = timings;
if (!record) {
@@ -420,7 +420,7 @@
#if ENABLE(NETWORK_CACHE_STALE_WHILE_REVALIDATE)
auto entryCopy = makeUnique<Entry>(*entry);
entryCopy->setNeedsValidation(true);
- startAsyncRevalidationIfNeeded(request, storageKey, WTFMove(entryCopy), frameID);
+ startAsyncRevalidationIfNeeded(request, storageKey, WTFMove(entryCopy), frameID, isNavigatingToAppBoundDomain);
#else
UNUSED_PARAM(frameID);
UNUSED_PARAM(this);
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.h (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCache.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -27,6 +27,7 @@
#include "NetworkCacheEntry.h"
#include "NetworkCacheStorage.h"
+#include "PolicyDecision.h"
#include "ShareableResource.h"
#include "WebPageProxyIdentifier.h"
#include <WebCore/FrameIdentifier.h>
@@ -170,7 +171,7 @@
WTF_MAKE_FAST_ALLOCATED;
};
using RetrieveCompletionHandler = Function<void(std::unique_ptr<Entry>, const RetrieveInfo&)>;
- void retrieve(const WebCore::ResourceRequest&, const GlobalFrameID&, RetrieveCompletionHandler&&);
+ void retrieve(const WebCore::ResourceRequest&, const GlobalFrameID&, NavigatingToAppBoundDomain, RetrieveCompletionHandler&&);
std::unique_ptr<Entry> store(const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, RefPtr<WebCore::SharedBuffer>&&, Function<void(MappedBody&)>&& = nullptr);
std::unique_ptr<Entry> storeRedirect(const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, const WebCore::ResourceRequest& redirectRequest, Optional<Seconds> maxAgeCap);
std::unique_ptr<Entry> update(const WebCore::ResourceRequest&, const Entry&, const WebCore::ResourceResponse& validatingResponse);
@@ -202,7 +203,7 @@
#endif
#if ENABLE(NETWORK_CACHE_STALE_WHILE_REVALIDATE)
- void startAsyncRevalidationIfNeeded(const WebCore::ResourceRequest&, const NetworkCache::Key&, std::unique_ptr<Entry>&&, const GlobalFrameID&);
+ void startAsyncRevalidationIfNeeded(const WebCore::ResourceRequest&, const NetworkCache::Key&, std::unique_ptr<Entry>&&, const GlobalFrameID&, NavigatingToAppBoundDomain);
#endif
void browsingContextRemoved(WebPageProxyIdentifier, WebCore::PageIdentifier, WebCore::FrameIdentifier);
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -42,7 +42,7 @@
using namespace WebCore;
-SpeculativeLoad::SpeculativeLoad(Cache& cache, const GlobalFrameID& globalFrameID, const ResourceRequest& request, std::unique_ptr<NetworkCache::Entry> cacheEntryForValidation, RevalidationCompletionHandler&& completionHandler)
+SpeculativeLoad::SpeculativeLoad(Cache& cache, const GlobalFrameID& globalFrameID, const ResourceRequest& request, std::unique_ptr<NetworkCache::Entry> cacheEntryForValidation, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain, RevalidationCompletionHandler&& completionHandler)
: m_cache(cache)
, m_completionHandler(WTFMove(completionHandler))
, m_originalRequest(request)
@@ -59,6 +59,7 @@
parameters.contentSniffingPolicy = ContentSniffingPolicy::DoNotSniffContent;
parameters.contentEncodingSniffingPolicy = ContentEncodingSniffingPolicy::Sniff;
parameters.request = m_originalRequest;
+ parameters.isNavigatingToAppBoundDomain = isNavigatingToAppBoundDomain;
m_networkLoad = makeUnique<NetworkLoad>(*this, nullptr, WTFMove(parameters), *cache.networkProcess().networkSession(cache.sessionID()));
}
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -30,6 +30,7 @@
#include "NetworkCache.h"
#include "NetworkCacheEntry.h"
#include "NetworkLoadClient.h"
+#include "PolicyDecision.h"
#include <WebCore/ResourceRequest.h>
#include <WebCore/ResourceResponse.h>
#include <WebCore/SharedBuffer.h>
@@ -45,7 +46,7 @@
WTF_MAKE_FAST_ALLOCATED;
public:
using RevalidationCompletionHandler = CompletionHandler<void(std::unique_ptr<NetworkCache::Entry>)>;
- SpeculativeLoad(Cache&, const GlobalFrameID&, const WebCore::ResourceRequest&, std::unique_ptr<NetworkCache::Entry>, RevalidationCompletionHandler&&);
+ SpeculativeLoad(Cache&, const GlobalFrameID&, const WebCore::ResourceRequest&, std::unique_ptr<NetworkCache::Entry>, NavigatingToAppBoundDomain, RevalidationCompletionHandler&&);
virtual ~SpeculativeLoad();
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -345,7 +345,7 @@
return true;
}
-void SpeculativeLoadManager::registerLoad(const GlobalFrameID& frameID, const ResourceRequest& request, const Key& resourceKey)
+void SpeculativeLoadManager::registerLoad(const GlobalFrameID& frameID, const ResourceRequest& request, const Key& resourceKey, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
ASSERT(RunLoop::isMain());
ASSERT(request.url().protocolIsInHTTPFamily());
@@ -369,9 +369,9 @@
m_pendingFrameLoads.add(frameID, pendingFrameLoad.copyRef());
// Retrieve the subresources entry if it exists to start speculative revalidation and to update it.
- retrieveSubresourcesEntry(resourceKey, [this, frameID, pendingFrameLoad = WTFMove(pendingFrameLoad)](std::unique_ptr<SubresourcesEntry> entry) {
+ retrieveSubresourcesEntry(resourceKey, [this, frameID, pendingFrameLoad = WTFMove(pendingFrameLoad), isNavigatingToAppBoundDomain](std::unique_ptr<SubresourcesEntry> entry) {
if (entry)
- startSpeculativeRevalidation(frameID, *entry);
+ startSpeculativeRevalidation(frameID, *entry, isNavigatingToAppBoundDomain);
pendingFrameLoad->setExistingSubresourcesEntry(WTFMove(entry));
});
@@ -449,7 +449,7 @@
return true;
}
-void SpeculativeLoadManager::preconnectForSubresource(const SubresourceInfo& subresourceInfo, Entry* entry, const GlobalFrameID& frameID)
+void SpeculativeLoadManager::preconnectForSubresource(const SubresourceInfo& subresourceInfo, Entry* entry, const GlobalFrameID& frameID, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
#if ENABLE(SERVER_PRECONNECT)
NetworkLoadParameters parameters;
@@ -461,6 +461,7 @@
parameters.contentEncodingSniffingPolicy = ContentEncodingSniffingPolicy::Sniff;
parameters.shouldPreconnectOnly = PreconnectOnly::Yes;
parameters.request = constructRevalidationRequest(subresourceInfo.key(), subresourceInfo, entry);
+ parameters.isNavigatingToAppBoundDomain = isNavigatingToAppBoundDomain;
new PreconnectTask(m_cache.networkProcess(), m_cache.sessionID(), WTFMove(parameters), [](const WebCore::ResourceError&) { });
#else
UNUSED_PARAM(subresourceInfo);
@@ -469,7 +470,7 @@
#endif
}
-void SpeculativeLoadManager::revalidateSubresource(const SubresourceInfo& subresourceInfo, std::unique_ptr<Entry> entry, const GlobalFrameID& frameID)
+void SpeculativeLoadManager::revalidateSubresource(const SubresourceInfo& subresourceInfo, std::unique_ptr<Entry> entry, const GlobalFrameID& frameID, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
ASSERT(!entry || entry->needsValidation());
@@ -484,12 +485,12 @@
// Delay first-party speculative loads until we've received the response for the main resource, in case the main resource
// response sets cookies that are needed for subsequent loads.
if (pendingLoad && !pendingLoad->didReceiveMainResourceResponse() && subresourceInfo.isFirstParty()) {
- preconnectForSubresource(subresourceInfo, entry.get(), frameID);
- pendingLoad->addPostMainResourceResponseTask([this, subresourceInfo, entry = WTFMove(entry), frameID]() mutable {
+ preconnectForSubresource(subresourceInfo, entry.get(), frameID, isNavigatingToAppBoundDomain);
+ pendingLoad->addPostMainResourceResponseTask([this, subresourceInfo, entry = WTFMove(entry), frameID, isNavigatingToAppBoundDomain]() mutable {
if (m_pendingPreloads.contains(subresourceInfo.key()))
return;
- revalidateSubresource(subresourceInfo, WTFMove(entry), frameID);
+ revalidateSubresource(subresourceInfo, WTFMove(entry), frameID, isNavigatingToAppBoundDomain);
});
return;
}
@@ -498,7 +499,7 @@
LOG(NetworkCacheSpeculativePreloading, "(NetworkProcess) Speculatively revalidating '%s':", key.identifier().utf8().data());
- auto revalidator = makeUnique<SpeculativeLoad>(m_cache, frameID, revalidationRequest, WTFMove(entry), [this, key, revalidationRequest, frameID](std::unique_ptr<Entry> revalidatedEntry) {
+ auto revalidator = makeUnique<SpeculativeLoad>(m_cache, frameID, revalidationRequest, WTFMove(entry), isNavigatingToAppBoundDomain, [this, key, revalidationRequest, frameID](std::unique_ptr<Entry> revalidatedEntry) {
ASSERT(!revalidatedEntry || !revalidatedEntry->needsValidation());
ASSERT(!revalidatedEntry || revalidatedEntry->key() == key);
@@ -554,13 +555,13 @@
return false;
}
-void SpeculativeLoadManager::preloadEntry(const Key& key, const SubresourceInfo& subresourceInfo, const GlobalFrameID& frameID)
+void SpeculativeLoadManager::preloadEntry(const Key& key, const SubresourceInfo& subresourceInfo, const GlobalFrameID& frameID, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
if (m_pendingPreloads.contains(key))
return;
m_pendingPreloads.add(key, nullptr);
- retrieveEntryFromStorage(subresourceInfo, [this, key, subresourceInfo, frameID](std::unique_ptr<Entry> entry) {
+ retrieveEntryFromStorage(subresourceInfo, [this, key, subresourceInfo, frameID, isNavigatingToAppBoundDomain](std::unique_ptr<Entry> entry) {
ASSERT(!m_pendingPreloads.get(key));
bool removed = m_pendingPreloads.remove(key);
ASSERT_UNUSED(removed, removed);
@@ -573,7 +574,7 @@
if (!entry || entry->needsValidation()) {
if (canRevalidate(subresourceInfo, entry.get()))
- revalidateSubresource(subresourceInfo, WTFMove(entry), frameID);
+ revalidateSubresource(subresourceInfo, WTFMove(entry), frameID, isNavigatingToAppBoundDomain);
return;
}
@@ -581,12 +582,12 @@
});
}
-void SpeculativeLoadManager::startSpeculativeRevalidation(const GlobalFrameID& frameID, SubresourcesEntry& entry)
+void SpeculativeLoadManager::startSpeculativeRevalidation(const GlobalFrameID& frameID, SubresourcesEntry& entry, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
for (auto& subresourceInfo : entry.subresources()) {
auto& key = subresourceInfo.key();
if (!subresourceInfo.isTransient())
- preloadEntry(key, subresourceInfo, frameID);
+ preloadEntry(key, subresourceInfo, frameID, isNavigatingToAppBoundDomain);
else {
LOG(NetworkCacheSpeculativePreloading, "(NetworkProcess) Not preloading '%s' because it is marked as transient", key.identifier().utf8().data());
m_notPreloadedEntries.add(key, makeUnique<ExpiringEntry>([this, key, frameID] {
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h (258666 => 258667)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -49,7 +49,7 @@
explicit SpeculativeLoadManager(Cache&, Storage&);
~SpeculativeLoadManager();
- void registerLoad(const GlobalFrameID&, const WebCore::ResourceRequest&, const Key& resourceKey);
+ void registerLoad(const GlobalFrameID&, const WebCore::ResourceRequest&, const Key& resourceKey, NavigatingToAppBoundDomain);
void registerMainResourceLoadResponse(const GlobalFrameID&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
typedef Function<void (std::unique_ptr<Entry>)> RetrieveCompletionHandler;
@@ -62,13 +62,13 @@
static bool shouldRegisterLoad(const WebCore::ResourceRequest&);
void addPreloadedEntry(std::unique_ptr<Entry>, const GlobalFrameID&, Optional<WebCore::ResourceRequest>&& revalidationRequest = WTF::nullopt);
- void preloadEntry(const Key&, const SubresourceInfo&, const GlobalFrameID&);
+ void preloadEntry(const Key&, const SubresourceInfo&, const GlobalFrameID&, NavigatingToAppBoundDomain);
void retrieveEntryFromStorage(const SubresourceInfo&, RetrieveCompletionHandler&&);
- void revalidateSubresource(const SubresourceInfo&, std::unique_ptr<Entry>, const GlobalFrameID&);
- void preconnectForSubresource(const SubresourceInfo&, Entry*, const GlobalFrameID&);
+ void revalidateSubresource(const SubresourceInfo&, std::unique_ptr<Entry>, const GlobalFrameID&, NavigatingToAppBoundDomain);
+ void preconnectForSubresource(const SubresourceInfo&, Entry*, const GlobalFrameID&, NavigatingToAppBoundDomain);
bool satisfyPendingRequests(const Key&, Entry*);
void retrieveSubresourcesEntry(const Key& storageKey, WTF::Function<void (std::unique_ptr<SubresourcesEntry>)>&&);
- void startSpeculativeRevalidation(const GlobalFrameID&, SubresourcesEntry&);
+ void startSpeculativeRevalidation(const GlobalFrameID&, SubresourcesEntry&, NavigatingToAppBoundDomain);
static bool canUsePreloadedEntry(const PreloadedEntry&, const WebCore::ResourceRequest& actualRequest);
static bool canUsePendingPreload(const SpeculativeLoad&, const WebCore::ResourceRequest& actualRequest);
Copied: trunk/Source/WebKit/Shared/NavigatingToAppBoundDomain.h (from rev 258666, trunk/Source/WebKit/NetworkProcess/cache/AsyncRevalidation.h) (0 => 258667)
--- trunk/Source/WebKit/Shared/NavigatingToAppBoundDomain.h (rev 0)
+++ trunk/Source/WebKit/Shared/NavigatingToAppBoundDomain.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+namespace WebKit {
+
+enum class NavigatingToAppBoundDomain : bool { Yes, No };
+
+}
+
Modified: trunk/Source/WebKit/Shared/PolicyDecision.h (258666 => 258667)
--- trunk/Source/WebKit/Shared/PolicyDecision.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/Shared/PolicyDecision.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -26,13 +26,13 @@
#pragma once
#include "DownloadID.h"
+#include "NavigatingToAppBoundDomain.h"
#include "WebsitePoliciesData.h"
#include <wtf/Forward.h>
namespace WebKit {
-enum class NavigatingToAppBoundDomain { Yes, No };
-enum class NavigatedAwayFromAppBoundDomain { Yes, No};
+enum class NavigatedAwayFromAppBoundDomain : bool { Yes, No};
struct PolicyDecision {
WebCore::PolicyCheckIdentifier identifier { };
@@ -98,23 +98,3 @@
};
} // namespace WebKit
-
-namespace WTF {
-
-template<> struct EnumTraits<WebKit::NavigatingToAppBoundDomain> {
- using values = EnumValues<
- WebKit::NavigatingToAppBoundDomain,
- WebKit::NavigatingToAppBoundDomain::Yes,
- WebKit::NavigatingToAppBoundDomain::No
- >;
-};
-
-template<> struct EnumTraits<WebKit::NavigatedAwayFromAppBoundDomain> {
- using values = EnumValues<
- WebKit::NavigatedAwayFromAppBoundDomain,
- WebKit::NavigatedAwayFromAppBoundDomain::Yes,
- WebKit::NavigatedAwayFromAppBoundDomain::No
- >;
-};
-
-}
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (258666 => 258667)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -1434,11 +1434,11 @@
sendWithAsyncReply(Messages::NetworkProcess::GetLocalStorageOriginDetails(sessionID), WTFMove(completionHandler));
}
-void NetworkProcessProxy::preconnectTo(PAL::SessionID sessionID, const URL& url, const String& userAgent, WebCore::StoredCredentialsPolicy storedCredentialsPolicy)
+void NetworkProcessProxy::preconnectTo(PAL::SessionID sessionID, const URL& url, const String& userAgent, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, NavigatingToAppBoundDomain isNavigatingToAppBoundDomain)
{
if (!url.isValid() || !url.protocolIsInHTTPFamily() || SecurityOrigin::isLocalHostOrLoopbackIPAddress(url.host()))
return;
- send(Messages::NetworkProcess::PreconnectTo(sessionID, url, userAgent, storedCredentialsPolicy), 0);
+ send(Messages::NetworkProcess::PreconnectTo(sessionID, url, userAgent, storedCredentialsPolicy, isNavigatingToAppBoundDomain), 0);
}
void NetworkProcessProxy::updateProcessAssertion()
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (258666 => 258667)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -110,7 +110,7 @@
void getLocalStorageDetails(PAL::SessionID, CompletionHandler<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&&);
- void preconnectTo(PAL::SessionID, const URL&, const String&, WebCore::StoredCredentialsPolicy);
+ void preconnectTo(PAL::SessionID, const URL&, const String&, WebCore::StoredCredentialsPolicy, NavigatingToAppBoundDomain);
#if ENABLE(RESOURCE_LOAD_STATISTICS)
void clearPrevalentResource(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void()>&&);
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (258666 => 258667)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -4296,7 +4296,7 @@
return;
if (auto* networkProcess = m_process->processPool().networkProcess())
- networkProcess->preconnectTo(sessionID(), url, userAgent(), WebCore::StoredCredentialsPolicy::Use);
+ networkProcess->preconnectTo(sessionID(), url, userAgent(), WebCore::StoredCredentialsPolicy::Use, m_isNavigatingToAppBoundDomain);
}
void WebPageProxy::didDestroyNavigation(uint64_t navigationID)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (258666 => 258667)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2020-03-18 23:09:54 UTC (rev 258667)
@@ -1714,6 +1714,7 @@
void setIsNavigatingToAppBoundDomainTesting(bool, CompletionHandler<void()>&&);
void isNavigatingToAppBoundDomainTesting(CompletionHandler<void(bool)>&&);
+ NavigatingToAppBoundDomain isNavigatingToAppBoundDomain() const { return m_isNavigatingToAppBoundDomain; }
private:
WebPageProxy(PageClient&, WebProcessProxy&, Ref<API::PageConfiguration>&&);
@@ -2271,7 +2272,6 @@
void makeStorageSpaceRequest(WebCore::FrameIdentifier, const String& originIdentifier, const String& databaseName, const String& displayName, uint64_t currentQuota, uint64_t currentOriginUsage, uint64_t currentDatabaseUsage, uint64_t expectedUsage, CompletionHandler<void(uint64_t)>&&);
void setIsNavigatingToAppBoundDomain(bool isMainFrame, const URL&, NavigatingToAppBoundDomain);
- NavigatingToAppBoundDomain isNavigatingToAppBoundDomain() const { return m_isNavigatingToAppBoundDomain; }
NavigatedAwayFromAppBoundDomain hasNavigatedAwayFromAppBoundDomain() const { return m_hasNavigatedAwayFromAppBoundDomain; }
const Identifier m_identifier;
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (258666 => 258667)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -1357,8 +1357,11 @@
auto& downloadProxy = createDownloadProxy(dataStore, request, initiatingPage, { });
PAL::SessionID sessionID = dataStore.sessionID();
- if (initiatingPage)
+ NavigatingToAppBoundDomain isAppBound = NavigatingToAppBoundDomain::No;
+ if (initiatingPage) {
initiatingPage->handleDownloadRequest(downloadProxy);
+ isAppBound = initiatingPage->isNavigatingToAppBoundDomain();
+ }
if (networkProcess()) {
ResourceRequest updatedRequest(request);
@@ -1377,7 +1380,7 @@
updatedRequest.setHTTPUserAgent(WebPageProxy::standardUserAgent());
}
updatedRequest.setIsTopSite(false);
- networkProcess()->send(Messages::NetworkProcess::DownloadRequest(sessionID, downloadProxy.downloadID(), updatedRequest, suggestedFilename), 0);
+ networkProcess()->send(Messages::NetworkProcess::DownloadRequest(sessionID, downloadProxy.downloadID(), updatedRequest, isAppBound, suggestedFilename), 0);
return downloadProxy;
}
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (258666 => 258667)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2020-03-18 23:09:54 UTC (rev 258667)
@@ -955,6 +955,7 @@
46F38E8C2416E6730059375A /* RunningBoardServicesSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F38E8B2416E66D0059375A /* RunningBoardServicesSPI.h */; };
46F9B26323526EF3006FE5FA /* WebBackForwardCacheEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F9B26223526ED0006FE5FA /* WebBackForwardCacheEntry.h */; };
4960A3BD23C52AFD00961842 /* WebViewCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4960A3BC23C5286400961842 /* WebViewCategory.h */; };
+ 4973DF482422941F00E4C26A /* NavigatingToAppBoundDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 4973DF472422941F00E4C26A /* NavigatingToAppBoundDomain.h */; };
49BCA19223A177660028A836 /* APIResourceLoadStatisticsFirstParty.h in Headers */ = {isa = PBXBuildFile; fileRef = 49BCA19123A177660028A836 /* APIResourceLoadStatisticsFirstParty.h */; };
49BCA19523A18CFD0028A836 /* _WKResourceLoadStatisticsFirstPartyInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 49BCA19023A175490028A836 /* _WKResourceLoadStatisticsFirstPartyInternal.h */; };
49BCA19723A1930D0028A836 /* APIResourceLoadStatisticsThirdParty.h in Headers */ = {isa = PBXBuildFile; fileRef = 49BCA19623A18F620028A836 /* APIResourceLoadStatisticsThirdParty.h */; };
@@ -3558,6 +3559,7 @@
46F38E8B2416E66D0059375A /* RunningBoardServicesSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RunningBoardServicesSPI.h; sourceTree = "<group>"; };
46F9B26223526ED0006FE5FA /* WebBackForwardCacheEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBackForwardCacheEntry.h; sourceTree = "<group>"; };
4960A3BC23C5286400961842 /* WebViewCategory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebViewCategory.h; sourceTree = "<group>"; };
+ 4973DF472422941F00E4C26A /* NavigatingToAppBoundDomain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NavigatingToAppBoundDomain.h; sourceTree = "<group>"; };
49BCA19023A175490028A836 /* _WKResourceLoadStatisticsFirstPartyInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKResourceLoadStatisticsFirstPartyInternal.h; sourceTree = "<group>"; };
49BCA19123A177660028A836 /* APIResourceLoadStatisticsFirstParty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = APIResourceLoadStatisticsFirstParty.h; sourceTree = "<group>"; };
49BCA19623A18F620028A836 /* APIResourceLoadStatisticsThirdParty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = APIResourceLoadStatisticsThirdParty.h; sourceTree = "<group>"; };
@@ -5996,6 +5998,7 @@
31EA25D3134F78D6005B1452 /* NativeWebMouseEvent.h */,
263172CE18B469490065B9C3 /* NativeWebTouchEvent.h */,
DF58C6311371AC5800F9A37C /* NativeWebWheelEvent.h */,
+ 4973DF472422941F00E4C26A /* NavigatingToAppBoundDomain.h */,
1ADCB868189831B30022EE5A /* NavigationActionData.cpp */,
1ADCB869189831B30022EE5A /* NavigationActionData.h */,
5CD748B523C8EB190092A9B5 /* NetworkResourceLoadIdentifier.h */,
@@ -10792,6 +10795,7 @@
C0E3AA7C1209E83C00A49D01 /* Module.h in Headers */,
2D50366B1BCDE17900E20BB3 /* NativeWebGestureEvent.h in Headers */,
263172CF18B469490065B9C3 /* NativeWebTouchEvent.h in Headers */,
+ 4973DF482422941F00E4C26A /* NavigatingToAppBoundDomain.h in Headers */,
1ADCB86B189831B30022EE5A /* NavigationActionData.h in Headers */,
57FD318022B35158008D0E8B /* NavigationSOAuthorizationSession.h in Headers */,
1ABC3DF61899E437004F0626 /* NavigationState.h in Headers */,
Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (258666 => 258667)
--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -755,6 +755,7 @@
parameters.shouldRestrictHTTPResponseAccess = shouldPerformSecurityChecks();
// FIXME: Use the proper destination once all fetch options are passed.
parameters.options.destination = FetchOptions::Destination::EmptyString;
+ parameters.isNavigatingToAppBoundDomain = webPage.isNavigatingToAppBoundDomain();
WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::PreconnectTo(preconnectionIdentifier, WTFMove(parameters)), 0);
}
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp (258666 => 258667)
--- trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp 2020-03-18 22:48:44 UTC (rev 258666)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp 2020-03-18 23:09:54 UTC (rev 258667)
@@ -282,7 +282,11 @@
auto policyDownloadID = m_policyDownloadID;
m_policyDownloadID = { };
- WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::StartDownload(policyDownloadID, request, suggestedName), 0);
+ auto isAppBound = NavigatingToAppBoundDomain::No;
+ if (page())
+ isAppBound = page()->isNavigatingToAppBoundDomain();
+
+ WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::StartDownload(policyDownloadID, request, isAppBound, suggestedName), 0);
}
void WebFrame::convertMainResourceLoadToDownload(DocumentLoader* documentLoader, const ResourceRequest& request, const ResourceResponse& response)
@@ -304,7 +308,11 @@
else
mainResourceLoadIdentifier = 0;
- webProcess.ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::ConvertMainResourceLoadToDownload(mainResourceLoadIdentifier, policyDownloadID, request, response), 0);
+ auto isAppBound = NavigatingToAppBoundDomain::No;
+ if (page())
+ isAppBound = page()->isNavigatingToAppBoundDomain();
+
+ webProcess.ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::ConvertMainResourceLoadToDownload(mainResourceLoadIdentifier, policyDownloadID, request, response, isAppBound), 0);
}
void WebFrame::addConsoleMessage(MessageSource messageSource, MessageLevel messageLevel, const String& message, uint64_t requestID)