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

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

Issue 23742003: Use css-device-adapt constraining for legacy viewport tags. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Review issue: one assignent per line/statement 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') | Source/core/dom/ViewportArguments.h » ('j') | 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 02b5ef780e77abab724e690ba8da10d86669dae1..50d5958977c02e827e768c5080b7d358963e3178 100644
--- a/Source/core/dom/Document.cpp
+++ b/Source/core/dom/Document.cpp
@@ -43,6 +43,7 @@
#include "bindings/v8/ScriptController.h"
#include "core/accessibility/AXObjectCache.h"
#include "core/animation/DocumentTimeline.h"
+#include "core/css/CSSDefaultStyleSheets.h"
#include "core/css/CSSFontSelector.h"
#include "core/css/CSSStyleDeclaration.h"
#include "core/css/CSSStyleSheet.h"
@@ -431,6 +432,7 @@ Document::Document(const DocumentInit& initializer, DocumentClassFlags documentC
, m_isViewSource(false)
, m_sawElementsInKnownNamespaces(false)
, m_isSrcdocDocument(false)
+ , m_isMobileDocument(false)
, m_renderer(0)
, m_eventQueue(DocumentEventQueue::create(this))
, m_weakFactory(this)
@@ -671,7 +673,7 @@ void Document::setDoctype(PassRefPtr<DocumentType> docType)
if (m_docType) {
this->adoptIfNeeded(m_docType.get());
if (m_docType->publicId().startsWith("-//wapforum//dtd xhtml mobile 1.", /* caseSensitive */ false))
- processViewport("width=device-width, height=device-height", ViewportArguments::XHTMLMobileProfile);
+ m_isMobileDocument = true;
}
// Doctype affects the interpretation of the stylesheets.
clearStyleResolver();
@@ -2997,17 +2999,48 @@ void Document::processViewport(const String& features, ViewportArguments::Type o
{
ASSERT(!features.isNull());
- if (origin < m_viewportArguments.type)
+ // 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)
return;
- m_viewportArguments = ViewportArguments(origin);
- processArguments(features, (void*)&m_viewportArguments, &setViewportFeature);
+ // Overwrite viewport arguments from previously encountered meta tags.
+ m_legacyViewportArguments = ViewportArguments(origin);
- if (page() && page()->settings().viewportMetaZeroValuesQuirk() && m_viewportArguments.type == ViewportArguments::ViewportMeta
- && m_viewportArguments.width == ViewportArguments::ValueDeviceWidth && !static_cast<int>(m_viewportArguments.zoom))
- m_viewportArguments.zoom = 1.0;
+ processArguments(features, (void*)&m_legacyViewportArguments, &setViewportFeature);
- updateViewportArguments();
+ 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 (m_legacyViewportArguments.maxWidth.isAuto()) {
+
+ 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 (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;
+
+ // 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();
+ }
}
void Document::updateViewportArguments()
« no previous file with comments | « Source/core/dom/Document.h ('k') | Source/core/dom/ViewportArguments.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698