Index: Source/web/tests/WebFrameTest.cpp |
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
index d9166f990e44cd01d3fbc3d18187fa59b6a4ea96..c1615be22461c7a3a9da2332289e793fdb1eab3f 100644 |
--- a/Source/web/tests/WebFrameTest.cpp |
+++ b/Source/web/tests/WebFrameTest.cpp |
@@ -6693,7 +6693,7 @@ protected: |
registerMockedHttpURLLoad("subframe-c.html"); |
registerMockedHttpURLLoad("subframe-hello.html"); |
- m_webViewHelper.initializeAndLoad(m_baseURL + "frame-a-b-c.html"); |
+ m_webViewHelper.initializeAndLoad(m_baseURL + "frame-a-b-c.html", true); |
} |
void reset() { m_webViewHelper.reset(); } |
@@ -6913,6 +6913,42 @@ TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterRemoteToLocalSwap) |
remoteFrame->close(); |
} |
+class RemoteNavigationClient : public FrameTestHelpers::TestWebRemoteFrameClient { |
+public: |
+ RemoteNavigationClient() { } |
dcheng
2015/02/02 19:27:52
Nit: I think it's fine to omit the constructor in
Nate Chapin
2015/02/02 21:02:00
Done.
|
+ |
+ void navigate(const WebURLRequest& request, bool shouldReplaceCurrentEntry) override |
+ { |
+ m_lastRequest = request; |
+ } |
+ |
+ const WebURLRequest& lastRequest() { return m_lastRequest; } |
dcheng
2015/02/02 19:27:52
Nit: const.
Nate Chapin
2015/02/02 21:01:59
Done.
|
+ |
+ WebURLRequest m_lastRequest; |
dcheng
2015/02/02 19:27:52
Nit: make this private, since we have an accessor.
Nate Chapin
2015/02/02 21:02:00
Done.
|
+}; |
+ |
+TEST_F(WebFrameSwapTest, NavigateRemoteFrameViaLocation) |
+{ |
+ RemoteNavigationClient client; |
+ WebRemoteFrame* remoteFrame = WebRemoteFrame::create(&client); |
+ WebFrame* targetFrame = mainFrame()->firstChild(); |
+ ASSERT_TRUE(targetFrame); |
+ targetFrame->swap(remoteFrame); |
+ ASSERT_TRUE(mainFrame()->firstChild()); |
+ ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
+ |
+ remoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("http://127.0.0.1")); |
+ mainFrame()->executeScript(WebScriptSource( |
+ "document.getElementsByTagName('iframe')[0].contentWindow.location = 'data:text/html,hi'")); |
+ ASSERT_FALSE(client.lastRequest().isNull()); |
+ EXPECT_EQ(WebURL(toKURL("data:text/html,hi")), client.lastRequest().url()); |
+ |
+ // Manually reset to break WebViewHelper's dependency on the stack allocated |
+ // TestWebFrameClient. |
+ reset(); |
+ remoteFrame->close(); |
+} |
+ |
class MockDocumentThreadableLoaderClient : public DocumentThreadableLoaderClient { |
public: |
MockDocumentThreadableLoaderClient() : m_failed(false) { } |