Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1477)

Unified Diff: Source/core/page/FrameView.cpp

Issue 19555002: Translate viewport related meta tags into @viewport descriptors as suggested by the CSS Device Adap… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Land patch upload resulted in python error Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
}

Powered by Google App Engine
This is Rietveld 408576698