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/LayoutView.h" | 68 #include "core/layout/LayoutView.h" |
68 #include "core/layout/compositing/PaintLayerCompositor.h" | 69 #include "core/layout/compositing/PaintLayerCompositor.h" |
69 #include "core/loader/DocumentLoader.h" | 70 #include "core/loader/DocumentLoader.h" |
70 #include "core/loader/DocumentThreadableLoader.h" | 71 #include "core/loader/DocumentThreadableLoader.h" |
(...skipping 1528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1599 | 1600 |
1600 ASSERT_NE(nullptr, element); | 1601 ASSERT_NE(nullptr, element); |
1601 EXPECT_EQ(String("oldValue"), element->innerText()); | 1602 EXPECT_EQ(String("oldValue"), element->innerText()); |
1602 | 1603 |
1603 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint,
hitPoint, IntSize(0, 0), 0, PlatformEvent::NoModifiers, PlatformGestureSourceTo
uchscreen); | 1604 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint,
hitPoint, IntSize(0, 0), 0, PlatformEvent::NoModifiers, PlatformGestureSourceTo
uchscreen); |
1604 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle
GestureEvent(gestureEvent); | 1605 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle
GestureEvent(gestureEvent); |
1605 // when pressed, the button changes its own text to "updatedValue" | 1606 // when pressed, the button changes its own text to "updatedValue" |
1606 EXPECT_EQ(String("updatedValue"), element->innerText()); | 1607 EXPECT_EQ(String("updatedValue"), element->innerText()); |
1607 } | 1608 } |
1608 | 1609 |
| 1610 TEST_F(WebFrameTest, FrameOwnerPropertiesMargin) |
| 1611 { |
| 1612 FrameTestHelpers::TestWebViewClient viewClient; |
| 1613 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 1614 WebView* view = WebView::create(&viewClient); |
| 1615 view->settings()->setJavaScriptEnabled(true); |
| 1616 view->setMainFrame(remoteClient.frame()); |
| 1617 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
| 1618 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 1619 |
| 1620 WebFrameOwnerProperties properties; |
| 1621 properties.marginWidth = 11; |
| 1622 properties.marginHeight = 22; |
| 1623 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 1624 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties); |
| 1625 |
| 1626 registerMockedHttpURLLoad("frame_owner_properties.html"); |
| 1627 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.
html"); |
| 1628 |
| 1629 // Check if the LocalFrame has seen the marginwidth and marginheight |
| 1630 // properties. |
| 1631 Document* childDocument = toWebLocalFrameImpl(localFrame)->frame()->document
(); |
| 1632 EXPECT_EQ(11, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNa
mes::marginwidthAttr)); |
| 1633 EXPECT_EQ(22, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNa
mes::marginheightAttr)); |
| 1634 |
| 1635 FrameView* frameView = toWebLocalFrameImpl(localFrame)->frameView(); |
| 1636 // Expect scrollbars to be enabled by default. |
| 1637 EXPECT_NE(nullptr, frameView->horizontalScrollbar()); |
| 1638 EXPECT_NE(nullptr, frameView->verticalScrollbar()); |
| 1639 |
| 1640 view->close(); |
| 1641 } |
| 1642 |
| 1643 TEST_F(WebFrameTest, FrameOwnerPropertiesScrolling) |
| 1644 { |
| 1645 FrameTestHelpers::TestWebViewClient viewClient; |
| 1646 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 1647 WebView* view = WebView::create(&viewClient); |
| 1648 view->settings()->setJavaScriptEnabled(true); |
| 1649 view->setMainFrame(remoteClient.frame()); |
| 1650 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
| 1651 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
| 1652 |
| 1653 WebFrameOwnerProperties properties; |
| 1654 // Turn off scrolling in the subframe. |
| 1655 properties.scrollingMode = WebFrameOwnerProperties::ScrollingMode::AlwaysOff
; |
| 1656 FrameTestHelpers::TestWebFrameClient localFrameClient; |
| 1657 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties); |
| 1658 |
| 1659 registerMockedHttpURLLoad("frame_owner_properties.html"); |
| 1660 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.
html"); |
| 1661 |
| 1662 Document* childDocument = toWebLocalFrameImpl(localFrame)->frame()->document
(); |
| 1663 EXPECT_EQ(0, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNam
es::marginwidthAttr)); |
| 1664 EXPECT_EQ(0, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNam
es::marginheightAttr)); |
| 1665 |
| 1666 FrameView* frameView = static_cast<WebLocalFrameImpl*>(localFrame)->frameVie
w(); |
| 1667 EXPECT_EQ(nullptr, frameView->horizontalScrollbar()); |
| 1668 EXPECT_EQ(nullptr, frameView->verticalScrollbar()); |
| 1669 |
| 1670 view->close(); |
| 1671 } |
| 1672 |
| 1673 |
1609 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations
) | 1674 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations
) |
1610 { | 1675 { |
1611 UseMockScrollbarSettings mockScrollbarSettings; | 1676 UseMockScrollbarSettings mockScrollbarSettings; |
1612 registerMockedHttpURLLoad("200-by-300.html"); | 1677 registerMockedHttpURLLoad("200-by-300.html"); |
1613 registerMockedHttpURLLoad("large-div.html"); | 1678 registerMockedHttpURLLoad("large-div.html"); |
1614 | 1679 |
1615 FixedLayoutTestWebViewClient client; | 1680 FixedLayoutTestWebViewClient client; |
1616 client.m_screenInfo.deviceScaleFactor = 1; | 1681 client.m_screenInfo.deviceScaleFactor = 1; |
1617 int viewportWidth = 640; | 1682 int viewportWidth = 640; |
1618 int viewportHeight = 480; | 1683 int viewportHeight = 480; |
(...skipping 4311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5930 , m_willSendRequestCallCount(0) | 5995 , m_willSendRequestCallCount(0) |
5931 , m_childFrameCreationCount(0) | 5996 , m_childFrameCreationCount(0) |
5932 { | 5997 { |
5933 } | 5998 } |
5934 | 5999 |
5935 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child
Client = client; } | 6000 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child
Client = client; } |
5936 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; } | 6001 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; } |
5937 int willSendRequestCallCount() const { return m_willSendRequestCallCount; } | 6002 int willSendRequestCallCount() const { return m_willSendRequestCallCount; } |
5938 int childFrameCreationCount() const { return m_childFrameCreationCount; } | 6003 int childFrameCreationCount() const { return m_childFrameCreationCount; } |
5939 | 6004 |
5940 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s
cope, const WebString&, WebSandboxFlags) | 6005 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s
cope, const WebString&, WebSandboxFlags, const WebFrameOwnerProperties& frameOwn
erProperties) |
5941 { | 6006 { |
5942 ASSERT(m_childClient); | 6007 ASSERT(m_childClient); |
5943 m_childFrameCreationCount++; | 6008 m_childFrameCreationCount++; |
5944 WebFrame* frame = WebLocalFrame::create(scope, m_childClient); | 6009 WebFrame* frame = WebLocalFrame::create(scope, m_childClient); |
5945 parent->appendChild(frame); | 6010 parent->appendChild(frame); |
5946 return frame; | 6011 return frame; |
5947 } | 6012 } |
5948 | 6013 |
5949 virtual void didStartLoading(bool toDifferentDocument) | 6014 virtual void didStartLoading(bool toDifferentDocument) |
5950 { | 6015 { |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6319 // After commit, there is. | 6384 // After commit, there is. |
6320 HistoryItem* item = mainFrameLoader.currentItem(); | 6385 HistoryItem* item = mainFrameLoader.currentItem(); |
6321 ASSERT_TRUE(item); | 6386 ASSERT_TRUE(item); |
6322 EXPECT_EQ(WTF::String(url.data()), item->urlString()); | 6387 EXPECT_EQ(WTF::String(url.data()), item->urlString()); |
6323 } | 6388 } |
6324 | 6389 |
6325 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { | 6390 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { |
6326 public: | 6391 public: |
6327 FailCreateChildFrame() : m_callCount(0) { } | 6392 FailCreateChildFrame() : m_callCount(0) { } |
6328 | 6393 |
6329 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co
nst WebString& frameName, WebSandboxFlags sandboxFlags) override | 6394 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co
nst WebString& frameName, WebSandboxFlags sandboxFlags, const WebFrameOwnerPrope
rties& frameOwnerProperties) override |
6330 { | 6395 { |
6331 ++m_callCount; | 6396 ++m_callCount; |
6332 return 0; | 6397 return 0; |
6333 } | 6398 } |
6334 | 6399 |
6335 int callCount() const { return m_callCount; } | 6400 int callCount() const { return m_callCount; } |
6336 | 6401 |
6337 private: | 6402 private: |
6338 int m_callCount; | 6403 int m_callCount; |
6339 }; | 6404 }; |
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7017 // doesn't leave behind dangling pointers. | 7082 // doesn't leave behind dangling pointers. |
7018 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame) | 7083 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame) |
7019 { | 7084 { |
7020 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t
o | 7085 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t
o |
7021 // write tests with a top-level remote frame. | 7086 // write tests with a top-level remote frame. |
7022 FrameTestHelpers::TestWebViewClient viewClient; | 7087 FrameTestHelpers::TestWebViewClient viewClient; |
7023 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7088 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7024 WebView* view = WebView::create(&viewClient); | 7089 WebView* view = WebView::create(&viewClient); |
7025 view->setMainFrame(remoteClient.frame()); | 7090 view->setMainFrame(remoteClient.frame()); |
7026 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7091 FrameTestHelpers::TestWebFrameClient childFrameClient; |
7027 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7092 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
7028 | 7093 |
7029 // Purposely keep the LocalFrame alive so it's the last thing to be destroye
d. | 7094 // Purposely keep the LocalFrame alive so it's the last thing to be destroye
d. |
7030 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame); | 7095 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame); |
7031 view->close(); | 7096 view->close(); |
7032 childCoreFrame.clear(); | 7097 childCoreFrame.clear(); |
7033 } | 7098 } |
7034 | 7099 |
7035 class WebFrameSwapTest : public WebFrameTest { | 7100 class WebFrameSwapTest : public WebFrameTest { |
7036 protected: | 7101 protected: |
7037 WebFrameSwapTest() | 7102 WebFrameSwapTest() |
(...skipping 14 matching lines...) Expand all Loading... |
7052 FrameTestHelpers::WebViewHelper m_webViewHelper; | 7117 FrameTestHelpers::WebViewHelper m_webViewHelper; |
7053 }; | 7118 }; |
7054 | 7119 |
7055 TEST_F(WebFrameSwapTest, SwapMainFrame) | 7120 TEST_F(WebFrameSwapTest, SwapMainFrame) |
7056 { | 7121 { |
7057 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); | 7122 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, nullptr); |
7058 mainFrame()->swap(remoteFrame); | 7123 mainFrame()->swap(remoteFrame); |
7059 | 7124 |
7060 FrameTestHelpers::TestWebFrameClient client; | 7125 FrameTestHelpers::TestWebFrameClient client; |
7061 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7126 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7062 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7127 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7063 remoteFrame->swap(localFrame); | 7128 remoteFrame->swap(localFrame); |
7064 | 7129 |
7065 // Finally, make sure an embedder triggered load in the local frame swapped | 7130 // Finally, make sure an embedder triggered load in the local frame swapped |
7066 // back in works. | 7131 // back in works. |
7067 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7132 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7068 std::string content = localFrame->contentAsText(1024).utf8(); | 7133 std::string content = localFrame->contentAsText(1024).utf8(); |
7069 EXPECT_EQ("hello", content); | 7134 EXPECT_EQ("hello", content); |
7070 | 7135 |
7071 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7136 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7072 // TestWebFrameClient. | 7137 // TestWebFrameClient. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7128 } | 7193 } |
7129 | 7194 |
7130 TEST_F(WebFrameSwapTest, SwapFirstChild) | 7195 TEST_F(WebFrameSwapTest, SwapFirstChild) |
7131 { | 7196 { |
7132 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7197 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7133 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7198 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7134 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); | 7199 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame
); |
7135 | 7200 |
7136 FrameTestHelpers::TestWebFrameClient client; | 7201 FrameTestHelpers::TestWebFrameClient client; |
7137 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7202 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7138 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7203 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7139 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; | 7204 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame)
; |
7140 | 7205 |
7141 // FIXME: This almost certainly fires more load events on the iframe element | 7206 // FIXME: This almost certainly fires more load events on the iframe element |
7142 // than it should. | 7207 // than it should. |
7143 // Finally, make sure an embedder triggered load in the local frame swapped | 7208 // Finally, make sure an embedder triggered load in the local frame swapped |
7144 // back in works. | 7209 // back in works. |
7145 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7210 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7146 std::string content = localFrame->contentAsText(1024).utf8(); | 7211 std::string content = localFrame->contentAsText(1024).utf8(); |
7147 EXPECT_EQ("hello", content); | 7212 EXPECT_EQ("hello", content); |
7148 | 7213 |
(...skipping 18 matching lines...) Expand all Loading... |
7167 } | 7232 } |
7168 | 7233 |
7169 TEST_F(WebFrameSwapTest, SwapMiddleChild) | 7234 TEST_F(WebFrameSwapTest, SwapMiddleChild) |
7170 { | 7235 { |
7171 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7236 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7172 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7237 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7173 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); | 7238 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram
e); |
7174 | 7239 |
7175 FrameTestHelpers::TestWebFrameClient client; | 7240 FrameTestHelpers::TestWebFrameClient client; |
7176 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7241 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7177 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7242 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7178 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); | 7243 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame
); |
7179 | 7244 |
7180 // FIXME: This almost certainly fires more load events on the iframe element | 7245 // FIXME: This almost certainly fires more load events on the iframe element |
7181 // than it should. | 7246 // than it should. |
7182 // Finally, make sure an embedder triggered load in the local frame swapped | 7247 // Finally, make sure an embedder triggered load in the local frame swapped |
7183 // back in works. | 7248 // back in works. |
7184 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7249 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7185 std::string content = localFrame->contentAsText(1024).utf8(); | 7250 std::string content = localFrame->contentAsText(1024).utf8(); |
7186 EXPECT_EQ("hello", content); | 7251 EXPECT_EQ("hello", content); |
7187 | 7252 |
(...skipping 15 matching lines...) Expand all Loading... |
7203 } | 7268 } |
7204 | 7269 |
7205 TEST_F(WebFrameSwapTest, SwapLastChild) | 7270 TEST_F(WebFrameSwapTest, SwapLastChild) |
7206 { | 7271 { |
7207 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7272 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7208 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7273 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7209 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; | 7274 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame)
; |
7210 | 7275 |
7211 FrameTestHelpers::TestWebFrameClient client; | 7276 FrameTestHelpers::TestWebFrameClient client; |
7212 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7277 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7213 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7278 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7214 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); | 7279 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); |
7215 | 7280 |
7216 // FIXME: This almost certainly fires more load events on the iframe element | 7281 // FIXME: This almost certainly fires more load events on the iframe element |
7217 // than it should. | 7282 // than it should. |
7218 // Finally, make sure an embedder triggered load in the local frame swapped | 7283 // Finally, make sure an embedder triggered load in the local frame swapped |
7219 // back in works. | 7284 // back in works. |
7220 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7285 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7221 std::string content = localFrame->contentAsText(1024).utf8(); | 7286 std::string content = localFrame->contentAsText(1024).utf8(); |
7222 EXPECT_EQ("hello", content); | 7287 EXPECT_EQ("hello", content); |
7223 | 7288 |
(...skipping 24 matching lines...) Expand all Loading... |
7248 | 7313 |
7249 targetFrame = mainFrame()->firstChild()->nextSibling(); | 7314 targetFrame = mainFrame()->firstChild()->nextSibling(); |
7250 EXPECT_TRUE(targetFrame); | 7315 EXPECT_TRUE(targetFrame); |
7251 | 7316 |
7252 // Create child frames in the target frame before testing the swap. | 7317 // Create child frames in the target frame before testing the swap. |
7253 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; | 7318 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; |
7254 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco
peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2); | 7319 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco
peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2); |
7255 | 7320 |
7256 FrameTestHelpers::TestWebFrameClient client; | 7321 FrameTestHelpers::TestWebFrameClient client; |
7257 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7322 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7258 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7323 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7259 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); | 7324 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); |
7260 | 7325 |
7261 // FIXME: This almost certainly fires more load events on the iframe element | 7326 // FIXME: This almost certainly fires more load events on the iframe element |
7262 // than it should. | 7327 // than it should. |
7263 // Finally, make sure an embedder triggered load in the local frame swapped | 7328 // Finally, make sure an embedder triggered load in the local frame swapped |
7264 // back in works. | 7329 // back in works. |
7265 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7330 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7266 std::string content = localFrame->contentAsText(1024).utf8(); | 7331 std::string content = localFrame->contentAsText(1024).utf8(); |
7267 EXPECT_EQ("hello", content); | 7332 EXPECT_EQ("hello", content); |
7268 | 7333 |
(...skipping 23 matching lines...) Expand all Loading... |
7292 "document.querySelector('#frame2').contentWindow;")); | 7357 "document.querySelector('#frame2').contentWindow;")); |
7293 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); | 7358 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); |
7294 // Check that its view is consistent with the world. | 7359 // Check that its view is consistent with the world. |
7295 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( | 7360 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource( |
7296 "document.querySelector('#frame2').contentWindow.top;")); | 7361 "document.querySelector('#frame2').contentWindow.top;")); |
7297 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7362 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
7298 | 7363 |
7299 // Now check that remote -> local works too, since it goes through a differe
nt code path. | 7364 // Now check that remote -> local works too, since it goes through a differe
nt code path. |
7300 FrameTestHelpers::TestWebFrameClient client; | 7365 FrameTestHelpers::TestWebFrameClient client; |
7301 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7366 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7302 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7367 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7303 remoteFrame->swap(localFrame); | 7368 remoteFrame->swap(localFrame); |
7304 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( | 7369 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(
WebScriptSource( |
7305 "document.querySelector('#frame2').contentWindow;")); | 7370 "document.querySelector('#frame2').contentWindow;")); |
7306 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); | 7371 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); |
7307 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( | 7372 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource( |
7308 "document.querySelector('#frame2').contentWindow.top;")); | 7373 "document.querySelector('#frame2').contentWindow.top;")); |
7309 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7374 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
7310 | 7375 |
7311 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7376 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7312 // TestWebFrameClient. | 7377 // TestWebFrameClient. |
(...skipping 13 matching lines...) Expand all Loading... |
7326 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7391 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7327 WebRemoteFrame* remoteFrame = remoteClient.frame(); | 7392 WebRemoteFrame* remoteFrame = remoteClient.frame(); |
7328 mainFrame()->lastChild()->swap(remoteFrame); | 7393 mainFrame()->lastChild()->swap(remoteFrame); |
7329 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7394 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7330 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); | 7395 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa
lue(WebScriptSource("saved.top")); |
7331 EXPECT_TRUE(remoteWindowTop->IsObject()); | 7396 EXPECT_TRUE(remoteWindowTop->IsObject()); |
7332 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); | 7397 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); |
7333 | 7398 |
7334 FrameTestHelpers::TestWebFrameClient client; | 7399 FrameTestHelpers::TestWebFrameClient client; |
7335 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7400 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7336 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7401 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7337 remoteFrame->swap(localFrame); | 7402 remoteFrame->swap(localFrame); |
7338 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); | 7403 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal
ue(WebScriptSource("saved.top")); |
7339 EXPECT_TRUE(localWindowTop->IsObject()); | 7404 EXPECT_TRUE(localWindowTop->IsObject()); |
7340 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); | 7405 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); |
7341 | 7406 |
7342 reset(); | 7407 reset(); |
7343 } | 7408 } |
7344 | 7409 |
7345 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) | 7410 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) |
7346 { | 7411 { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7397 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable) | 7462 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable) |
7398 { | 7463 { |
7399 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 7464 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
7400 | 7465 |
7401 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7466 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7402 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); | 7467 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); |
7403 mainFrame()->swap(remoteParentFrame); | 7468 mainFrame()->swap(remoteParentFrame); |
7404 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7469 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7405 | 7470 |
7406 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7471 FrameTestHelpers::TestWebFrameClient childFrameClient; |
7407 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); | 7472 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO
wnerProperties()); |
7408 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); | 7473 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); |
7409 | 7474 |
7410 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr
iptSource("window")); | 7475 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr
iptSource("window")); |
7411 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur
nValue(WebScriptSource("parent.frames[0]")); | 7476 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur
nValue(WebScriptSource("parent.frames[0]")); |
7412 EXPECT_TRUE(childOfRemoteParent->IsObject()); | 7477 EXPECT_TRUE(childOfRemoteParent->IsObject()); |
7413 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent)); | 7478 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent)); |
7414 | 7479 |
7415 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue(
WebScriptSource("parent.frames.length")); | 7480 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue(
WebScriptSource("parent.frames.length")); |
7416 ASSERT_TRUE(windowLength->IsInt32()); | 7481 ASSERT_TRUE(windowLength->IsInt32()); |
7417 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value()); | 7482 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value()); |
7418 | 7483 |
7419 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. | 7484 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. |
7420 reset(); | 7485 reset(); |
7421 } | 7486 } |
7422 | 7487 |
7423 // Check that frames with a remote parent don't crash while accessing window.fra
meElement. | 7488 // Check that frames with a remote parent don't crash while accessing window.fra
meElement. |
7424 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent) | 7489 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent) |
7425 { | 7490 { |
7426 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 7491 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
7427 | 7492 |
7428 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7493 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7429 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); | 7494 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); |
7430 mainFrame()->swap(remoteParentFrame); | 7495 mainFrame()->swap(remoteParentFrame); |
7431 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); | 7496 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7432 | 7497 |
7433 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7498 FrameTestHelpers::TestWebFrameClient childFrameClient; |
7434 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); | 7499 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope
Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO
wnerProperties()); |
7435 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); | 7500 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); |
7436 | 7501 |
7437 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue(
WebScriptSource("window.frameElement")); | 7502 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue(
WebScriptSource("window.frameElement")); |
7438 // frameElement shouldn't be accessible cross-origin. | 7503 // frameElement shouldn't be accessible cross-origin. |
7439 EXPECT_TRUE(frameElement.IsEmpty()); | 7504 EXPECT_TRUE(frameElement.IsEmpty()); |
7440 | 7505 |
7441 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. | 7506 // Manually reset to break WebViewHelper's dependency on the stack allocated
clients. |
7442 reset(); | 7507 reset(); |
7443 } | 7508 } |
7444 | 7509 |
(...skipping 26 matching lines...) Expand all Loading... |
7471 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7536 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7472 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7537 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7473 WebFrame* targetFrame = mainFrame()->firstChild(); | 7538 WebFrame* targetFrame = mainFrame()->firstChild(); |
7474 ASSERT_TRUE(targetFrame); | 7539 ASSERT_TRUE(targetFrame); |
7475 targetFrame->swap(remoteFrame); | 7540 targetFrame->swap(remoteFrame); |
7476 ASSERT_TRUE(mainFrame()->firstChild()); | 7541 ASSERT_TRUE(mainFrame()->firstChild()); |
7477 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7542 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
7478 | 7543 |
7479 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7544 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
7480 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7545 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7481 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7546 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7482 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7547 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7483 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); | 7548 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); |
7484 | 7549 |
7485 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7550 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7486 // TestWebFrameClient. | 7551 // TestWebFrameClient. |
7487 reset(); | 7552 reset(); |
7488 remoteFrame->close(); | 7553 remoteFrame->close(); |
7489 } | 7554 } |
7490 | 7555 |
7491 // The commit type should be Standard if we are swapping a RemoteFrame to a | 7556 // The commit type should be Standard if we are swapping a RemoteFrame to a |
7492 // LocalFrame after commits have already happened in the frame. The browser | 7557 // LocalFrame after commits have already happened in the frame. The browser |
7493 // process will inform us via setCommittedFirstRealLoad. | 7558 // process will inform us via setCommittedFirstRealLoad. |
7494 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) | 7559 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) |
7495 { | 7560 { |
7496 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; | 7561 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; |
7497 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); | 7562 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum
ent, &remoteFrameClient); |
7498 WebFrame* targetFrame = mainFrame()->firstChild(); | 7563 WebFrame* targetFrame = mainFrame()->firstChild(); |
7499 ASSERT_TRUE(targetFrame); | 7564 ASSERT_TRUE(targetFrame); |
7500 targetFrame->swap(remoteFrame); | 7565 targetFrame->swap(remoteFrame); |
7501 ASSERT_TRUE(mainFrame()->firstChild()); | 7566 ASSERT_TRUE(mainFrame()->firstChild()); |
7502 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); | 7567 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); |
7503 | 7568 |
7504 RemoteToLocalSwapWebFrameClient client(remoteFrame); | 7569 RemoteToLocalSwapWebFrameClient client(remoteFrame); |
7505 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); | 7570 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &client); |
7506 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); | 7571 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None, WebFrameOwnerProperties()); |
7507 localFrame->setCommittedFirstRealLoad(); | 7572 localFrame->setCommittedFirstRealLoad(); |
7508 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); | 7573 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); |
7509 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); | 7574 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); |
7510 | 7575 |
7511 // Manually reset to break WebViewHelper's dependency on the stack allocated | 7576 // Manually reset to break WebViewHelper's dependency on the stack allocated |
7512 // TestWebFrameClient. | 7577 // TestWebFrameClient. |
7513 reset(); | 7578 reset(); |
7514 remoteFrame->close(); | 7579 remoteFrame->close(); |
7515 } | 7580 } |
7516 | 7581 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7634 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; | 7699 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; |
7635 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); | 7700 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); |
7636 popupView->setMainFrame(popupRemoteFrame); | 7701 popupView->setMainFrame(popupRemoteFrame); |
7637 popupRemoteFrame->setOpener(mainFrame); | 7702 popupRemoteFrame->setOpener(mainFrame); |
7638 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); | 7703 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h
ttp://foo.com")); |
7639 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s
ecurityOrigin())); | 7704 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s
ecurityOrigin())); |
7640 | 7705 |
7641 // Do a remote-to-local swap in the popup. | 7706 // Do a remote-to-local swap in the popup. |
7642 FrameTestHelpers::TestWebFrameClient popupLocalClient; | 7707 FrameTestHelpers::TestWebFrameClient popupLocalClient; |
7643 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc
ument, &popupLocalClient); | 7708 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc
ument, &popupLocalClient); |
7644 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None); | 7709 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None, WebFrameOwnerProperties()); |
7645 popupRemoteFrame->swap(popupLocalFrame); | 7710 popupRemoteFrame->swap(popupLocalFrame); |
7646 | 7711 |
7647 // The initial document created during the remote-to-local swap should have | 7712 // The initial document created during the remote-to-local swap should have |
7648 // inherited its opener's SecurityOrigin. | 7713 // inherited its opener's SecurityOrigin. |
7649 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); | 7714 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); |
7650 | 7715 |
7651 popupView->close(); | 7716 popupView->close(); |
7652 } | 7717 } |
7653 | 7718 |
7654 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { | 7719 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { |
(...skipping 17 matching lines...) Expand all Loading... |
7672 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType) | 7737 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType) |
7673 { | 7738 { |
7674 FrameTestHelpers::TestWebViewClient viewClient; | 7739 FrameTestHelpers::TestWebViewClient viewClient; |
7675 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7740 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7676 WebView* view = WebView::create(&viewClient); | 7741 WebView* view = WebView::create(&viewClient); |
7677 view->setMainFrame(remoteClient.frame()); | 7742 view->setMainFrame(remoteClient.frame()); |
7678 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica
tedOrigin(SecurityOrigin::create(toKURL(m_baseURL))); | 7743 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica
tedOrigin(SecurityOrigin::create(toKURL(m_baseURL))); |
7679 | 7744 |
7680 // If an iframe has a remote main frame, ensure the inital commit is correct
ly identified as WebInitialCommitInChildFrame. | 7745 // If an iframe has a remote main frame, ensure the inital commit is correct
ly identified as WebInitialCommitInChildFrame. |
7681 CommitTypeWebFrameClient childFrameClient; | 7746 CommitTypeWebFrameClient childFrameClient; |
7682 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7747 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
7683 registerMockedHttpURLLoad("foo.html"); | 7748 registerMockedHttpURLLoad("foo.html"); |
7684 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html"); | 7749 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html"); |
7685 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType()
); | 7750 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType()
); |
7686 view->close(); | 7751 view->close(); |
7687 } | 7752 } |
7688 | 7753 |
7689 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient
{ | 7754 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient
{ |
7690 public: | 7755 public: |
7691 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { } | 7756 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { } |
7692 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled
) override { m_didHandleGestureEvent = true; } | 7757 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled
) override { m_didHandleGestureEvent = true; } |
7693 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; } | 7758 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; } |
7694 | 7759 |
7695 private: | 7760 private: |
7696 bool m_didHandleGestureEvent; | 7761 bool m_didHandleGestureEvent; |
7697 }; | 7762 }; |
7698 | 7763 |
7699 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest) | 7764 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest) |
7700 { | 7765 { |
7701 FrameTestHelpers::TestWebViewClient viewClient; | 7766 FrameTestHelpers::TestWebViewClient viewClient; |
7702 WebView* view = WebView::create(&viewClient); | 7767 WebView* view = WebView::create(&viewClient); |
7703 | 7768 |
7704 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7769 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7705 view->setMainFrame(remoteClient.frame()); | 7770 view->setMainFrame(remoteClient.frame()); |
7706 | 7771 |
7707 FrameTestHelpers::TestWebFrameClient childFrameClient; | 7772 FrameTestHelpers::TestWebFrameClient childFrameClient; |
7708 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr); | 7773 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc
alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient
, nullptr, WebFrameOwnerProperties()); |
7709 | 7774 |
7710 GestureEventTestWebViewClient childViewClient; | 7775 GestureEventTestWebViewClient childViewClient; |
7711 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame
); | 7776 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame
); |
7712 | 7777 |
7713 view->resize(WebSize(1000, 1000)); | 7778 view->resize(WebSize(1000, 1000)); |
7714 view->layout(); | 7779 view->layout(); |
7715 | 7780 |
7716 widget->handleInputEvent(fatTap(20, 20)); | 7781 widget->handleInputEvent(fatTap(20, 20)); |
7717 EXPECT_TRUE(childViewClient.didHandleGestureEvent()); | 7782 EXPECT_TRUE(childViewClient.didHandleGestureEvent()); |
7718 | 7783 |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7918 | 7983 |
7919 | 7984 |
7920 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling) | 7985 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling) |
7921 { | 7986 { |
7922 FrameTestHelpers::TestWebViewClient viewClient; | 7987 FrameTestHelpers::TestWebViewClient viewClient; |
7923 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 7988 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7924 WebView* view = WebView::create(&viewClient); | 7989 WebView* view = WebView::create(&viewClient); |
7925 view->setMainFrame(remoteClient.frame()); | 7990 view->setMainFrame(remoteClient.frame()); |
7926 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame(); | 7991 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame(); |
7927 | 7992 |
7928 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, nullptr); | 7993 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties()
); |
7929 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, secondFrame); | 7994 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::
Document, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerProperti
es()); |
7930 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, secondFrame); | 7995 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerPropertie
s()); |
7931 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, nullptr); | 7996 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D
ocument, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties())
; |
7932 | 7997 |
7933 EXPECT_EQ(firstFrame, parent->firstChild()); | 7998 EXPECT_EQ(firstFrame, parent->firstChild()); |
7934 EXPECT_EQ(nullptr, firstFrame->previousSibling()); | 7999 EXPECT_EQ(nullptr, firstFrame->previousSibling()); |
7935 EXPECT_EQ(secondFrame, firstFrame->nextSibling()); | 8000 EXPECT_EQ(secondFrame, firstFrame->nextSibling()); |
7936 | 8001 |
7937 EXPECT_EQ(firstFrame, secondFrame->previousSibling()); | 8002 EXPECT_EQ(firstFrame, secondFrame->previousSibling()); |
7938 EXPECT_EQ(thirdFrame, secondFrame->nextSibling()); | 8003 EXPECT_EQ(thirdFrame, secondFrame->nextSibling()); |
7939 | 8004 |
7940 EXPECT_EQ(secondFrame, thirdFrame->previousSibling()); | 8005 EXPECT_EQ(secondFrame, thirdFrame->previousSibling()); |
7941 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling()); | 8006 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling()); |
(...skipping 14 matching lines...) Expand all Loading... |
7956 { | 8021 { |
7957 FrameTestHelpers::TestWebViewClient viewClient; | 8022 FrameTestHelpers::TestWebViewClient viewClient; |
7958 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 8023 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7959 WebView* view = WebView::create(&viewClient); | 8024 WebView* view = WebView::create(&viewClient); |
7960 view->settings()->setJavaScriptEnabled(true); | 8025 view->settings()->setJavaScriptEnabled(true); |
7961 view->setMainFrame(remoteClient.frame()); | 8026 view->setMainFrame(remoteClient.frame()); |
7962 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); | 8027 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); |
7963 root->setReplicatedOrigin(SecurityOrigin::createUnique()); | 8028 root->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7964 | 8029 |
7965 FrameTestHelpers::TestWebFrameClient localFrameClient; | 8030 FrameTestHelpers::TestWebFrameClient localFrameClient; |
7966 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr); | 8031 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen
t, "", WebSandboxFlags::None, &localFrameClient, nullptr, WebFrameOwnerPropertie
s()); |
7967 | 8032 |
7968 // Finally, make sure an embedder triggered load in the local frame swapped | 8033 // Finally, make sure an embedder triggered load in the local frame swapped |
7969 // back in works. | 8034 // back in works. |
7970 registerMockedHttpURLLoad("send_beacon.html"); | 8035 registerMockedHttpURLLoad("send_beacon.html"); |
7971 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon() | 8036 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon() |
7972 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html"); | 8037 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html"); |
7973 | 8038 |
7974 view->close(); | 8039 view->close(); |
7975 } | 8040 } |
7976 | 8041 |
7977 // See https://crbug.com/525285. | 8042 // See https://crbug.com/525285. |
7978 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra
me) | 8043 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra
me) |
7979 { | 8044 { |
7980 FrameTestHelpers::TestWebViewClient viewClient; | 8045 FrameTestHelpers::TestWebViewClient viewClient; |
7981 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; | 8046 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
7982 WebView* view = WebView::create(&viewClient); | 8047 WebView* view = WebView::create(&viewClient); |
7983 view->setMainFrame(remoteClient.frame()); | 8048 view->setMainFrame(remoteClient.frame()); |
7984 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); | 8049 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); |
7985 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); | 8050 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); |
7986 | 8051 |
7987 FrameTestHelpers::TestWebFrameClient localFrameClient; | 8052 FrameTestHelpers::TestWebFrameClient localFrameClient; |
7988 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags
::None, &localFrameClient, nullptr); | 8053 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags
::None, &localFrameClient, nullptr, WebFrameOwnerProperties()); |
7989 | 8054 |
7990 // Do a remote-to-local swap of the top frame. | 8055 // Do a remote-to-local swap of the top frame. |
7991 FrameTestHelpers::TestWebFrameClient localClient; | 8056 FrameTestHelpers::TestWebFrameClient localClient; |
7992 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document,
&localClient); | 8057 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document,
&localClient); |
7993 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N
one); | 8058 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N
one, WebFrameOwnerProperties()); |
7994 remoteRoot->swap(localRoot); | 8059 remoteRoot->swap(localRoot); |
7995 | 8060 |
7996 // Load a page with a child frame in the new root to make sure this doesn't | 8061 // Load a page with a child frame in the new root to make sure this doesn't |
7997 // crash when the child frame invokes setCoreFrame. | 8062 // crash when the child frame invokes setCoreFrame. |
7998 registerMockedHttpURLLoad("single_iframe.html"); | 8063 registerMockedHttpURLLoad("single_iframe.html"); |
7999 registerMockedHttpURLLoad("visible_iframe.html"); | 8064 registerMockedHttpURLLoad("visible_iframe.html"); |
8000 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); | 8065 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); |
8001 | 8066 |
8002 view->close(); | 8067 view->close(); |
8003 } | 8068 } |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8310 EXPECT_TRUE(resource); | 8375 EXPECT_TRUE(resource); |
8311 EXPECT_NE(0, resource->loadFinishTime()); | 8376 EXPECT_NE(0, resource->loadFinishTime()); |
8312 | 8377 |
8313 DocumentLoader* loader = document->loader(); | 8378 DocumentLoader* loader = document->loader(); |
8314 | 8379 |
8315 EXPECT_TRUE(loader); | 8380 EXPECT_TRUE(loader); |
8316 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime()); | 8381 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime()); |
8317 } | 8382 } |
8318 | 8383 |
8319 } // namespace blink | 8384 } // namespace blink |
OLD | NEW |