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

Unified Diff: third_party/WebKit/Source/core/css/resolver/ViewportStyleResolver.cpp

Issue 1913833002: Current work-in-progress crbug.com/567021 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More assert fixes Created 4 years, 7 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: third_party/WebKit/Source/core/css/resolver/ViewportStyleResolver.cpp
diff --git a/third_party/WebKit/Source/core/css/resolver/ViewportStyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/ViewportStyleResolver.cpp
index 1e40fcd4343b4d4246ffeb2f9f95faae56b42af8..f9c1ee77e06f765b819976b2fc127a9221cea67e 100644
--- a/third_party/WebKit/Source/core/css/resolver/ViewportStyleResolver.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/ViewportStyleResolver.cpp
@@ -32,10 +32,11 @@
#include "core/CSSValueKeywords.h"
#include "core/css/CSSDefaultStyleSheets.h"
#include "core/css/CSSPrimitiveValueMappings.h"
+#include "core/css/CSSStyleSheet.h"
#include "core/css/CSSToLengthConversionData.h"
#include "core/css/StylePropertySet.h"
#include "core/css/StyleRule.h"
-#include "core/css/resolver/ScopedStyleResolver.h"
+#include "core/css/StyleSheetContents.h"
#include "core/dom/Document.h"
#include "core/dom/NodeComputedStyle.h"
#include "core/dom/ViewportDescription.h"
@@ -45,52 +46,68 @@ namespace blink {
ViewportStyleResolver::ViewportStyleResolver(Document* document)
: m_document(document)
- , m_hasAuthorStyle(false)
{
ASSERT(m_document);
+ m_initialViewportMedium = new MediaQueryEvaluator(document->frame());
}
-void ViewportStyleResolver::collectViewportRules()
+void ViewportStyleResolver::reset()
+{
+ m_viewportDependentMediaQueryResults.clear();
+ m_deviceDependentMediaQueryResults.clear();
+ m_propertySet = nullptr;
+ m_hasAuthorStyle = false;
+}
+
+void ViewportStyleResolver::collectViewportRulesFromUASheets()
{
CSSDefaultStyleSheets& defaultStyleSheets = CSSDefaultStyleSheets::instance();
- collectViewportRules(defaultStyleSheets.defaultStyle(), UserAgentOrigin);
WebViewportStyle viewportStyle = m_document->settings() ? m_document->settings()->viewportStyle() : WebViewportStyle::Default;
- RuleSet* viewportRules = nullptr;
+ StyleSheetContents* viewportContents = nullptr;
switch (viewportStyle) {
case WebViewportStyle::Default:
break;
case WebViewportStyle::Mobile:
- viewportRules = defaultStyleSheets.defaultMobileViewportStyle();
+ viewportContents = defaultStyleSheets.ensureMobileViewportStyleSheet();
break;
case WebViewportStyle::Television:
- viewportRules = defaultStyleSheets.defaultTelevisionViewportStyle();
+ viewportContents = defaultStyleSheets.ensureTelevisionViewportStyleSheet();
break;
}
- if (viewportRules)
- collectViewportRules(viewportRules, UserAgentOrigin);
-
+ if (viewportContents)
+ collectViewportChildRules(viewportContents->childRules(), UserAgentOrigin);
if (m_document->isMobileDocument())
- collectViewportRules(defaultStyleSheets.defaultXHTMLMobileProfileStyle(), UserAgentOrigin);
+ collectViewportChildRules(defaultStyleSheets.ensureXHTMLMobileProfileStyleSheet()->childRules(), UserAgentOrigin);
+}
+
+void ViewportStyleResolver::collectViewportRulesFromAuthorSheet(const CSSStyleSheet& sheet)
+{
+ if (!sheet.contents()->hasViewportRule())
+ return;
- if (ScopedStyleResolver* scopedResolver = m_document->scopedStyleResolver())
- scopedResolver->collectViewportRulesTo(this);
+ if (sheet.mediaQueries() && !m_initialViewportMedium->eval(sheet.mediaQueries(), &m_viewportDependentMediaQueryResults, &m_deviceDependentMediaQueryResults))
+ return;
- resolve();
+ collectViewportChildRules(sheet.contents()->childRules(), AuthorOrigin);
}
-void ViewportStyleResolver::collectViewportRules(RuleSet* rules, Origin origin)
+void ViewportStyleResolver::collectViewportChildRules(const HeapVector<Member<StyleRuleBase>>& rules, Origin origin)
{
- rules->compactRulesIfNeeded();
-
- const HeapVector<Member<StyleRuleViewport>>& viewportRules = rules->viewportRules();
- for (size_t i = 0; i < viewportRules.size(); ++i)
- addViewportRule(viewportRules[i], origin);
+ for (auto& rule : rules) {
+ if (rule->isViewportRule())
+ addViewportRule(*toStyleRuleViewport(rule), origin);
+ if (!rule->isMediaRule())
+ continue;
+ StyleRuleMedia* mediaRule = toStyleRuleMedia(rule);
+ if (!mediaRule->mediaQueries() || m_initialViewportMedium->eval(mediaRule->mediaQueries(), &m_viewportDependentMediaQueryResults, &m_deviceDependentMediaQueryResults))
+ collectViewportChildRules(mediaRule->childRules(), origin);
+ }
}
-void ViewportStyleResolver::addViewportRule(StyleRuleViewport* viewportRule, Origin origin)
+void ViewportStyleResolver::addViewportRule(StyleRuleViewport& viewportRule, Origin origin)
{
- StylePropertySet& propertySet = viewportRule->mutableProperties();
+ StylePropertySet& propertySet = viewportRule.mutableProperties();
unsigned propertyCount = propertySet.propertyCount();
if (!propertyCount)
@@ -130,9 +147,6 @@ void ViewportStyleResolver::resolve()
description.orientation = viewportArgumentValue(CSSPropertyOrientation);
m_document->setViewportDescription(description);
-
- m_propertySet = nullptr;
- m_hasAuthorStyle = false;
}
float ViewportStyleResolver::viewportArgumentValue(CSSPropertyID id) const
@@ -226,8 +240,11 @@ Length ViewportStyleResolver::viewportLengthValue(CSSPropertyID id) const
DEFINE_TRACE(ViewportStyleResolver)
{
- visitor->trace(m_propertySet);
visitor->trace(m_document);
+ visitor->trace(m_propertySet);
+ visitor->trace(m_initialViewportMedium);
+ visitor->trace(m_viewportDependentMediaQueryResults);
+ visitor->trace(m_deviceDependentMediaQueryResults);
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/css/resolver/ViewportStyleResolver.h ('k') | third_party/WebKit/Source/core/dom/Document.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698