| 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 1585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1596 | 1596 |
| 1597 ASSERT_NE(nullptr, element); | 1597 ASSERT_NE(nullptr, element); |
| 1598 EXPECT_EQ(String("oldValue"), element->innerText()); | 1598 EXPECT_EQ(String("oldValue"), element->innerText()); |
| 1599 | 1599 |
| 1600 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint,
hitPoint, IntSize(0, 0), 0, false, false, false, false); | 1600 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint,
hitPoint, IntSize(0, 0), 0, false, false, false, false); |
| 1601 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle
GestureEvent(gestureEvent); | 1601 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle
GestureEvent(gestureEvent); |
| 1602 // when pressed, the button changes its own text to "updatedValue" | 1602 // when pressed, the button changes its own text to "updatedValue" |
| 1603 EXPECT_EQ(String("updatedValue"), element->innerText()); | 1603 EXPECT_EQ(String("updatedValue"), element->innerText()); |
| 1604 } | 1604 } |
| 1605 | 1605 |
| 1606 TEST_F(WebFrameTest, FrameOwnerPropertiesMargin) |
| 1607 { |
| 1608 FrameTestHelpers::TestWebViewClient viewClient; |
| 1609 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 1610 WebView* view = WebView::create(&viewClient); |
| 1611 view->settings()->setJavaScriptEnabled(true); |
| 1612 view->setMainFrame(remoteClient.frame()); |
| 1613 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
| 1614 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 1615 |
| 1616 WebFrameOwnerProperties properties; |
| 1617 properties.marginWidth = 11; |
| 1618 properties.marginHeight = 22; |
| 1619 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 1620 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties); |
| 1621 |
| 1622 registerMockedHttpURLLoad("frame_owner_properties.html"); |
| 1623 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.
html"); |
| 1624 |
| 1625 std::string content = localFrame->contentAsText(1024).utf8(); |
| 1626 // Check if the LocalFrame has seen the marginwidth and marginheight propert
ies. |
| 1627 EXPECT_EQ("11/22", content); |
| 1628 |
| 1629 FrameView* frameView = static_cast<WebLocalFrameImpl*>(localFrame)->frameVie
w(); |
| 1630 // Expect scrollbars to be enabled by default. |
| 1631 EXPECT_NE(nullptr, frameView->horizontalScrollbar()); |
| 1632 EXPECT_NE(nullptr, frameView->verticalScrollbar()); |
| 1633 |
| 1634 view->close(); |
| 1635 } |
| 1636 |
| 1637 TEST_F(WebFrameTest, FrameOwnerPropertiesScrolling) |
| 1638 { |
| 1639 FrameTestHelpers::TestWebViewClient viewClient; |
| 1640 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 1641 WebView* view = WebView::create(&viewClient); |
| 1642 view->settings()->setJavaScriptEnabled(true); |
| 1643 view->setMainFrame(remoteClient.frame()); |
| 1644 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
| 1645 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 1646 |
| 1647 WebFrameOwnerProperties properties; |
| 1648 // Turn off scrolling in the subframe. |
| 1649 properties.scrollingMode = static_cast<WebFrameOwnerProperties::ScrollingMod
e>(ScrollbarAlwaysOff); |
| 1650 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 1651 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties); |
| 1652 |
| 1653 registerMockedHttpURLLoad("frame_owner_properties.html"); |
| 1654 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.
html"); |
| 1655 |
| 1656 std::string content = localFrame->contentAsText(1024).utf8(); |
| 1657 EXPECT_EQ("0/0", content); |
| 1658 |
| 1659 FrameView* frameView = static_cast<WebLocalFrameImpl*>(localFrame)->frameVie
w(); |
| 1660 EXPECT_EQ(nullptr, frameView->horizontalScrollbar()); |
| 1661 EXPECT_EQ(nullptr, frameView->verticalScrollbar()); |
| 1662 |
| 1663 view->close(); |
| 1664 } |
| 1665 |
| 1666 |
| 1606 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations
) | 1667 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations
) |
| 1607 { | 1668 { |
| 1608 UseMockScrollbarSettings mockScrollbarSettings; | 1669 UseMockScrollbarSettings mockScrollbarSettings; |
| 1609 registerMockedHttpURLLoad("200-by-300.html"); | 1670 registerMockedHttpURLLoad("200-by-300.html"); |
| 1610 registerMockedHttpURLLoad("large-div.html"); | 1671 registerMockedHttpURLLoad("large-div.html"); |
| 1611 | 1672 |
| 1612 FixedLayoutTestWebViewClient client; | 1673 FixedLayoutTestWebViewClient client; |
| 1613 client.m_screenInfo.deviceScaleFactor = 1; | 1674 client.m_screenInfo.deviceScaleFactor = 1; |
| 1614 int viewportWidth = 640; | 1675 int viewportWidth = 640; |
| 1615 int viewportHeight = 480; | 1676 int viewportHeight = 480; |
| (...skipping 4306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5922 , m_willSendRequestCallCount(0) | 5983 , m_willSendRequestCallCount(0) |
| 5923 , m_childFrameCreationCount(0) | 5984 , m_childFrameCreationCount(0) |
| 5924 { | 5985 { |
| 5925 } | 5986 } |
| 5926 | 5987 |
| 5927 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child
Client = client; } | 5988 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child
Client = client; } |
| 5928 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; } | 5989 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; } |
| 5929 int willSendRequestCallCount() const { return m_willSendRequestCallCount; } | 5990 int willSendRequestCallCount() const { return m_willSendRequestCallCount; } |
| 5930 int childFrameCreationCount() const { return m_childFrameCreationCount; } | 5991 int childFrameCreationCount() const { return m_childFrameCreationCount; } |
| 5931 | 5992 |
| 5932 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s
cope, const WebString&, WebSandboxFlags) | 5993 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s
cope, const WebString&, WebSandboxFlags, const WebFrameOwnerProperties& frameOwn
erProperties) |
| 5933 { | 5994 { |
| 5934 ASSERT(m_childClient); | 5995 ASSERT(m_childClient); |
| 5935 m_childFrameCreationCount++; | 5996 m_childFrameCreationCount++; |
| 5936 WebFrame* frame = WebLocalFrame::create(scope, m_childClient); | 5997 WebFrame* frame = WebLocalFrame::create(scope, m_childClient); |
| 5937 parent->appendChild(frame); | 5998 parent->appendChild(frame); |
| 5938 return frame; | 5999 return frame; |
| 5939 } | 6000 } |
| 5940 | 6001 |
| 5941 virtual void didStartLoading(bool toDifferentDocument) | 6002 virtual void didStartLoading(bool toDifferentDocument) |
| 5942 { | 6003 { |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6311 // After commit, there is. | 6372 // After commit, there is. |
| 6312 HistoryItem* item = mainFrameLoader.currentItem(); | 6373 HistoryItem* item = mainFrameLoader.currentItem(); |
| 6313 ASSERT_TRUE(item); | 6374 ASSERT_TRUE(item); |
| 6314 EXPECT_EQ(WTF::String(url.data()), item->urlString()); | 6375 EXPECT_EQ(WTF::String(url.data()), item->urlString()); |
| 6315 } | 6376 } |
| 6316 | 6377 |
| 6317 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { | 6378 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { |
| 6318 public: | 6379 public: |
| 6319 FailCreateChildFrame() : m_callCount(0) { } | 6380 FailCreateChildFrame() : m_callCount(0) { } |
| 6320 | 6381 |
| 6321 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co
nst WebString& frameName, WebSandboxFlags sandboxFlags) override | 6382 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co
nst WebString& frameName, WebSandboxFlags sandboxFlags, const WebFrameOwnerPrope
rties& frameOwnerProperties) override |
| 6322 { | 6383 { |
| 6323 ++m_callCount; | 6384 ++m_callCount; |
| 6324 return 0; | 6385 return 0; |
| 6325 } | 6386 } |
| 6326 | 6387 |
| 6327 int callCount() const { return m_callCount; } | 6388 int callCount() const { return m_callCount; } |
| 6328 | 6389 |
| 6329 private: | 6390 private: |
| 6330 int m_callCount; | 6391 int m_callCount; |
| 6331 }; | 6392 }; |
| (...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6973 // doesn't leave behind dangling pointers. | 7034 // doesn't leave behind dangling pointers. |
| 6974 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame) | 7035 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame) |
| 6975 { | 7036 { |
| 6976 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t
o | 7037 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t
o |
| 6977 // write tests with a top-level remote frame. | 7038 // write tests with a top-level remote frame. |
| 6978 FrameTestHelpers::TestWebViewClient viewClient; | 7039 FrameTestHelpers::TestWebViewClient viewClient; |
| 6979 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7040 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 6980 WebView* view = WebView::create(&viewClient); | 7041 WebView* view = WebView::create(&viewClient); |
| 6981 view->setMainFrame(remoteClient.frame()); | 7042 view->setMainFrame(remoteClient.frame()); |
| 6982 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7043 FrameTestHelpers::TestWebFrameClient childFrameClient; |
| 6983 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7044 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
| 6984 | 7045 |
| 6985 // Purposely keep the LocalFrame alive so it's the last thing to be destroye
d. | 7046 // Purposely keep the LocalFrame alive so it's the last thing to be destroye
d. |
| 6986 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame); | 7047 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame); |
| 6987 view->close(); | 7048 view->close(); |
| 6988 childCoreFrame.clear(); | 7049 childCoreFrame.clear(); |
| 6989 } | 7050 } |
| 6990 | 7051 |
| 6991 class WebFrameSwapTest : public WebFrameTest { | 7052 class WebFrameSwapTest : public WebFrameTest { |
| 6992 protected: | 7053 protected: |
| 6993 WebFrameSwapTest() | 7054 WebFrameSwapTest() |
| (...skipping 14 matching lines...) Expand all Loading... |
| 7008 FrameTestHelpers::WebViewHelper m_webViewHelper; | 7069 FrameTestHelpers::WebViewHelper m_webViewHelper; |
| 7009 }; | 7070 }; |
| 7010 | 7071 |
| 7011 TEST_F(WebFrameSwapTest, SwapMainFrame) | 7072 TEST_F(WebFrameSwapTest, SwapMainFrame) |
| 7012 { | 7073 { |
| 7013 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); | 7074 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); |
| 7014 mainFrame()->swap(remoteFrame); | 7075 mainFrame()->swap(remoteFrame); |
| 7015 | 7076 |
| 7016 FrameTestHelpers::TestWebFrameClient client; | 7077 FrameTestHelpers::TestWebFrameClient client; |
| 7017 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7078 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7018 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7079 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7019 remoteFrame->swap(localFrame); | 7080 remoteFrame->swap(localFrame); |
| 7020 | 7081 |
| 7021 // Finally, make sure an embedder triggered load in the local frame swapped | 7082 // Finally, make sure an embedder triggered load in the local frame swapped |
| 7022 // back in works. | 7083 // back in works. |
| 7023 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7084 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7024 std::string content = localFrame->contentAsText(1024).utf8(); | 7085 std::string content = localFrame->contentAsText(1024).utf8(); |
| 7025 EXPECT_EQ("hello", content); | 7086 EXPECT_EQ("hello", content); |
| 7026 | 7087 |
| 7027 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7088 // Manually reset to break WebViewHelper's dependency on the stack allocated |
| 7028 // TestWebFrameClient. | 7089 // TestWebFrameClient. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7072 } | 7133 } |
| 7073 | 7134 |
| 7074 TEST_F(WebFrameSwapTest, SwapFirstChild) | 7135 TEST_F(WebFrameSwapTest, SwapFirstChild) |
| 7075 { | 7136 { |
| 7076 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7137 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
| 7077 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7138 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
| 7078 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); | 7139 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); |
| 7079 | 7140 |
| 7080 FrameTestHelpers::TestWebFrameClient client; | 7141 FrameTestHelpers::TestWebFrameClient client; |
| 7081 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7142 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7082 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7143 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7083 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; | 7144 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; |
| 7084 | 7145 |
| 7085 // FIXME: This almost certainly fires more load events on the iframe element | 7146 // FIXME: This almost certainly fires more load events on the iframe element |
| 7086 // than it should. | 7147 // than it should. |
| 7087 // Finally, make sure an embedder triggered load in the local frame swapped | 7148 // Finally, make sure an embedder triggered load in the local frame swapped |
| 7088 // back in works. | 7149 // back in works. |
| 7089 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7150 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7090 std::string content = localFrame->contentAsText(1024).utf8(); | 7151 std::string content = localFrame->contentAsText(1024).utf8(); |
| 7091 EXPECT_EQ("hello", content); | 7152 EXPECT_EQ("hello", content); |
| 7092 | 7153 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 7111 } | 7172 } |
| 7112 | 7173 |
| 7113 TEST_F(WebFrameSwapTest, SwapMiddleChild) | 7174 TEST_F(WebFrameSwapTest, SwapMiddleChild) |
| 7114 { | 7175 { |
| 7115 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7176 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
| 7116 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7177 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
| 7117 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); | 7178 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); |
| 7118 | 7179 |
| 7119 FrameTestHelpers::TestWebFrameClient client; | 7180 FrameTestHelpers::TestWebFrameClient client; |
| 7120 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7181 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7121 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7182 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7122 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); | 7183 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); |
| 7123 | 7184 |
| 7124 // FIXME: This almost certainly fires more load events on the iframe element | 7185 // FIXME: This almost certainly fires more load events on the iframe element |
| 7125 // than it should. | 7186 // than it should. |
| 7126 // Finally, make sure an embedder triggered load in the local frame swapped | 7187 // Finally, make sure an embedder triggered load in the local frame swapped |
| 7127 // back in works. | 7188 // back in works. |
| 7128 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7189 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7129 std::string content = localFrame->contentAsText(1024).utf8(); | 7190 std::string content = localFrame->contentAsText(1024).utf8(); |
| 7130 EXPECT_EQ("hello", content); | 7191 EXPECT_EQ("hello", content); |
| 7131 | 7192 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 7147 } | 7208 } |
| 7148 | 7209 |
| 7149 TEST_F(WebFrameSwapTest, SwapLastChild) | 7210 TEST_F(WebFrameSwapTest, SwapLastChild) |
| 7150 { | 7211 { |
| 7151 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7212 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
| 7152 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7213 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
| 7153 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; | 7214 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; |
| 7154 | 7215 |
| 7155 FrameTestHelpers::TestWebFrameClient client; | 7216 FrameTestHelpers::TestWebFrameClient client; |
| 7156 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7217 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7157 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7218 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7158 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); | 7219 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); |
| 7159 | 7220 |
| 7160 // FIXME: This almost certainly fires more load events on the iframe element | 7221 // FIXME: This almost certainly fires more load events on the iframe element |
| 7161 // than it should. | 7222 // than it should. |
| 7162 // Finally, make sure an embedder triggered load in the local frame swapped | 7223 // Finally, make sure an embedder triggered load in the local frame swapped |
| 7163 // back in works. | 7224 // back in works. |
| 7164 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7225 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7165 std::string content = localFrame->contentAsText(1024).utf8(); | 7226 std::string content = localFrame->contentAsText(1024).utf8(); |
| 7166 EXPECT_EQ("hello", content); | 7227 EXPECT_EQ("hello", content); |
| 7167 | 7228 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 7192 | 7253 |
| 7193 targetFrame = mainFrame()->firstChild()->nextSibling(); | 7254 targetFrame = mainFrame()->firstChild()->nextSibling(); |
| 7194 EXPECT_TRUE(targetFrame); | 7255 EXPECT_TRUE(targetFrame); |
| 7195 | 7256 |
| 7196 // Create child frames in the target frame before testing the swap. | 7257 // Create child frames in the target frame before testing the swap. |
| 7197 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; | 7258 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; |
| 7198 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco
peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2); | 7259 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco
peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2); |
| 7199 | 7260 |
| 7200 FrameTestHelpers::TestWebFrameClient client; | 7261 FrameTestHelpers::TestWebFrameClient client; |
| 7201 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7262 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7202 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7263 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7203 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); | 7264 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); |
| 7204 | 7265 |
| 7205 // FIXME: This almost certainly fires more load events on the iframe element | 7266 // FIXME: This almost certainly fires more load events on the iframe element |
| 7206 // than it should. | 7267 // than it should. |
| 7207 // Finally, make sure an embedder triggered load in the local frame swapped | 7268 // Finally, make sure an embedder triggered load in the local frame swapped |
| 7208 // back in works. | 7269 // back in works. |
| 7209 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7270 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7210 std::string content = localFrame->contentAsText(1024).utf8(); | 7271 std::string content = localFrame->contentAsText(1024).utf8(); |
| 7211 EXPECT_EQ("hello", content); | 7272 EXPECT_EQ("hello", content); |
| 7212 | 7273 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 7236 "document.querySelector('#frame2').contentWindow;")); | 7297 "document.querySelector('#frame2').contentWindow;")); |
| 7237 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); | 7298 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); |
| 7238 // Check that its view is consistent with the world. | 7299 // Check that its view is consistent with the world. |
| 7239 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( | 7300 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( |
| 7240 "document.querySelector('#frame2').contentWindow.top;")); | 7301 "document.querySelector('#frame2').contentWindow.top;")); |
| 7241 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7302 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
| 7242 | 7303 |
| 7243 // Now check that remote -> local works too, since it goes through a differe
nt code path. | 7304 // Now check that remote -> local works too, since it goes through a differe
nt code path. |
| 7244 FrameTestHelpers::TestWebFrameClient client; | 7305 FrameTestHelpers::TestWebFrameClient client; |
| 7245 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7306 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7246 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7307 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7247 remoteFrame->swap(localFrame); | 7308 remoteFrame->swap(localFrame); |
| 7248 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( | 7309 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( |
| 7249 "document.querySelector('#frame2').contentWindow;")); | 7310 "document.querySelector('#frame2').contentWindow;")); |
| 7250 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); | 7311 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); |
| 7251 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( | 7312 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( |
| 7252 "document.querySelector('#frame2').contentWindow.top;")); | 7313 "document.querySelector('#frame2').contentWindow.top;")); |
| 7253 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7314 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
| 7254 | 7315 |
| 7255 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7316 // Manually reset to break WebViewHelper's dependency on the stack allocated |
| 7256 // TestWebFrameClient. | 7317 // TestWebFrameClient. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 7270 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7331 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7271 WebRemoteFrame* remoteFrame = remoteClient.frame(); | 7332 WebRemoteFrame* remoteFrame = remoteClient.frame(); |
| 7272 mainFrame()->lastChild()->swap(remoteFrame); | 7333 mainFrame()->lastChild()->swap(remoteFrame); |
| 7273 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7334 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 7274 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); | 7335 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); |
| 7275 EXPECT_TRUE(remoteWindowTop->IsObject()); | 7336 EXPECT_TRUE(remoteWindowTop->IsObject()); |
| 7276 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7337 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
| 7277 | 7338 |
| 7278 FrameTestHelpers::TestWebFrameClient client; | 7339 FrameTestHelpers::TestWebFrameClient client; |
| 7279 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7340 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7280 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7341 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7281 remoteFrame->swap(localFrame); | 7342 remoteFrame->swap(localFrame); |
| 7282 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); | 7343 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); |
| 7283 EXPECT_TRUE(localWindowTop->IsObject()); | 7344 EXPECT_TRUE(localWindowTop->IsObject()); |
| 7284 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7345 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
| 7285 | 7346 |
| 7286 reset(); | 7347 reset(); |
| 7287 } | 7348 } |
| 7288 | 7349 |
| 7289 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) | 7350 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) |
| 7290 { | 7351 { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7341 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable) | 7402 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable) |
| 7342 { | 7403 { |
| 7343 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 7404 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 7344 | 7405 |
| 7345 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7406 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7346 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); | 7407 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); |
| 7347 mainFrame()->swap(remoteParentFrame); | 7408 mainFrame()->swap(remoteParentFrame); |
| 7348 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7409 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 7349 | 7410 |
| 7350 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7411 FrameTestHelpers::TestWebFrameClient childFrameClient; |
| 7351 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); | 7412 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO
wnerProperties()); |
| 7352 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); | 7413 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); |
| 7353 | 7414 |
| 7354 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr
iptSource("window")); | 7415 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr
iptSource("window")); |
| 7355 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur
nValue(WebScriptSource("parent.frames[0]")); | 7416 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur
nValue(WebScriptSource("parent.frames[0]")); |
| 7356 EXPECT_TRUE(childOfRemoteParent->IsObject()); | 7417 EXPECT_TRUE(childOfRemoteParent->IsObject()); |
| 7357 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent)); | 7418 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent)); |
| 7358 | 7419 |
| 7359 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue(
WebScriptSource("parent.frames.length")); | 7420 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue(
WebScriptSource("parent.frames.length")); |
| 7360 ASSERT_TRUE(windowLength->IsInt32()); | 7421 ASSERT_TRUE(windowLength->IsInt32()); |
| 7361 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value()); | 7422 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value()); |
| 7362 | 7423 |
| 7363 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. | 7424 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. |
| 7364 reset(); | 7425 reset(); |
| 7365 } | 7426 } |
| 7366 | 7427 |
| 7367 // Check that frames with a remote parent don't crash while accessing window.fra
meElement. | 7428 // Check that frames with a remote parent don't crash while accessing window.fra
meElement. |
| 7368 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent) | 7429 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent) |
| 7369 { | 7430 { |
| 7370 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 7431 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 7371 | 7432 |
| 7372 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7433 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7373 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); | 7434 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); |
| 7374 mainFrame()->swap(remoteParentFrame); | 7435 mainFrame()->swap(remoteParentFrame); |
| 7375 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7436 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 7376 | 7437 |
| 7377 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7438 FrameTestHelpers::TestWebFrameClient childFrameClient; |
| 7378 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); | 7439 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO
wnerProperties()); |
| 7379 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); | 7440 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); |
| 7380 | 7441 |
| 7381 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue(
WebScriptSource("window.frameElement")); | 7442 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue(
WebScriptSource("window.frameElement")); |
| 7382 // frameElement shouldn't be accessible cross-origin. | 7443 // frameElement shouldn't be accessible cross-origin. |
| 7383 EXPECT_TRUE(frameElement.IsEmpty()); | 7444 EXPECT_TRUE(frameElement.IsEmpty()); |
| 7384 | 7445 |
| 7385 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. | 7446 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. |
| 7386 reset(); | 7447 reset(); |
| 7387 } | 7448 } |
| 7388 | 7449 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 7415 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7476 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
| 7416 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7477 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
| 7417 WebFrame* targetFrame = mainFrame()->firstChild(); | 7478 WebFrame* targetFrame = mainFrame()->firstChild(); |
| 7418 ASSERT_TRUE(targetFrame); | 7479 ASSERT_TRUE(targetFrame); |
| 7419 targetFrame->swap(remoteFrame); | 7480 targetFrame->swap(remoteFrame); |
| 7420 ASSERT_TRUE(mainFrame()->firstChild()); | 7481 ASSERT_TRUE(mainFrame()->firstChild()); |
| 7421 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7482 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
| 7422 | 7483 |
| 7423 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7484 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
| 7424 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7485 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7425 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7486 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7426 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7487 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7427 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); | 7488 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); |
| 7428 | 7489 |
| 7429 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7490 // Manually reset to break WebViewHelper's dependency on the stack allocated |
| 7430 // TestWebFrameClient. | 7491 // TestWebFrameClient. |
| 7431 reset(); | 7492 reset(); |
| 7432 remoteFrame->close(); | 7493 remoteFrame->close(); |
| 7433 } | 7494 } |
| 7434 | 7495 |
| 7435 // The commit type should be Standard if we are swapping a RemoteFrame to a | 7496 // The commit type should be Standard if we are swapping a RemoteFrame to a |
| 7436 // LocalFrame after commits have already happened in the frame. The browser | 7497 // LocalFrame after commits have already happened in the frame. The browser |
| 7437 // process will inform us via setCommittedFirstRealLoad. | 7498 // process will inform us via setCommittedFirstRealLoad. |
| 7438 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) | 7499 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) |
| 7439 { | 7500 { |
| 7440 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7501 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
| 7441 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7502 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
| 7442 WebFrame* targetFrame = mainFrame()->firstChild(); | 7503 WebFrame* targetFrame = mainFrame()->firstChild(); |
| 7443 ASSERT_TRUE(targetFrame); | 7504 ASSERT_TRUE(targetFrame); |
| 7444 targetFrame->swap(remoteFrame); | 7505 targetFrame->swap(remoteFrame); |
| 7445 ASSERT_TRUE(mainFrame()->firstChild()); | 7506 ASSERT_TRUE(mainFrame()->firstChild()); |
| 7446 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7507 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
| 7447 | 7508 |
| 7448 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7509 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
| 7449 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7510 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
| 7450 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7511 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
| 7451 localFrame->setCommittedFirstRealLoad(); | 7512 localFrame->setCommittedFirstRealLoad(); |
| 7452 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7513 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
| 7453 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); | 7514 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); |
| 7454 | 7515 |
| 7455 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7516 // Manually reset to break WebViewHelper's dependency on the stack allocated |
| 7456 // TestWebFrameClient. | 7517 // TestWebFrameClient. |
| 7457 reset(); | 7518 reset(); |
| 7458 remoteFrame->close(); | 7519 remoteFrame->close(); |
| 7459 } | 7520 } |
| 7460 | 7521 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7578 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; | 7639 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; |
| 7579 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); | 7640 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); |
| 7580 popupView->setMainFrame(popupRemoteFrame); | 7641 popupView->setMainFrame(popupRemoteFrame); |
| 7581 popupRemoteFrame->setOpener(mainFrame); | 7642 popupRemoteFrame->setOpener(mainFrame); |
| 7582 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); | 7643 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); |
| 7583 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s
ecurityOrigin())); | 7644 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s
ecurityOrigin())); |
| 7584 | 7645 |
| 7585 // Do a remote-to-local swap in the popup. | 7646 // Do a remote-to-local swap in the popup. |
| 7586 FrameTestHelpers::TestWebFrameClient popupLocalClient; | 7647 FrameTestHelpers::TestWebFrameClient popupLocalClient; |
| 7587 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc
ument, &popupLocalClient); | 7648 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc
ument, &popupLocalClient); |
| 7588 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None); | 7649 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None, WebFrameOwnerProperties()); |
| 7589 popupRemoteFrame->swap(popupLocalFrame); | 7650 popupRemoteFrame->swap(popupLocalFrame); |
| 7590 | 7651 |
| 7591 // The initial document created during the remote-to-local swap should have | 7652 // The initial document created during the remote-to-local swap should have |
| 7592 // inherited its opener's SecurityOrigin. | 7653 // inherited its opener's SecurityOrigin. |
| 7593 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); | 7654 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); |
| 7594 | 7655 |
| 7595 popupView->close(); | 7656 popupView->close(); |
| 7596 } | 7657 } |
| 7597 | 7658 |
| 7598 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { | 7659 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 7616 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType) | 7677 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType) |
| 7617 { | 7678 { |
| 7618 FrameTestHelpers::TestWebViewClient viewClient; | 7679 FrameTestHelpers::TestWebViewClient viewClient; |
| 7619 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7680 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7620 WebView* view = WebView::create(&viewClient); | 7681 WebView* view = WebView::create(&viewClient); |
| 7621 view->setMainFrame(remoteClient.frame()); | 7682 view->setMainFrame(remoteClient.frame()); |
| 7622 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica
tedOrigin(SecurityOrigin::create(toKURL(m_baseURL))); | 7683 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica
tedOrigin(SecurityOrigin::create(toKURL(m_baseURL))); |
| 7623 | 7684 |
| 7624 // If an iframe has a remote main frame, ensure the inital commit is correct
ly identified as WebInitialCommitInChildFrame. | 7685 // If an iframe has a remote main frame, ensure the inital commit is correct
ly identified as WebInitialCommitInChildFrame. |
| 7625 CommitTypeWebFrameClient childFrameClient; | 7686 CommitTypeWebFrameClient childFrameClient; |
| 7626 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7687 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
| 7627 registerMockedHttpURLLoad("foo.html"); | 7688 registerMockedHttpURLLoad("foo.html"); |
| 7628 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html"); | 7689 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html"); |
| 7629 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType()
); | 7690 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType()
); |
| 7630 view->close(); | 7691 view->close(); |
| 7631 } | 7692 } |
| 7632 | 7693 |
| 7633 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient
{ | 7694 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient
{ |
| 7634 public: | 7695 public: |
| 7635 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { } | 7696 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { } |
| 7636 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled
) override { m_didHandleGestureEvent = true; } | 7697 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled
) override { m_didHandleGestureEvent = true; } |
| 7637 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; } | 7698 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; } |
| 7638 | 7699 |
| 7639 private: | 7700 private: |
| 7640 bool m_didHandleGestureEvent; | 7701 bool m_didHandleGestureEvent; |
| 7641 }; | 7702 }; |
| 7642 | 7703 |
| 7643 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest) | 7704 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest) |
| 7644 { | 7705 { |
| 7645 FrameTestHelpers::TestWebViewClient viewClient; | 7706 FrameTestHelpers::TestWebViewClient viewClient; |
| 7646 WebView* view = WebView::create(&viewClient); | 7707 WebView* view = WebView::create(&viewClient); |
| 7647 | 7708 |
| 7648 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7709 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7649 view->setMainFrame(remoteClient.frame()); | 7710 view->setMainFrame(remoteClient.frame()); |
| 7650 | 7711 |
| 7651 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7712 FrameTestHelpers::TestWebFrameClient childFrameClient; |
| 7652 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7713 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
| 7653 | 7714 |
| 7654 GestureEventTestWebViewClient childViewClient; | 7715 GestureEventTestWebViewClient childViewClient; |
| 7655 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame
); | 7716 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame
); |
| 7656 | 7717 |
| 7657 view->resize(WebSize(1000, 1000)); | 7718 view->resize(WebSize(1000, 1000)); |
| 7658 view->layout(); | 7719 view->layout(); |
| 7659 | 7720 |
| 7660 widget->handleInputEvent(fatTap(20, 20)); | 7721 widget->handleInputEvent(fatTap(20, 20)); |
| 7661 EXPECT_TRUE(childViewClient.didHandleGestureEvent()); | 7722 EXPECT_TRUE(childViewClient.didHandleGestureEvent()); |
| 7662 | 7723 |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7862 | 7923 |
| 7863 | 7924 |
| 7864 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling) | 7925 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling) |
| 7865 { | 7926 { |
| 7866 FrameTestHelpers::TestWebViewClient viewClient; | 7927 FrameTestHelpers::TestWebViewClient viewClient; |
| 7867 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7928 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7868 WebView* view = WebView::create(&viewClient); | 7929 WebView* view = WebView::create(&viewClient); |
| 7869 view->setMainFrame(remoteClient.frame()); | 7930 view->setMainFrame(remoteClient.frame()); |
| 7870 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame(); | 7931 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame(); |
| 7871 | 7932 |
| 7872 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, nullptr); | 7933 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties()
); |
| 7873 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, secondFrame); | 7934 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerProperti
es()); |
| 7874 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, secondFrame); | 7935 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerPropertie
s()); |
| 7875 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, nullptr); | 7936 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties())
; |
| 7876 | 7937 |
| 7877 EXPECT_EQ(firstFrame, parent->firstChild()); | 7938 EXPECT_EQ(firstFrame, parent->firstChild()); |
| 7878 EXPECT_EQ(nullptr, firstFrame->previousSibling()); | 7939 EXPECT_EQ(nullptr, firstFrame->previousSibling()); |
| 7879 EXPECT_EQ(secondFrame, firstFrame->nextSibling()); | 7940 EXPECT_EQ(secondFrame, firstFrame->nextSibling()); |
| 7880 | 7941 |
| 7881 EXPECT_EQ(firstFrame, secondFrame->previousSibling()); | 7942 EXPECT_EQ(firstFrame, secondFrame->previousSibling()); |
| 7882 EXPECT_EQ(thirdFrame, secondFrame->nextSibling()); | 7943 EXPECT_EQ(thirdFrame, secondFrame->nextSibling()); |
| 7883 | 7944 |
| 7884 EXPECT_EQ(secondFrame, thirdFrame->previousSibling()); | 7945 EXPECT_EQ(secondFrame, thirdFrame->previousSibling()); |
| 7885 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling()); | 7946 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 7900 { | 7961 { |
| 7901 FrameTestHelpers::TestWebViewClient viewClient; | 7962 FrameTestHelpers::TestWebViewClient viewClient; |
| 7902 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7963 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7903 WebView* view = WebView::create(&viewClient); | 7964 WebView* view = WebView::create(&viewClient); |
| 7904 view->settings()->setJavaScriptEnabled(true); | 7965 view->settings()->setJavaScriptEnabled(true); |
| 7905 view->setMainFrame(remoteClient.frame()); | 7966 view->setMainFrame(remoteClient.frame()); |
| 7906 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); | 7967 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
| 7907 root->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7968 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 7908 | 7969 |
| 7909 FrameTestHelpers::TestWebFrameClient localFrameClient; | 7970 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 7910 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr); | 7971 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, WebFrameOwnerPropertie
s()); |
| 7911 | 7972 |
| 7912 // Finally, make sure an embedder triggered load in the local frame swapped | 7973 // Finally, make sure an embedder triggered load in the local frame swapped |
| 7913 // back in works. | 7974 // back in works. |
| 7914 registerMockedHttpURLLoad("send_beacon.html"); | 7975 registerMockedHttpURLLoad("send_beacon.html"); |
| 7915 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon() | 7976 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon() |
| 7916 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html"); | 7977 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html"); |
| 7917 | 7978 |
| 7918 view->close(); | 7979 view->close(); |
| 7919 } | 7980 } |
| 7920 | 7981 |
| 7921 // See https://crbug.com/525285. | 7982 // See https://crbug.com/525285. |
| 7922 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra
me) | 7983 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra
me) |
| 7923 { | 7984 { |
| 7924 FrameTestHelpers::TestWebViewClient viewClient; | 7985 FrameTestHelpers::TestWebViewClient viewClient; |
| 7925 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7986 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7926 WebView* view = WebView::create(&viewClient); | 7987 WebView* view = WebView::create(&viewClient); |
| 7927 view->setMainFrame(remoteClient.frame()); | 7988 view->setMainFrame(remoteClient.frame()); |
| 7928 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); | 7989 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); |
| 7929 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7990 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 7930 | 7991 |
| 7931 FrameTestHelpers::TestWebFrameClient localFrameClient; | 7992 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 7932 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags
::None, &localFrameClient, nullptr); | 7993 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags
::None, &localFrameClient, nullptr, WebFrameOwnerProperties()); |
| 7933 | 7994 |
| 7934 // Do a remote-to-local swap of the top frame. | 7995 // Do a remote-to-local swap of the top frame. |
| 7935 FrameTestHelpers::TestWebFrameClient localClient; | 7996 FrameTestHelpers::TestWebFrameClient localClient; |
| 7936 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document,
&localClient); | 7997 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document,
&localClient); |
| 7937 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N
one); | 7998 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N
one, WebFrameOwnerProperties()); |
| 7938 remoteRoot->swap(localRoot); | 7999 remoteRoot->swap(localRoot); |
| 7939 | 8000 |
| 7940 // Load a page with a child frame in the new root to make sure this doesn't | 8001 // Load a page with a child frame in the new root to make sure this doesn't |
| 7941 // crash when the child frame invokes setCoreFrame. | 8002 // crash when the child frame invokes setCoreFrame. |
| 7942 registerMockedHttpURLLoad("single_iframe.html"); | 8003 registerMockedHttpURLLoad("single_iframe.html"); |
| 7943 registerMockedHttpURLLoad("visible_iframe.html"); | 8004 registerMockedHttpURLLoad("visible_iframe.html"); |
| 7944 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); | 8005 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); |
| 7945 | 8006 |
| 7946 view->close(); | 8007 view->close(); |
| 7947 } | 8008 } |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8223 | 8284 |
| 8224 TEST_F(WebFrameTest, MaxFramesDetach) | 8285 TEST_F(WebFrameTest, MaxFramesDetach) |
| 8225 { | 8286 { |
| 8226 registerMockedHttpURLLoad("max-frames-detach.html"); | 8287 registerMockedHttpURLLoad("max-frames-detach.html"); |
| 8227 FrameTestHelpers::WebViewHelper webViewHelper; | 8288 FrameTestHelpers::WebViewHelper webViewHelper; |
| 8228 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "max-
frames-detach.html", true); | 8289 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "max-
frames-detach.html", true); |
| 8229 webViewImpl->mainFrameImpl()->collectGarbage(); | 8290 webViewImpl->mainFrameImpl()->collectGarbage(); |
| 8230 } | 8291 } |
| 8231 | 8292 |
| 8232 } // namespace blink | 8293 } // namespace blink |
| OLD | NEW |