Index: Source/core/page/FrameView.cpp |
diff --git a/Source/core/page/FrameView.cpp b/Source/core/page/FrameView.cpp |
index 26badff745b01edc786294db90f39d5761b6e9c3..2714c5f8a44080f4cc13d86befbb4c30bb3e7a7d 100644 |
--- a/Source/core/page/FrameView.cpp |
+++ b/Source/core/page/FrameView.cpp |
@@ -33,6 +33,7 @@ |
#include "core/animation/DocumentTimeline.h" |
#include "core/css/FontLoader.h" |
#include "core/css/resolver/StyleResolver.h" |
+#include "core/css/resolver/ViewportStyleResolver.h" |
#include "core/dom/DocumentMarkerController.h" |
#include "core/dom/OverflowEvent.h" |
#include "core/editing/FrameSelection.h" |
@@ -2206,9 +2207,12 @@ void FrameView::performPostLayoutTasks() |
if (page) |
milestonesOfInterest = page->layoutMilestones(); |
+ bool viewportDidChange = false; |
+ |
if (m_nestedLayoutCount <= 1) { |
if (m_firstLayoutCallbackPending) { |
m_firstLayoutCallbackPending = false; |
+ viewportDidChange = true; |
m_frame->loader()->didFirstLayout(); |
if (milestonesOfInterest & DidFirstLayout) |
milestonesAchieved |= DidFirstLayout; |
@@ -2251,25 +2255,29 @@ void FrameView::performPostLayoutTasks() |
m_actionScheduler->resume(); |
- // Viewport-dependent media queries may cause us to need completely different style information. |
- if (m_frame->document()->styleResolver()->affectedByViewportChange()) { |
+ IntSize currentSize = layoutSize(IncludeScrollbars); |
+ float currentZoomFactor = renderView->style()->zoom(); |
+ |
+ bool didResize = currentSize != m_lastViewportSize || currentZoomFactor != m_lastZoomFactor; |
+ viewportDidChange |= didResize; |
+ |
+ m_lastViewportSize = currentSize; |
+ m_lastZoomFactor = currentZoomFactor; |
+ |
+ // Viewport-dependent media queries and @viewport rue may cause us to need completely |
+ // different style information. |
+ if (viewportDidChange && m_frame->document()->styleResolver()->affectedByViewportChange()) { |
+ m_frame->document()->styleResolver()->viewportStyleResolver()->resolve(); |
m_frame->document()->styleResolverChanged(DeferRecalcStyle); |
InspectorInstrumentation::mediaQueryResultChanged(m_frame->document()); |
} |
// Refetch render view since it can be destroyed by updateWidget() call above. |
renderView = this->renderView(); |
- if (renderView && !renderView->printing()) { |
- IntSize currentSize = layoutSize(IncludeScrollbars); |
- float currentZoomFactor = renderView->style()->zoom(); |
- bool resized = !m_firstLayout && (currentSize != m_lastViewportSize || currentZoomFactor != m_lastZoomFactor); |
- m_lastViewportSize = currentSize; |
- m_lastZoomFactor = currentZoomFactor; |
- if (resized) { |
- m_frame->eventHandler()->sendResizeEvent(); |
- if (page && page->mainFrame() == m_frame) |
- InspectorInstrumentation::didResizeMainFrame(page); |
- } |
+ if (renderView && !renderView->printing() && !m_firstLayout && didResize) { |
+ m_frame->eventHandler()->sendResizeEvent(); |
+ if (page && page->mainFrame() == m_frame) |
+ InspectorInstrumentation::didResizeMainFrame(page); |
} |
} |