Title: [87317] trunk/Source/WebCore
Revision
87317
Author
[email protected]
Date
2011-05-25 13:32:37 -0700 (Wed, 25 May 2011)

Log Message

2011-05-25  Ryosuke Niwa  <[email protected]>

        Reviewed by James Robinson.

        CSSStyleSelector should provide a way to obtain rules from non-author stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=61454

        Replaced bool and enum arguments of styleRulesForElement and pseudoStyleRulesForElement
        by one enum, and provided a way to obtain rules from UA/user stylesheets.

        * css/CSSRule.h: Removed CSSRuleFilter.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleRulesForElement): See above.
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement): Ditto.
        * css/CSSStyleSelector.h: Moved CSSRuleFilter here.
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesForElement): Calls styleRulesForElement.
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules): Ditto.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (87316 => 87317)


--- trunk/Source/WebCore/ChangeLog	2011-05-25 19:37:18 UTC (rev 87316)
+++ trunk/Source/WebCore/ChangeLog	2011-05-25 20:32:37 UTC (rev 87317)
@@ -1,3 +1,25 @@
+2011-05-25  Ryosuke Niwa  <[email protected]>
+
+        Reviewed by James Robinson.
+
+        CSSStyleSelector should provide a way to obtain rules from non-author stylesheets
+        https://bugs.webkit.org/show_bug.cgi?id=61454
+
+        Replaced bool and enum arguments of styleRulesForElement and pseudoStyleRulesForElement
+        by one enum, and provided a way to obtain rules from UA/user stylesheets.
+
+        * css/CSSRule.h: Removed CSSRuleFilter.
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::styleRulesForElement): See above.
+        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement): Ditto.
+        * css/CSSStyleSelector.h: Moved CSSRuleFilter here.
+        * editing/markup.cpp:
+        (WebCore::styleFromMatchedRulesForElement): Calls styleRulesForElement.
+        * inspector/InspectorCSSAgent.cpp:
+        (WebCore::InspectorCSSAgent::getStylesForNode): Ditto.
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::getMatchedCSSRules): Ditto.
+
 2011-05-25  Caio Marcelo de Oliveira Filho  <[email protected]>
 
         Reviewed by Andreas Kling.

Modified: trunk/Source/WebCore/css/CSSRule.h (87316 => 87317)


--- trunk/Source/WebCore/css/CSSRule.h	2011-05-25 19:37:18 UTC (rev 87316)
+++ trunk/Source/WebCore/css/CSSRule.h	2011-05-25 20:32:37 UTC (rev 87317)
@@ -30,11 +30,6 @@
 
 typedef int ExceptionCode;
 
-enum CSSRuleFilter {
-    AllCSSRules,
-    SameOriginCSSRulesOnly
-}; 
-
 class CSSRule : public StyleBase {
 public:
     // FIXME: Change name to Type.

Modified: trunk/Source/WebCore/css/CSSStyleSelector.cpp (87316 => 87317)


--- trunk/Source/WebCore/css/CSSStyleSelector.cpp	2011-05-25 19:37:18 UTC (rev 87316)
+++ trunk/Source/WebCore/css/CSSStyleSelector.cpp	2011-05-25 20:32:37 UTC (rev 87317)
@@ -1991,12 +1991,12 @@
     }
 }
 
-PassRefPtr<CSSRuleList> CSSStyleSelector::styleRulesForElement(Element* e, bool authorOnly, bool includeEmptyRules, CSSRuleFilter filter)
+PassRefPtr<CSSRuleList> CSSStyleSelector::styleRulesForElement(Element* e, unsigned rulesToInclude)
 {
-    return pseudoStyleRulesForElement(e, NOPSEUDO, authorOnly, includeEmptyRules, filter);
+    return pseudoStyleRulesForElement(e, NOPSEUDO, rulesToInclude);
 }
 
