Title: [118659] trunk/Source/WebCore
Revision
118659
Author
zandober...@gmail.com
Date
2012-05-28 02:14:38 -0700 (Mon, 28 May 2012)

Log Message

Unreviewed, rolling out r118650.
http://trac.webkit.org/changeset/118650
https://bugs.webkit.org/show_bug.cgi?id=87639

Patch caused massive failures throughout the builders
(Requested by zdobersek on #webkit).

Patch by Sheriff Bot <webkit.review....@gmail.com> on 2012-05-28

* css/MediaQuery.cpp:
(WebCore):
(WebCore::MediaQuery::serialize):
(WebCore::MediaQuery::MediaQuery):
(WebCore::MediaQuery::cssText):
* css/MediaQuery.h:
(WebCore::MediaQuery::expressions):
(WebCore::MediaQuery::mediaType):
(MediaQuery):
(WebCore::MediaQuery::copy):
* css/MediaQueryEvaluator.cpp:
(WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
(WebCore::MediaQueryEvaluator):
(WebCore::MediaQueryEvaluator::eval):
(WebCore::aspect_ratioMediaFeatureEval):
(WebCore::device_aspect_ratioMediaFeatureEval):
(WebCore::transform_3dMediaFeatureEval):
(WebCore::view_modeMediaFeatureEval):
(WebCore::createFunctionMap):
* css/MediaQueryEvaluator.h:
(WebCore):
(MediaQueryEvaluator):
* css/StyleResolver.cpp:
(WebCore):
(WebCore::StyleResolver::collectMatchingRulesForList):
* css/StyleResolver.h:
(MediaQueryResult):
(WebCore::MediaQueryResult::MediaQueryResult):
(WebCore):
(StyleResolver):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (118658 => 118659)


--- trunk/Source/WebCore/ChangeLog	2012-05-28 09:08:40 UTC (rev 118658)
+++ trunk/Source/WebCore/ChangeLog	2012-05-28 09:14:38 UTC (rev 118659)
@@ -1,3 +1,43 @@
+2012-05-28  Sheriff Bot  <webkit.review....@gmail.com>
+
+        Unreviewed, rolling out r118650.
+        http://trac.webkit.org/changeset/118650
+        https://bugs.webkit.org/show_bug.cgi?id=87639
+
+        Patch caused massive failures throughout the builders
+        (Requested by zdobersek on #webkit).
+
+        * css/MediaQuery.cpp:
+        (WebCore):
+        (WebCore::MediaQuery::serialize):
+        (WebCore::MediaQuery::MediaQuery):
+        (WebCore::MediaQuery::cssText):
+        * css/MediaQuery.h:
+        (WebCore::MediaQuery::expressions):
+        (WebCore::MediaQuery::mediaType):
+        (MediaQuery):
+        (WebCore::MediaQuery::copy):
+        * css/MediaQueryEvaluator.cpp:
+        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
+        (WebCore::MediaQueryEvaluator):
+        (WebCore::MediaQueryEvaluator::eval):
+        (WebCore::aspect_ratioMediaFeatureEval):
+        (WebCore::device_aspect_ratioMediaFeatureEval):
+        (WebCore::transform_3dMediaFeatureEval):
+        (WebCore::view_modeMediaFeatureEval):
+        (WebCore::createFunctionMap):
+        * css/MediaQueryEvaluator.h:
+        (WebCore):
+        (MediaQueryEvaluator):
+        * css/StyleResolver.cpp:
+        (WebCore):
+        (WebCore::StyleResolver::collectMatchingRulesForList):
+        * css/StyleResolver.h:
+        (MediaQueryResult):
+        (WebCore::MediaQueryResult::MediaQueryResult):
+        (WebCore):
+        (StyleResolver):
+
 2012-05-28  Gyuyoung Kim  <gyuyoung....@samsung.com>
 
         Move allowRoundingHacks to Internals interface

Modified: trunk/Source/WebCore/css/MediaQuery.cpp (118658 => 118659)


--- trunk/Source/WebCore/css/MediaQuery.cpp	2012-05-28 09:08:40 UTC (rev 118658)
+++ trunk/Source/WebCore/css/MediaQuery.cpp	2012-05-28 09:14:38 UTC (rev 118659)
@@ -35,6 +35,7 @@
 
 namespace WebCore {
 
+// http://dev.w3.org/csswg/cssom/#serialize-a-media-query
 String MediaQuery::serialize() const
 {
     StringBuilder result;
@@ -65,7 +66,6 @@
         result.append(" and ");
         result.append(m_expressions->at(i)->serialize());
     }
-
     return result.toString();
 }
 
@@ -74,33 +74,32 @@
     return codePointCompare(a->serialize(), b->serialize()) < 0;
 }
 
-MediaQuery::MediaQuery(Restrictor restrictor, const String& mediaType, PassOwnPtr<ExpressionVector> expressions)
-    : m_restrictor(restrictor)
+
+MediaQuery::MediaQuery(Restrictor r, const String& mediaType, PassOwnPtr<Vector<OwnPtr<MediaQueryExp> > > exprs)
+    : m_restrictor(r)
     , m_mediaType(mediaType.lower())
-    , m_expressions(expressions)
+    , m_expressions(exprs)
     , m_ignored(false)
 {
     if (!m_expressions) {
-        m_expressions = adoptPtr(new ExpressionVector);
+        m_expressions = adoptPtr(new Vector<OwnPtr<MediaQueryExp> >);
         return;
     }
 
-    ExpressionVector& vector = *m_expressions;
+    nonCopyingSort(m_expressions->begin(), m_expressions->end(), expressionCompare);
 
-    nonCopyingSort(vector.begin(), vector.end(), expressionCompare);
+    // remove all duplicated expressions
+    String key;
+    for (int i = m_expressions->size() - 1; i >= 0; --i) {
 
-    String previousSerializedExpression;
-    for (size_t i = vector.size(); i; ) {
-        --i;
+        // if not all of the expressions is valid the media query must be ignored.
+        if (!m_ignored)
+            m_ignored = !m_expressions->at(i)->isValid();
 
-        // If any _expression_ is invalid, the entire media query must be ignored.
-        m_ignored = m_ignored || !vector[i]->isValid();
-
-        // Remove duplicate expressions.
-        String serializedExpression = vector[i]->serialize();
-        if (serializedExpression == previousSerializedExpression)
-            vector.remove(i);
-        previousSerializedExpression = serializedExpression;
+        if (m_expressions->at(i)->serialize() == key)
+            m_expressions->remove(i);
+        else
+            key = m_expressions->at(i)->serialize();
     }
 }
 
@@ -109,31 +108,29 @@
     , m_mediaType(o.m_mediaType)
     , m_expressions(adoptPtr(new Vector<OwnPtr<MediaQueryExp> >(o.m_expressions->size())))
     , m_ignored(o.m_ignored)
-    , m_serializedQuery(o.m_serializedQuery)
+    , m_serializationCache(o.m_serializationCache)
 {
     for (unsigned i = 0; i < m_expressions->size(); ++i)
         (*m_expressions)[i] = o.m_expressions->at(i)->copy();
 }
 
-PassOwnPtr<MediaQuery> MediaQuery::copy() const
-{
-    return adoptPtr(new MediaQuery(*this));
-}
-
 MediaQuery::~MediaQuery()
 {
 }
 
+// http://dev.w3.org/csswg/cssom/#compare-media-queries
 bool MediaQuery::operator==(const MediaQuery& other) const
 {
     return cssText() == other.cssText();
 }
 
-const String& MediaQuery::cssText() const
+// http://dev.w3.org/csswg/cssom/#serialize-a-list-of-media-queries
+String MediaQuery::cssText() const
 {
-    if (m_serializedQuery.isNull())
-        const_cast<MediaQuery*>(this)->m_serializedQuery = serialize();
-    return m_serializedQuery;
+    if (m_serializationCache.isNull())
+        const_cast<MediaQuery*>(this)->m_serializationCache = serialize();
+
+    return m_serializationCache;
 }
 
-} // namespace WebCore
+} //namespace

Modified: trunk/Source/WebCore/css/MediaQuery.h (118658 => 118659)


--- trunk/Source/WebCore/css/MediaQuery.h	2012-05-28 09:08:40 UTC (rev 118658)
+++ trunk/Source/WebCore/css/MediaQuery.h	2012-05-28 09:14:38 UTC (rev 118659)
@@ -30,42 +30,44 @@
 #define MediaQuery_h
 
 #include "PlatformString.h"
+#include <wtf/PassOwnPtr.h>
+#include <wtf/Vector.h>
+#include <wtf/text/StringHash.h>
 
 namespace WebCore {
-
 class MediaQueryExp;
 
 class MediaQuery {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    enum Restrictor { Only, Not, None };
+    enum Restrictor {
+        Only, Not, None
+    };
 
     typedef Vector<OwnPtr<MediaQueryExp> > ExpressionVector;
 
-    MediaQuery(Restrictor, const String& mediaType, PassOwnPtr<ExpressionVector>);
+    MediaQuery(Restrictor, const String& mediaType, PassOwnPtr<ExpressionVector> exprs);
     ~MediaQuery();
 
-    bool operator==(const MediaQuery&) const;
-
     Restrictor restrictor() const { return m_restrictor; }
-    const ExpressionVector& expressions() const { return *m_expressions; }
-    const String& mediaType() const { return m_mediaType; }
-    const String& cssText() const;
+    const Vector<OwnPtr<MediaQueryExp> >* expressions() const { return m_expressions.get(); }
+    String mediaType() const { return m_mediaType; }
+    bool operator==(const MediaQuery& other) const;
+    String cssText() const;
     bool ignored() const { return m_ignored; }
 
-    PassOwnPtr<MediaQuery> copy() const;
+    PassOwnPtr<MediaQuery> copy() const { return adoptPtr(new MediaQuery(*this)); }
 
-private:
+ private:
     MediaQuery(const MediaQuery&);
-    void operator=(const MediaQuery&);
-    
-    String serialize() const;
 
     Restrictor m_restrictor;
     String m_mediaType;
     OwnPtr<ExpressionVector> m_expressions;
     bool m_ignored;
-    String m_serializedQuery;
+    String m_serializationCache;
+
+    String serialize() const;
 };
 
 } // namespace

Modified: trunk/Source/WebCore/css/MediaQueryEvaluator.cpp (118658 => 118659)


--- trunk/Source/WebCore/css/MediaQueryEvaluator.cpp	2012-05-28 09:08:40 UTC (rev 118658)
+++ trunk/Source/WebCore/css/MediaQueryEvaluator.cpp	2012-05-28 09:14:38 UTC (rev 118659)
@@ -58,40 +58,50 @@
 
 enum MediaFeaturePrefix { MinPrefix, MaxPrefix, NoPrefix };
 
-typedef bool (*MediaFeatureEvaluationFunction)(CSSValue*, RenderStyle*, Frame*, MediaFeaturePrefix);
-typedef HashMap<AtomicStringImpl*, MediaFeatureEvaluationFunction> FunctionMap;
+typedef bool (*EvalFunc)(CSSValue*, RenderStyle*, Frame*, MediaFeaturePrefix);
+typedef HashMap<AtomicStringImpl*, EvalFunc> FunctionMap;
+static FunctionMap* gFunctionMap;
 
-// FIXME: color-index, min-color-index, and max-color-index are not implemented.
-// To implement them we'd have to add information about indexed color to the WebCore platform;
-// most modern platforms don't make use of indexed color, so it's not clear this is worthwhile.
+/*
+ * FIXME: following media features are not implemented: color_index, scan, resolution
+ *
+ * color_index, min-color-index, max_color_index: It's unknown how to retrieve
+ * the information if the display mode is indexed
+ * scan: The "scan" media feature describes the scanning process of
+ * tv output devices. It's unknown how to retrieve this information from
+ * the platform
+ * resolution, min-resolution, max-resolution: css parser doesn't seem to
+ * support CSS_DIMENSION
+ */
 
-// FIXME: scan is not implemented: This media feature describes the scanning process of
-// TV output devices. To implement this we'd have to add information to the WebCore platform.
+MediaQueryEvaluator::MediaQueryEvaluator(bool mediaFeatureResult)
+    : m_frame(0)
+    , m_style(0)
+    , m_expResult(mediaFeatureResult)
+{
+}
 
-// FIXME: resolution, min-resolution, max-resolution are not implemented: At the time this
-// was originally written the author said the CSS parser "didn't seem to support CSS_DIMENSION".
-
-MediaQueryEvaluator::MediaQueryEvaluator(const String& acceptedMediaType, bool mediaFeatureResult)
+MediaQueryEvaluator:: MediaQueryEvaluator(const String& acceptedMediaType, bool mediaFeatureResult)
     : m_mediaType(acceptedMediaType)
     , m_frame(0)
     , m_style(0)
-    , m_mediaFeatureResult(mediaFeatureResult)
+    , m_expResult(mediaFeatureResult)
 {
 }
 
-MediaQueryEvaluator::MediaQueryEvaluator(const char* acceptedMediaType, bool mediaFeatureResult)
+MediaQueryEvaluator:: MediaQueryEvaluator(const char* acceptedMediaType, bool mediaFeatureResult)
     : m_mediaType(acceptedMediaType)
     , m_frame(0)
     , m_style(0)
-    , m_mediaFeatureResult(mediaFeatureResult)
+    , m_expResult(mediaFeatureResult)
 {
 }
 
-MediaQueryEvaluator::MediaQueryEvaluator(const String& acceptedMediaType, Frame* frame, RenderStyle* style)
+MediaQueryEvaluator:: MediaQueryEvaluator(const String& acceptedMediaType, Frame* frame, RenderStyle* style)
     : m_mediaType(acceptedMediaType)
     , m_frame(frame)
     , m_style(style)
-    , m_mediaFeatureResult(false) // Ignored if both m_frame and m_style are non-null.
+    , m_expResult(false) // doesn't matter when we have m_frame and m_style
 {
 }
 
@@ -126,35 +136,35 @@
         return true;
 
     const Vector<OwnPtr<MediaQuery> >& queries = querySet->queryVector();
+    if (!queries.size())
+        return true; // empty query list evaluates to true
 
-    bool result = true;
+    // iterate over queries, stop if any of them eval to true (OR semantics)
+    bool result = false;
+    for (size_t i = 0; i < queries.size() && !result; ++i) {
+        MediaQuery* query = queries[i].get();
 
-    // Iterate over queries and stop if any of them eval to true ("or" semantics).
-    for (size_t i = 0; i < queries.size(); ++i) {
-        const MediaQuery& query = *queries[i];
-
-        result = false;
-
-        if (query.ignored())
+        if (query->ignored())
             continue;
 
-        if (mediaTypeMatch(query.mediaType())) {
-            const Vector<OwnPtr<MediaQueryExp> >& expressions = query.expressions();
+        if (mediaTypeMatch(query->mediaType())) {
+            const Vector<OwnPtr<MediaQueryExp> >* exps = query->expressions();
             // iterate through expressions, stop if any of them eval to false
             // (AND semantics)
             size_t j = 0;
-            for (; j < expressions.size(); ++j) {
-                result = eval(*expressions[j]);
-                if (styleResolver && expressions[j]->isViewportDependent())
-                    styleResolver->addViewportDependentMediaQueryResult(*expressions[j], result);
-                if (!result)
+            for (; j < exps->size(); ++j) {
+                bool exprResult = eval(exps->at(j).get());
+                if (styleResolver && exps->at(j)->isViewportDependent())
+                    styleResolver->addViewportDependentMediaQueryResult(exps->at(j).get(), exprResult);
+                if (!exprResult)
                     break;
             }
-        }
 
-        result = applyRestrictor(query.restrictor(), result);
-        if (result)
-            break;
+            // assume true if we are at the end of the list,
+            // otherwise assume false
+            result = applyRestrictor(query->restrictor(), exps->size() == j);
+        } else
+            result = applyRestrictor(query->restrictor(), false);
     }
 
     return result;
@@ -253,7 +263,7 @@
         int h = 0;
         int v = 0;
         if (parseAspectRatio(value, h, v))
-            return v && compareValue(width * v, height * h, op);
+            return v != 0 && compareValue(width * v, height * h, op);
         return false;
     }
 
@@ -269,7 +279,7 @@
         int h = 0;
         int v = 0;
         if (parseAspectRatio(value, h, v))
-            return v && compareValue(static_cast<int>(sg.width()) * v, static_cast<int>(sg.height()) * h, op);
+            return v != 0  && compareValue(static_cast<int>(sg.width()) * v, static_cast<int>(sg.height()) * h, op);
         return false;
     }
 
@@ -493,51 +503,68 @@
 
 static bool transform_3dMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix op)
 {
+    bool returnValueIfNoParameter;
+    int have3dRendering;
+
+#if ENABLE(3D_RENDERING)
     bool threeDEnabled = false;
-#if ENABLE(3D_RENDERING) && USE(ACCELERATED_COMPOSITING)
+#if USE(ACCELERATED_COMPOSITING)
     if (RenderView* view = frame->contentRenderer())
         threeDEnabled = view->compositor()->canRender3DTransforms();
+#endif
+
+    returnValueIfNoParameter = threeDEnabled;
+    have3dRendering = threeDEnabled ? 1 : 0;
 #else
     UNUSED_PARAM(frame);
+    returnValueIfNoParameter = false;
+    have3dRendering = 0;
 #endif
+
     if (value) {
         float number;
-        return numberValue(value, number) && compareValue(static_cast<int>(threeDEnabled), static_cast<int>(number), op);
+        return numberValue(value, number) && compareValue(have3dRendering, static_cast<int>(number), op);
     }
-    return threeDEnabled;
+    return returnValueIfNoParameter;
 }
 
 static bool view_modeMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix op)
 {
-    ASSERT_UNUSED(op, op == NoPrefix);
+    UNUSED_PARAM(op);
     if (!value)
         return true;
     return Page::stringToViewMode(static_cast<CSSPrimitiveValue*>(value)->getStringValue()) == frame->page()->viewMode();
 }
 
-static FunctionMap* createFunctionMap()
+static void createFunctionMap()
 {
-    FunctionMap* functionMap = new FunctionMap;
+    // Create the table.
+    gFunctionMap = new FunctionMap;
 #define ADD_TO_FUNCTIONMAP(name, str)  \
-    functionMap->set(name##MediaFeature.impl(), name##MediaFeatureEval);
+    gFunctionMap->set(name##MediaFeature.impl(), name##MediaFeatureEval);
     CSS_MEDIAQUERY_NAMES_FOR_EACH_MEDIAFEATURE(ADD_TO_FUNCTIONMAP);
 #undef ADD_TO_FUNCTIONMAP
-    return functionMap;
 }
 
-bool MediaQueryEvaluator::eval(const MediaQueryExp& _expression_) const
+bool MediaQueryEvaluator::eval(const MediaQueryExp* expr) const
 {
     if (!m_frame || !m_style)
-        return m_mediaFeatureResult;
+        return m_expResult;
 
-    if (!_expression_.isValid())
+    if (!expr->isValid())
         return false;
 
-    static FunctionMap* functionMap = createFunctionMap();
-    MediaFeatureEvaluationFunction function = functionMap->get(_expression_.mediaFeature().impl());
+    if (!gFunctionMap)
+        createFunctionMap();
 
-    // Start with no prefix: Some trampoline functions add the prefix and call other media feature functions.
-    return function && function(_expression_.value(), m_style.get(), m_frame, NoPrefix);
+    // call the media feature evaluation function. Assume no prefix
+    // and let trampoline functions override the prefix if prefix is
+    // used
+    EvalFunc func = gFunctionMap->get(expr->mediaFeature().impl());
+    if (func)
+        return func(expr->value(), m_style.get(), m_frame, NoPrefix);
+
+    return false;
 }
 
 } // namespace

Modified: trunk/Source/WebCore/css/MediaQueryEvaluator.h (118658 => 118659)


--- trunk/Source/WebCore/css/MediaQueryEvaluator.h	2012-05-28 09:08:40 UTC (rev 118658)
+++ trunk/Source/WebCore/css/MediaQueryEvaluator.h	2012-05-28 09:14:38 UTC (rev 118659)
@@ -31,30 +31,42 @@
 #include "PlatformString.h"
 
 namespace WebCore {
-
 class Frame;
 class MediaQueryExp;
 class MediaQuerySet;
 class RenderStyle;
 class StyleResolver;
 
-// Class that evaluates CSS media queries as defined in CSS3 Module "Media Queries".
-//
-// Special constructors are supplied so that simple media queries can be
-// evaluated without knowledge of device characteristics. This is used, for example,
-// when parsing user agent stylesheets. The boolean parameter to the constructor is used
-// if the device characteristics are not known. This can be used to prune loading
-// of stylesheets to remove those that definitely won't match.
-
+/**
+ * Class that evaluates css media queries as defined in
+ * CSS3 Module "Media Queries" (http://www.w3.org/TR/css3-mediaqueries/)
+ * Special constructors are needed, if simple media queries are to be
+ * evaluated without knowledge of the medium features. This can happen
+ * for example when parsing UA stylesheets, if evaluation is done
+ * right after parsing.
+ *
+ * the boolean parameter is used to approximate results of evaluation, if
+ * the device characteristics are not known. This can be used to prune the loading
+ * of stylesheets to only those which are probable to match.
+ */
 class MediaQueryEvaluator {
      WTF_MAKE_NONCOPYABLE(MediaQueryEvaluator); WTF_MAKE_FAST_ALLOCATED;
 public:
-    // Creates evaluator which evaluates only simple media queries.
-    // Evaluator returns true for acceptedMediaType and uses mediaFeatureResult for any media features.
+    /** Creates evaluator which evaluates only simple media queries
+     *  Evaluator returns true for "all", and returns value of \mediaFeatureResult
+     *  for any media features
+     */
+    MediaQueryEvaluator(bool mediaFeatureResult = false);
+
+    /** Creates evaluator which evaluates only simple media queries
+     *  Evaluator  returns true for acceptedMediaType and returns value of \mediafeatureResult
+     *  for any media features
+     */
     MediaQueryEvaluator(const String& acceptedMediaType, bool mediaFeatureResult = false);
     MediaQueryEvaluator(const char* acceptedMediaType, bool mediaFeatureResult = false);
 
-    // Creates evaluator which evaluates full media queries.
+    /** Creates evaluator which evaluates full media queries
+     */
     MediaQueryEvaluator(const String& acceptedMediaType, Frame*, RenderStyle*);
 
     ~MediaQueryEvaluator();
@@ -62,19 +74,18 @@
     bool mediaTypeMatch(const String& mediaTypeToMatch) const;
     bool mediaTypeMatchSpecific(const char* mediaTypeToMatch) const;
 
-    // Evaluates a list of media queries.
+    /** Evaluates a list of media queries */
     bool eval(const MediaQuerySet*, StyleResolver* = 0) const;
 
-    // Evaluates media query subexpression, i.e. "and (media-feature: value)" part.
-    bool eval(const MediaQueryExp&) const;
+    /** Evaluates media query subexpression, ie "and (media-feature: value)" part */
+    bool eval(const MediaQueryExp*) const;
 
 private:
     String m_mediaType;
     Frame* m_frame; // not owned
     RefPtr<RenderStyle> m_style;
-    bool m_mediaFeatureResult;
+    bool m_expResult;
 };
 
-} // namespace WebCore
-
+} // namespace
 #endif

Modified: trunk/Source/WebCore/css/StyleResolver.cpp (118658 => 118659)


--- trunk/Source/WebCore/css/StyleResolver.cpp	2012-05-28 09:08:40 UTC (rev 118658)
+++ trunk/Source/WebCore/css/StyleResolver.cpp	2012-05-28 09:14:38 UTC (rev 118659)
@@ -77,7 +77,6 @@
 #include "MatrixTransformOperation.h"
 #include "MediaList.h"
 #include "MediaQueryEvaluator.h"
-#include "MediaQueryExp.h"
 #include "NodeRenderStyle.h"
 #include "Page.h"
 #include "PageGroup.h"
@@ -161,17 +160,6 @@
 
 using namespace HTMLNames;
 
-struct MediaQueryResult {
-    MediaQueryResult(const MediaQueryExp& _expression_, bool result)
-        : _expression_(_expression_)
-        , result(result)
-    {
-    }
-
-    MediaQueryExp _expression_;
-    bool result;
-};
-
 #define HANDLE_INHERIT(prop, Prop) \
 if (isInherit) { \
     m_style->set##Prop(m_parentStyle->prop()); \
@@ -5140,16 +5128,16 @@
     return m_features.attrsInRules.contains(attrname.impl());
 }
 
-void StyleResolver::addViewportDependentMediaQueryResult(const MediaQueryExp& _expression_, bool result)
+void StyleResolver::addViewportDependentMediaQueryResult(const MediaQueryExp* expr, bool result)
 {
-    m_viewportDependentMediaQueryResults.append(MediaQueryResult(_expression_, result));
+    m_viewportDependentMediaQueryResults.append(adoptPtr(new MediaQueryResult(*expr, result)));
 }
 
 bool StyleResolver::affectedByViewportChange() const
 {
-    unsigned size = m_viewportDependentMediaQueryResults.size();
-    for (unsigned i = 0; i < size; i++) {
-        if (m_medium->eval(m_viewportDependentMediaQueryResults[i]._expression_) != m_viewportDependentMediaQueryResults[i].result)
+    unsigned s = m_viewportDependentMediaQueryResults.size();
+    for (unsigned i = 0; i < s; i++) {
+        if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expression) != m_viewportDependentMediaQueryResults[i]->m_result)
             return true;
     }
     return false;

