Index: Source/web/tests/WebFrameTest.cpp |
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
index 70e662429ce313e0ee97e79ff60ea38a95dbb9d2..a250276f3fdbfc71224549eabac3aa9de77c2e51 100644 |
--- a/Source/web/tests/WebFrameTest.cpp |
+++ b/Source/web/tests/WebFrameTest.cpp |
@@ -7043,6 +7043,36 @@ TEST_F(WebFrameSwapTest, SwapMainFrame) |
remoteFrame->close(); |
} |
+namespace { |
+ |
+class SwapMainFrameWhenTitleChangesWebFrameClient : public FrameTestHelpers::TestWebFrameClient { |
+public: |
+ SwapMainFrameWhenTitleChangesWebFrameClient() {} |
+ ~SwapMainFrameWhenTitleChangesWebFrameClient() override {} |
+ |
+ void didReceiveTitle(WebLocalFrame* frame, const WebString&, WebTextDirection) override |
+ { |
+ if (!frame->parent()) |
+ frame->swap(WebRemoteFrame::create(WebTreeScopeType::Document, nullptr)); |
+ } |
+}; |
+ |
+} // anonymous namespace |
+ |
+TEST_F(WebFrameTest, SwapMainFrameWhileLoading) |
+{ |
+ SwapMainFrameWhenTitleChangesWebFrameClient frameClient; |
+ |
+ FrameTestHelpers::WebViewHelper webViewHelper; |
+ registerMockedHttpURLLoad("frame-a-b-c.html"); |
+ registerMockedHttpURLLoad("subframe-a.html"); |
+ registerMockedHttpURLLoad("subframe-b.html"); |
+ registerMockedHttpURLLoad("subframe-c.html"); |
+ registerMockedHttpURLLoad("subframe-hello.html"); |
+ |
+ webViewHelper.initializeAndLoad(m_baseURL + "frame-a-b-c.html", true, &frameClient); |
+} |
+ |
void swapAndVerifyFirstChildConsistency(const char* const message, WebFrame* parent, WebFrame* newChild) |
{ |
SCOPED_TRACE(message); |