Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: acdf944d361b6379c01cd8e66d518a4dfa54f40e
https://github.com/WebKit/WebKit/commit/acdf944d361b6379c01cd8e66d518a4dfa54f40e
Author: Alex Christensen <[email protected]>
Date: 2024-05-13 (Mon, 13 May 2024)
Changed paths:
M Source/WebCore/Modules/beacon/NavigatorBeacon.cpp
M Source/WebCore/Modules/beacon/NavigatorBeacon.h
M Source/WebCore/Modules/mediasession/MediaMetadata.cpp
M Source/WebCore/Modules/mediasession/MediaMetadata.h
M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
M Source/WebCore/Modules/model-element/HTMLModelElement.h
M Source/WebCore/bindings/js/CachedModuleScriptLoader.cpp
M Source/WebCore/bindings/js/CachedModuleScriptLoader.h
M Source/WebCore/dom/LoadableClassicScript.cpp
M Source/WebCore/dom/LoadableClassicScript.h
M Source/WebCore/html/HTMLImageLoader.cpp
M Source/WebCore/html/HTMLImageLoader.h
M Source/WebCore/loader/ApplicationManifestLoader.cpp
M Source/WebCore/loader/ApplicationManifestLoader.h
M Source/WebCore/loader/CrossOriginPreflightChecker.cpp
M Source/WebCore/loader/CrossOriginPreflightChecker.h
M Source/WebCore/loader/DocumentLoader.cpp
M Source/WebCore/loader/DocumentLoader.h
M Source/WebCore/loader/DocumentThreadableLoader.cpp
M Source/WebCore/loader/DocumentThreadableLoader.h
M Source/WebCore/loader/FrameLoader.cpp
M Source/WebCore/loader/FrameLoader.h
M Source/WebCore/loader/ImageLoader.cpp
M Source/WebCore/loader/ImageLoader.h
M Source/WebCore/loader/LinkLoader.cpp
M Source/WebCore/loader/LinkLoader.h
M Source/WebCore/loader/LinkPreloadResourceClients.h
M Source/WebCore/loader/MediaResourceLoader.cpp
M Source/WebCore/loader/MediaResourceLoader.h
M Source/WebCore/loader/NetscapePlugInStreamLoader.cpp
M Source/WebCore/loader/NetscapePlugInStreamLoader.h
M Source/WebCore/loader/ResourceLoader.cpp
M Source/WebCore/loader/ResourceLoader.h
M Source/WebCore/loader/SubresourceLoader.cpp
M Source/WebCore/loader/SubresourceLoader.h
M Source/WebCore/loader/TextTrackLoader.cpp
M Source/WebCore/loader/TextTrackLoader.h
M Source/WebCore/loader/appcache/ApplicationCacheResourceLoader.cpp
M Source/WebCore/loader/appcache/ApplicationCacheResourceLoader.h
M Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp
M Source/WebCore/loader/cache/CachedCSSStyleSheet.h
M Source/WebCore/loader/cache/CachedFont.cpp
M Source/WebCore/loader/cache/CachedFont.h
M Source/WebCore/loader/cache/CachedResource.cpp
M Source/WebCore/loader/cache/CachedResource.h
M Source/WebCore/loader/cache/CachedResourceClient.cpp
M Source/WebCore/loader/cache/CachedResourceClient.h
M Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp
M Source/WebCore/loader/cache/CachedXSLStyleSheet.h
M Source/WebCore/loader/cache/KeepaliveRequestTracker.cpp
M Source/WebCore/loader/cache/KeepaliveRequestTracker.h
M Source/WebCore/loader/icon/IconLoader.cpp
M Source/WebCore/loader/icon/IconLoader.h
M
Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm
M Source/WebCore/rendering/RenderElement.cpp
M Source/WebCore/rendering/RenderElement.h
M Source/WebCore/rendering/RenderImage.cpp
M Source/WebCore/rendering/RenderImage.h
M Source/WebCore/rendering/RenderLayerFilters.cpp
M Source/WebCore/rendering/RenderLayerFilters.h
M Source/WebCore/rendering/svg/RenderSVGImage.cpp
M Source/WebCore/rendering/svg/RenderSVGImage.h
M Source/WebCore/svg/SVGFEImageElement.cpp
M Source/WebCore/svg/SVGFEImageElement.h
M Source/WebCore/svg/SVGUseElement.cpp
M Source/WebCore/svg/SVGUseElement.h
M Source/WebKit/UIProcess/ProvisionalFrameProxy.cpp
M Source/WebKit/UIProcess/ProvisionalFrameProxy.h
M Source/WebKit/UIProcess/RemotePageProxy.cpp
M Source/WebKit/UIProcess/WebFrameProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/WebProcess/WebPage/WebFrame.cpp
M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm
Log Message:
-----------
[Site Isolation] Begin implementing cross-site redirects to provisional load
failures
https://bugs.webkit.org/show_bug.cgi?id=274104
rdar://128015329
Reviewed by Charlie Wolfe and Sihui Liu.
When NavigationPolicyDecision::LoadWillContinueInAnotherProcess is sent to a
web content process,
that web content process calls DocumentLoader::stopLoadingForPolicyChange which
calls
WebLocalFrameLoaderClient::dispatchDidFailProvisionalLoad which sends IPC to
the UI process.
When NavigationPolicyDecision::IgnoreLoad is used, this IPC message is desired,
but if the load
is continuing in another process the message is not needed because the UI
process already knows,
and it is not desired because receiving and handling such a message would lead
to inconsistent
state. We solved this previously for Process-Swap-On-Navigation by just
ignoring most messages
from a previous process, but with site isolation we can't do this. I saw four
ways to possibly
implement this for site isolation:
1. Pipe a boolean from DocumentLoader::willSendRequest's call to
stopLoadingForPolicyChange all
the way through this stack trace to directly get whether we should send the
message:
FrameLoader::dispatchDidFailProvisionalLoad(DocumentLoader&, const
ResourceError&, WillInternallyHandleFailure)
FrameLoader::checkLoadCompleteForThisFrame()
FrameLoader::checkLoadComplete()
FrameLoader::receivedMainResourceError(const ResourceError&)
DocumentLoader::mainReceivedError(const ResourceError&)
DocumentLoader::notifyFinished(CachedResource&, const NetworkLoadMetrics&)
CachedResource::checkNotify(const NetworkLoadMetrics&)
CachedResource::cancelLoad()
SubresourceLoader::didCancel(const ResourceError&)
ResourceLoader::cancel(const ResourceError&)
DocumentLoader::cancelMainResourceLoad(const ResourceError&)
DocumentLoader::stopLoadingForPolicyChange()
2. Store a boolean on the CachedResource along with the ResourceError to
shortcut all the parts
of 1's stack where a ResourceError is currently not sent.
3. Create a new ResourceError that is a sentinel value indicating that
LoadWillContinueInAnotherProcess
has been used and checking for that sentinel value before sending the message.
4. Store a boolean on the WebFrame when receiving
LoadWillContinueInAnotherProcess indicating
that one dispatchDidFailProvisionalLoad should be ignored.
I chose 1 because it is the most direct and complete, even though it adds a lot
of false boolean
parameters to code that is used for all loading.
* Source/WebCore/loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::willSendRequest):
(WebCore::DocumentLoader::continueAfterContentPolicy):
(WebCore::DocumentLoader::interruptedForPolicyChangeError const):
(WebCore::DocumentLoader::stopLoadingForPolicyChange):
* Source/WebCore/loader/DocumentLoader.h:
* Source/WebCore/loader/EmptyClients.cpp:
(WebCore::EmptyFrameLoaderClient::interruptedForPolicyChangeError const):
* Source/WebCore/loader/EmptyFrameLoaderClient.h:
* Source/WebCore/loader/LocalFrameLoaderClient.h:
* Source/WebKit/Shared/API/APIError.h:
* Source/WebKit/Shared/API/c/WKErrorRef.cpp:
(WKErrorGetErrorCode):
* Source/WebKit/Shared/WebErrors.cpp:
(WebKit::interruptedForPolicyChangeError):
* Source/WebKit/Shared/WebErrors.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::continueNavigationInNewProcess):
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp:
(WebKit::WebLocalFrameLoaderClient::dispatchDidFailProvisionalLoad):
(WebKit::WebLocalFrameLoaderClient::interruptedForPolicyChangeError const):
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.h:
* Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h:
* Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::interruptedForPolicyChangeError const):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm:
(TestWebKitAPI::TEST(SiteIsolation,
NavigateIframeToProvisionalNavigationFailure)):
Canonical link: https://commits.webkit.org/278736@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes