OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 7088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7099 private: | 7099 private: |
7100 FrameTestHelpers::WebViewHelper m_webViewHelper; | 7100 FrameTestHelpers::WebViewHelper m_webViewHelper; |
7101 }; | 7101 }; |
7102 | 7102 |
7103 TEST_F(WebFrameSwapTest, SwapMainFrame) | 7103 TEST_F(WebFrameSwapTest, SwapMainFrame) |
7104 { | 7104 { |
7105 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); | 7105 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); |
7106 mainFrame()->swap(remoteFrame); | 7106 mainFrame()->swap(remoteFrame); |
7107 | 7107 |
7108 FrameTestHelpers::TestWebFrameClient client; | 7108 FrameTestHelpers::TestWebFrameClient client; |
7109 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7109 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7110 remoteFrame->swap(localFrame); | 7110 remoteFrame->swap(localFrame); |
7111 | 7111 |
7112 // Finally, make sure an embedder triggered load in the local frame swapped | 7112 // Finally, make sure an embedder triggered load in the local frame swapped |
7113 // back in works. | 7113 // back in works. |
7114 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7114 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7115 | 7115 |
7116 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); | 7116 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); |
7117 EXPECT_EQ("hello", content); | 7117 EXPECT_EQ("hello", content); |
7118 | 7118 |
7119 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7119 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7120 // TestWebFrameClient. | 7120 // TestWebFrameClient. |
7121 reset(); | 7121 reset(); |
7122 remoteFrame->close(); | 7122 remoteFrame->close(); |
7123 } | 7123 } |
7124 | 7124 |
7125 TEST_F(WebFrameSwapTest, ValidateSizeOnRemoteToLocalMainFrameSwap) | 7125 TEST_F(WebFrameSwapTest, ValidateSizeOnRemoteToLocalMainFrameSwap) |
7126 { | 7126 { |
7127 WebSize size(111, 222); | 7127 WebSize size(111, 222); |
7128 | 7128 |
7129 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); | 7129 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); |
7130 mainFrame()->swap(remoteFrame); | 7130 mainFrame()->swap(remoteFrame); |
7131 | 7131 |
7132 remoteFrame->view()->resize(size); | 7132 remoteFrame->view()->resize(size); |
7133 | 7133 |
7134 FrameTestHelpers::TestWebFrameClient client; | 7134 FrameTestHelpers::TestWebFrameClient client; |
7135 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7135 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7136 remoteFrame->swap(localFrame); | 7136 remoteFrame->swap(localFrame); |
7137 | 7137 |
7138 // Verify that the size that was set with a remote main frame is correct | 7138 // Verify that the size that was set with a remote main frame is correct |
7139 // after swapping to a local frame. | 7139 // after swapping to a local frame. |
7140 FrameHost* host = toWebViewImpl(localFrame->view())->page()->mainFrame()->ho
st(); | 7140 FrameHost* host = toWebViewImpl(localFrame->view())->page()->mainFrame()->ho
st(); |
7141 EXPECT_EQ(size.width, host->visualViewport().size().width()); | 7141 EXPECT_EQ(size.width, host->visualViewport().size().width()); |
7142 EXPECT_EQ(size.height, host->visualViewport().size().height()); | 7142 EXPECT_EQ(size.height, host->visualViewport().size().height()); |
7143 | 7143 |
7144 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7144 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7145 // TestWebFrameClient. | 7145 // TestWebFrameClient. |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7200 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()->previousSibling()); | 7200 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()->previousSibling()); |
7201 } | 7201 } |
7202 | 7202 |
7203 TEST_F(WebFrameSwapTest, SwapFirstChild) | 7203 TEST_F(WebFrameSwapTest, SwapFirstChild) |
7204 { | 7204 { |
7205 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7205 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7206 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7206 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7207 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); | 7207 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); |
7208 | 7208 |
7209 FrameTestHelpers::TestWebFrameClient client; | 7209 FrameTestHelpers::TestWebFrameClient client; |
7210 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7210 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7211 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; | 7211 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; |
7212 | 7212 |
7213 // FIXME: This almost certainly fires more load events on the iframe element | 7213 // FIXME: This almost certainly fires more load events on the iframe element |
7214 // than it should. | 7214 // than it should. |
7215 // Finally, make sure an embedder triggered load in the local frame swapped | 7215 // Finally, make sure an embedder triggered load in the local frame swapped |
7216 // back in works. | 7216 // back in works. |
7217 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7217 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7218 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); | 7218 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); |
7219 EXPECT_EQ(" \n\nhello\n\nb \n\na\n\nc", content); | 7219 EXPECT_EQ(" \n\nhello\n\nb \n\na\n\nc", content); |
7220 | 7220 |
(...skipping 17 matching lines...) Expand all Loading... |
7238 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()); | 7238 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()); |
7239 } | 7239 } |
7240 | 7240 |
7241 TEST_F(WebFrameSwapTest, SwapMiddleChild) | 7241 TEST_F(WebFrameSwapTest, SwapMiddleChild) |
7242 { | 7242 { |
7243 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7243 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7244 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7244 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7245 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); | 7245 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); |
7246 | 7246 |
7247 FrameTestHelpers::TestWebFrameClient client; | 7247 FrameTestHelpers::TestWebFrameClient client; |
7248 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7248 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7249 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); | 7249 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); |
7250 | 7250 |
7251 // FIXME: This almost certainly fires more load events on the iframe element | 7251 // FIXME: This almost certainly fires more load events on the iframe element |
7252 // than it should. | 7252 // than it should. |
7253 // Finally, make sure an embedder triggered load in the local frame swapped | 7253 // Finally, make sure an embedder triggered load in the local frame swapped |
7254 // back in works. | 7254 // back in works. |
7255 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7255 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7256 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); | 7256 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); |
7257 EXPECT_EQ(" \n\na\n\nhello\n\nc", content); | 7257 EXPECT_EQ(" \n\na\n\nhello\n\nc", content); |
7258 | 7258 |
(...skipping 14 matching lines...) Expand all Loading... |
7273 EXPECT_EQ(newChild->previousSibling(), parent->firstChild()->nextSibling()); | 7273 EXPECT_EQ(newChild->previousSibling(), parent->firstChild()->nextSibling()); |
7274 } | 7274 } |
7275 | 7275 |
7276 TEST_F(WebFrameSwapTest, SwapLastChild) | 7276 TEST_F(WebFrameSwapTest, SwapLastChild) |
7277 { | 7277 { |
7278 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7278 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7279 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7279 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7280 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; | 7280 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; |
7281 | 7281 |
7282 FrameTestHelpers::TestWebFrameClient client; | 7282 FrameTestHelpers::TestWebFrameClient client; |
7283 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7283 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7284 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); | 7284 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); |
7285 | 7285 |
7286 // FIXME: This almost certainly fires more load events on the iframe element | 7286 // FIXME: This almost certainly fires more load events on the iframe element |
7287 // than it should. | 7287 // than it should. |
7288 // Finally, make sure an embedder triggered load in the local frame swapped | 7288 // Finally, make sure an embedder triggered load in the local frame swapped |
7289 // back in works. | 7289 // back in works. |
7290 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7290 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7291 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); | 7291 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); |
7292 EXPECT_EQ(" \n\na\n\nb \n\na\n\nhello", content); | 7292 EXPECT_EQ(" \n\na\n\nb \n\na\n\nhello", content); |
7293 | 7293 |
(...skipping 23 matching lines...) Expand all Loading... |
7317 swapAndVerifySubframeConsistency("local->remote", targetFrame, remoteFrame); | 7317 swapAndVerifySubframeConsistency("local->remote", targetFrame, remoteFrame); |
7318 | 7318 |
7319 targetFrame = mainFrame()->firstChild()->nextSibling(); | 7319 targetFrame = mainFrame()->firstChild()->nextSibling(); |
7320 EXPECT_TRUE(targetFrame); | 7320 EXPECT_TRUE(targetFrame); |
7321 | 7321 |
7322 // Create child frames in the target frame before testing the swap. | 7322 // Create child frames in the target frame before testing the swap. |
7323 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; | 7323 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; |
7324 WebRemoteFrame* childRemoteFrame = FrameTestHelpers::createRemoteChild(remot
eFrame, &remoteFrameClient2); | 7324 WebRemoteFrame* childRemoteFrame = FrameTestHelpers::createRemoteChild(remot
eFrame, &remoteFrameClient2); |
7325 | 7325 |
7326 FrameTestHelpers::TestWebFrameClient client; | 7326 FrameTestHelpers::TestWebFrameClient client; |
7327 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7327 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7328 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); | 7328 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); |
7329 | 7329 |
7330 // FIXME: This almost certainly fires more load events on the iframe element | 7330 // FIXME: This almost certainly fires more load events on the iframe element |
7331 // than it should. | 7331 // than it should. |
7332 // Finally, make sure an embedder triggered load in the local frame swapped | 7332 // Finally, make sure an embedder triggered load in the local frame swapped |
7333 // back in works. | 7333 // back in works. |
7334 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7334 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7335 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); | 7335 std::string content = WebFrameContentDumper::dumpWebViewAsText(webView(), 10
24).utf8(); |
7336 EXPECT_EQ(" \n\na\n\nhello\n\nc", content); | 7336 EXPECT_EQ(" \n\na\n\nhello\n\nc", content); |
7337 | 7337 |
(...skipping 22 matching lines...) Expand all Loading... |
7360 v8::Local<v8::Value> remoteWindow = mainFrame()->executeScriptAndReturnValue
(WebScriptSource( | 7360 v8::Local<v8::Value> remoteWindow = mainFrame()->executeScriptAndReturnValue
(WebScriptSource( |
7361 "document.querySelector('#frame2').contentWindow;")); | 7361 "document.querySelector('#frame2').contentWindow;")); |
7362 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); | 7362 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); |
7363 // Check that its view is consistent with the world. | 7363 // Check that its view is consistent with the world. |
7364 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( | 7364 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( |
7365 "document.querySelector('#frame2').contentWindow.top;")); | 7365 "document.querySelector('#frame2').contentWindow.top;")); |
7366 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7366 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
7367 | 7367 |
7368 // Now check that remote -> local works too, since it goes through a differe
nt code path. | 7368 // Now check that remote -> local works too, since it goes through a differe
nt code path. |
7369 FrameTestHelpers::TestWebFrameClient client; | 7369 FrameTestHelpers::TestWebFrameClient client; |
7370 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7370 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7371 remoteFrame->swap(localFrame); | 7371 remoteFrame->swap(localFrame); |
7372 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( | 7372 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( |
7373 "document.querySelector('#frame2').contentWindow;")); | 7373 "document.querySelector('#frame2').contentWindow;")); |
7374 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); | 7374 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); |
7375 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( | 7375 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( |
7376 "document.querySelector('#frame2').contentWindow.top;")); | 7376 "document.querySelector('#frame2').contentWindow.top;")); |
7377 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7377 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
7378 | 7378 |
7379 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7379 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7380 // TestWebFrameClient. | 7380 // TestWebFrameClient. |
(...skipping 12 matching lines...) Expand all Loading... |
7393 | 7393 |
7394 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7394 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7395 WebRemoteFrame* remoteFrame = remoteClient.frame(); | 7395 WebRemoteFrame* remoteFrame = remoteClient.frame(); |
7396 mainFrame()->lastChild()->swap(remoteFrame); | 7396 mainFrame()->lastChild()->swap(remoteFrame); |
7397 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7397 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7398 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); | 7398 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); |
7399 EXPECT_TRUE(remoteWindowTop->IsObject()); | 7399 EXPECT_TRUE(remoteWindowTop->IsObject()); |
7400 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7400 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
7401 | 7401 |
7402 FrameTestHelpers::TestWebFrameClient client; | 7402 FrameTestHelpers::TestWebFrameClient client; |
7403 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7403 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7404 remoteFrame->swap(localFrame); | 7404 remoteFrame->swap(localFrame); |
7405 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); | 7405 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); |
7406 EXPECT_TRUE(localWindowTop->IsObject()); | 7406 EXPECT_TRUE(localWindowTop->IsObject()); |
7407 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7407 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
7408 | 7408 |
7409 reset(); | 7409 reset(); |
7410 } | 7410 } |
7411 | 7411 |
7412 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) | 7412 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) |
7413 { | 7413 { |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7536 { | 7536 { |
7537 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7537 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7538 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7538 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7539 WebFrame* targetFrame = mainFrame()->firstChild(); | 7539 WebFrame* targetFrame = mainFrame()->firstChild(); |
7540 ASSERT_TRUE(targetFrame); | 7540 ASSERT_TRUE(targetFrame); |
7541 targetFrame->swap(remoteFrame); | 7541 targetFrame->swap(remoteFrame); |
7542 ASSERT_TRUE(mainFrame()->firstChild()); | 7542 ASSERT_TRUE(mainFrame()->firstChild()); |
7543 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7543 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
7544 | 7544 |
7545 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7545 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
7546 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7546 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7547 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7547 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7548 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); | 7548 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); |
7549 | 7549 |
7550 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7550 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7551 // TestWebFrameClient. | 7551 // TestWebFrameClient. |
7552 reset(); | 7552 reset(); |
7553 remoteFrame->close(); | 7553 remoteFrame->close(); |
7554 } | 7554 } |
7555 | 7555 |
7556 // The commit type should be Standard if we are swapping a RemoteFrame to a | 7556 // The commit type should be Standard if we are swapping a RemoteFrame to a |
7557 // LocalFrame after commits have already happened in the frame. The browser | 7557 // LocalFrame after commits have already happened in the frame. The browser |
7558 // process will inform us via setCommittedFirstRealLoad. | 7558 // process will inform us via setCommittedFirstRealLoad. |
7559 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) | 7559 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) |
7560 { | 7560 { |
7561 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7561 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7562 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7562 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7563 WebFrame* targetFrame = mainFrame()->firstChild(); | 7563 WebFrame* targetFrame = mainFrame()->firstChild(); |
7564 ASSERT_TRUE(targetFrame); | 7564 ASSERT_TRUE(targetFrame); |
7565 targetFrame->swap(remoteFrame); | 7565 targetFrame->swap(remoteFrame); |
7566 ASSERT_TRUE(mainFrame()->firstChild()); | 7566 ASSERT_TRUE(mainFrame()->firstChild()); |
7567 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7567 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
7568 | 7568 |
7569 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7569 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
7570 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7570 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7571 localFrame->setCommittedFirstRealLoad(); | 7571 localFrame->setCommittedFirstRealLoad(); |
7572 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7572 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7573 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); | 7573 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); |
7574 | 7574 |
7575 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7575 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7576 // TestWebFrameClient. | 7576 // TestWebFrameClient. |
7577 reset(); | 7577 reset(); |
7578 remoteFrame->close(); | 7578 remoteFrame->close(); |
7579 } | 7579 } |
7580 | 7580 |
(...skipping 10 matching lines...) Expand all Loading... |
7591 // Swap to a RemoteFrame. | 7591 // Swap to a RemoteFrame. |
7592 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7592 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7593 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7593 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7594 targetFrame->swap(remoteFrame); | 7594 targetFrame->swap(remoteFrame); |
7595 ASSERT_TRUE(mainFrame()->firstChild()); | 7595 ASSERT_TRUE(mainFrame()->firstChild()); |
7596 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7596 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
7597 EXPECT_EQ(uniqueName.utf8(), WebString(toWebRemoteFrameImpl(remoteFrame)->fr
ame()->tree().uniqueName()).utf8()); | 7597 EXPECT_EQ(uniqueName.utf8(), WebString(toWebRemoteFrameImpl(remoteFrame)->fr
ame()->tree().uniqueName()).utf8()); |
7598 | 7598 |
7599 // Swap back to a LocalFrame. | 7599 // Swap back to a LocalFrame. |
7600 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7600 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
7601 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7601 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&client, remote
Frame, WebSandboxFlags::None); |
7602 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7602 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7603 EXPECT_EQ(uniqueName.utf8(), localFrame->uniqueName().utf8()); | 7603 EXPECT_EQ(uniqueName.utf8(), localFrame->uniqueName().utf8()); |
7604 EXPECT_EQ(uniqueName.utf8(), WebString(toWebLocalFrameImpl(localFrame)->fram
e()->loader().currentItem()->target()).utf8()); | 7604 EXPECT_EQ(uniqueName.utf8(), WebString(toWebLocalFrameImpl(localFrame)->fram
e()->loader().currentItem()->target()).utf8()); |
7605 | 7605 |
7606 // Repeat with no name on the frame. | 7606 // Repeat with no name on the frame. |
7607 localFrame->setName(""); | 7607 localFrame->setName(""); |
7608 WebString uniqueName2 = localFrame->uniqueName(); | 7608 WebString uniqueName2 = localFrame->uniqueName(); |
7609 EXPECT_EQ("<!--framePath //<!--frame2-->-->", uniqueName2.utf8()); | 7609 EXPECT_EQ("<!--framePath //<!--frame2-->-->", uniqueName2.utf8()); |
7610 | 7610 |
7611 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; | 7611 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; |
7612 WebRemoteFrame* remoteFrame2 = WebRemoteFrame::create(WebTreeScopeType::Docu
ment, &remoteFrameClient2); | 7612 WebRemoteFrame* remoteFrame2 = WebRemoteFrame::create(WebTreeScopeType::Docu
ment, &remoteFrameClient2); |
7613 localFrame->swap(remoteFrame2); | 7613 localFrame->swap(remoteFrame2); |
7614 ASSERT_TRUE(mainFrame()->firstChild()); | 7614 ASSERT_TRUE(mainFrame()->firstChild()); |
7615 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame2); | 7615 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame2); |
7616 EXPECT_EQ(uniqueName2.utf8(), WebString(toWebRemoteFrameImpl(remoteFrame2)->
frame()->tree().uniqueName()).utf8()); | 7616 EXPECT_EQ(uniqueName2.utf8(), WebString(toWebRemoteFrameImpl(remoteFrame2)->
frame()->tree().uniqueName()).utf8()); |
7617 | 7617 |
7618 RemoteToLocalSwapWebFrameClient client2(remoteFrame2); | 7618 RemoteToLocalSwapWebFrameClient client2(remoteFrame2); |
7619 WebLocalFrame* localFrame2 = WebLocalFrame::createProvisional(&client2, remo
teFrame2, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7619 WebLocalFrame* localFrame2 = WebLocalFrame::createProvisional(&client2, remo
teFrame2, WebSandboxFlags::None); |
7620 FrameTestHelpers::loadFrame(localFrame2, m_baseURL + "subframe-hello.html"); | 7620 FrameTestHelpers::loadFrame(localFrame2, m_baseURL + "subframe-hello.html"); |
7621 EXPECT_EQ(uniqueName2.utf8(), localFrame2->uniqueName().utf8()); | 7621 EXPECT_EQ(uniqueName2.utf8(), localFrame2->uniqueName().utf8()); |
7622 EXPECT_EQ(uniqueName2.utf8(), WebString(toWebLocalFrameImpl(localFrame2)->fr
ame()->loader().currentItem()->target()).utf8()); | 7622 EXPECT_EQ(uniqueName2.utf8(), WebString(toWebLocalFrameImpl(localFrame2)->fr
ame()->loader().currentItem()->target()).utf8()); |
7623 | 7623 |
7624 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7624 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7625 // TestWebFrameClient. | 7625 // TestWebFrameClient. |
7626 reset(); | 7626 reset(); |
7627 remoteFrame->close(); | 7627 remoteFrame->close(); |
7628 remoteFrame2->close(); | 7628 remoteFrame2->close(); |
7629 } | 7629 } |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7747 WebView* popupView = WebView::create(&popupViewClient); | 7747 WebView* popupView = WebView::create(&popupViewClient); |
7748 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; | 7748 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; |
7749 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); | 7749 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); |
7750 popupView->setMainFrame(popupRemoteFrame); | 7750 popupView->setMainFrame(popupRemoteFrame); |
7751 popupRemoteFrame->setOpener(mainFrame); | 7751 popupRemoteFrame->setOpener(mainFrame); |
7752 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); | 7752 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); |
7753 EXPECT_FALSE(mainFrame->getSecurityOrigin().canAccess(popupView->mainFrame()
->getSecurityOrigin())); | 7753 EXPECT_FALSE(mainFrame->getSecurityOrigin().canAccess(popupView->mainFrame()
->getSecurityOrigin())); |
7754 | 7754 |
7755 // Do a remote-to-local swap in the popup. | 7755 // Do a remote-to-local swap in the popup. |
7756 FrameTestHelpers::TestWebFrameClient popupLocalClient; | 7756 FrameTestHelpers::TestWebFrameClient popupLocalClient; |
7757 WebLocalFrame* popupLocalFrame = WebLocalFrame::createProvisional(&popupLoca
lClient, popupRemoteFrame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7757 WebLocalFrame* popupLocalFrame = WebLocalFrame::createProvisional(&popupLoca
lClient, popupRemoteFrame, WebSandboxFlags::None); |
7758 popupRemoteFrame->swap(popupLocalFrame); | 7758 popupRemoteFrame->swap(popupLocalFrame); |
7759 | 7759 |
7760 // The initial document created during the remote-to-local swap should have | 7760 // The initial document created during the remote-to-local swap should have |
7761 // inherited its opener's SecurityOrigin. | 7761 // inherited its opener's SecurityOrigin. |
7762 EXPECT_TRUE(mainFrame->getSecurityOrigin().canAccess(popupView->mainFrame()-
>getSecurityOrigin())); | 7762 EXPECT_TRUE(mainFrame->getSecurityOrigin().canAccess(popupView->mainFrame()-
>getSecurityOrigin())); |
7763 | 7763 |
7764 popupView->close(); | 7764 popupView->close(); |
7765 } | 7765 } |
7766 | 7766 |
7767 TEST_F(WebFrameTest, SwapWithOpenerCycle) | 7767 TEST_F(WebFrameTest, SwapWithOpenerCycle) |
7768 { | 7768 { |
7769 // First, create a remote main frame with itself as the opener. | 7769 // First, create a remote main frame with itself as the opener. |
7770 FrameTestHelpers::TestWebViewClient viewClient; | 7770 FrameTestHelpers::TestWebViewClient viewClient; |
7771 WebView* view = WebView::create(&viewClient); | 7771 WebView* view = WebView::create(&viewClient); |
7772 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7772 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7773 WebRemoteFrame* remoteFrame = remoteClient.frame(); | 7773 WebRemoteFrame* remoteFrame = remoteClient.frame(); |
7774 view->setMainFrame(remoteFrame); | 7774 view->setMainFrame(remoteFrame); |
7775 remoteFrame->setOpener(remoteFrame); | 7775 remoteFrame->setOpener(remoteFrame); |
7776 | 7776 |
7777 // Now swap in a local frame. It shouldn't crash. | 7777 // Now swap in a local frame. It shouldn't crash. |
7778 FrameTestHelpers::TestWebFrameClient localClient; | 7778 FrameTestHelpers::TestWebFrameClient localClient; |
7779 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&localClient, r
emoteFrame, WebSandboxFlags::None, WebFrameOwnerProperties()); | 7779 WebLocalFrame* localFrame = WebLocalFrame::createProvisional(&localClient, r
emoteFrame, WebSandboxFlags::None); |
7780 remoteFrame->swap(localFrame); | 7780 remoteFrame->swap(localFrame); |
7781 | 7781 |
7782 // And the opener cycle should still be preserved. | 7782 // And the opener cycle should still be preserved. |
7783 EXPECT_EQ(localFrame, localFrame->opener()); | 7783 EXPECT_EQ(localFrame, localFrame->opener()); |
7784 | 7784 |
7785 view->close(); | 7785 view->close(); |
7786 } | 7786 } |
7787 | 7787 |
7788 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { | 7788 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { |
7789 public: | 7789 public: |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8085 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 8085 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
8086 WebView* view = WebView::create(&viewClient); | 8086 WebView* view = WebView::create(&viewClient); |
8087 view->setMainFrame(remoteClient.frame()); | 8087 view->setMainFrame(remoteClient.frame()); |
8088 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); | 8088 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); |
8089 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); | 8089 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); |
8090 | 8090 |
8091 FrameTestHelpers::createLocalChild(remoteRoot); | 8091 FrameTestHelpers::createLocalChild(remoteRoot); |
8092 | 8092 |
8093 // Do a remote-to-local swap of the top frame. | 8093 // Do a remote-to-local swap of the top frame. |
8094 FrameTestHelpers::TestWebFrameClient localClient; | 8094 FrameTestHelpers::TestWebFrameClient localClient; |
8095 WebLocalFrame* localRoot = WebLocalFrame::createProvisional(&localClient, re
moteRoot, WebSandboxFlags::None, WebFrameOwnerProperties()); | 8095 WebLocalFrame* localRoot = WebLocalFrame::createProvisional(&localClient, re
moteRoot, WebSandboxFlags::None); |
8096 remoteRoot->swap(localRoot); | 8096 remoteRoot->swap(localRoot); |
8097 | 8097 |
8098 // Load a page with a child frame in the new root to make sure this doesn't | 8098 // Load a page with a child frame in the new root to make sure this doesn't |
8099 // crash when the child frame invokes setCoreFrame. | 8099 // crash when the child frame invokes setCoreFrame. |
8100 registerMockedHttpURLLoad("single_iframe.html"); | 8100 registerMockedHttpURLLoad("single_iframe.html"); |
8101 registerMockedHttpURLLoad("visible_iframe.html"); | 8101 registerMockedHttpURLLoad("visible_iframe.html"); |
8102 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); | 8102 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); |
8103 | 8103 |
8104 view->close(); | 8104 view->close(); |
8105 } | 8105 } |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8654 WebLocalFrame* mainFrame = helper.webView()->mainFrame()->toWebLocalFrame(); | 8654 WebLocalFrame* mainFrame = helper.webView()->mainFrame()->toWebLocalFrame(); |
8655 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 8655 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
8656 mainFrame->executeScript(WebScriptSource("hello = 'world';")); | 8656 mainFrame->executeScript(WebScriptSource("hello = 'world';")); |
8657 FrameTestHelpers::loadFrame(mainFrame, "data:text/html,new page"); | 8657 FrameTestHelpers::loadFrame(mainFrame, "data:text/html,new page"); |
8658 v8::Local<v8::Value> result = mainFrame->executeScriptAndReturnValue(WebScri
ptSource("hello")); | 8658 v8::Local<v8::Value> result = mainFrame->executeScriptAndReturnValue(WebScri
ptSource("hello")); |
8659 ASSERT_TRUE(result->IsString()); | 8659 ASSERT_TRUE(result->IsString()); |
8660 EXPECT_EQ("world", toCoreString(result->ToString(mainFrame->mainWorldScriptC
ontext()).ToLocalChecked())); | 8660 EXPECT_EQ("world", toCoreString(result->ToString(mainFrame->mainWorldScriptC
ontext()).ToLocalChecked())); |
8661 } | 8661 } |
8662 | 8662 |
8663 } // namespace blink | 8663 } // namespace blink |
OLD | NEW |