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 4732abbea43b1ee1d7ee0c29d14729912d97a4f6..8e5b501cf0e60e9b174a6013c2b1713f9ef67118 100644 |
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
@@ -58,6 +58,7 @@ |
#include "core/frame/RemoteFrame.h" |
#include "core/frame/Settings.h" |
#include "core/frame/VisualViewport.h" |
+#include "core/html/HTMLBodyElement.h" |
#include "core/html/HTMLDocument.h" |
#include "core/html/HTMLFormElement.h" |
#include "core/html/HTMLMediaElement.h" |
@@ -1576,6 +1577,70 @@ 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. |
+ Document* childDocument = toWebLocalFrameImpl(localFrame)->frame()->document(); |
+ EXPECT_EQ(11, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNames::marginwidthAttr)); |
+ EXPECT_EQ(22, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNames::marginheightAttr)); |
+ |
+ 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"); |
+ |
+ Document* childDocument = toWebLocalFrameImpl(localFrame)->frame()->document(); |
+ EXPECT_EQ(0, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNames::marginwidthAttr)); |
+ EXPECT_EQ(0, childDocument->firstBodyElement()->getIntegralAttribute(HTMLNames::marginheightAttr)); |
+ |
+ FrameView* frameView = static_cast<WebLocalFrameImpl*>(localFrame)->frameView(); |
+ EXPECT_EQ(nullptr, frameView->horizontalScrollbar()); |
+ EXPECT_EQ(nullptr, frameView->verticalScrollbar()); |
+ |
+ view->close(); |
+} |
+ |
+ |
TEST_P(ParameterizedWebFrameTest, SetForceZeroLayoutHeightWorksAcrossNavigations) |
{ |
registerMockedHttpURLLoad("200-by-300.html"); |
@@ -5869,7 +5934,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++; |
@@ -6258,7 +6323,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; |
@@ -6917,7 +6982,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); |
@@ -6952,7 +7017,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 |
@@ -7028,7 +7093,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 |
@@ -7067,7 +7132,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 |
@@ -7103,7 +7168,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 |
@@ -7148,7 +7213,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 |
@@ -7192,7 +7257,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;")); |
@@ -7226,7 +7291,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()); |
@@ -7297,7 +7362,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")); |
@@ -7324,7 +7389,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")); |
@@ -7372,7 +7437,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()); |
@@ -7397,7 +7462,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()); |
@@ -7535,7 +7600,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 |
@@ -7558,7 +7623,7 @@ TEST_F(WebFrameTest, SwapWithOpenerCycle) |
// Now swap in a local frame. It shouldn't crash. |
FrameTestHelpers::TestWebFrameClient localClient; |
WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document, &localClient); |
- localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None); |
+ localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags::None, WebFrameOwnerProperties()); |
remoteFrame->swap(localFrame); |
// And the opener cycle should still be preserved. |
@@ -7595,7 +7660,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()); |
@@ -7621,7 +7686,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); |
@@ -7841,10 +7906,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()); |
@@ -7879,7 +7944,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. |
@@ -7901,12 +7966,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 |