Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 01812b56dd474ae6c2cda2af9f512be30ee906c1
      
https://github.com/WebKit/WebKit/commit/01812b56dd474ae6c2cda2af9f512be30ee906c1
  Author: Alex Christensen <[email protected]>
  Date:   2024-12-06 (Fri, 06 Dec 2024)

  Changed paths:
    A LayoutTests/http/tests/site-isolation/resources/child-frame.html
    A LayoutTests/http/tests/site-isolation/resources/grandchild-frame.html
    A 
LayoutTests/http/tests/site-isolation/resources/great-grandchild-frame.html
    A LayoutTests/http/tests/site-isolation/unload-grandchild-fetch-expected.txt
    A LayoutTests/http/tests/site-isolation/unload-grandchild-fetch.html
    M Source/WebCore/loader/MixedContentChecker.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm

  Log Message:
  -----------
  Fix occasional crash in foundMixedContentInFrameTree with site isolation 
enabled
https://bugs.webkit.org/show_bug.cgi?id=284173

Reviewed by Pascoe.

I found a condition where the crash can happen with site isolation enabled if a 
pagehide event
handler initiates a fetch during teardown as a result of a frame being removed 
in another
process.  I added a unit test that hit the crash and changed the crash to an 
early return.

Along the way I found that the assertion in 
WebPage::frameWasRemovedInAnotherProcess can hit
if a race condition of multiple processes removing the same frame is hit.  In 
this case, the
frame has already been removed so there is nothing to do, so early returning is 
correct behavior.

I also found that WebProcessProxy::didDestroyFrame wasn't routing the message 
to the WebPageProxy
if a RemotePageProxy was communicating with the process that did the removing.  
I added an
API test to verify the state is being handled properly once 
WebProcessProxy::didDestroyFrame is
redone in a way that behaves correctly in this case without breaking anything 
else.

* LayoutTests/http/tests/site-isolation/resources/child-frame.html: Added.
* LayoutTests/http/tests/site-isolation/resources/grandchild-frame.html: Added.
* LayoutTests/http/tests/site-isolation/resources/great-grandchild-frame.html: 
Added.
* LayoutTests/http/tests/site-isolation/unload-grandchild-fetch-expected.txt: 
Added.
* LayoutTests/http/tests/site-isolation/unload-grandchild-fetch.html: Added.
* Source/WebCore/loader/MixedContentChecker.cpp:
(WebCore::foundMixedContentInFrameTree):
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::didDestroyFrame):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::frameWasRemovedInAnotherProcess):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm:
(TestWebKitAPI::TEST(SiteIsolation, RemoveFrameFromRemoteFrame)):

Canonical link: https://commits.webkit.org/287487@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