Modified: trunk/Source/WebCore/css/StyleResolver.h (118658 => 118659)


--- trunk/Source/WebCore/css/StyleResolver.h	2012-05-28 09:08:40 UTC (rev 118658)
+++ trunk/Source/WebCore/css/StyleResolver.h	2012-05-28 09:14:38 UTC (rev 118659)
@@ -22,32 +22,52 @@
 #ifndef StyleResolver_h
 #define StyleResolver_h
 
+#include "CSSRule.h"
+#include "CSSValueList.h"
 #include "LinkHash.h"
+#include "MediaQueryExp.h"
 #include "RenderStyle.h"
 #include "SelectorChecker.h"
+#include <wtf/HashMap.h>
+#include <wtf/HashSet.h>
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+#include <wtf/text/StringHash.h>
 
 namespace WebCore {
 
+enum ESmartMinimumForFontSize { DoNotUseSmartMinimumForFontSize, UseSmartMinimumForFontFize };
+
 class CSSFontSelector;
+class CSSPageRule;
+class CSSPrimitiveValue;
+class CSSProperty;
+class CSSRuleList;
+class CSSFontFace;
+class CSSFontFaceRule;
 class CSSImageGeneratorValue;
 class CSSImageSetValue;
 class CSSImageValue;
-class CSSRuleList;
+class CSSSelector;
 class CSSStyleRule;
 class CSSStyleSheet;
+class CSSValue;
 class ContainerNode;
 class CustomFilterOperation;
 class CustomFilterParameter;
 class Document;
 class Element;
+class Frame;
+class FrameView;
+class KURL;
 class KeyframeList;
 class KeyframeValue;
 class MediaQueryEvaluator;
-class MediaQueryExp;
 class Node;
 class RenderRegion;
 class RuleData;
 class RuleSet;
+class Settings;
 class StaticCSSRuleList;
 class StyleBuilder;
 class StyleImage;
@@ -57,20 +77,32 @@
 class StyleRule;
 class StyleRuleKeyframes;
 class StyleRulePage;
+class StyleRuleRegion;
 class StyleShader;
+class StyleSheet;
 class StyleSheetContents;
+class StyleSheetList;
 class StyledElement;
 class WebKitCSSFilterValue;
 class WebKitCSSShaderValue;
 
-struct MediaQueryResult;
-
-enum ESmartMinimumForFontSize { DoNotUseSmartMinimumForFontSize, UseSmartMinimumForFontFize };
-    
 #if ENABLE(CSS_SHADERS)
 typedef Vector<RefPtr<CustomFilterParameter> > CustomFilterParameterList;
 #endif
 
+class MediaQueryResult {
+    WTF_MAKE_NONCOPYABLE(MediaQueryResult); WTF_MAKE_FAST_ALLOCATED;
+public:
+    MediaQueryResult(const MediaQueryExp& expr, bool result)
+        : m_expression(expr)
+        , m_result(result)
+    {
+    }
+
+    MediaQueryExp m_expression;
+    bool m_result;
+};
+
 enum StyleSharingBehavior {
     AllowStyleSharing,
     DisallowStyleSharing,
@@ -193,7 +225,7 @@
 
     CSSFontSelector* fontSelector() const { return m_fontSelector.get(); }
 
-    void addViewportDependentMediaQueryResult(const MediaQueryExp&, bool result);
+    void addViewportDependentMediaQueryResult(const MediaQueryExp*, bool result);
 
     bool affectedByViewportChange() const;
 
@@ -464,7 +496,7 @@
     bool m_sameOriginOnly;
 
     RefPtr<CSSFontSelector> m_fontSelector;
-    Vector<MediaQueryResult> m_viewportDependentMediaQueryResults;
+    Vector<OwnPtr<MediaQueryResult> > m_viewportDependentMediaQueryResults;
 
     bool m_applyPropertyToRegularStyle;
     bool m_applyPropertyToVisitedLinkStyle;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to