| 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 6845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6856 | 6856 |
| 6857 void reset() { m_webViewHelper.reset(); } | 6857 void reset() { m_webViewHelper.reset(); } |
| 6858 WebFrame* mainFrame() const { return m_webViewHelper.webView()->mainFrame();
} | 6858 WebFrame* mainFrame() const { return m_webViewHelper.webView()->mainFrame();
} |
| 6859 | 6859 |
| 6860 private: | 6860 private: |
| 6861 FrameTestHelpers::WebViewHelper m_webViewHelper; | 6861 FrameTestHelpers::WebViewHelper m_webViewHelper; |
| 6862 }; | 6862 }; |
| 6863 | 6863 |
| 6864 TEST_F(WebFrameSwapTest, SwapMainFrame) | 6864 TEST_F(WebFrameSwapTest, SwapMainFrame) |
| 6865 { | 6865 { |
| 6866 WebFrame* remoteFrame = WebRemoteFrame::create(0); | 6866 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(nullptr); |
| 6867 mainFrame()->swap(remoteFrame); | 6867 mainFrame()->swap(remoteFrame); |
| 6868 | 6868 |
| 6869 FrameTestHelpers::TestWebFrameClient client; | 6869 FrameTestHelpers::TestWebFrameClient client; |
| 6870 WebFrame* localFrame = WebLocalFrame::create(&client); | 6870 WebLocalFrame* localFrame = WebLocalFrame::create(&client); |
| 6871 localFrame->initializeToReplaceRemoteFrame(remoteFrame); |
| 6871 remoteFrame->swap(localFrame); | 6872 remoteFrame->swap(localFrame); |
| 6872 | 6873 |
| 6873 // Finally, make sure an embedder triggered load in the local frame swapped | 6874 // Finally, make sure an embedder triggered load in the local frame swapped |
| 6874 // back in works. | 6875 // back in works. |
| 6875 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 6876 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 6876 std::string content = localFrame->contentAsText(1024).utf8(); | 6877 std::string content = localFrame->contentAsText(1024).utf8(); |
| 6877 EXPECT_EQ("hello", content); | 6878 EXPECT_EQ("hello", content); |
| 6878 | 6879 |
| 6879 // Manually reset to break WebViewHelper's dependency on the stack allocated | 6880 // Manually reset to break WebViewHelper's dependency on the stack allocated |
| 6880 // TestWebFrameClient. | 6881 // TestWebFrameClient. |
| 6881 reset(); | 6882 reset(); |
| 6882 remoteFrame->close(); | 6883 remoteFrame->close(); |
| 6883 } | 6884 } |
| 6884 | 6885 |
| 6885 void swapAndVerifyFirstChildConsistency(const char* const message, WebFrame* par
ent, WebFrame* newChild) | 6886 void swapAndVerifyFirstChildConsistency(const char* const message, WebFrame* par
ent, WebFrame* newChild) |
| 6886 { | 6887 { |
| 6887 SCOPED_TRACE(message); | 6888 SCOPED_TRACE(message); |
| 6888 parent->firstChild()->swap(newChild); | 6889 parent->firstChild()->swap(newChild); |
| 6889 | 6890 |
| 6890 EXPECT_EQ(newChild, parent->firstChild()); | 6891 EXPECT_EQ(newChild, parent->firstChild()); |
| 6891 EXPECT_EQ(newChild->parent(), parent); | 6892 EXPECT_EQ(newChild->parent(), parent); |
| 6892 EXPECT_EQ(newChild, parent->lastChild()->previousSibling()->previousSibling(
)); | 6893 EXPECT_EQ(newChild, parent->lastChild()->previousSibling()->previousSibling(
)); |
| 6893 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()->previousSibling()); | 6894 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()->previousSibling()); |
| 6894 } | 6895 } |
| 6895 | 6896 |
| 6896 TEST_F(WebFrameSwapTest, SwapFirstChild) | 6897 TEST_F(WebFrameSwapTest, SwapFirstChild) |
| 6897 { | 6898 { |
| 6898 WebFrame* remoteFrame = WebRemoteFrame::create(0); | 6899 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(nullptr); |
| 6899 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); | 6900 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); |
| 6900 | 6901 |
| 6901 FrameTestHelpers::TestWebFrameClient client; | 6902 FrameTestHelpers::TestWebFrameClient client; |
| 6902 WebFrame* localFrame = WebLocalFrame::create(&client); | 6903 WebLocalFrame* localFrame = WebLocalFrame::create(&client); |
| 6904 localFrame->initializeToReplaceRemoteFrame(remoteFrame); |
| 6903 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; | 6905 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; |
| 6904 | 6906 |
| 6905 // FIXME: This almost certainly fires more load events on the iframe element | 6907 // FIXME: This almost certainly fires more load events on the iframe element |
| 6906 // than it should. | 6908 // than it should. |
| 6907 // Finally, make sure an embedder triggered load in the local frame swapped | 6909 // Finally, make sure an embedder triggered load in the local frame swapped |
| 6908 // back in works. | 6910 // back in works. |
| 6909 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 6911 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 6910 std::string content = localFrame->contentAsText(1024).utf8(); | 6912 std::string content = localFrame->contentAsText(1024).utf8(); |
| 6911 EXPECT_EQ("hello", content); | 6913 EXPECT_EQ("hello", content); |
| 6912 | 6914 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 6925 EXPECT_EQ(newChild, parent->lastChild()->previousSibling()); | 6927 EXPECT_EQ(newChild, parent->lastChild()->previousSibling()); |
| 6926 EXPECT_EQ(newChild->parent(), parent); | 6928 EXPECT_EQ(newChild->parent(), parent); |
| 6927 EXPECT_EQ(newChild, parent->firstChild()->nextSibling()); | 6929 EXPECT_EQ(newChild, parent->firstChild()->nextSibling()); |
| 6928 EXPECT_EQ(newChild->previousSibling(), parent->firstChild()); | 6930 EXPECT_EQ(newChild->previousSibling(), parent->firstChild()); |
| 6929 EXPECT_EQ(newChild, parent->lastChild()->previousSibling()); | 6931 EXPECT_EQ(newChild, parent->lastChild()->previousSibling()); |
| 6930 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()); | 6932 EXPECT_EQ(newChild->nextSibling(), parent->lastChild()); |
| 6931 } | 6933 } |
| 6932 | 6934 |
| 6933 TEST_F(WebFrameSwapTest, SwapMiddleChild) | 6935 TEST_F(WebFrameSwapTest, SwapMiddleChild) |
| 6934 { | 6936 { |
| 6935 WebFrame* remoteFrame = WebRemoteFrame::create(0); | 6937 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(nullptr); |
| 6936 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); | 6938 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); |
| 6937 | 6939 |
| 6938 FrameTestHelpers::TestWebFrameClient client; | 6940 FrameTestHelpers::TestWebFrameClient client; |
| 6939 WebFrame* localFrame = WebLocalFrame::create(&client); | 6941 WebLocalFrame* localFrame = WebLocalFrame::create(&client); |
| 6942 localFrame->initializeToReplaceRemoteFrame(remoteFrame); |
| 6940 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); | 6943 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); |
| 6941 | 6944 |
| 6942 // FIXME: This almost certainly fires more load events on the iframe element | 6945 // FIXME: This almost certainly fires more load events on the iframe element |
| 6943 // than it should. | 6946 // than it should. |
| 6944 // Finally, make sure an embedder triggered load in the local frame swapped | 6947 // Finally, make sure an embedder triggered load in the local frame swapped |
| 6945 // back in works. | 6948 // back in works. |
| 6946 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 6949 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 6947 std::string content = localFrame->contentAsText(1024).utf8(); | 6950 std::string content = localFrame->contentAsText(1024).utf8(); |
| 6948 EXPECT_EQ("hello", content); | 6951 EXPECT_EQ("hello", content); |
| 6949 | 6952 |
| 6950 // Manually reset to break WebViewHelper's dependency on the stack allocated | 6953 // Manually reset to break WebViewHelper's dependency on the stack allocated |
| 6951 // TestWebFrameClient. | 6954 // TestWebFrameClient. |
| 6952 reset(); | 6955 reset(); |
| 6953 remoteFrame->close(); | 6956 remoteFrame->close(); |
| 6954 } | 6957 } |
| 6955 | 6958 |
| 6956 void swapAndVerifyLastChildConsistency(const char* const message, WebFrame* pare
nt, WebFrame* newChild) | 6959 void swapAndVerifyLastChildConsistency(const char* const message, WebFrame* pare
nt, WebFrame* newChild) |
| 6957 { | 6960 { |
| 6958 SCOPED_TRACE(message); | 6961 SCOPED_TRACE(message); |
| 6959 parent->lastChild()->swap(newChild); | 6962 parent->lastChild()->swap(newChild); |
| 6960 | 6963 |
| 6961 EXPECT_EQ(newChild, parent->lastChild()); | 6964 EXPECT_EQ(newChild, parent->lastChild()); |
| 6962 EXPECT_EQ(newChild->parent(), parent); | 6965 EXPECT_EQ(newChild->parent(), parent); |
| 6963 EXPECT_EQ(newChild, parent->firstChild()->nextSibling()->nextSibling()); | 6966 EXPECT_EQ(newChild, parent->firstChild()->nextSibling()->nextSibling()); |
| 6964 EXPECT_EQ(newChild->previousSibling(), parent->firstChild()->nextSibling()); | 6967 EXPECT_EQ(newChild->previousSibling(), parent->firstChild()->nextSibling()); |
| 6965 } | 6968 } |
| 6966 | 6969 |
| 6967 TEST_F(WebFrameSwapTest, SwapLastChild) | 6970 TEST_F(WebFrameSwapTest, SwapLastChild) |
| 6968 { | 6971 { |
| 6969 WebFrame* remoteFrame = WebRemoteFrame::create(0); | 6972 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(nullptr); |
| 6970 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; | 6973 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; |
| 6971 | 6974 |
| 6972 FrameTestHelpers::TestWebFrameClient client; | 6975 FrameTestHelpers::TestWebFrameClient client; |
| 6973 WebFrame* localFrame = WebLocalFrame::create(&client); | 6976 WebLocalFrame* localFrame = WebLocalFrame::create(&client); |
| 6977 localFrame->initializeToReplaceRemoteFrame(remoteFrame); |
| 6974 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); | 6978 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); |
| 6975 | 6979 |
| 6976 // FIXME: This almost certainly fires more load events on the iframe element | 6980 // FIXME: This almost certainly fires more load events on the iframe element |
| 6977 // than it should. | 6981 // than it should. |
| 6978 // Finally, make sure an embedder triggered load in the local frame swapped | 6982 // Finally, make sure an embedder triggered load in the local frame swapped |
| 6979 // back in works. | 6983 // back in works. |
| 6980 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 6984 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 6981 std::string content = localFrame->contentAsText(1024).utf8(); | 6985 std::string content = localFrame->contentAsText(1024).utf8(); |
| 6982 EXPECT_EQ("hello", content); | 6986 EXPECT_EQ("hello", content); |
| 6983 | 6987 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 7006 swapAndVerifySubframeConsistency("local->remote", targetFrame, remoteFrame); | 7010 swapAndVerifySubframeConsistency("local->remote", targetFrame, remoteFrame); |
| 7007 | 7011 |
| 7008 targetFrame = mainFrame()->firstChild()->nextSibling(); | 7012 targetFrame = mainFrame()->firstChild()->nextSibling(); |
| 7009 EXPECT_TRUE(targetFrame); | 7013 EXPECT_TRUE(targetFrame); |
| 7010 | 7014 |
| 7011 // Create child frames in the target frame before testing the swap. | 7015 // Create child frames in the target frame before testing the swap. |
| 7012 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7016 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
| 7013 remoteFrame->createRemoteChild("", WebSandboxFlags::None, &remoteFrameClient
); | 7017 remoteFrame->createRemoteChild("", WebSandboxFlags::None, &remoteFrameClient
); |
| 7014 | 7018 |
| 7015 FrameTestHelpers::TestWebFrameClient client; | 7019 FrameTestHelpers::TestWebFrameClient client; |
| 7016 WebFrame* localFrame = WebLocalFrame::create(&client); | 7020 WebLocalFrame* localFrame = WebLocalFrame::create(&client); |
| 7021 localFrame->initializeToReplaceRemoteFrame(remoteFrame); |
| 7017 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); | 7022 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); |
| 7018 | 7023 |
| 7019 // FIXME: This almost certainly fires more load events on the iframe element | 7024 // FIXME: This almost certainly fires more load events on the iframe element |
| 7020 // than it should. | 7025 // than it should. |
| 7021 // Finally, make sure an embedder triggered load in the local frame swapped | 7026 // Finally, make sure an embedder triggered load in the local frame swapped |
| 7022 // back in works. | 7027 // back in works. |
| 7023 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7028 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7024 std::string content = localFrame->contentAsText(1024).utf8(); | 7029 std::string content = localFrame->contentAsText(1024).utf8(); |
| 7025 EXPECT_EQ("hello", content); | 7030 EXPECT_EQ("hello", content); |
| 7026 | 7031 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7210 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount()); | 7215 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount()); |
| 7211 | 7216 |
| 7212 // Neither should a page reload. | 7217 // Neither should a page reload. |
| 7213 localFrame->reload(); | 7218 localFrame->reload(); |
| 7214 EXPECT_EQ(4u, frameClient.provisionalLoadCount()); | 7219 EXPECT_EQ(4u, frameClient.provisionalLoadCount()); |
| 7215 EXPECT_FALSE(frameClient.wasLastProvisionalLoadATransition()); | 7220 EXPECT_FALSE(frameClient.wasLastProvisionalLoadATransition()); |
| 7216 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount()); | 7221 EXPECT_EQ(1u, frameClient.navigationalDataReceivedCount()); |
| 7217 } | 7222 } |
| 7218 | 7223 |
| 7219 } // namespace | 7224 } // namespace |
| OLD | NEW |