Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(785)

Side by Side Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 1307013004: Propagate scrolling/marginwidth/marginheight property values to child frame. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments from Charlie Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 1588 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 1599
1600 ASSERT_NE(nullptr, element); 1600 ASSERT_NE(nullptr, element);
1601 EXPECT_EQ(String("oldValue"), element->innerText()); 1601 EXPECT_EQ(String("oldValue"), element->innerText());
1602 1602
1603 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint, hitPoint, IntSize(0, 0), 0, PlatformEvent::NoModifiers); 1603 PlatformGestureEvent gestureEvent(PlatformEvent::Type::GestureTap, hitPoint, hitPoint, IntSize(0, 0), 0, PlatformEvent::NoModifiers);
1604 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle GestureEvent(gestureEvent); 1604 webViewHelper.webViewImpl()->mainFrameImpl()->frame()->eventHandler().handle GestureEvent(gestureEvent);
1605 // when pressed, the button changes its own text to "updatedValue" 1605 // when pressed, the button changes its own text to "updatedValue"
1606 EXPECT_EQ(String("updatedValue"), element->innerText()); 1606 EXPECT_EQ(String("updatedValue"), element->innerText());
1607 } 1607 }
1608 1608
1609 TEST_F(WebFrameTest, FrameOwnerPropertiesMargin)
1610 {
1611 FrameTestHelpers::TestWebViewClient viewClient;
1612 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
1613 WebView* view = WebView::create(&viewClient);
1614 view->settings()->setJavaScriptEnabled(true);
1615 view->setMainFrame(remoteClient.frame());
1616 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame();
1617 root->setReplicatedOrigin(SecurityOrigin::createUnique());
1618
1619 WebFrameOwnerProperties properties;
1620 properties.marginWidth = 11;
1621 properties.marginHeight = 22;
1622 FrameTestHelpers::TestWebFrameClient localFrameClient;
1623 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties);
1624
1625 registerMockedHttpURLLoad("frame_owner_properties.html");
1626 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties. html");
1627
1628 {
1629 // Check if the LocalFrame has seen the marginwidth and marginheight
1630 // properties.
1631 v8::HandleScope handleScope(v8::Isolate::GetCurrent());
1632
1633 v8::Local<v8::Value> marginWidthResult = localFrame->executeScriptAndRet urnValue(WebScriptSource("parseInt(document.body.getAttribute('marginwidth') || '0');"));
dcheng 2015/10/15 06:06:53 Why || '0'?
lazyboy 2015/10/15 16:56:38 Removed this one since we expect non zero or not u
1634 ASSERT_TRUE(marginWidthResult->IsInt32());
1635 EXPECT_EQ(11, marginWidthResult.As<v8::Int32>()->Value());
1636
1637 v8::Local<v8::Value> marginHeightResult = localFrame->executeScriptAndRe turnValue(WebScriptSource("parseInt(document.body.getAttribute('marginheight') | | '0');"));
1638 ASSERT_TRUE(marginHeightResult->IsInt32());
1639 EXPECT_EQ(22, marginHeightResult.As<v8::Int32>()->Value());
1640 }
1641
1642 FrameView* frameView = toWebLocalFrameImpl(localFrame)->frameView();
1643 // Expect scrollbars to be enabled by default.
1644 EXPECT_NE(nullptr, frameView->horizontalScrollbar());
1645 EXPECT_NE(nullptr, frameView->verticalScrollbar());
1646
1647 view->close();
1648 }
1649
1650 TEST_F(WebFrameTest, FrameOwnerPropertiesScrolling)
1651 {
1652 FrameTestHelpers::TestWebViewClient viewClient;
1653 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
1654 WebView* view = WebView::create(&viewClient);
1655 view->settings()->setJavaScriptEnabled(true);
1656 view->setMainFrame(remoteClient.frame());
1657 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame();
1658 root->setReplicatedOrigin(SecurityOrigin::createUnique());
1659
1660 WebFrameOwnerProperties properties;
1661 // Turn off scrolling in the subframe.
1662 properties.scrollingMode = WebFrameOwnerProperties::ScrollingMode::AlwaysOff ;
1663 FrameTestHelpers::TestWebFrameClient localFrameClient;
1664 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen t, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties);
1665
1666 registerMockedHttpURLLoad("frame_owner_properties.html");
1667 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties. html");
1668
1669 {
1670 v8::HandleScope handleScope(v8::Isolate::GetCurrent());
1671
1672 v8::Local<v8::Value> marginWidthResult = localFrame->executeScriptAndRet urnValue(WebScriptSource("parseInt(document.body.getAttribute('marginwidth') || '0');"));
dcheng 2015/10/15 06:06:53 Ditto, why || '0'? We can test if the return value
lazyboy 2015/10/15 16:56:38 Technically margin of 0 can come from Number(0) an
dcheng 2015/10/15 22:07:46 I don't think I follow. In the test, it should be
dcheng 2015/10/15 22:20:17 Also... since this is a unit test, maybe just use
lazyboy 2015/10/15 23:00:52 Yes, it is deterministic in this test. What I want
lazyboy 2015/10/15 23:00:52 That is just cool! Thanks. Done.
1673 ASSERT_TRUE(marginWidthResult->IsInt32());
1674 EXPECT_EQ(0, marginWidthResult.As<v8::Int32>()->Value());
1675
1676 v8::Local<v8::Value> marginHeightResult = localFrame->executeScriptAndRe turnValue(WebScriptSource("parseInt(document.body.getAttribute('marginheight') | | '0');"));
1677 ASSERT_TRUE(marginHeightResult->IsInt32());
1678 EXPECT_EQ(0, marginHeightResult.As<v8::Int32>()->Value());
1679 }
1680
1681 FrameView* frameView = static_cast<WebLocalFrameImpl*>(localFrame)->frameVie w();
1682 EXPECT_EQ(nullptr, frameView->horizontalScrollbar());
1683 EXPECT_EQ(nullptr, frameView->verticalScrollbar());
1684
1685 view->close();
1686 }
1687
1688
1609 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations ) 1689 TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations )
1610 { 1690 {
1611 UseMockScrollbarSettings mockScrollbarSettings; 1691 UseMockScrollbarSettings mockScrollbarSettings;
1612 registerMockedHttpURLLoad("200-by-300.html"); 1692 registerMockedHttpURLLoad("200-by-300.html");
1613 registerMockedHttpURLLoad("large-div.html"); 1693 registerMockedHttpURLLoad("large-div.html");
1614 1694
1615 FixedLayoutTestWebViewClient client; 1695 FixedLayoutTestWebViewClient client;
1616 client.m_screenInfo.deviceScaleFactor = 1; 1696 client.m_screenInfo.deviceScaleFactor = 1;
1617 int viewportWidth = 640; 1697 int viewportWidth = 640;
1618 int viewportHeight = 480; 1698 int viewportHeight = 480;
(...skipping 4301 matching lines...) Expand 10 before | Expand all | Expand 10 after
5920 , m_willSendRequestCallCount(0) 6000 , m_willSendRequestCallCount(0)
5921 , m_childFrameCreationCount(0) 6001 , m_childFrameCreationCount(0)
5922 { 6002 {
5923 } 6003 }
5924 6004
5925 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child Client = client; } 6005 void setChildWebFrameClient(TestCachePolicyWebFrameClient* client) { m_child Client = client; }
5926 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; } 6006 WebURLRequest::CachePolicy cachePolicy() const { return m_policy; }
5927 int willSendRequestCallCount() const { return m_willSendRequestCallCount; } 6007 int willSendRequestCallCount() const { return m_willSendRequestCallCount; }
5928 int childFrameCreationCount() const { return m_childFrameCreationCount; } 6008 int childFrameCreationCount() const { return m_childFrameCreationCount; }
5929 6009
5930 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s cope, const WebString&, WebSandboxFlags) 6010 virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType s cope, const WebString&, WebSandboxFlags, const WebFrameOwnerProperties& frameOwn erProperties)
5931 { 6011 {
5932 ASSERT(m_childClient); 6012 ASSERT(m_childClient);
5933 m_childFrameCreationCount++; 6013 m_childFrameCreationCount++;
5934 WebFrame* frame = WebLocalFrame::create(scope, m_childClient); 6014 WebFrame* frame = WebLocalFrame::create(scope, m_childClient);
5935 parent->appendChild(frame); 6015 parent->appendChild(frame);
5936 return frame; 6016 return frame;
5937 } 6017 }
5938 6018
5939 virtual void didStartLoading(bool toDifferentDocument) 6019 virtual void didStartLoading(bool toDifferentDocument)
5940 { 6020 {
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
6309 // After commit, there is. 6389 // After commit, there is.
6310 HistoryItem* item = mainFrameLoader.currentItem(); 6390 HistoryItem* item = mainFrameLoader.currentItem();
6311 ASSERT_TRUE(item); 6391 ASSERT_TRUE(item);
6312 EXPECT_EQ(WTF::String(url.data()), item->urlString()); 6392 EXPECT_EQ(WTF::String(url.data()), item->urlString());
6313 } 6393 }
6314 6394
6315 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { 6395 class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient {
6316 public: 6396 public:
6317 FailCreateChildFrame() : m_callCount(0) { } 6397 FailCreateChildFrame() : m_callCount(0) { }
6318 6398
6319 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co nst WebString& frameName, WebSandboxFlags sandboxFlags) override 6399 WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, co nst WebString& frameName, WebSandboxFlags sandboxFlags, const WebFrameOwnerPrope rties& frameOwnerProperties) override
6320 { 6400 {
6321 ++m_callCount; 6401 ++m_callCount;
6322 return 0; 6402 return 0;
6323 } 6403 }
6324 6404
6325 int callCount() const { return m_callCount; } 6405 int callCount() const { return m_callCount; }
6326 6406
6327 private: 6407 private:
6328 int m_callCount; 6408 int m_callCount;
6329 }; 6409 };
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after
7007 // doesn't leave behind dangling pointers. 7087 // doesn't leave behind dangling pointers.
7008 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame) 7088 TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame)
7009 { 7089 {
7010 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t o 7090 // FIXME: Refactor some of this logic into WebViewHelper to make it easier t o
7011 // write tests with a top-level remote frame. 7091 // write tests with a top-level remote frame.
7012 FrameTestHelpers::TestWebViewClient viewClient; 7092 FrameTestHelpers::TestWebViewClient viewClient;
7013 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 7093 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7014 WebView* view = WebView::create(&viewClient); 7094 WebView* view = WebView::create(&viewClient);
7015 view->setMainFrame(remoteClient.frame()); 7095 view->setMainFrame(remoteClient.frame());
7016 FrameTestHelpers::TestWebFrameClient childFrameClient; 7096 FrameTestHelpers::TestWebFrameClient childFrameClient;
7017 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient , nullptr); 7097 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient , nullptr, WebFrameOwnerProperties());
7018 7098
7019 // Purposely keep the LocalFrame alive so it's the last thing to be destroye d. 7099 // Purposely keep the LocalFrame alive so it's the last thing to be destroye d.
7020 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame); 7100 RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame);
7021 view->close(); 7101 view->close();
7022 childCoreFrame.clear(); 7102 childCoreFrame.clear();
7023 } 7103 }
7024 7104
7025 class WebFrameSwapTest : public WebFrameTest { 7105 class WebFrameSwapTest : public WebFrameTest {
7026 protected: 7106 protected:
7027 WebFrameSwapTest() 7107 WebFrameSwapTest()
(...skipping 14 matching lines...) Expand all
7042 FrameTestHelpers::WebViewHelper m_webViewHelper; 7122 FrameTestHelpers::WebViewHelper m_webViewHelper;
7043 }; 7123 };
7044 7124
7045 TEST_F(WebFrameSwapTest, SwapMainFrame) 7125 TEST_F(WebFrameSwapTest, SwapMainFrame)
7046 { 7126 {
7047 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, nullptr); 7127 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, nullptr);
7048 mainFrame()->swap(remoteFrame); 7128 mainFrame()->swap(remoteFrame);
7049 7129
7050 FrameTestHelpers::TestWebFrameClient client; 7130 FrameTestHelpers::TestWebFrameClient client;
7051 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7131 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7052 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7132 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7053 remoteFrame->swap(localFrame); 7133 remoteFrame->swap(localFrame);
7054 7134
7055 // Finally, make sure an embedder triggered load in the local frame swapped 7135 // Finally, make sure an embedder triggered load in the local frame swapped
7056 // back in works. 7136 // back in works.
7057 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); 7137 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
7058 std::string content = localFrame->contentAsText(1024).utf8(); 7138 std::string content = localFrame->contentAsText(1024).utf8();
7059 EXPECT_EQ("hello", content); 7139 EXPECT_EQ("hello", content);
7060 7140
7061 // Manually reset to break WebViewHelper's dependency on the stack allocated 7141 // Manually reset to break WebViewHelper's dependency on the stack allocated
7062 // TestWebFrameClient. 7142 // TestWebFrameClient.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
7106 } 7186 }
7107 7187
7108 TEST_F(WebFrameSwapTest, SwapFirstChild) 7188 TEST_F(WebFrameSwapTest, SwapFirstChild)
7109 { 7189 {
7110 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; 7190 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient;
7111 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient); 7191 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient);
7112 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame ); 7192 swapAndVerifyFirstChildConsistency("local->remote", mainFrame(), remoteFrame );
7113 7193
7114 FrameTestHelpers::TestWebFrameClient client; 7194 FrameTestHelpers::TestWebFrameClient client;
7115 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7195 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7116 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7196 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7117 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame) ; 7197 swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame) ;
7118 7198
7119 // FIXME: This almost certainly fires more load events on the iframe element 7199 // FIXME: This almost certainly fires more load events on the iframe element
7120 // than it should. 7200 // than it should.
7121 // Finally, make sure an embedder triggered load in the local frame swapped 7201 // Finally, make sure an embedder triggered load in the local frame swapped
7122 // back in works. 7202 // back in works.
7123 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); 7203 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
7124 std::string content = localFrame->contentAsText(1024).utf8(); 7204 std::string content = localFrame->contentAsText(1024).utf8();
7125 EXPECT_EQ("hello", content); 7205 EXPECT_EQ("hello", content);
7126 7206
(...skipping 18 matching lines...) Expand all
7145 } 7225 }
7146 7226
7147 TEST_F(WebFrameSwapTest, SwapMiddleChild) 7227 TEST_F(WebFrameSwapTest, SwapMiddleChild)
7148 { 7228 {
7149 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; 7229 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient;
7150 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient); 7230 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient);
7151 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram e); 7231 swapAndVerifyMiddleChildConsistency("local->remote", mainFrame(), remoteFram e);
7152 7232
7153 FrameTestHelpers::TestWebFrameClient client; 7233 FrameTestHelpers::TestWebFrameClient client;
7154 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7234 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7155 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7235 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7156 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame ); 7236 swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame );
7157 7237
7158 // FIXME: This almost certainly fires more load events on the iframe element 7238 // FIXME: This almost certainly fires more load events on the iframe element
7159 // than it should. 7239 // than it should.
7160 // Finally, make sure an embedder triggered load in the local frame swapped 7240 // Finally, make sure an embedder triggered load in the local frame swapped
7161 // back in works. 7241 // back in works.
7162 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); 7242 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
7163 std::string content = localFrame->contentAsText(1024).utf8(); 7243 std::string content = localFrame->contentAsText(1024).utf8();
7164 EXPECT_EQ("hello", content); 7244 EXPECT_EQ("hello", content);
7165 7245
(...skipping 15 matching lines...) Expand all
7181 } 7261 }
7182 7262
7183 TEST_F(WebFrameSwapTest, SwapLastChild) 7263 TEST_F(WebFrameSwapTest, SwapLastChild)
7184 { 7264 {
7185 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; 7265 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient;
7186 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient); 7266 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient);
7187 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame) ; 7267 swapAndVerifyLastChildConsistency("local->remote", mainFrame(), remoteFrame) ;
7188 7268
7189 FrameTestHelpers::TestWebFrameClient client; 7269 FrameTestHelpers::TestWebFrameClient client;
7190 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7270 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7191 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7271 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7192 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame); 7272 swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame);
7193 7273
7194 // FIXME: This almost certainly fires more load events on the iframe element 7274 // FIXME: This almost certainly fires more load events on the iframe element
7195 // than it should. 7275 // than it should.
7196 // Finally, make sure an embedder triggered load in the local frame swapped 7276 // Finally, make sure an embedder triggered load in the local frame swapped
7197 // back in works. 7277 // back in works.
7198 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); 7278 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
7199 std::string content = localFrame->contentAsText(1024).utf8(); 7279 std::string content = localFrame->contentAsText(1024).utf8();
7200 EXPECT_EQ("hello", content); 7280 EXPECT_EQ("hello", content);
7201 7281
(...skipping 24 matching lines...) Expand all
7226 7306
7227 targetFrame = mainFrame()->firstChild()->nextSibling(); 7307 targetFrame = mainFrame()->firstChild()->nextSibling();
7228 EXPECT_TRUE(targetFrame); 7308 EXPECT_TRUE(targetFrame);
7229 7309
7230 // Create child frames in the target frame before testing the swap. 7310 // Create child frames in the target frame before testing the swap.
7231 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2; 7311 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient2;
7232 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2); 7312 WebRemoteFrame* childRemoteFrame = remoteFrame->createRemoteChild(WebTreeSco peType::Document, "", WebSandboxFlags::None, &remoteFrameClient2);
7233 7313
7234 FrameTestHelpers::TestWebFrameClient client; 7314 FrameTestHelpers::TestWebFrameClient client;
7235 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7315 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7236 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7316 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7237 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame); 7317 swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame);
7238 7318
7239 // FIXME: This almost certainly fires more load events on the iframe element 7319 // FIXME: This almost certainly fires more load events on the iframe element
7240 // than it should. 7320 // than it should.
7241 // Finally, make sure an embedder triggered load in the local frame swapped 7321 // Finally, make sure an embedder triggered load in the local frame swapped
7242 // back in works. 7322 // back in works.
7243 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); 7323 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
7244 std::string content = localFrame->contentAsText(1024).utf8(); 7324 std::string content = localFrame->contentAsText(1024).utf8();
7245 EXPECT_EQ("hello", content); 7325 EXPECT_EQ("hello", content);
7246 7326
(...skipping 23 matching lines...) Expand all
7270 "document.querySelector('#frame2').contentWindow;")); 7350 "document.querySelector('#frame2').contentWindow;"));
7271 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow)); 7351 EXPECT_TRUE(originalWindow->StrictEquals(remoteWindow));
7272 // Check that its view is consistent with the world. 7352 // Check that its view is consistent with the world.
7273 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa lue(WebScriptSource( 7353 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa lue(WebScriptSource(
7274 "document.querySelector('#frame2').contentWindow.top;")); 7354 "document.querySelector('#frame2').contentWindow.top;"));
7275 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); 7355 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop));
7276 7356
7277 // Now check that remote -> local works too, since it goes through a differe nt code path. 7357 // Now check that remote -> local works too, since it goes through a differe nt code path.
7278 FrameTestHelpers::TestWebFrameClient client; 7358 FrameTestHelpers::TestWebFrameClient client;
7279 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7359 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7280 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7360 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7281 remoteFrame->swap(localFrame); 7361 remoteFrame->swap(localFrame);
7282 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue( WebScriptSource( 7362 v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue( WebScriptSource(
7283 "document.querySelector('#frame2').contentWindow;")); 7363 "document.querySelector('#frame2').contentWindow;"));
7284 EXPECT_TRUE(originalWindow->StrictEquals(localWindow)); 7364 EXPECT_TRUE(originalWindow->StrictEquals(localWindow));
7285 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal ue(WebScriptSource( 7365 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal ue(WebScriptSource(
7286 "document.querySelector('#frame2').contentWindow.top;")); 7366 "document.querySelector('#frame2').contentWindow.top;"));
7287 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); 7367 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop));
7288 7368
7289 // Manually reset to break WebViewHelper's dependency on the stack allocated 7369 // Manually reset to break WebViewHelper's dependency on the stack allocated
7290 // TestWebFrameClient. 7370 // TestWebFrameClient.
(...skipping 13 matching lines...) Expand all
7304 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 7384 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7305 WebRemoteFrame* remoteFrame = remoteClient.frame(); 7385 WebRemoteFrame* remoteFrame = remoteClient.frame();
7306 mainFrame()->lastChild()->swap(remoteFrame); 7386 mainFrame()->lastChild()->swap(remoteFrame);
7307 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); 7387 remoteFrame->setReplicatedOrigin(SecurityOrigin::createUnique());
7308 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa lue(WebScriptSource("saved.top")); 7388 v8::Local<v8::Value> remoteWindowTop = mainFrame()->executeScriptAndReturnVa lue(WebScriptSource("saved.top"));
7309 EXPECT_TRUE(remoteWindowTop->IsObject()); 7389 EXPECT_TRUE(remoteWindowTop->IsObject());
7310 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop)); 7390 EXPECT_TRUE(windowTop->StrictEquals(remoteWindowTop));
7311 7391
7312 FrameTestHelpers::TestWebFrameClient client; 7392 FrameTestHelpers::TestWebFrameClient client;
7313 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7393 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7314 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7394 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7315 remoteFrame->swap(localFrame); 7395 remoteFrame->swap(localFrame);
7316 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal ue(WebScriptSource("saved.top")); 7396 v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnVal ue(WebScriptSource("saved.top"));
7317 EXPECT_TRUE(localWindowTop->IsObject()); 7397 EXPECT_TRUE(localWindowTop->IsObject());
7318 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop)); 7398 EXPECT_TRUE(windowTop->StrictEquals(localWindowTop));
7319 7399
7320 reset(); 7400 reset();
7321 } 7401 }
7322 7402
7323 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable) 7403 TEST_F(WebFrameSwapTest, RemoteFramesAreIndexable)
7324 { 7404 {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
7375 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable) 7455 TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable)
7376 { 7456 {
7377 v8::HandleScope scope(v8::Isolate::GetCurrent()); 7457 v8::HandleScope scope(v8::Isolate::GetCurrent());
7378 7458
7379 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 7459 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7380 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); 7460 WebRemoteFrame* remoteParentFrame = remoteClient.frame();
7381 mainFrame()->swap(remoteParentFrame); 7461 mainFrame()->swap(remoteParentFrame);
7382 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); 7462 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique());
7383 7463
7384 FrameTestHelpers::TestWebFrameClient childFrameClient; 7464 FrameTestHelpers::TestWebFrameClient childFrameClient;
7385 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); 7465 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO wnerProperties());
7386 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); 7466 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html");
7387 7467
7388 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr iptSource("window")); 7468 v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScr iptSource("window"));
7389 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur nValue(WebScriptSource("parent.frames[0]")); 7469 v8::Local<v8::Value> childOfRemoteParent = childFrame->executeScriptAndRetur nValue(WebScriptSource("parent.frames[0]"));
7390 EXPECT_TRUE(childOfRemoteParent->IsObject()); 7470 EXPECT_TRUE(childOfRemoteParent->IsObject());
7391 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent)); 7471 EXPECT_TRUE(window->StrictEquals(childOfRemoteParent));
7392 7472
7393 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue( WebScriptSource("parent.frames.length")); 7473 v8::Local<v8::Value> windowLength = childFrame->executeScriptAndReturnValue( WebScriptSource("parent.frames.length"));
7394 ASSERT_TRUE(windowLength->IsInt32()); 7474 ASSERT_TRUE(windowLength->IsInt32());
7395 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value()); 7475 EXPECT_EQ(1, windowLength.As<v8::Int32>()->Value());
7396 7476
7397 // Manually reset to break WebViewHelper's dependency on the stack allocated clients. 7477 // Manually reset to break WebViewHelper's dependency on the stack allocated clients.
7398 reset(); 7478 reset();
7399 } 7479 }
7400 7480
7401 // Check that frames with a remote parent don't crash while accessing window.fra meElement. 7481 // Check that frames with a remote parent don't crash while accessing window.fra meElement.
7402 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent) 7482 TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent)
7403 { 7483 {
7404 v8::HandleScope scope(v8::Isolate::GetCurrent()); 7484 v8::HandleScope scope(v8::Isolate::GetCurrent());
7405 7485
7406 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 7486 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7407 WebRemoteFrame* remoteParentFrame = remoteClient.frame(); 7487 WebRemoteFrame* remoteParentFrame = remoteClient.frame();
7408 mainFrame()->swap(remoteParentFrame); 7488 mainFrame()->swap(remoteParentFrame);
7409 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique()); 7489 remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique());
7410 7490
7411 FrameTestHelpers::TestWebFrameClient childFrameClient; 7491 FrameTestHelpers::TestWebFrameClient childFrameClient;
7412 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr); 7492 WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScope Type::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameO wnerProperties());
7413 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html"); 7493 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html");
7414 7494
7415 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue( WebScriptSource("window.frameElement")); 7495 v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue( WebScriptSource("window.frameElement"));
7416 // frameElement shouldn't be accessible cross-origin. 7496 // frameElement shouldn't be accessible cross-origin.
7417 EXPECT_TRUE(frameElement.IsEmpty()); 7497 EXPECT_TRUE(frameElement.IsEmpty());
7418 7498
7419 // Manually reset to break WebViewHelper's dependency on the stack allocated clients. 7499 // Manually reset to break WebViewHelper's dependency on the stack allocated clients.
7420 reset(); 7500 reset();
7421 } 7501 }
7422 7502
(...skipping 26 matching lines...) Expand all
7449 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; 7529 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient;
7450 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient); 7530 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient);
7451 WebFrame* targetFrame = mainFrame()->firstChild(); 7531 WebFrame* targetFrame = mainFrame()->firstChild();
7452 ASSERT_TRUE(targetFrame); 7532 ASSERT_TRUE(targetFrame);
7453 targetFrame->swap(remoteFrame); 7533 targetFrame->swap(remoteFrame);
7454 ASSERT_TRUE(mainFrame()->firstChild()); 7534 ASSERT_TRUE(mainFrame()->firstChild());
7455 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); 7535 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame);
7456 7536
7457 RemoteToLocalSwapWebFrameClient client(remoteFrame); 7537 RemoteToLocalSwapWebFrameClient client(remoteFrame);
7458 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7538 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7459 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7539 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7460 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); 7540 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
7461 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType()); 7541 EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType());
7462 7542
7463 // Manually reset to break WebViewHelper's dependency on the stack allocated 7543 // Manually reset to break WebViewHelper's dependency on the stack allocated
7464 // TestWebFrameClient. 7544 // TestWebFrameClient.
7465 reset(); 7545 reset();
7466 remoteFrame->close(); 7546 remoteFrame->close();
7467 } 7547 }
7468 7548
7469 // The commit type should be Standard if we are swapping a RemoteFrame to a 7549 // The commit type should be Standard if we are swapping a RemoteFrame to a
7470 // LocalFrame after commits have already happened in the frame. The browser 7550 // LocalFrame after commits have already happened in the frame. The browser
7471 // process will inform us via setCommittedFirstRealLoad. 7551 // process will inform us via setCommittedFirstRealLoad.
7472 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap) 7552 TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap)
7473 { 7553 {
7474 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient; 7554 FrameTestHelpers::TestWebRemoteFrameClient remoteFrameClient;
7475 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient); 7555 WebRemoteFrame* remoteFrame = WebRemoteFrame::create(WebTreeScopeType::Docum ent, &remoteFrameClient);
7476 WebFrame* targetFrame = mainFrame()->firstChild(); 7556 WebFrame* targetFrame = mainFrame()->firstChild();
7477 ASSERT_TRUE(targetFrame); 7557 ASSERT_TRUE(targetFrame);
7478 targetFrame->swap(remoteFrame); 7558 targetFrame->swap(remoteFrame);
7479 ASSERT_TRUE(mainFrame()->firstChild()); 7559 ASSERT_TRUE(mainFrame()->firstChild());
7480 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame); 7560 ASSERT_EQ(mainFrame()->firstChild(), remoteFrame);
7481 7561
7482 RemoteToLocalSwapWebFrameClient client(remoteFrame); 7562 RemoteToLocalSwapWebFrameClient client(remoteFrame);
7483 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client); 7563 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document , &client);
7484 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None); 7564 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags: :None, WebFrameOwnerProperties());
7485 localFrame->setCommittedFirstRealLoad(); 7565 localFrame->setCommittedFirstRealLoad();
7486 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); 7566 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
7487 EXPECT_EQ(WebStandardCommit, client.historyCommitType()); 7567 EXPECT_EQ(WebStandardCommit, client.historyCommitType());
7488 7568
7489 // Manually reset to break WebViewHelper's dependency on the stack allocated 7569 // Manually reset to break WebViewHelper's dependency on the stack allocated
7490 // TestWebFrameClient. 7570 // TestWebFrameClient.
7491 reset(); 7571 reset();
7492 remoteFrame->close(); 7572 remoteFrame->close();
7493 } 7573 }
7494 7574
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
7612 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient; 7692 FrameTestHelpers::TestWebRemoteFrameClient popupRemoteClient;
7613 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame(); 7693 WebRemoteFrame* popupRemoteFrame = popupRemoteClient.frame();
7614 popupView->setMainFrame(popupRemoteFrame); 7694 popupView->setMainFrame(popupRemoteFrame);
7615 popupRemoteFrame->setOpener(mainFrame); 7695 popupRemoteFrame->setOpener(mainFrame);
7616 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h ttp://foo.com")); 7696 popupRemoteFrame->setReplicatedOrigin(WebSecurityOrigin::createFromString("h ttp://foo.com"));
7617 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s ecurityOrigin())); 7697 EXPECT_FALSE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->s ecurityOrigin()));
7618 7698
7619 // Do a remote-to-local swap in the popup. 7699 // Do a remote-to-local swap in the popup.
7620 FrameTestHelpers::TestWebFrameClient popupLocalClient; 7700 FrameTestHelpers::TestWebFrameClient popupLocalClient;
7621 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc ument, &popupLocalClient); 7701 WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Doc ument, &popupLocalClient);
7622 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan dboxFlags::None); 7702 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan dboxFlags::None, WebFrameOwnerProperties());
7623 popupRemoteFrame->swap(popupLocalFrame); 7703 popupRemoteFrame->swap(popupLocalFrame);
7624 7704
7625 // The initial document created during the remote-to-local swap should have 7705 // The initial document created during the remote-to-local swap should have
7626 // inherited its opener's SecurityOrigin. 7706 // inherited its opener's SecurityOrigin.
7627 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se curityOrigin())); 7707 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se curityOrigin()));
7628 7708
7629 popupView->close(); 7709 popupView->close();
7630 } 7710 }
7631 7711
7632 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { 7712 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient {
(...skipping 17 matching lines...) Expand all
7650 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType) 7730 TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType)
7651 { 7731 {
7652 FrameTestHelpers::TestWebViewClient viewClient; 7732 FrameTestHelpers::TestWebViewClient viewClient;
7653 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 7733 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7654 WebView* view = WebView::create(&viewClient); 7734 WebView* view = WebView::create(&viewClient);
7655 view->setMainFrame(remoteClient.frame()); 7735 view->setMainFrame(remoteClient.frame());
7656 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica tedOrigin(SecurityOrigin::create(toKURL(m_baseURL))); 7736 toRemoteFrame(toCoreFrame(view->mainFrame()))->securityContext()->setReplica tedOrigin(SecurityOrigin::create(toKURL(m_baseURL)));
7657 7737
7658 // If an iframe has a remote main frame, ensure the inital commit is correct ly identified as WebInitialCommitInChildFrame. 7738 // If an iframe has a remote main frame, ensure the inital commit is correct ly identified as WebInitialCommitInChildFrame.
7659 CommitTypeWebFrameClient childFrameClient; 7739 CommitTypeWebFrameClient childFrameClient;
7660 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient , nullptr); 7740 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient , nullptr, WebFrameOwnerProperties());
7661 registerMockedHttpURLLoad("foo.html"); 7741 registerMockedHttpURLLoad("foo.html");
7662 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html"); 7742 FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html");
7663 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType() ); 7743 EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType() );
7664 view->close(); 7744 view->close();
7665 } 7745 }
7666 7746
7667 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient { 7747 class GestureEventTestWebViewClient : public FrameTestHelpers::TestWebViewClient {
7668 public: 7748 public:
7669 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { } 7749 GestureEventTestWebViewClient() : m_didHandleGestureEvent(false) { }
7670 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled ) override { m_didHandleGestureEvent = true; } 7750 void didHandleGestureEvent(const WebGestureEvent& event, bool eventCancelled ) override { m_didHandleGestureEvent = true; }
7671 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; } 7751 bool didHandleGestureEvent() const { return m_didHandleGestureEvent; }
7672 7752
7673 private: 7753 private:
7674 bool m_didHandleGestureEvent; 7754 bool m_didHandleGestureEvent;
7675 }; 7755 };
7676 7756
7677 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest) 7757 TEST_P(ParameterizedWebFrameTest, FrameWidgetTest)
7678 { 7758 {
7679 FrameTestHelpers::TestWebViewClient viewClient; 7759 FrameTestHelpers::TestWebViewClient viewClient;
7680 WebView* view = WebView::create(&viewClient); 7760 WebView* view = WebView::create(&viewClient);
7681 7761
7682 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 7762 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7683 view->setMainFrame(remoteClient.frame()); 7763 view->setMainFrame(remoteClient.frame());
7684 7764
7685 FrameTestHelpers::TestWebFrameClient childFrameClient; 7765 FrameTestHelpers::TestWebFrameClient childFrameClient;
7686 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient , nullptr); 7766 WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLoc alChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient , nullptr, WebFrameOwnerProperties());
7687 7767
7688 GestureEventTestWebViewClient childViewClient; 7768 GestureEventTestWebViewClient childViewClient;
7689 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame ); 7769 WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame );
7690 7770
7691 view->resize(WebSize(1000, 1000)); 7771 view->resize(WebSize(1000, 1000));
7692 view->layout(); 7772 view->layout();
7693 7773
7694 widget->handleInputEvent(fatTap(20, 20)); 7774 widget->handleInputEvent(fatTap(20, 20));
7695 EXPECT_TRUE(childViewClient.didHandleGestureEvent()); 7775 EXPECT_TRUE(childViewClient.didHandleGestureEvent());
7696 7776
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
7896 7976
7897 7977
7898 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling) 7978 TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling)
7899 { 7979 {
7900 FrameTestHelpers::TestWebViewClient viewClient; 7980 FrameTestHelpers::TestWebViewClient viewClient;
7901 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 7981 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7902 WebView* view = WebView::create(&viewClient); 7982 WebView* view = WebView::create(&viewClient);
7903 view->setMainFrame(remoteClient.frame()); 7983 view->setMainFrame(remoteClient.frame());
7904 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame(); 7984 WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame();
7905 7985
7906 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType:: Document, "", WebSandboxFlags::None, nullptr, nullptr); 7986 WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType:: Document, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties() );
7907 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType:: Document, "", WebSandboxFlags::None, nullptr, secondFrame); 7987 WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType:: Document, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerProperti es());
7908 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D ocument, "", WebSandboxFlags::None, nullptr, secondFrame); 7988 WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::D ocument, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerPropertie s());
7909 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D ocument, "", WebSandboxFlags::None, nullptr, nullptr); 7989 WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::D ocument, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties()) ;
7910 7990
7911 EXPECT_EQ(firstFrame, parent->firstChild()); 7991 EXPECT_EQ(firstFrame, parent->firstChild());
7912 EXPECT_EQ(nullptr, firstFrame->previousSibling()); 7992 EXPECT_EQ(nullptr, firstFrame->previousSibling());
7913 EXPECT_EQ(secondFrame, firstFrame->nextSibling()); 7993 EXPECT_EQ(secondFrame, firstFrame->nextSibling());
7914 7994
7915 EXPECT_EQ(firstFrame, secondFrame->previousSibling()); 7995 EXPECT_EQ(firstFrame, secondFrame->previousSibling());
7916 EXPECT_EQ(thirdFrame, secondFrame->nextSibling()); 7996 EXPECT_EQ(thirdFrame, secondFrame->nextSibling());
7917 7997
7918 EXPECT_EQ(secondFrame, thirdFrame->previousSibling()); 7998 EXPECT_EQ(secondFrame, thirdFrame->previousSibling());
7919 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling()); 7999 EXPECT_EQ(fourthFrame, thirdFrame->nextSibling());
(...skipping 14 matching lines...) Expand all
7934 { 8014 {
7935 FrameTestHelpers::TestWebViewClient viewClient; 8015 FrameTestHelpers::TestWebViewClient viewClient;
7936 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 8016 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7937 WebView* view = WebView::create(&viewClient); 8017 WebView* view = WebView::create(&viewClient);
7938 view->settings()->setJavaScriptEnabled(true); 8018 view->settings()->setJavaScriptEnabled(true);
7939 view->setMainFrame(remoteClient.frame()); 8019 view->setMainFrame(remoteClient.frame());
7940 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame(); 8020 WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame();
7941 root->setReplicatedOrigin(SecurityOrigin::createUnique()); 8021 root->setReplicatedOrigin(SecurityOrigin::createUnique());
7942 8022
7943 FrameTestHelpers::TestWebFrameClient localFrameClient; 8023 FrameTestHelpers::TestWebFrameClient localFrameClient;
7944 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen t, "", WebSandboxFlags::None, &localFrameClient, nullptr); 8024 WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Documen t, "", WebSandboxFlags::None, &localFrameClient, nullptr, WebFrameOwnerPropertie s());
7945 8025
7946 // Finally, make sure an embedder triggered load in the local frame swapped 8026 // Finally, make sure an embedder triggered load in the local frame swapped
7947 // back in works. 8027 // back in works.
7948 registerMockedHttpURLLoad("send_beacon.html"); 8028 registerMockedHttpURLLoad("send_beacon.html");
7949 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon() 8029 registerMockedHttpURLLoad("reload_post.html"); // url param to sendBeacon()
7950 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html"); 8030 FrameTestHelpers::loadFrame(localFrame, m_baseURL + "send_beacon.html");
7951 8031
7952 view->close(); 8032 view->close();
7953 } 8033 }
7954 8034
7955 // See https://crbug.com/525285. 8035 // See https://crbug.com/525285.
7956 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra me) 8036 TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra me)
7957 { 8037 {
7958 FrameTestHelpers::TestWebViewClient viewClient; 8038 FrameTestHelpers::TestWebViewClient viewClient;
7959 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; 8039 FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
7960 WebView* view = WebView::create(&viewClient); 8040 WebView* view = WebView::create(&viewClient);
7961 view->setMainFrame(remoteClient.frame()); 8041 view->setMainFrame(remoteClient.frame());
7962 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame(); 8042 WebRemoteFrame* remoteRoot = view->mainFrame()->toWebRemoteFrame();
7963 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique()); 8043 remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique());
7964 8044
7965 FrameTestHelpers::TestWebFrameClient localFrameClient; 8045 FrameTestHelpers::TestWebFrameClient localFrameClient;
7966 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags ::None, &localFrameClient, nullptr); 8046 remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags ::None, &localFrameClient, nullptr, WebFrameOwnerProperties());
7967 8047
7968 // Do a remote-to-local swap of the top frame. 8048 // Do a remote-to-local swap of the top frame.
7969 FrameTestHelpers::TestWebFrameClient localClient; 8049 FrameTestHelpers::TestWebFrameClient localClient;
7970 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document, &localClient); 8050 WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document, &localClient);
7971 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N one); 8051 localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::N one, WebFrameOwnerProperties());
7972 remoteRoot->swap(localRoot); 8052 remoteRoot->swap(localRoot);
7973 8053
7974 // Load a page with a child frame in the new root to make sure this doesn't 8054 // Load a page with a child frame in the new root to make sure this doesn't
7975 // crash when the child frame invokes setCoreFrame. 8055 // crash when the child frame invokes setCoreFrame.
7976 registerMockedHttpURLLoad("single_iframe.html"); 8056 registerMockedHttpURLLoad("single_iframe.html");
7977 registerMockedHttpURLLoad("visible_iframe.html"); 8057 registerMockedHttpURLLoad("visible_iframe.html");
7978 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html"); 8058 FrameTestHelpers::loadFrame(localRoot, m_baseURL + "single_iframe.html");
7979 8059
7980 view->close(); 8060 view->close();
7981 } 8061 }
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
8285 EXPECT_TRUE(resource); 8365 EXPECT_TRUE(resource);
8286 EXPECT_NE(0, resource->loadFinishTime()); 8366 EXPECT_NE(0, resource->loadFinishTime());
8287 8367
8288 DocumentLoader* loader = document->loader(); 8368 DocumentLoader* loader = document->loader();
8289 8369
8290 EXPECT_TRUE(loader); 8370 EXPECT_TRUE(loader);
8291 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime()); 8371 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime());
8292 } 8372 }
8293 8373
8294 } // namespace blink 8374 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698