Index: Source/core/page/Page.cpp |
diff --git a/Source/core/page/Page.cpp b/Source/core/page/Page.cpp |
index 3df282a738958a24836310ad978da761d1da342a..21e304f3ca91c79c1f7eca063d8a8b3fd426eb72 100644 |
--- a/Source/core/page/Page.cpp |
+++ b/Source/core/page/Page.cpp |
@@ -262,6 +262,14 @@ 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(); |
+ } |
+} |
+ |
void Page::refreshPlugins(bool reload) |
{ |
if (allPages().isEmpty()) |
@@ -497,11 +505,18 @@ void Page::settingsChanged(SettingsDelegate::ChangeType changeType) |
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; |
} |
} |