| 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()
|
|
|