From 4eb19a5c582e61d53cc9b1c347f5ed82054373bb Mon Sep 17 00:00:00 2001 From: "antti@apple.com" Date: Thu, 12 Apr 2012 18:28:55 +0000 Subject: [PATCH] Remove style sheet argument from StyleRuleImport constructor https://bugs.webkit.org/show_bug.cgi?id=83740 Reviewed by Andreas Kling. The style sheet is set when the rule is added to one. The parser does not need to know about it. * css/CSSImportRule.cpp: (WebCore::StyleRuleImport::StyleRuleImport): * css/CSSImportRule.h: (StyleRuleImport): (WebCore::StyleRuleImport::setParentStyleSheet): * css/CSSParser.cpp: (WebCore::CSSParser::createImportRule): * css/CSSStyleSheet.cpp: (WebCore::StyleSheetInternal::parserAppendRule): (WebCore::StyleSheetInternal::wrapperInsertRule): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@114006 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebCore/ChangeLog | 20 ++++++++++++++++++++ Source/WebCore/css/CSSImportRule.cpp | 9 ++++----- Source/WebCore/css/CSSImportRule.h | 5 +++-- Source/WebCore/css/CSSParser.cpp | 4 ++-- Source/WebCore/css/CSSStyleSheet.cpp | 2 ++ 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 6e74b56..848e588 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,23 @@ +2012-04-12 Antti Koivisto + + Remove style sheet argument from StyleRuleImport constructor + https://bugs.webkit.org/show_bug.cgi?id=83740 + + Reviewed by Andreas Kling. + + The style sheet is set when the rule is added to one. The parser does not need to know about it. + + * css/CSSImportRule.cpp: + (WebCore::StyleRuleImport::StyleRuleImport): + * css/CSSImportRule.h: + (StyleRuleImport): + (WebCore::StyleRuleImport::setParentStyleSheet): + * css/CSSParser.cpp: + (WebCore::CSSParser::createImportRule): + * css/CSSStyleSheet.cpp: + (WebCore::StyleSheetInternal::parserAppendRule): + (WebCore::StyleSheetInternal::wrapperInsertRule): + 2012-04-12 Alexey Proskuryakov REGRESSION (r113900): In nightly builds, Safari Webpage Preview Fetcher crashes in Settings::initializeDefaultFontFamilies() due to uncaught exception (sandbox preventing access to fonts plist) diff --git a/Source/WebCore/css/CSSImportRule.cpp b/Source/WebCore/css/CSSImportRule.cpp index 6b1e7b7..9cc2f39 100644 --- a/Source/WebCore/css/CSSImportRule.cpp +++ b/Source/WebCore/css/CSSImportRule.cpp @@ -33,21 +33,20 @@ namespace WebCore { -PassRefPtr StyleRuleImport::create(StyleSheetInternal* parent, const String& href, PassRefPtr media) +PassRefPtr StyleRuleImport::create(const String& href, PassRefPtr media) { - return adoptRef(new StyleRuleImport(parent, href, media)); + return adoptRef(new StyleRuleImport(href, media)); } -StyleRuleImport::StyleRuleImport(StyleSheetInternal* parent, const String& href, PassRefPtr media) +StyleRuleImport::StyleRuleImport(const String& href, PassRefPtr media) : StyleRuleBase(Import, 0) - , m_parentStyleSheet(parent) + , m_parentStyleSheet(0) , m_styleSheetClient(this) , m_strHref(href) , m_mediaQueries(media) , m_cachedSheet(0) , m_loading(false) { - ASSERT(parent); if (!m_mediaQueries) m_mediaQueries = MediaQuerySet::create(String()); } diff --git a/Source/WebCore/css/CSSImportRule.h b/Source/WebCore/css/CSSImportRule.h index 8414181..aeee9a1 100644 --- a/Source/WebCore/css/CSSImportRule.h +++ b/Source/WebCore/css/CSSImportRule.h @@ -37,11 +37,12 @@ class StyleSheetInternal; class StyleRuleImport : public StyleRuleBase { public: - static PassRefPtr create(StyleSheetInternal* parent, const String& href, PassRefPtr); + static PassRefPtr create(const String& href, PassRefPtr); ~StyleRuleImport(); StyleSheetInternal* parentStyleSheet() const { return m_parentStyleSheet; } + void setParentStyleSheet(StyleSheetInternal* sheet) { ASSERT(sheet); m_parentStyleSheet = sheet; } void clearParentStyleSheet() { m_parentStyleSheet = 0; } String href() const { return m_strHref; } @@ -71,7 +72,7 @@ private: void setCSSStyleSheet(const String& href, const KURL& baseURL, const String& charset, const CachedCSSStyleSheet*); friend class ImportedStyleSheetClient; - StyleRuleImport(StyleSheetInternal* parent, const String& href, PassRefPtr); + StyleRuleImport(const String& href, PassRefPtr); StyleSheetInternal* m_parentStyleSheet; diff --git a/Source/WebCore/css/CSSParser.cpp b/Source/WebCore/css/CSSParser.cpp index 5fade0c..b2eb180 100644 --- a/Source/WebCore/css/CSSParser.cpp +++ b/Source/WebCore/css/CSSParser.cpp @@ -9002,9 +9002,9 @@ MediaQuerySet* CSSParser::createMediaQuerySet() StyleRuleBase* CSSParser::createImportRule(const CSSParserString& url, MediaQuerySet* media) { - if (!media || !m_styleSheet || !m_allowImportRules) + if (!media || !m_allowImportRules) return 0; - RefPtr rule = StyleRuleImport::create(m_styleSheet, url, media); + RefPtr rule = StyleRuleImport::create(url, media); StyleRuleImport* result = rule.get(); m_parsedRules.append(rule.release()); return result; diff --git a/Source/WebCore/css/CSSStyleSheet.cpp b/Source/WebCore/css/CSSStyleSheet.cpp index 2de1ae6..02a6847 100644 --- a/Source/WebCore/css/CSSStyleSheet.cpp +++ b/Source/WebCore/css/CSSStyleSheet.cpp @@ -116,6 +116,7 @@ void StyleSheetInternal::parserAppendRule(PassRefPtr rule) // Parser enforces that @import rules come before anything else except @charset. ASSERT(m_childRules.isEmpty()); m_importRules.append(static_cast(rule.get())); + m_importRules.last()->setParentStyleSheet(this); m_importRules.last()->requestStyleSheet(); return; } @@ -192,6 +193,7 @@ bool StyleSheetInternal::wrapperInsertRule(PassRefPtr rule, unsig if (!rule->isImportRule()) return false; m_importRules.insert(childVectorIndex, static_cast(rule.get())); + m_importRules[childVectorIndex]->setParentStyleSheet(this); m_importRules[childVectorIndex]->requestStyleSheet(); // FIXME: Stylesheet doesn't actually change meaningfully before the imported sheets are loaded. styleSheetChanged(); -- 2.7.4