Index: Source/core/page/PageSerializer.cpp |
diff --git a/Source/core/page/PageSerializer.cpp b/Source/core/page/PageSerializer.cpp |
index f213024e85b45d6a60a00f0925a4b7920091a076..2f1c8d6d3e3d54010c43390a8f1f385e309cf793 100644 |
--- a/Source/core/page/PageSerializer.cpp |
+++ b/Source/core/page/PageSerializer.cpp |
@@ -37,6 +37,7 @@ |
#include "core/css/CSSFontFaceSrcValue.h" |
#include "core/css/CSSImageValue.h" |
#include "core/css/CSSImportRule.h" |
+#include "core/css/CSSRuleList.h" |
#include "core/css/CSSStyleDeclaration.h" |
#include "core/css/CSSStyleRule.h" |
#include "core/css/CSSValueList.h" |
@@ -302,22 +303,9 @@ void PageSerializer::serializeCSSStyleSheet(CSSStyleSheet& styleSheet, const KUR |
if (i < styleSheet.length() - 1) |
cssText.appendLiteral("\n\n"); |
} |
- ASSERT(styleSheet.ownerDocument()); |
- Document& document = *styleSheet.ownerDocument(); |
+ |
// Some rules have resources associated with them that we need to retrieve. |
- if (rule->type() == CSSRule::IMPORT_RULE) { |
- CSSImportRule* importRule = toCSSImportRule(rule); |
- ASSERT(styleSheet.baseURL().isValid()); |
- KURL importURL = KURL(styleSheet.baseURL(), importRule->href()); |
- if (m_resourceURLs.contains(importURL)) |
- continue; |
- if (importRule->styleSheet()) |
- serializeCSSStyleSheet(*importRule->styleSheet(), importURL); |
- } else if (rule->type() == CSSRule::FONT_FACE_RULE) { |
- retrieveResourcesForProperties(&toCSSFontFaceRule(rule)->styleRule()->properties(), document); |
- } else if (rule->type() == CSSRule::STYLE_RULE) { |
- retrieveResourcesForProperties(&toCSSStyleRule(rule)->styleRule()->properties(), document); |
- } |
+ serializeCSSRule(rule); |
} |
if (url.isValid() && !m_resourceURLs.contains(url)) { |
@@ -331,6 +319,54 @@ void PageSerializer::serializeCSSStyleSheet(CSSStyleSheet& styleSheet, const KUR |
} |
} |
+void PageSerializer::serializeCSSRule(CSSRule* rule) |
+{ |
+ ASSERT(rule->parentStyleSheet()->ownerDocument()); |
+ Document& document = *rule->parentStyleSheet()->ownerDocument(); |
+ |
+ switch (rule->type()) { |
+ case CSSRule::STYLE_RULE: |
+ retrieveResourcesForProperties(&toCSSStyleRule(rule)->styleRule()->properties(), document); |
+ break; |
+ |
+ case CSSRule::IMPORT_RULE: { |
+ CSSImportRule* importRule = toCSSImportRule(rule); |
+ KURL sheetBaseURL = rule->parentStyleSheet()->baseURL(); |
+ ASSERT(sheetBaseURL.isValid()); |
+ KURL importURL = KURL(sheetBaseURL, importRule->href()); |
+ if (m_resourceURLs.contains(importURL)) |
+ break; |
+ if (importRule->styleSheet()) |
+ serializeCSSStyleSheet(*importRule->styleSheet(), importURL); |
+ break; |
+ } |
+ |
+ // Rules inheriting CSSGroupingRule |
+ case CSSRule::MEDIA_RULE: |
+ case CSSRule::SUPPORTS_RULE: { |
+ CSSRuleList* ruleList = rule->cssRules(); |
+ for (unsigned i = 0; i < ruleList->length(); ++i) |
+ serializeCSSRule(ruleList->item(i)); |
+ break; |
+ } |
+ |
+ case CSSRule::FONT_FACE_RULE: |
+ retrieveResourcesForProperties(&toCSSFontFaceRule(rule)->styleRule()->properties(), document); |
+ break; |
+ |
+ // Rules in which no external resources can be referenced |
+ case CSSRule::CHARSET_RULE: |
+ case CSSRule::PAGE_RULE: |
+ case CSSRule::KEYFRAMES_RULE: |
+ case CSSRule::KEYFRAME_RULE: |
+ case CSSRule::VIEWPORT_RULE: |
+ break; |
+ |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ } |
+} |
+ |
bool PageSerializer::shouldAddURL(const KURL& url) |
{ |
return url.isValid() && !m_resourceURLs.contains(url) && !url.protocolIsData(); |