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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 #include "core/events/MouseEvent.h" | 51 #include "core/events/MouseEvent.h" |
52 #include "core/fetch/FetchRequest.h" | 52 #include "core/fetch/FetchRequest.h" |
53 #include "core/fetch/MemoryCache.h" | 53 #include "core/fetch/MemoryCache.h" |
54 #include "core/fetch/ResourceFetcher.h" | 54 #include "core/fetch/ResourceFetcher.h" |
55 #include "core/frame/FrameHost.h" | 55 #include "core/frame/FrameHost.h" |
56 #include "core/frame/FrameView.h" | 56 #include "core/frame/FrameView.h" |
57 #include "core/frame/LocalFrame.h" | 57 #include "core/frame/LocalFrame.h" |
58 #include "core/frame/RemoteFrame.h" | 58 #include "core/frame/RemoteFrame.h" |
59 #include "core/frame/Settings.h" | 59 #include "core/frame/Settings.h" |
60 #include "core/frame/VisualViewport.h" | 60 #include "core/frame/VisualViewport.h" |
| 61 #include "core/html/HTMLBodyElement.h" |
61 #include "core/html/HTMLDocument.h" | 62 #include "core/html/HTMLDocument.h" |
62 #include "core/html/HTMLFormElement.h" | 63 #include "core/html/HTMLFormElement.h" |
63 #include "core/html/HTMLMediaElement.h" | 64 #include "core/html/HTMLMediaElement.h" |
64 #include "core/html/ImageDocument.h" | 65 #include "core/html/ImageDocument.h" |
65 #include "core/input/EventHandler.h" | 66 #include "core/input/EventHandler.h" |
66 #include "core/layout/HitTestResult.h" | 67 #include "core/layout/HitTestResult.h" |
67 #include "core/layout/LayoutFullScreen.h" | 68 #include "core/layout/LayoutFullScreen.h" |
68 #include "core/layout/LayoutView.h" | 69 #include "core/layout/LayoutView.h" |
69 #include "core/layout/compositing/PaintLayerCompositor.h" | 70 #include "core/layout/compositing/PaintLayerCompositor.h" |
70 #include "core/loader/DocumentLoader.h" | 71 #include "core/loader/DocumentLoader.h" |
(...skipping 1498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1569 | 1570 |
1570 ASSERT_NE(nullptr, element); | 1571 ASSERT_NE(nullptr, element); |
1571 EXPECT_EQ(String("oldValue"), element->innerText()); | 1572 EXPECT_EQ(String("oldValue"), element->innerText()); |
1572 | 1573 |
1573 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint,
hitPoint, IntSize(0, 0), 0, PlatformEvent::NoModifiers, PlatformGestureSourceTo
uchscreen); | 1574 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint,
hitPoint, IntSize(0, 0), 0, PlatformEvent::NoModifiers, PlatformGestureSourceTo
uchscreen); |
1574 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle
GestureEvent(gestureEvent); | 1575 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle
GestureEvent(gestureEvent); |
1575 // when pressed, the button changes its own text to "updatedValue" | 1576 // when pressed, the button changes its own text to "updatedValue" |
1576 EXPECT_EQ(String("updatedValue"), element->innerText()); | 1577 EXPECT_EQ(String("updatedValue"), element->innerText()); |
1577 } | 1578 } |
1578 | 1579 |
| 1580 TEST_F(WebFrameTest, FrameOwnerPropertiesMargin) |
| 1581 { |
| 1582 FrameTestHelpers::TestWebViewClient viewClient; |
| 1583 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 1584 WebView* view = WebView::create(&viewClient); |
| 1585 view->settings()->setJavaScriptEnabled(true); |
| 1586 view->setMainFrame(remoteClient.frame()); |
| 1587 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
| 1588 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 1589 |
| 1590 WebFrameOwnerProperties properties; |
| 1591 properties.marginWidth = 11; |
| 1592 properties.marginHeight = 22; |
| 1593 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 1594 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties); |
| 1595 |
| 1596 registerMockedHttpURLLoad("frame_owner_properties.html"); |
| 1597 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.
html"); |
| 1598 |
| 1599 // Check if the LocalFrame has seen the marginwidth and marginheight |
| 1600 // properties. |
| 1601 Document* childDocument = toWebLocalFrameImpl(localFrame)->frame()->document
(); |
| 1602 EXPECT_EQ(11, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNa
mes::marginwidthAttr)); |
| 1603 EXPECT_EQ(22, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNa
mes::marginheightAttr)); |
| 1604 |
| 1605 FrameView* frameView = toWebLocalFrameImpl(localFrame)->frameView(); |
| 1606 // Expect scrollbars to be enabled by default. |
| 1607 EXPECT_NE(nullptr, frameView->horizontalScrollbar()); |
| 1608 EXPECT_NE(nullptr, frameView->verticalScrollbar()); |
| 1609 |
| 1610 view->close(); |
| 1611 } |
| 1612 |
| 1613 TEST_F(WebFrameTest, FrameOwnerPropertiesScrolling) |
| 1614 { |
| 1615 FrameTestHelpers::TestWebViewClient viewClient; |
| 1616 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 1617 WebView* view = WebView::create(&viewClient); |
| 1618 view->settings()->setJavaScriptEnabled(true); |
| 1619 view->setMainFrame(remoteClient.frame()); |
| 1620 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
| 1621 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 1622 |
| 1623 WebFrameOwnerProperties properties; |
| 1624 // Turn off scrolling in the subframe. |
| 1625 properties.scrollingMode = WebFrameOwnerProperties::ScrollingMode::AlwaysOff
; |
| 1626 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 1627 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties); |
| 1628 |
| 1629 registerMockedHttpURLLoad("frame_owner_properties.html"); |
| 1630 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.
html"); |
| 1631 |
| 1632 Document* childDocument = toWebLocalFrameImpl(localFrame)->frame()->document
(); |
| 1633 EXPECT_EQ(0, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNam
es::marginwidthAttr)); |
| 1634 EXPECT_EQ(0, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNam
es::marginheightAttr)); |
| 1635 |
| 1636 FrameView* frameView = static_cast<WebLocalFrameImpl*>(localFrame)->frameVie
w(); |
| 1637 EXPECT_EQ(nullptr, frameView->horizontalScrollbar()); |
| 1638 EXPECT_EQ(nullptr, frameView->verticalScrollbar()); |
| 1639 |
| 1640 view->close(); |
| 1641 } |
| 1642 |
| 1643 |
1579 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations
) | 1644 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations
) |
1580 { | 1645 { |
1581 registerMockedHttpURLLoad("200-by-300.html"); | 1646 registerMockedHttpURLLoad("200-by-300.html"); |
1582 registerMockedHttpURLLoad("large-div.html"); | 1647 registerMockedHttpURLLoad("large-div.html"); |
1583 | 1648 |
1584 FixedLayoutTestWebViewClient client; | 1649 FixedLayoutTestWebViewClient client; |
1585 client.m_screenInfo.deviceScaleFactor = 1; | 1650 client.m_screenInfo.deviceScaleFactor = 1; |
1586 int viewportWidth = 640; | 1651 int viewportWidth = 640; |
1587 int viewportHeight = 480; | 1652 int viewportHeight = 480; |
1588 | 1653 |
(...skipping 4273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5862 , m_willSendRequestCallCount(0) | 5927 , m_willSendRequestCallCount(0) |
5863 , m_childFrameCreationCount(0) | 5928 , m_childFrameCreationCount(0) |
5864 { | 5929 { |
5865 } | 5930 } |
5866 | 5931 |
5867 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child
Client = client; } | 5932 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child
Client = client; } |
5868 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; } | 5933 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; } |
5869 int willSendRequestCallCount() const { return m_willSendRequestCallCount; } | 5934 int willSendRequestCallCount() const { return m_willSendRequestCallCount; } |
5870 int childFrameCreationCount() const { return m_childFrameCreationCount; } | 5935 int childFrameCreationCount() const { return m_childFrameCreationCount; } |
5871 | 5936 |
5872 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s
cope, const WebString&, WebSandboxFlags) | 5937 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s
cope, const WebString&, WebSandboxFlags, const WebFrameOwnerProperties& frameOwn
erProperties) |
5873 { | 5938 { |
5874 ASSERT(m_childClient); | 5939 ASSERT(m_childClient); |
5875 m_childFrameCreationCount++; | 5940 m_childFrameCreationCount++; |
5876 WebFrame* frame = WebLocalFrame::create(scope, m_childClient); | 5941 WebFrame* frame = WebLocalFrame::create(scope, m_childClient); |
5877 parent->appendChild(frame); | 5942 parent->appendChild(frame); |
5878 return frame; | 5943 return frame; |
5879 } | 5944 } |
5880 | 5945 |
5881 virtual void didStartLoading(bool toDifferentDocument) | 5946 virtual void didStartLoading(bool toDifferentDocument) |
5882 { | 5947 { |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6251 // After commit, there is. | 6316 // After commit, there is. |
6252 HistoryItem* item = mainFrameLoader.currentItem(); | 6317 HistoryItem* item = mainFrameLoader.currentItem(); |
6253 ASSERT_TRUE(item); | 6318 ASSERT_TRUE(item); |
6254 EXPECT_EQ(WTF::String(url.data()), item->urlString()); | 6319 EXPECT_EQ(WTF::String(url.data()), item->urlString()); |
6255 } | 6320 } |
6256 | 6321 |
6257 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { | 6322 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { |
6258 public: | 6323 public: |
6259 FailCreateChildFrame() : m_callCount(0) { } | 6324 FailCreateChildFrame() : m_callCount(0) { } |
6260 | 6325 |
6261 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co
nst WebString& frameName, WebSandboxFlags sandboxFlags) override | 6326 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co
nst WebString& frameName, WebSandboxFlags sandboxFlags, const WebFrameOwnerPrope
rties& frameOwnerProperties) override |
6262 { | 6327 { |
6263 ++m_callCount; | 6328 ++m_callCount; |
6264 return 0; | 6329 return 0; |
6265 } | 6330 } |
6266 | 6331 |
6267 int callCount() const { return m_callCount; } | 6332 int callCount() const { return m_callCount; } |
6268 | 6333 |
6269 private: | 6334 private: |
6270 int m_callCount; | 6335 int m_callCount; |
6271 }; | 6336 }; |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6910 // doesn't leave behind dangling pointers. | 6975 // doesn't leave behind dangling pointers. |
6911 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame) | 6976 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame) |
6912 { | 6977 { |
6913 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t
o | 6978 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t
o |
6914 // write tests with a top-level remote frame. | 6979 // write tests with a top-level remote frame. |
6915 FrameTestHelpers::TestWebViewClient viewClient; | 6980 FrameTestHelpers::TestWebViewClient viewClient; |
6916 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 6981 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
6917 WebView* view = WebView::create(&viewClient); | 6982 WebView* view = WebView::create(&viewClient); |
6918 view->setMainFrame(remoteClient.frame()); | 6983 view->setMainFrame(remoteClient.frame()); |
6919 FrameTestHelpers::TestWebFrameClient childFrameClient; | 6984 FrameTestHelpers::TestWebFrameClient childFrameClient; |
6920 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 6985 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
6921 | 6986 |
6922 // Purposely keep the LocalFrame alive so it's the last thing to be destroye
d. | 6987 // Purposely keep the LocalFrame alive so it's the last thing to be destroye
d. |
6923 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame); | 6988 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame); |
6924 view->close(); | 6989 view->close(); |
6925 childCoreFrame.clear(); | 6990 childCoreFrame.clear(); |
6926 } | 6991 } |
6927 | 6992 |
6928 class WebFrameSwapTest : public WebFrameTest { | 6993 class WebFrameSwapTest : public WebFrameTest { |
6929 protected: | 6994 protected: |
6930 WebFrameSwapTest() | 6995 WebFrameSwapTest() |
(...skipping 14 matching lines...) Expand all Loading... |
6945 FrameTestHelpers::WebViewHelper m_webViewHelper; | 7010 FrameTestHelpers::WebViewHelper m_webViewHelper; |
6946 }; | 7011 }; |
6947 | 7012 |
6948 TEST_F(WebFrameSwapTest, SwapMainFrame) | 7013 TEST_F(WebFrameSwapTest, SwapMainFrame) |
6949 { | 7014 { |
6950 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); | 7015 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); |
6951 mainFrame()->swap(remoteFrame); | 7016 mainFrame()->swap(remoteFrame); |
6952 | 7017 |
6953 FrameTestHelpers::TestWebFrameClient client; | 7018 FrameTestHelpers::TestWebFrameClient client; |
6954 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7019 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
6955 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7020 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
6956 remoteFrame->swap(localFrame); | 7021 remoteFrame->swap(localFrame); |
6957 | 7022 |
6958 // Finally, make sure an embedder triggered load in the local frame swapped | 7023 // Finally, make sure an embedder triggered load in the local frame swapped |
6959 // back in works. | 7024 // back in works. |
6960 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7025 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
6961 std::string content = localFrame->contentAsText(1024).utf8(); | 7026 std::string content = localFrame->contentAsText(1024).utf8(); |
6962 EXPECT_EQ("hello", content); | 7027 EXPECT_EQ("hello", content); |
6963 | 7028 |
6964 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7029 // Manually reset to break WebViewHelper's dependency on the stack allocated |
6965 // TestWebFrameClient. | 7030 // TestWebFrameClient. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7021 } | 7086 } |
7022 | 7087 |
7023 TEST_F(WebFrameSwapTest, SwapFirstChild) | 7088 TEST_F(WebFrameSwapTest, SwapFirstChild) |
7024 { | 7089 { |
7025 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7090 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7026 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7091 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7027 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); | 7092 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); |
7028 | 7093 |
7029 FrameTestHelpers::TestWebFrameClient client; | 7094 FrameTestHelpers::TestWebFrameClient client; |
7030 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7095 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7031 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7096 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7032 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; | 7097 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; |
7033 | 7098 |
7034 // FIXME: This almost certainly fires more load events on the iframe element | 7099 // FIXME: This almost certainly fires more load events on the iframe element |
7035 // than it should. | 7100 // than it should. |
7036 // Finally, make sure an embedder triggered load in the local frame swapped | 7101 // Finally, make sure an embedder triggered load in the local frame swapped |
7037 // back in works. | 7102 // back in works. |
7038 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7103 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7039 std::string content = localFrame->contentAsText(1024).utf8(); | 7104 std::string content = localFrame->contentAsText(1024).utf8(); |
7040 EXPECT_EQ("hello", content); | 7105 EXPECT_EQ("hello", content); |
7041 | 7106 |
(...skipping 18 matching lines...) Expand all Loading... |
7060 } | 7125 } |
7061 | 7126 |
7062 TEST_F(WebFrameSwapTest, SwapMiddleChild) | 7127 TEST_F(WebFrameSwapTest, SwapMiddleChild) |
7063 { | 7128 { |
7064 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7129 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7065 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7130 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7066 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); | 7131 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); |
7067 | 7132 |
7068 FrameTestHelpers::TestWebFrameClient client; | 7133 FrameTestHelpers::TestWebFrameClient client; |
7069 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7134 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7070 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7135 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7071 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); | 7136 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); |
7072 | 7137 |
7073 // FIXME: This almost certainly fires more load events on the iframe element | 7138 // FIXME: This almost certainly fires more load events on the iframe element |
7074 // than it should. | 7139 // than it should. |
7075 // Finally, make sure an embedder triggered load in the local frame swapped | 7140 // Finally, make sure an embedder triggered load in the local frame swapped |
7076 // back in works. | 7141 // back in works. |
7077 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7142 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7078 std::string content = localFrame->contentAsText(1024).utf8(); | 7143 std::string content = localFrame->contentAsText(1024).utf8(); |
7079 EXPECT_EQ("hello", content); | 7144 EXPECT_EQ("hello", content); |
7080 | 7145 |
(...skipping 15 matching lines...) Expand all Loading... |
7096 } | 7161 } |
7097 | 7162 |
7098 TEST_F(WebFrameSwapTest, SwapLastChild) | 7163 TEST_F(WebFrameSwapTest, SwapLastChild) |
7099 { | 7164 { |
7100 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7165 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7101 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7166 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7102 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; | 7167 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; |
7103 | 7168 |
7104 FrameTestHelpers::TestWebFrameClient client; | 7169 FrameTestHelpers::TestWebFrameClient client; |
7105 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7170 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7106 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7171 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7107 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); | 7172 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); |
7108 | 7173 |
7109 // FIXME: This almost certainly fires more load events on the iframe element | 7174 // FIXME: This almost certainly fires more load events on the iframe element |
7110 // than it should. | 7175 // than it should. |
7111 // Finally, make sure an embedder triggered load in the local frame swapped | 7176 // Finally, make sure an embedder triggered load in the local frame swapped |
7112 // back in works. | 7177 // back in works. |
7113 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7178 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7114 std::string content = localFrame->contentAsText(1024).utf8(); | 7179 std::string content = localFrame->contentAsText(1024).utf8(); |
7115 EXPECT_EQ("hello", content); | 7180 EXPECT_EQ("hello", content); |
7116 | 7181 |
(...skipping 24 matching lines...) Expand all Loading... |
7141 | 7206 |
7142 targetFrame = mainFrame()->firstChild()->nextSibling(); | 7207 targetFrame = mainFrame()->firstChild()->nextSibling(); |
7143 EXPECT_TRUE(targetFrame); | 7208 EXPECT_TRUE(targetFrame); |
7144 | 7209 |
7145 // Create child frames in the target frame before testing the swap. | 7210 // Create child frames in the target frame before testing the swap. |
7146 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; | 7211 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; |
7147 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco
peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2); | 7212 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco
peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2); |
7148 | 7213 |
7149 FrameTestHelpers::TestWebFrameClient client; | 7214 FrameTestHelpers::TestWebFrameClient client; |
7150 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7215 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7151 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7216 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7152 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); | 7217 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); |
7153 | 7218 |
7154 // FIXME: This almost certainly fires more load events on the iframe element | 7219 // FIXME: This almost certainly fires more load events on the iframe element |
7155 // than it should. | 7220 // than it should. |
7156 // Finally, make sure an embedder triggered load in the local frame swapped | 7221 // Finally, make sure an embedder triggered load in the local frame swapped |
7157 // back in works. | 7222 // back in works. |
7158 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7223 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7159 std::string content = localFrame->contentAsText(1024).utf8(); | 7224 std::string content = localFrame->contentAsText(1024).utf8(); |
7160 EXPECT_EQ("hello", content); | 7225 EXPECT_EQ("hello", content); |
7161 | 7226 |
(...skipping 23 matching lines...) Expand all Loading... |
7185 "document.querySelector('#frame2').contentWindow;")); | 7250 "document.querySelector('#frame2').contentWindow;")); |
7186 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); | 7251 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); |
7187 // Check that its view is consistent with the world. | 7252 // Check that its view is consistent with the world. |
7188 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( | 7253 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( |
7189 "document.querySelector('#frame2').contentWindow.top;")); | 7254 "document.querySelector('#frame2').contentWindow.top;")); |
7190 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7255 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
7191 | 7256 |
7192 // Now check that remote -> local works too, since it goes through a differe
nt code path. | 7257 // Now check that remote -> local works too, since it goes through a differe
nt code path. |
7193 FrameTestHelpers::TestWebFrameClient client; | 7258 FrameTestHelpers::TestWebFrameClient client; |
7194 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7259 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7195 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7260 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7196 remoteFrame->swap(localFrame); | 7261 remoteFrame->swap(localFrame); |
7197 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( | 7262 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( |
7198 "document.querySelector('#frame2').contentWindow;")); | 7263 "document.querySelector('#frame2').contentWindow;")); |
7199 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); | 7264 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); |
7200 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( | 7265 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( |
7201 "document.querySelector('#frame2').contentWindow.top;")); | 7266 "document.querySelector('#frame2').contentWindow.top;")); |
7202 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7267 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
7203 | 7268 |
7204 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7269 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7205 // TestWebFrameClient. | 7270 // TestWebFrameClient. |
(...skipping 13 matching lines...) Expand all Loading... |
7219 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7284 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7220 WebRemoteFrame* remoteFrame = remoteClient.frame(); | 7285 WebRemoteFrame* remoteFrame = remoteClient.frame(); |
7221 mainFrame()->lastChild()->swap(remoteFrame); | 7286 mainFrame()->lastChild()->swap(remoteFrame); |
7222 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7287 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7223 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); | 7288 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); |
7224 EXPECT_TRUE(remoteWindowTop->IsObject()); | 7289 EXPECT_TRUE(remoteWindowTop->IsObject()); |
7225 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7290 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
7226 | 7291 |
7227 FrameTestHelpers::TestWebFrameClient client; | 7292 FrameTestHelpers::TestWebFrameClient client; |
7228 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7293 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7229 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7294 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7230 remoteFrame->swap(localFrame); | 7295 remoteFrame->swap(localFrame); |
7231 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); | 7296 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); |
7232 EXPECT_TRUE(localWindowTop->IsObject()); | 7297 EXPECT_TRUE(localWindowTop->IsObject()); |
7233 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7298 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
7234 | 7299 |
7235 reset(); | 7300 reset(); |
7236 } | 7301 } |
7237 | 7302 |
7238 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) | 7303 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) |
7239 { | 7304 { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7290 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable) | 7355 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable) |
7291 { | 7356 { |
7292 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 7357 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
7293 | 7358 |
7294 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7359 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7295 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); | 7360 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); |
7296 mainFrame()->swap(remoteParentFrame); | 7361 mainFrame()->swap(remoteParentFrame); |
7297 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7362 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7298 | 7363 |
7299 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7364 FrameTestHelpers::TestWebFrameClient childFrameClient; |
7300 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); | 7365 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO
wnerProperties()); |
7301 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); | 7366 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); |
7302 | 7367 |
7303 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr
iptSource("window")); | 7368 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr
iptSource("window")); |
7304 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur
nValue(WebScriptSource("parent.frames[0]")); | 7369 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur
nValue(WebScriptSource("parent.frames[0]")); |
7305 EXPECT_TRUE(childOfRemoteParent->IsObject()); | 7370 EXPECT_TRUE(childOfRemoteParent->IsObject()); |
7306 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent)); | 7371 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent)); |
7307 | 7372 |
7308 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue(
WebScriptSource("parent.frames.length")); | 7373 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue(
WebScriptSource("parent.frames.length")); |
7309 ASSERT_TRUE(windowLength->IsInt32()); | 7374 ASSERT_TRUE(windowLength->IsInt32()); |
7310 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value()); | 7375 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value()); |
7311 | 7376 |
7312 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. | 7377 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. |
7313 reset(); | 7378 reset(); |
7314 } | 7379 } |
7315 | 7380 |
7316 // Check that frames with a remote parent don't crash while accessing window.fra
meElement. | 7381 // Check that frames with a remote parent don't crash while accessing window.fra
meElement. |
7317 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent) | 7382 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent) |
7318 { | 7383 { |
7319 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 7384 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
7320 | 7385 |
7321 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7386 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7322 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); | 7387 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); |
7323 mainFrame()->swap(remoteParentFrame); | 7388 mainFrame()->swap(remoteParentFrame); |
7324 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7389 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7325 | 7390 |
7326 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7391 FrameTestHelpers::TestWebFrameClient childFrameClient; |
7327 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); | 7392 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO
wnerProperties()); |
7328 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); | 7393 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); |
7329 | 7394 |
7330 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue(
WebScriptSource("window.frameElement")); | 7395 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue(
WebScriptSource("window.frameElement")); |
7331 // frameElement should be null if cross-origin. | 7396 // frameElement should be null if cross-origin. |
7332 ASSERT_FALSE(frameElement.IsEmpty()); | 7397 ASSERT_FALSE(frameElement.IsEmpty()); |
7333 EXPECT_TRUE(frameElement->IsNull()); | 7398 EXPECT_TRUE(frameElement->IsNull()); |
7334 | 7399 |
7335 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. | 7400 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. |
7336 reset(); | 7401 reset(); |
7337 } | 7402 } |
(...skipping 27 matching lines...) Expand all Loading... |
7365 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7430 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7366 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7431 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7367 WebFrame* targetFrame = mainFrame()->firstChild(); | 7432 WebFrame* targetFrame = mainFrame()->firstChild(); |
7368 ASSERT_TRUE(targetFrame); | 7433 ASSERT_TRUE(targetFrame); |
7369 targetFrame->swap(remoteFrame); | 7434 targetFrame->swap(remoteFrame); |
7370 ASSERT_TRUE(mainFrame()->firstChild()); | 7435 ASSERT_TRUE(mainFrame()->firstChild()); |
7371 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7436 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
7372 | 7437 |
7373 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7438 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
7374 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7439 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7375 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7440 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7376 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7441 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7377 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); | 7442 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); |
7378 | 7443 |
7379 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7444 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7380 // TestWebFrameClient. | 7445 // TestWebFrameClient. |
7381 reset(); | 7446 reset(); |
7382 remoteFrame->close(); | 7447 remoteFrame->close(); |
7383 } | 7448 } |
7384 | 7449 |
7385 // The commit type should be Standard if we are swapping a RemoteFrame to a | 7450 // The commit type should be Standard if we are swapping a RemoteFrame to a |
7386 // LocalFrame after commits have already happened in the frame. The browser | 7451 // LocalFrame after commits have already happened in the frame. The browser |
7387 // process will inform us via setCommittedFirstRealLoad. | 7452 // process will inform us via setCommittedFirstRealLoad. |
7388 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) | 7453 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) |
7389 { | 7454 { |
7390 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7455 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7391 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7456 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7392 WebFrame* targetFrame = mainFrame()->firstChild(); | 7457 WebFrame* targetFrame = mainFrame()->firstChild(); |
7393 ASSERT_TRUE(targetFrame); | 7458 ASSERT_TRUE(targetFrame); |
7394 targetFrame->swap(remoteFrame); | 7459 targetFrame->swap(remoteFrame); |
7395 ASSERT_TRUE(mainFrame()->firstChild()); | 7460 ASSERT_TRUE(mainFrame()->firstChild()); |
7396 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7461 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
7397 | 7462 |
7398 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7463 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
7399 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7464 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7400 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7465 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7401 localFrame->setCommittedFirstRealLoad(); | 7466 localFrame->setCommittedFirstRealLoad(); |
7402 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7467 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7403 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); | 7468 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); |
7404 | 7469 |
7405 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7470 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7406 // TestWebFrameClient. | 7471 // TestWebFrameClient. |
7407 reset(); | 7472 reset(); |
7408 remoteFrame->close(); | 7473 remoteFrame->close(); |
7409 } | 7474 } |
7410 | 7475 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7528 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; | 7593 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; |
7529 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); | 7594 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); |
7530 popupView->setMainFrame(popupRemoteFrame); | 7595 popupView->setMainFrame(popupRemoteFrame); |
7531 popupRemoteFrame->setOpener(mainFrame); | 7596 popupRemoteFrame->setOpener(mainFrame); |
7532 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); | 7597 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); |
7533 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s
ecurityOrigin())); | 7598 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s
ecurityOrigin())); |
7534 | 7599 |
7535 // Do a remote-to-local swap in the popup. | 7600 // Do a remote-to-local swap in the popup. |
7536 FrameTestHelpers::TestWebFrameClient popupLocalClient; | 7601 FrameTestHelpers::TestWebFrameClient popupLocalClient; |
7537 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc
ument, &popupLocalClient); | 7602 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc
ument, &popupLocalClient); |
7538 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None); | 7603 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None, WebFrameOwnerProperties()); |
7539 popupRemoteFrame->swap(popupLocalFrame); | 7604 popupRemoteFrame->swap(popupLocalFrame); |
7540 | 7605 |
7541 // The initial document created during the remote-to-local swap should have | 7606 // The initial document created during the remote-to-local swap should have |
7542 // inherited its opener's SecurityOrigin. | 7607 // inherited its opener's SecurityOrigin. |
7543 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); | 7608 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); |
7544 | 7609 |
7545 popupView->close(); | 7610 popupView->close(); |
7546 } | 7611 } |
7547 | 7612 |
7548 TEST_F(WebFrameTest, SwapWithOpenerCycle) | 7613 TEST_F(WebFrameTest, SwapWithOpenerCycle) |
7549 { | 7614 { |
7550 // First, create a remote main frame with itself as the opener. | 7615 // First, create a remote main frame with itself as the opener. |
7551 FrameTestHelpers::TestWebViewClient viewClient; | 7616 FrameTestHelpers::TestWebViewClient viewClient; |
7552 WebView* view = WebView::create(&viewClient); | 7617 WebView* view = WebView::create(&viewClient); |
7553 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7618 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7554 WebRemoteFrame* remoteFrame = remoteClient.frame(); | 7619 WebRemoteFrame* remoteFrame = remoteClient.frame(); |
7555 view->setMainFrame(remoteFrame); | 7620 view->setMainFrame(remoteFrame); |
7556 remoteFrame->setOpener(remoteFrame); | 7621 remoteFrame->setOpener(remoteFrame); |
7557 | 7622 |
7558 // Now swap in a local frame. It shouldn't crash. | 7623 // Now swap in a local frame. It shouldn't crash. |
7559 FrameTestHelpers::TestWebFrameClient localClient; | 7624 FrameTestHelpers::TestWebFrameClient localClient; |
7560 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &localClient); | 7625 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &localClient); |
7561 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7626 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7562 remoteFrame->swap(localFrame); | 7627 remoteFrame->swap(localFrame); |
7563 | 7628 |
7564 // And the opener cycle should still be preserved. | 7629 // And the opener cycle should still be preserved. |
7565 EXPECT_EQ(localFrame, localFrame->opener()); | 7630 EXPECT_EQ(localFrame, localFrame->opener()); |
7566 | 7631 |
7567 view->close(); | 7632 view->close(); |
7568 } | 7633 } |
7569 | 7634 |
7570 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { | 7635 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { |
7571 public: | 7636 public: |
(...skipping 16 matching lines...) Expand all Loading... |
7588 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType) | 7653 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType) |
7589 { | 7654 { |
7590 FrameTestHelpers::TestWebViewClient viewClient; | 7655 FrameTestHelpers::TestWebViewClient viewClient; |
7591 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7656 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7592 WebView* view = WebView::create(&viewClient); | 7657 WebView* view = WebView::create(&viewClient); |
7593 view->setMainFrame(remoteClient.frame()); | 7658 view->setMainFrame(remoteClient.frame()); |
7594 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica
tedOrigin(SecurityOrigin::create(toKURL(m_baseURL))); | 7659 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica
tedOrigin(SecurityOrigin::create(toKURL(m_baseURL))); |
7595 | 7660 |
7596 // If an iframe has a remote main frame, ensure the inital commit is correct
ly identified as WebInitialCommitInChildFrame. | 7661 // If an iframe has a remote main frame, ensure the inital commit is correct
ly identified as WebInitialCommitInChildFrame. |
7597 CommitTypeWebFrameClient childFrameClient; | 7662 CommitTypeWebFrameClient childFrameClient; |
7598 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7663 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
7599 registerMockedHttpURLLoad("foo.html"); | 7664 registerMockedHttpURLLoad("foo.html"); |
7600 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html"); | 7665 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html"); |
7601 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType()
); | 7666 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType()
); |
7602 view->close(); | 7667 view->close(); |
7603 } | 7668 } |
7604 | 7669 |
7605 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient
{ | 7670 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient
{ |
7606 public: | 7671 public: |
7607 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { } | 7672 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { } |
7608 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled
) override { m_didHandleGestureEvent = true; } | 7673 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled
) override { m_didHandleGestureEvent = true; } |
7609 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; } | 7674 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; } |
7610 | 7675 |
7611 private: | 7676 private: |
7612 bool m_didHandleGestureEvent; | 7677 bool m_didHandleGestureEvent; |
7613 }; | 7678 }; |
7614 | 7679 |
7615 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest) | 7680 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest) |
7616 { | 7681 { |
7617 FrameTestHelpers::TestWebViewClient viewClient; | 7682 FrameTestHelpers::TestWebViewClient viewClient; |
7618 WebView* view = WebView::create(&viewClient); | 7683 WebView* view = WebView::create(&viewClient); |
7619 | 7684 |
7620 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7685 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7621 view->setMainFrame(remoteClient.frame()); | 7686 view->setMainFrame(remoteClient.frame()); |
7622 | 7687 |
7623 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7688 FrameTestHelpers::TestWebFrameClient childFrameClient; |
7624 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7689 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
7625 | 7690 |
7626 GestureEventTestWebViewClient childViewClient; | 7691 GestureEventTestWebViewClient childViewClient; |
7627 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame
); | 7692 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame
); |
7628 | 7693 |
7629 view->resize(WebSize(1000, 1000)); | 7694 view->resize(WebSize(1000, 1000)); |
7630 view->layout(); | 7695 view->layout(); |
7631 | 7696 |
7632 widget->handleInputEvent(fatTap(20, 20)); | 7697 widget->handleInputEvent(fatTap(20, 20)); |
7633 EXPECT_TRUE(childViewClient.didHandleGestureEvent()); | 7698 EXPECT_TRUE(childViewClient.didHandleGestureEvent()); |
7634 | 7699 |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7834 | 7899 |
7835 | 7900 |
7836 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling) | 7901 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling) |
7837 { | 7902 { |
7838 FrameTestHelpers::TestWebViewClient viewClient; | 7903 FrameTestHelpers::TestWebViewClient viewClient; |
7839 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7904 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7840 WebView* view = WebView::create(&viewClient); | 7905 WebView* view = WebView::create(&viewClient); |
7841 view->setMainFrame(remoteClient.frame()); | 7906 view->setMainFrame(remoteClient.frame()); |
7842 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame(); | 7907 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame(); |
7843 | 7908 |
7844 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, nullptr); | 7909 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties()
); |
7845 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, secondFrame); | 7910 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerProperti
es()); |
7846 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, secondFrame); | 7911 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerPropertie
s()); |
7847 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, nullptr); | 7912 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties())
; |
7848 | 7913 |
7849 EXPECT_EQ(firstFrame, parent->firstChild()); | 7914 EXPECT_EQ(firstFrame, parent->firstChild()); |
7850 EXPECT_EQ(nullptr, firstFrame->previousSibling()); | 7915 EXPECT_EQ(nullptr, firstFrame->previousSibling()); |
7851 EXPECT_EQ(secondFrame, firstFrame->nextSibling()); | 7916 EXPECT_EQ(secondFrame, firstFrame->nextSibling()); |
7852 | 7917 |
7853 EXPECT_EQ(firstFrame, secondFrame->previousSibling()); | 7918 EXPECT_EQ(firstFrame, secondFrame->previousSibling()); |
7854 EXPECT_EQ(thirdFrame, secondFrame->nextSibling()); | 7919 EXPECT_EQ(thirdFrame, secondFrame->nextSibling()); |
7855 | 7920 |
7856 EXPECT_EQ(secondFrame, thirdFrame->previousSibling()); | 7921 EXPECT_EQ(secondFrame, thirdFrame->previousSibling()); |
7857 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling()); | 7922 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling()); |
(...skipping 14 matching lines...) Expand all Loading... |
7872 { | 7937 { |
7873 FrameTestHelpers::TestWebViewClient viewClient; | 7938 FrameTestHelpers::TestWebViewClient viewClient; |
7874 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7939 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7875 WebView* view = WebView::create(&viewClient); | 7940 WebView* view = WebView::create(&viewClient); |
7876 view->settings()->setJavaScriptEnabled(true); | 7941 view->settings()->setJavaScriptEnabled(true); |
7877 view->setMainFrame(remoteClient.frame()); | 7942 view->setMainFrame(remoteClient.frame()); |
7878 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); | 7943 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
7879 root->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7944 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7880 | 7945 |
7881 FrameTestHelpers::TestWebFrameClient localFrameClient; | 7946 FrameTestHelpers::TestWebFrameClient localFrameClient; |
7882 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr); | 7947 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, WebFrameOwnerPropertie
s()); |
7883 | 7948 |
7884 // Finally, make sure an embedder triggered load in the local frame swapped | 7949 // Finally, make sure an embedder triggered load in the local frame swapped |
7885 // back in works. | 7950 // back in works. |
7886 registerMockedHttpURLLoad("send_beacon.html"); | 7951 registerMockedHttpURLLoad("send_beacon.html"); |
7887 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon() | 7952 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon() |
7888 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html"); | 7953 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html"); |
7889 | 7954 |
7890 view->close(); | 7955 view->close(); |
7891 } | 7956 } |
7892 | 7957 |
7893 // See https://crbug.com/525285. | 7958 // See https://crbug.com/525285. |
7894 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra
me) | 7959 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra
me) |
7895 { | 7960 { |
7896 FrameTestHelpers::TestWebViewClient viewClient; | 7961 FrameTestHelpers::TestWebViewClient viewClient; |
7897 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7962 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7898 WebView* view = WebView::create(&viewClient); | 7963 WebView* view = WebView::create(&viewClient); |
7899 view->setMainFrame(remoteClient.frame()); | 7964 view->setMainFrame(remoteClient.frame()); |
7900 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); | 7965 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); |
7901 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7966 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7902 | 7967 |
7903 FrameTestHelpers::TestWebFrameClient localFrameClient; | 7968 FrameTestHelpers::TestWebFrameClient localFrameClient; |
7904 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags
::None, &localFrameClient, nullptr); | 7969 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags
::None, &localFrameClient, nullptr, WebFrameOwnerProperties()); |
7905 | 7970 |
7906 // Do a remote-to-local swap of the top frame. | 7971 // Do a remote-to-local swap of the top frame. |
7907 FrameTestHelpers::TestWebFrameClient localClient; | 7972 FrameTestHelpers::TestWebFrameClient localClient; |
7908 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document,
&localClient); | 7973 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document,
&localClient); |
7909 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N
one); | 7974 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N
one, WebFrameOwnerProperties()); |
7910 remoteRoot->swap(localRoot); | 7975 remoteRoot->swap(localRoot); |
7911 | 7976 |
7912 // Load a page with a child frame in the new root to make sure this doesn't | 7977 // Load a page with a child frame in the new root to make sure this doesn't |
7913 // crash when the child frame invokes setCoreFrame. | 7978 // crash when the child frame invokes setCoreFrame. |
7914 registerMockedHttpURLLoad("single_iframe.html"); | 7979 registerMockedHttpURLLoad("single_iframe.html"); |
7915 registerMockedHttpURLLoad("visible_iframe.html"); | 7980 registerMockedHttpURLLoad("visible_iframe.html"); |
7916 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); | 7981 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); |
7917 | 7982 |
7918 view->close(); | 7983 view->close(); |
7919 } | 7984 } |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8226 EXPECT_TRUE(resource); | 8291 EXPECT_TRUE(resource); |
8227 EXPECT_NE(0, resource->loadFinishTime()); | 8292 EXPECT_NE(0, resource->loadFinishTime()); |
8228 | 8293 |
8229 DocumentLoader* loader = document->loader(); | 8294 DocumentLoader* loader = document->loader(); |
8230 | 8295 |
8231 EXPECT_TRUE(loader); | 8296 EXPECT_TRUE(loader); |
8232 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime()); | 8297 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime()); |
8233 } | 8298 } |
8234 | 8299 |
8235 } // namespace blink | 8300 } // namespace blink |
OLD | NEW |