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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
index a43202e5cb4bf03f1c4368f662ae606d4f9e8acf..f9c82b41db890b955cfe27b48ffeb48d815943ab 100644
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -1606,6 +1606,86 @@ TEST_F(WebFrameTest, SetForceZeroLayoutHeightWorksWithRelayoutsWhenHeightChanged
EXPECT_EQ(String("updatedValue"), element->innerText());
}
+TEST_F(WebFrameTest, FrameOwnerPropertiesMargin)
+{
+ FrameTestHelpers::TestWebViewClient viewClient;
+ FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
+ WebView* view = WebView::create(&viewClient);
+ view->settings()->setJavaScriptEnabled(true);
+ view->setMainFrame(remoteClient.frame());
+ WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame();
+ root->setReplicatedOrigin(SecurityOrigin::createUnique());
+
+ WebFrameOwnerProperties properties;
+ properties.marginWidth = 11;
+ properties.marginHeight = 22;
+ FrameTestHelpers::TestWebFrameClient localFrameClient;
+ WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties);
+
+ registerMockedHttpURLLoad("frame_owner_properties.html");
+ FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.html");
+
+ {
+ // Check if the LocalFrame has seen the marginwidth and marginheight
+ // properties.
+ v8::HandleScope handleScope(v8::Isolate::GetCurrent());
+
+ v8::Local<v8::Value> marginWidthResult = localFrame->executeScriptAndReturnValue(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
+ ASSERT_TRUE(marginWidthResult->IsInt32());
+ EXPECT_EQ(11, marginWidthResult.As<v8::Int32>()->Value());
+
+ v8::Local<v8::Value> marginHeightResult = localFrame->executeScriptAndReturnValue(WebScriptSource("parseInt(document.body.getAttribute('marginheight') || '0');"));
+ ASSERT_TRUE(marginHeightResult->IsInt32());
+ EXPECT_EQ(22, marginHeightResult.As<v8::Int32>()->Value());
+ }
+
+ FrameView* frameView = toWebLocalFrameImpl(localFrame)->frameView();
+ // Expect scrollbars to be enabled by default.
+ EXPECT_NE(nullptr, frameView->horizontalScrollbar());
+ EXPECT_NE(nullptr, frameView->verticalScrollbar());
+
+ view->close();
+}
+
+TEST_F(WebFrameTest, FrameOwnerPropertiesScrolling)
+{
+ FrameTestHelpers::TestWebViewClient viewClient;
+ FrameTestHelpers::TestWebRemoteFrameClient remoteClient;
+ WebView* view = WebView::create(&viewClient);
+ view->settings()->setJavaScriptEnabled(true);
+ view->setMainFrame(remoteClient.frame());
+ WebRemoteFrame* root = view->mainFrame()->toWebRemoteFrame();
+ root->setReplicatedOrigin(SecurityOrigin::createUnique());
+
+ WebFrameOwnerProperties properties;
+ // Turn off scrolling in the subframe.
+ properties.scrollingMode = WebFrameOwnerProperties::ScrollingMode::AlwaysOff;
+ FrameTestHelpers::TestWebFrameClient localFrameClient;
+ WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &localFrameClient, nullptr, properties);
+
+ registerMockedHttpURLLoad("frame_owner_properties.html");
+ FrameTestHelpers::loadFrame(localFrame, m_baseURL + "frame_owner_properties.html");
+
+ {
+ v8::HandleScope handleScope(v8::Isolate::GetCurrent());
+
+ v8::Local<v8::Value> marginWidthResult = localFrame->executeScriptAndReturnValue(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.
+ ASSERT_TRUE(marginWidthResult->IsInt32());
+ EXPECT_EQ(0, marginWidthResult.As<v8::Int32>()->Value());
+
+ v8::Local<v8::Value> marginHeightResult = localFrame->executeScriptAndReturnValue(WebScriptSource("parseInt(document.body.getAttribute('marginheight') || '0');"));
+ ASSERT_TRUE(marginHeightResult->IsInt32());
+ EXPECT_EQ(0, marginHeightResult.As<v8::Int32>()->Value());
+ }
+
+ FrameView* frameView = static_cast<WebLocalFrameImpl*>(localFrame)->frameView();
+ EXPECT_EQ(nullptr, frameView->horizontalScrollbar());
+ EXPECT_EQ(nullptr, frameView->verticalScrollbar());
+
+ view->close();
+}
+
+
TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations)
{
UseMockScrollbarSettings mockScrollbarSettings;
@@ -5927,7 +6007,7 @@ public:
int willSendRequestCallCount() const { return m_willSendRequestCallCount; }
int childFrameCreationCount() const { return m_childFrameCreationCount; }
- virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, const WebString&, WebSandboxFlags)
+ virtual WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, const WebString&, WebSandboxFlags, const WebFrameOwnerProperties& frameOwnerProperties)
{
ASSERT(m_childClient);
m_childFrameCreationCount++;
@@ -6316,7 +6396,7 @@ class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient {
public:
FailCreateChildFrame() : m_callCount(0) { }
- WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, const WebString& frameName, WebSandboxFlags sandboxFlags) override
+ WebFrame* createChildFrame(WebLocalFrame* parent, WebTreeScopeType scope, const WebString& frameName, WebSandboxFlags sandboxFlags, const WebFrameOwnerProperties& frameOwnerProperties) override
{
++m_callCount;
return 0;
@@ -7014,7 +7094,7 @@ TEST_P(ParameterizedWebFrameTest, EmbedderTriggeredDetachWithRemoteMainFrame)
WebView* view = WebView::create(&viewClient);
view->setMainFrame(remoteClient.frame());
FrameTestHelpers::TestWebFrameClient childFrameClient;
- WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr);
+ WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameOwnerProperties());
// Purposely keep the LocalFrame alive so it's the last thing to be destroyed.
RefPtrWillBePersistent<Frame> childCoreFrame = toCoreFrame(childFrame);
@@ -7049,7 +7129,7 @@ TEST_F(WebFrameSwapTest, SwapMainFrame)
FrameTestHelpers::TestWebFrameClient client;
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
remoteFrame->swap(localFrame);
// Finally, make sure an embedder triggered load in the local frame swapped
@@ -7113,7 +7193,7 @@ TEST_F(WebFrameSwapTest, SwapFirstChild)
FrameTestHelpers::TestWebFrameClient client;
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
swapAndVerifyFirstChildConsistency("remote->local", mainFrame(), localFrame);
// FIXME: This almost certainly fires more load events on the iframe element
@@ -7152,7 +7232,7 @@ TEST_F(WebFrameSwapTest, SwapMiddleChild)
FrameTestHelpers::TestWebFrameClient client;
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
swapAndVerifyMiddleChildConsistency("remote->local", mainFrame(), localFrame);
// FIXME: This almost certainly fires more load events on the iframe element
@@ -7188,7 +7268,7 @@ TEST_F(WebFrameSwapTest, SwapLastChild)
FrameTestHelpers::TestWebFrameClient client;
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
swapAndVerifyLastChildConsistency("remote->local", mainFrame(), localFrame);
// FIXME: This almost certainly fires more load events on the iframe element
@@ -7233,7 +7313,7 @@ TEST_F(WebFrameSwapTest, SwapParentShouldDetachChildren)
FrameTestHelpers::TestWebFrameClient client;
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
swapAndVerifySubframeConsistency("remote->local", targetFrame, localFrame);
// FIXME: This almost certainly fires more load events on the iframe element
@@ -7277,7 +7357,7 @@ TEST_F(WebFrameSwapTest, SwapPreservesGlobalContext)
// Now check that remote -> local works too, since it goes through a different code path.
FrameTestHelpers::TestWebFrameClient client;
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
remoteFrame->swap(localFrame);
v8::Local<v8::Value> localWindow = mainFrame()->executeScriptAndReturnValue(WebScriptSource(
"document.querySelector('#frame2').contentWindow;"));
@@ -7311,7 +7391,7 @@ TEST_F(WebFrameSwapTest, SwapInitializesGlobal)
FrameTestHelpers::TestWebFrameClient client;
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
remoteFrame->swap(localFrame);
v8::Local<v8::Value> localWindowTop = mainFrame()->executeScriptAndReturnValue(WebScriptSource("saved.top"));
EXPECT_TRUE(localWindowTop->IsObject());
@@ -7382,7 +7462,7 @@ TEST_F(WebFrameSwapTest, FramesOfRemoteParentAreIndexable)
remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique());
FrameTestHelpers::TestWebFrameClient childFrameClient;
- WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr);
+ WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameOwnerProperties());
FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html");
v8::Local<v8::Value> window = childFrame->executeScriptAndReturnValue(WebScriptSource("window"));
@@ -7409,7 +7489,7 @@ TEST_F(WebFrameSwapTest, FrameElementInFramesWithRemoteParent)
remoteParentFrame->setReplicatedOrigin(SecurityOrigin::createUnique());
FrameTestHelpers::TestWebFrameClient childFrameClient;
- WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr);
+ WebLocalFrame* childFrame = remoteParentFrame->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameOwnerProperties());
FrameTestHelpers::loadFrame(childFrame, m_baseURL + "subframe-hello.html");
v8::Local<v8::Value> frameElement = childFrame->executeScriptAndReturnValue(WebScriptSource("window.frameElement"));
@@ -7456,7 +7536,7 @@ TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterNewRemoteToLocalSwap)
RemoteToLocalSwapWebFrameClient client(remoteFrame);
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
EXPECT_EQ(WebInitialCommitInChildFrame, client.historyCommitType());
@@ -7481,7 +7561,7 @@ TEST_F(WebFrameSwapTest, HistoryCommitTypeAfterExistingRemoteToLocalSwap)
RemoteToLocalSwapWebFrameClient client(remoteFrame);
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &client);
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None);
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
localFrame->setCommittedFirstRealLoad();
FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html");
EXPECT_EQ(WebStandardCommit, client.historyCommitType());
@@ -7619,7 +7699,7 @@ TEST_F(WebFrameTest, NavigateRemoteToLocalWithOpener)
// Do a remote-to-local swap in the popup.
FrameTestHelpers::TestWebFrameClient popupLocalClient;
WebLocalFrame* popupLocalFrame = WebLocalFrame::create(WebTreeScopeType::Document, &popupLocalClient);
- popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSandboxFlags::None);
+ popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties());
popupRemoteFrame->swap(popupLocalFrame);
// The initial document created during the remote-to-local swap should have
@@ -7657,7 +7737,7 @@ TEST_P(ParameterizedWebFrameTest, RemoteFrameInitialCommitType)
// If an iframe has a remote main frame, ensure the inital commit is correctly identified as WebInitialCommitInChildFrame.
CommitTypeWebFrameClient childFrameClient;
- WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr);
+ WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameOwnerProperties());
registerMockedHttpURLLoad("foo.html");
FrameTestHelpers::loadFrame(childFrame, m_baseURL + "foo.html");
EXPECT_EQ(WebInitialCommitInChildFrame, childFrameClient.historyCommitType());
@@ -7683,7 +7763,7 @@ TEST_P(ParameterizedWebFrameTest, FrameWidgetTest)
view->setMainFrame(remoteClient.frame());
FrameTestHelpers::TestWebFrameClient childFrameClient;
- WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr);
+ WebLocalFrame* childFrame = view->mainFrame()->toWebRemoteFrame()->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &childFrameClient, nullptr, WebFrameOwnerProperties());
GestureEventTestWebViewClient childViewClient;
WebFrameWidget* widget = WebFrameWidget::create(&childViewClient, childFrame);
@@ -7903,10 +7983,10 @@ TEST_P(ParameterizedWebFrameTest, CreateLocalChildWithPreviousSibling)
view->setMainFrame(remoteClient.frame());
WebRemoteFrame* parent = view->mainFrame()->toWebRemoteFrame();
- WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, nullptr);
- WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, secondFrame);
- WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, secondFrame);
- WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, nullptr);
+ WebLocalFrameScope secondFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties());
+ WebLocalFrameScope fourthFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerProperties());
+ WebLocalFrameScope thirdFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, secondFrame, WebFrameOwnerProperties());
+ WebLocalFrameScope firstFrame = parent->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, nullptr, nullptr, WebFrameOwnerProperties());
EXPECT_EQ(firstFrame, parent->firstChild());
EXPECT_EQ(nullptr, firstFrame->previousSibling());
@@ -7941,7 +8021,7 @@ TEST_P(ParameterizedWebFrameTest, SendBeaconFromChildWithRemoteMainFrame)
root->setReplicatedOrigin(SecurityOrigin::createUnique());
FrameTestHelpers::TestWebFrameClient localFrameClient;
- WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &localFrameClient, nullptr);
+ WebLocalFrame* localFrame = root->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &localFrameClient, nullptr, WebFrameOwnerProperties());
// Finally, make sure an embedder triggered load in the local frame swapped
// back in works.
@@ -7963,12 +8043,12 @@ TEST_P(ParameterizedWebFrameTest, RemoteToLocalSwapOnMainFrameInitializesCoreFra
remoteRoot->setReplicatedOrigin(SecurityOrigin::createUnique());
FrameTestHelpers::TestWebFrameClient localFrameClient;
- remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &localFrameClient, nullptr);
+ remoteRoot->createLocalChild(WebTreeScopeType::Document, "", WebSandboxFlags::None, &localFrameClient, nullptr, WebFrameOwnerProperties());
// Do a remote-to-local swap of the top frame.
FrameTestHelpers::TestWebFrameClient localClient;
WebLocalFrame* localRoot = WebLocalFrame::create(WebTreeScopeType::Document, &localClient);
- localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::None);
+ localRoot->initializeToReplaceRemoteFrame(remoteRoot, "", WebSandboxFlags::None, WebFrameOwnerProperties());
remoteRoot->swap(localRoot);
// Load a page with a child frame in the new root to make sure this doesn't

Powered by Google App Engine
This is Rietveld 408576698