-PassRefPtr<CSSRuleList> CSSStyleSelector::pseudoStyleRulesForElement(Element* e, PseudoId pseudoId, bool authorOnly, bool includeEmptyRules, CSSRuleFilter filter)
+PassRefPtr<CSSRuleList> CSSStyleSelector::pseudoStyleRulesForElement(Element* e, PseudoId pseudoId, unsigned rulesToInclude)
 {
     if (!e || !e->document()->haveStylesheetsLoaded())
         return 0;
@@ -2006,7 +2006,7 @@
     initElement(e);
     initForStyleResolve(e, 0, pseudoId);
 
-    if (!authorOnly) {
+    if (rulesToInclude & UAAndUserCSSRules) {
         int firstUARule = -1, lastUARule = -1;
         // First we match rules from the user agent sheet.
         matchUARules(firstUARule, lastUARule);
@@ -2014,16 +2014,16 @@
         // Now we check user sheet rules.
         if (m_matchAuthorAndUserStyles) {
             int firstUserRule = -1, lastUserRule = -1;
-            matchRules(m_userStyle.get(), firstUserRule, lastUserRule, includeEmptyRules);
+            matchRules(m_userStyle.get(), firstUserRule, lastUserRule, rulesToInclude & EmptyCSSRules);
         }
     }
 
     if (m_matchAuthorAndUserStyles) {
-        m_checker.m_sameOriginOnly = (filter == SameOriginCSSRulesOnly);
+        m_checker.m_sameOriginOnly = !(rulesToInclude & CrossOriginCSSRules);
 
         // Check the rules in author sheets.
         int firstAuthorRule = -1, lastAuthorRule = -1;
-        matchRules(m_authorStyle.get(), firstAuthorRule, lastAuthorRule, includeEmptyRules);
+        matchRules(m_authorStyle.get(), firstAuthorRule, lastAuthorRule, rulesToInclude & EmptyCSSRules);
 
         m_checker.m_sameOriginOnly = false;
     }

Modified: trunk/Source/WebCore/css/CSSStyleSelector.h (87316 => 87317)


--- trunk/Source/WebCore/css/CSSStyleSelector.h	2011-05-25 19:37:18 UTC (rev 87316)
+++ trunk/Source/WebCore/css/CSSStyleSelector.h	2011-05-25 20:32:37 UTC (rev 87317)
@@ -128,8 +128,16 @@
 
     public:
         // These methods will give back the set of rules that matched for a given element (or a pseudo-element).
-        PassRefPtr<CSSRuleList> styleRulesForElement(Element*, bool authorOnly, bool includeEmptyRules = false, CSSRuleFilter filter = AllCSSRules);
-        PassRefPtr<CSSRuleList> pseudoStyleRulesForElement(Element*, PseudoId, bool authorOnly, bool includeEmptyRules = false, CSSRuleFilter filter = AllCSSRules);
+        enum CSSRuleFilter {
+            UAAndUserCSSRules   = 1 << 1,
+            AuthorCSSRules      = 1 << 2,
+            EmptyCSSRules       = 1 << 3,
+            CrossOriginCSSRules = 1 << 4,
+            AllButEmptyCSSRules = UAAndUserCSSRules | AuthorCSSRules | CrossOriginCSSRules,
+            AllCSSRules         = AllButEmptyCSSRules | EmptyCSSRules,
+        };
+        PassRefPtr<CSSRuleList> styleRulesForElement(Element*, unsigned rulesToInclude = AllButEmptyCSSRules);
+        PassRefPtr<CSSRuleList> pseudoStyleRulesForElement(Element*, PseudoId, unsigned rulesToInclude = AllButEmptyCSSRules);
 
         // Given a CSS keyword in the range (xx-small to -webkit-xxx-large), this function will return
         // the correct font size scaled relative to the user's default (medium).

Modified: trunk/Source/WebCore/editing/markup.cpp (87316 => 87317)


--- trunk/Source/WebCore/editing/markup.cpp	2011-05-25 19:37:18 UTC (rev 87316)
+++ trunk/Source/WebCore/editing/markup.cpp	2011-05-25 20:32:37 UTC (rev 87317)
@@ -239,10 +239,11 @@
     return str;
 }
 
-static PassRefPtr<CSSMutableStyleDeclaration> styleFromMatchedRulesForElement(Element* element, bool authorOnly = true)
+static PassRefPtr<CSSMutableStyleDeclaration> styleFromMatchedRulesForElement(Element* element)
 {
     RefPtr<CSSMutableStyleDeclaration> style = CSSMutableStyleDeclaration::create();
-    RefPtr<CSSRuleList> matchedRules = element->document()->styleSelector()->styleRulesForElement(element, authorOnly);
+    RefPtr<CSSRuleList> matchedRules = element->document()->styleSelector()->styleRulesForElement(element,
+        CSSStyleSelector::AuthorCSSRules | CSSStyleSelector::CrossOriginCSSRules);
     if (matchedRules) {
         for (unsigned i = 0; i < matchedRules->length(); i++) {
             if (matchedRules->item(i)->type() == CSSRule::STYLE_RULE) {

Modified: trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp (87316 => 87317)


--- trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp	2011-05-25 19:37:18 UTC (rev 87316)
+++ trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp	2011-05-25 20:32:37 UTC (rev 87317)
@@ -199,14 +199,14 @@
     resultObject->setObject("computedStyle", computedInspectorStyle->buildObjectForStyle());
 
     CSSStyleSelector* selector = element->ownerDocument()->styleSelector();
-    RefPtr<CSSRuleList> matchedRules = selector->styleRulesForElement(element, false, true);
+    RefPtr<CSSRuleList> matchedRules = selector->styleRulesForElement(element, CSSStyleSelector::AllCSSRules);
     resultObject->setArray("matchedCSSRules", buildArrayForRuleList(matchedRules.get()));
 
     resultObject->setArray("styleAttributes", buildArrayForAttributeStyles(element));
 
     RefPtr<InspectorArray> pseudoElements = InspectorArray::create();
     for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_INTERNAL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) {
-        RefPtr<CSSRuleList> matchedRules = selector->pseudoStyleRulesForElement(element, pseudoId, false, true);
+        RefPtr<CSSRuleList> matchedRules = selector->pseudoStyleRulesForElement(element, pseudoId, CSSStyleSelector::AllCSSRules);
         if (matchedRules && matchedRules->length()) {
             RefPtr<InspectorObject> pseudoStyles = InspectorObject::create();
             pseudoStyles->setNumber("pseudoId", static_cast<int>(pseudoId));
@@ -227,7 +227,7 @@
         }
 
         CSSStyleSelector* parentSelector = parentElement->ownerDocument()->styleSelector();
-        RefPtr<CSSRuleList> parentMatchedRules = parentSelector->styleRulesForElement(parentElement, false, true);
+        RefPtr<CSSRuleList> parentMatchedRules = parentSelector->styleRulesForElement(parentElement, CSSStyleSelector::AllCSSRules);
         parentStyle->setArray("matchedCSSRules", buildArrayForRuleList(parentMatchedRules.get()));
         inheritedStyles->pushObject(parentStyle.release());
         parentElement = parentElement->parentElement();

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (87316 => 87317)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2011-05-25 19:37:18 UTC (rev 87316)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2011-05-25 20:32:37 UTC (rev 87317)
@@ -1291,13 +1291,20 @@
     return computedStyle(elt, false, pseudoElt);
 }
 
-PassRefPtr<CSSRuleList> DOMWindow::getMatchedCSSRules(Element* elt, const String&, bool authorOnly) const
+PassRefPtr<CSSRuleList> DOMWindow::getMatchedCSSRules(Element* element, const String&, bool authorOnly) const
 {
     if (!m_frame)
         return 0;
 
-    Settings* settings = m_frame->settings();
-    return m_frame->document()->styleSelector()->styleRulesForElement(elt, authorOnly, false, settings && settings->crossOriginCheckInGetMatchedCSSRulesDisabled() ? AllCSSRules : SameOriginCSSRulesOnly);
+    unsigned rulesToInclude = CSSStyleSelector::AuthorCSSRules;
+    if (!authorOnly)
+        rulesToInclude |= CSSStyleSelector::UAAndUserCSSRules;
+    if (Settings* settings = m_frame->settings()) {
+        if (settings->crossOriginCheckInGetMatchedCSSRulesDisabled())
+            rulesToInclude |= CSSStyleSelector::CrossOriginCSSRules;
+    }
+
+    return m_frame->document()->styleSelector()->styleRulesForElement(element, rulesToInclude);
 }
 
 PassRefPtr<WebKitPoint> DOMWindow::webkitConvertPointFromNodeToPage(Node* node, const WebKitPoint* p) const
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to