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

Reply via email to