Add modern API for overriding the page's specified viewport configuration
[WebKit-https.git] / Source / WebCore / css / MediaQueryMatcher.cpp
index ce01264..52a5589 100644 (file)
 #include "Document.h"
 #include "Frame.h"
 #include "FrameView.h"
+#include "Logging.h"
 #include "MediaList.h"
 #include "MediaQueryEvaluator.h"
 #include "MediaQueryList.h"
 #include "MediaQueryListListener.h"
+#include "MediaQueryParserContext.h"
 #include "NodeRenderStyle.h"
 #include "RenderElement.h"
 #include "StyleResolver.h"
 #include "StyleScope.h"
+#include <wtf/text/TextStream.h>
 
 namespace WebCore {
 
 MediaQueryMatcher::MediaQueryMatcher(Document& document)
-    : m_document(&document)
+    : m_document(makeWeakPtr(document))
 {
 }
 
-MediaQueryMatcher::~MediaQueryMatcher()
-{
-}
+MediaQueryMatcher::~MediaQueryMatcher() = default;
 
 void MediaQueryMatcher::documentDestroyed()
 {
@@ -66,7 +67,7 @@ std::unique_ptr<RenderStyle> MediaQueryMatcher::documentElementUserAgentStyle()
     if (!documentElement)
         return nullptr;
 
-    return m_document->styleScope().resolver().styleForElement(*documentElement, m_document->renderStyle(), nullptr, MatchOnlyUserAgentRules).renderStyle;
+    return m_document->styleScope().resolver().styleForElement(*documentElement, m_document->renderStyle(), nullptr, RuleMatchingBehavior::MatchOnlyUserAgentRules).renderStyle;
 }
 
 bool MediaQueryMatcher::evaluate(const MediaQuerySet& media)
@@ -82,8 +83,8 @@ RefPtr<MediaQueryList> MediaQueryMatcher::matchMedia(const String& query)
     if (!m_document)
         return nullptr;
 
-    auto media = MediaQuerySet::create(query);
-    reportMediaQueryWarningIfNeeded(m_document, media.ptr());
+    auto media = MediaQuerySet::create(query, MediaQueryParserContext(*m_document));
+    reportMediaQueryWarningIfNeeded(m_document.get(), media.ptr());
     bool result = evaluate(media.get());
     return MediaQueryList::create(*this, WTFMove(media), result);
 }
@@ -118,6 +119,8 @@ void MediaQueryMatcher::styleResolverChanged()
     if (!style)
         return;
 
+    LOG_WITH_STREAM(MediaQueries, stream << "MediaQueryMatcher::styleResolverChanged " << m_document->url());
+
     MediaQueryEvaluator evaluator { mediaType(), *m_document, style.get() };
     Vector<Listener> listeners;
     listeners.reserveInitialCapacity(m_listeners.size());