Index: Source/web/tests/WebFrameTest.cpp |
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
index d39bc920fd639a006c07ef4aee8d6e911ac4ea86..e8a303a840d836fc1771be43035bdaff0aa0ce4c 100644 |
--- a/Source/web/tests/WebFrameTest.cpp |
+++ b/Source/web/tests/WebFrameTest.cpp |
@@ -687,7 +687,33 @@ TEST_F(WebFrameTest, FrameViewNeedsLayoutOnFixedLayoutResize) |
webViewHelper.webViewImpl()->layout(); |
} |
-TEST_F(WebFrameTest, ChangeInFixedLayoutTriggersTextAutosizingRecalculate) |
+// Helper function to check or set text autosizing multipliers on a document. |
+static bool checkOrSetTextAutosizingMultiplier(Document* document, float multiplier, bool setMultiplier) |
+{ |
+ bool multiplierCheckedOrSetAtLeastOnce = false; |
+ for (WebCore::RenderObject* renderer = document->renderer(); renderer; renderer = renderer->nextInPreOrder()) { |
+ if (renderer->style()) { |
+ if (setMultiplier) |
+ renderer->style()->setTextAutosizingMultiplier(multiplier); |
+ EXPECT_EQ(multiplier, renderer->style()->textAutosizingMultiplier()); |
+ multiplierCheckedOrSetAtLeastOnce = true; |
+ } |
+ } |
+ return multiplierCheckedOrSetAtLeastOnce; |
+ |
+} |
+ |
+static bool setTextAutosizingMultiplier(Document* document, float multiplier) |
+{ |
+ return checkOrSetTextAutosizingMultiplier(document, multiplier, true); |
+} |
+ |
+static bool checkTextAutosizingMultiplier(Document* document, float multiplier) |
+{ |
+ return checkOrSetTextAutosizingMultiplier(document, multiplier, false); |
+} |
+ |
+TEST_F(WebFrameTest, ChangeInFixedLayoutResetsTextAutosizingMultipliers) |
{ |
UseMockScrollbarSettings mockScrollbarSettings; |
registerMockedHttpURLLoad("fixed_layout.html"); |
@@ -696,8 +722,6 @@ TEST_F(WebFrameTest, ChangeInFixedLayoutTriggersTextAutosizingRecalculate) |
int viewportWidth = 640; |
int viewportHeight = 480; |
- // Make sure we initialize to minimum scale, even if the window size |
- // only becomes available after the load begins. |
FrameTestHelpers::WebViewHelper webViewHelper; |
webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &client, enableViewportSettings); |
@@ -707,17 +731,7 @@ TEST_F(WebFrameTest, ChangeInFixedLayoutTriggersTextAutosizingRecalculate) |
webViewHelper.webViewImpl()->resize(WebSize(viewportWidth, viewportHeight)); |
webViewHelper.webViewImpl()->layout(); |
- WebCore::RenderObject* renderer = document->renderer(); |
- bool multiplierSetAtLeastOnce = false; |
- while (renderer) { |
- if (renderer->style()) { |
- renderer->style()->setTextAutosizingMultiplier(2); |
- EXPECT_EQ(2, renderer->style()->textAutosizingMultiplier()); |
- multiplierSetAtLeastOnce = true; |
- } |
- renderer = renderer->nextInPreOrder(); |
- } |
- EXPECT_TRUE(multiplierSetAtLeastOnce); |
+ EXPECT_TRUE(setTextAutosizingMultiplier(document, 2)); |
WebCore::ViewportDescription description = document->viewportDescription(); |
// Choose a width that's not going match the viewport width of the loaded document. |
@@ -725,16 +739,37 @@ TEST_F(WebFrameTest, ChangeInFixedLayoutTriggersTextAutosizingRecalculate) |
description.maxWidth = WebCore::Length(100, WebCore::Fixed); |
webViewHelper.webViewImpl()->updatePageDefinedViewportConstraints(description); |
- bool multiplierCheckedAtLeastOnce = false; |
- renderer = document->renderer(); |
- while (renderer) { |
- if (renderer->style()) { |
- EXPECT_EQ(1, renderer->style()->textAutosizingMultiplier()); |
- multiplierCheckedAtLeastOnce = true; |
- } |
- renderer = renderer->nextInPreOrder(); |
- } |
- EXPECT_TRUE(multiplierCheckedAtLeastOnce); |
+ EXPECT_TRUE(checkTextAutosizingMultiplier(document, 1)); |
+} |
+ |
+TEST_F(WebFrameTest, SetFrameRectResetsTextAutosizingMultipliers) |
+{ |
+ UseMockScrollbarSettings mockScrollbarSettings; |
+ registerMockedHttpURLLoad("iframe_reload.html"); |
+ registerMockedHttpURLLoad("visible_iframe.html"); |
+ |
+ FixedLayoutTestWebViewClient client; |
+ int viewportWidth = 640; |
+ int viewportHeight = 480; |
+ |
+ FrameTestHelpers::WebViewHelper webViewHelper; |
+ webViewHelper.initializeAndLoad(m_baseURL + "iframe_reload.html", true, 0, &client, enableViewportSettings); |
+ |
+ WebCore::LocalFrame* mainFrame = webViewHelper.webViewImpl()->page()->mainFrame(); |
+ WebCore::Document* document = mainFrame->document(); |
+ WebCore::FrameView* frameView = webViewHelper.webViewImpl()->mainFrameImpl()->frameView(); |
+ document->settings()->setTextAutosizingEnabled(true); |
+ EXPECT_TRUE(document->settings()->textAutosizingEnabled()); |
+ webViewHelper.webViewImpl()->resize(WebSize(viewportWidth, viewportHeight)); |
+ webViewHelper.webViewImpl()->layout(); |
+ |
+ for (WebCore::LocalFrame* frame = mainFrame; frame; frame = frame->tree().traverseNext()) |
+ EXPECT_TRUE(setTextAutosizingMultiplier(frame->document(), 2)); |
+ |
+ frameView->setFrameRect(WebCore::IntRect(0, 0, 200, 200)); |
+ |
+ for (WebCore::LocalFrame* frame = mainFrame; frame; frame = frame->tree().traverseNext()) |
+ EXPECT_TRUE(checkTextAutosizingMultiplier(frame->document(), 1)); |
} |
TEST_F(WebFrameTest, FixedLayoutSizeStopsResizeFromChangingLayoutSize) |