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