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

Unified Diff: Source/core/dom/Document.cpp

Issue 23809007: Refactor the viewport code to be more understandable (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 3 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
« no previous file with comments | « Source/core/dom/Document.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/dom/Document.cpp
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp
index 374b38cd737e201164dc1ef6123a0c5d0a044689..c944586ea9bd07e010f3c38cda5956402a32064a 100644
--- a/Source/core/dom/Document.cpp
+++ b/Source/core/dom/Document.cpp
@@ -3038,48 +3038,62 @@ void Document::processViewport(const String& features, ViewportArguments::Type o
{
ASSERT(!features.isNull());
- // We are adding viewport properties from a legacy meta tag.
- // The different meta tags have different priorities based on the type regardless
- // of which order they appear in the DOM. The priority is given by the
- // ViewportArguments::Type enum. If we process viewport properties with a lower
- // priority than an already processed meta tag, just ignore it.
- if (origin < m_legacyViewportArguments.type)
+ if (!page() || !shouldOverrideLegacyViewport(origin))
return;
- // Overwrite viewport arguments from previously encountered meta tags.
- m_legacyViewportArguments = ViewportArguments(origin);
+ ViewportArguments newArgumentsFromLegacyTag(origin);
+ processArguments(features, (void*)&newArgumentsFromLegacyTag, &setViewportFeature);
- processArguments(features, (void*)&m_legacyViewportArguments, &setViewportFeature);
+ if (newArgumentsFromLegacyTag.minZoom == ViewportArguments::ValueAuto)
+ newArgumentsFromLegacyTag.minZoom = 0.25;
- if (m_legacyViewportArguments.minZoom == ViewportArguments::ValueAuto)
- m_legacyViewportArguments.minZoom = 0.25;
-
- if (m_legacyViewportArguments.maxZoom == ViewportArguments::ValueAuto) {
- m_legacyViewportArguments.maxZoom = 5;
- if (m_legacyViewportArguments.minZoom > 5)
- m_legacyViewportArguments.minZoom = 5;
+ if (newArgumentsFromLegacyTag.maxZoom == ViewportArguments::ValueAuto) {
+ newArgumentsFromLegacyTag.maxZoom = 5;
+ newArgumentsFromLegacyTag.minZoom = std::min(newArgumentsFromLegacyTag.minZoom, float(5));
}
- if (m_legacyViewportArguments.maxWidth.isAuto()) {
+ const Settings& settings = document().page()->settings();
- if (m_legacyViewportArguments.zoom == ViewportArguments::ValueAuto) {
- m_legacyViewportArguments.minWidth = Length(ExtendToZoom);
- m_legacyViewportArguments.maxWidth = Length(page()->settings().layoutFallbackWidth(), Fixed);
- } else if (m_legacyViewportArguments.maxHeight.isAuto()) {
- m_legacyViewportArguments.minWidth = m_legacyViewportArguments.maxWidth = Length(ExtendToZoom);
+ if (newArgumentsFromLegacyTag.maxWidth.isAuto()) {
+ if (newArgumentsFromLegacyTag.zoom == ViewportArguments::ValueAuto) {
+ newArgumentsFromLegacyTag.minWidth = Length(ExtendToZoom);
+ newArgumentsFromLegacyTag.maxWidth = Length(settings.layoutFallbackWidth(), Fixed);
+ } else if (newArgumentsFromLegacyTag.maxHeight.isAuto()) {
+ newArgumentsFromLegacyTag.minWidth = Length(ExtendToZoom);
+ newArgumentsFromLegacyTag.maxWidth = Length(ExtendToZoom);
}
}
- if (page() && page()->settings().viewportMetaZeroValuesQuirk() && m_legacyViewportArguments.type == ViewportArguments::ViewportMeta
- && m_legacyViewportArguments.maxWidth.type() == ViewportPercentageWidth && !static_cast<int>(m_legacyViewportArguments.zoom))
- m_legacyViewportArguments.zoom = 1.0;
+ if (settings.viewportMetaZeroValuesQuirk()
+ && newArgumentsFromLegacyTag.type == ViewportArguments::ViewportMeta
+ && newArgumentsFromLegacyTag.maxWidth.type() == ViewportPercentageWidth
+ && !static_cast<int>(newArgumentsFromLegacyTag.zoom)) {
+ newArgumentsFromLegacyTag.zoom = 1.0;
+ }
+
+ setViewportArguments(newArgumentsFromLegacyTag);
+}
+
+void Document::setViewportArguments(const ViewportArguments& viewportArguments)
+{
+ if (viewportArguments.isLegacyViewportType()) {
+ m_legacyViewportArguments = viewportArguments;
- // When no author style for @viewport is present, and a meta tag for defining the
- // viewport is present, apply the meta tag viewport arguments instead of the UA styles.
- if (m_viewportArguments.type != ViewportArguments::AuthorStyleSheet) {
- m_viewportArguments = m_legacyViewportArguments;
- updateViewportArguments();
+ // When no author style for @viewport is present, and a meta tag for defining
+ // the viewport is, apply the meta tag viewport instead of the UA styles.
+ if (m_viewportArguments.type == ViewportArguments::AuthorStyleSheet)
+ return;
+ m_viewportArguments = viewportArguments;
+ } else {
+ // If the legacy viewport tag has higher priority than the cascaded @viewport
+ // descriptors, use the values from the legacy tag.
+ if (!shouldOverrideLegacyViewport(viewportArguments.type))
+ m_viewportArguments = m_legacyViewportArguments;
+ else
+ m_viewportArguments = viewportArguments;
}
+
+ updateViewportArguments();
}
void Document::updateViewportArguments()
« no previous file with comments | « Source/core/dom/Document.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698