Index: Source/core/page/Page.cpp |
diff --git a/Source/core/page/Page.cpp b/Source/core/page/Page.cpp |
index a82d7dd4ac3300ebce6ca41c20751af11b552277..e8539a302af18b652c9c1b88c7f133d09a63eb05 100644 |
--- a/Source/core/page/Page.cpp |
+++ b/Source/core/page/Page.cpp |
@@ -262,6 +262,16 @@ void Page::setNeedsRecalcStyleInAllFrames() |
frame->document()->styleResolverChanged(RecalcStyleDeferred); |
} |
+void Page::setNeedsLayoutInAllFrames() |
+{ |
+ for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { |
+ if (FrameView* view = frame->view()) { |
+ view->setNeedsLayout(); |
+ view->scheduleRelayout(); |
+ } |
+ } |
+} |
+ |
void Page::refreshPlugins(bool reload) |
{ |
if (allPages().isEmpty()) |
@@ -491,17 +501,32 @@ void Page::settingsChanged(SettingsDelegate::ChangeType changeType) |
} |
break; |
case SettingsDelegate::TextAutosizingChange: |
+ // FastTextAutosizer works with RenderBlock::styleWillChange. |
skobes
2014/02/14 18:11:04
This comment is misleading. FTA gathers some info
tasak
2014/02/17 02:39:25
I modified to use setNeedsRecalc and setNeedsLayou
|
+ // TextAutosizer depends on FrameView::layout. |
+ // If fastTextAutosizing is enabled, we should use setNeedsRecalcStyleInAllFrames. |
+ if (RuntimeEnabledFeatures::fastTextAutosizingEnabled()) { |
+ setNeedsRecalcStyleInAllFrames(); |
+ break; |
+ } |
+ |
// FIXME: I wonder if this needs to traverse frames like in WebViewImpl::resize, or whether there is only one document per Settings instance? |
for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { |
TextAutosizer* textAutosizer = frame->document()->textAutosizer(); |
if (textAutosizer) |
textAutosizer->recalculateMultipliers(); |
} |
- setNeedsRecalcStyleInAllFrames(); |
+ // TextAutosizing updates RenderStyle during layout phase (via TextAutosizer::processSubtree). |
+ // We should invoke setNeedsLayout here. |
+ setNeedsLayoutInAllFrames(); |
break; |
case SettingsDelegate::ScriptEnableChange: |
m_inspectorController->scriptsEnabled(settings().scriptEnabled()); |
break; |
+ case SettingsDelegate::FontFamilyChange: |
+ for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) |
+ frame->document()->styleEngine()->updateGenericFontFamilySettings(); |
+ setNeedsRecalcStyleInAllFrames(); |
+ break; |
} |
} |