Diff
Modified: trunk/Source/WebCore/ChangeLog (97848 => 97849)
--- trunk/Source/WebCore/ChangeLog 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/ChangeLog 2011-10-19 12:11:40 UTC (rev 97849)
@@ -1,3 +1,58 @@
+2011-10-19 Andreas Kling <[email protected]>
+
+ MediaList: Remove inheritance from StyleBase.
+ https://bugs.webkit.org/show_bug.cgi?id=70203
+
+ Reviewed by Darin Adler.
+
+ * css/MediaList.h:
+ (WebCore::MediaList::parentStyleSheet):
+ (WebCore::MediaList::setParentStyleSheet):
+ * css/MediaList.cpp:
+ (WebCore::MediaList::MediaList):
+ (WebCore::MediaList::notifyChanged):
+
+ Change MediaList to no longer inherit from StyleBase. The parent()/setParent()
+ mechanism was replaced by explicit parentStyleSheet()/setParentStyleSheet().
+
+ * css/CSSImportRule.cpp:
+ (WebCore::CSSImportRule::CSSImportRule):
+ (WebCore::CSSImportRule::~CSSImportRule):
+ * css/CSSMediaRule.cpp:
+ (WebCore::CSSMediaRule::CSSMediaRule):
+ (WebCore::CSSMediaRule::~CSSMediaRule):
+
+ Change StyleBase::setParent() calls to MediaList::setParentStyleSheet().
+ CSSRules are never moved between stylesheets, so the parent style sheet pointer
+ is valid for the MediaList's lifetime.
+
+ * css/StyleSheet.cpp:
+ (WebCore::StyleSheet::~StyleSheet):
+
+ Change StyleBase::setParent() calls to MediaList::setParentStyleSheet().
+
+ (WebCore::StyleSheet::setMedia):
+
+ Change StyleBase::setParent() calls to MediaList::setParentStyleSheet().
+ Assert that the parent sheet is either null, or this, as MediaLists should never
+ be reparented to other sheets.
+ Assert that the StyleSheet is indeed a CSSStyleSheet. XSLStyleSheet inherits from
+ StyleSheet, but it shouldn't be using the MediaList.
+
+ * bindings/js/JSDOMBinding.h:
+ (WebCore::root):
+
+ Add MediaList* specific overload for root() since it can't fall back
+ to root(StyleBase*) anymore.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+ Add some PrivateHeaders to accomodate the JSDOMBinding.h changes.
+
+ * css/CSSMediaRule.h:
+
+ Remove unnecessary forward-declaration of MediaList.
+
2011-10-19 Vsevolod Vlasov <[email protected]>
Web Inspector: Console messages for XHR logging should show call stack if available.
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (97848 => 97849)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2011-10-19 12:11:40 UTC (rev 97849)
@@ -3470,7 +3470,7 @@
A80E6CEF0A1989CA007FB8C5 /* CSSStyleRule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CC50A1989CA007FB8C5 /* CSSStyleRule.cpp */; };
A80E6CF00A1989CA007FB8C5 /* CSSInheritedValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CC60A1989CA007FB8C5 /* CSSInheritedValue.cpp */; };
A80E6CF10A1989CA007FB8C5 /* FontValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CC70A1989CA007FB8C5 /* FontValue.cpp */; };
- A80E6CF20A1989CA007FB8C5 /* CSSRuleList.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CC80A1989CA007FB8C5 /* CSSRuleList.h */; };
+ A80E6CF20A1989CA007FB8C5 /* CSSRuleList.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CC80A1989CA007FB8C5 /* CSSRuleList.h */; settings = {ATTRIBUTES = (Private, ); }; };
A80E6CF30A1989CA007FB8C5 /* FontFamilyValue.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CC90A1989CA007FB8C5 /* FontFamilyValue.h */; };
A80E6CF40A1989CA007FB8C5 /* ShadowValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CCA0A1989CA007FB8C5 /* ShadowValue.cpp */; };
A80E6CF50A1989CA007FB8C5 /* CSSPageRule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CCB0A1989CA007FB8C5 /* CSSPageRule.cpp */; };
@@ -3495,7 +3495,7 @@
A80E6D090A1989CA007FB8C5 /* CSSRuleList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CDF0A1989CA007FB8C5 /* CSSRuleList.cpp */; };
A80E6D0B0A1989CA007FB8C5 /* DashboardRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CE10A1989CA007FB8C5 /* DashboardRegion.h */; };
A80E6D0C0A1989CA007FB8C5 /* CSSStyleRule.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CE20A1989CA007FB8C5 /* CSSStyleRule.h */; };
- A80E6D0D0A1989CA007FB8C5 /* CSSRule.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CE30A1989CA007FB8C5 /* CSSRule.h */; };
+ A80E6D0D0A1989CA007FB8C5 /* CSSRule.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CE30A1989CA007FB8C5 /* CSSRule.h */; settings = {ATTRIBUTES = (Private, ); }; };
A80E6DFB0A199067007FB8C5 /* CSSMutableStyleDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6DF90A199067007FB8C5 /* CSSMutableStyleDeclaration.cpp */; };
A80E6DFC0A199067007FB8C5 /* CSSMutableStyleDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6DFA0A199067007FB8C5 /* CSSMutableStyleDeclaration.h */; settings = {ATTRIBUTES = (Private, ); }; };
A80E6E0F0A19911C007FB8C5 /* CSSStyleDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6E0D0A19911C007FB8C5 /* CSSStyleDeclaration.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3947,14 +3947,14 @@
A8EA7EC00A1945D000A8EF5F /* EntityReference.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA7EB80A1945D000A8EF5F /* EntityReference.h */; };
A8EA7EC10A1945D000A8EF5F /* EntityReference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8EA7EB90A1945D000A8EF5F /* EntityReference.cpp */; };
A8EA7EC20A1945D000A8EF5F /* Entity.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA7EBA0A1945D000A8EF5F /* Entity.h */; };
- A8EA80070A19516E00A8EF5F /* CSSStyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA7FFF0A19516E00A8EF5F /* CSSStyleSheet.h */; };
+ A8EA80070A19516E00A8EF5F /* CSSStyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA7FFF0A19516E00A8EF5F /* CSSStyleSheet.h */; settings = {ATTRIBUTES = (Private, ); }; };
A8EA80080A19516E00A8EF5F /* CSSStyleSheet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8EA80000A19516E00A8EF5F /* CSSStyleSheet.cpp */; };
A8EA80090A19516E00A8EF5F /* MediaList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8EA80010A19516E00A8EF5F /* MediaList.cpp */; };
A8EA800A0A19516E00A8EF5F /* StyleSheetList.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA80020A19516E00A8EF5F /* StyleSheetList.h */; };
A8EA800B0A19516E00A8EF5F /* StyleSheetList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8EA80030A19516E00A8EF5F /* StyleSheetList.cpp */; };
- A8EA800C0A19516E00A8EF5F /* StyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA80040A19516E00A8EF5F /* StyleSheet.h */; };
+ A8EA800C0A19516E00A8EF5F /* StyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA80040A19516E00A8EF5F /* StyleSheet.h */; settings = {ATTRIBUTES = (Private, ); }; };
A8EA800D0A19516E00A8EF5F /* StyleSheet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8EA80050A19516E00A8EF5F /* StyleSheet.cpp */; };
- A8EA800E0A19516E00A8EF5F /* MediaList.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA80060A19516E00A8EF5F /* MediaList.h */; };
+ A8EA800E0A19516E00A8EF5F /* MediaList.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EA80060A19516E00A8EF5F /* MediaList.h */; settings = {ATTRIBUTES = (Private, ); }; };
A8F46A840CB20A9D003A9670 /* DOMSVGClipPathElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 8503612C0ACE007B001F3D9E /* DOMSVGClipPathElement.h */; };
A8F46A880CB20A9D003A9670 /* DOMSVGGradientElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85C9A2EC0AD7E90300FBFF1E /* DOMSVGGradientElement.h */; };
A8F46A890CB20A9D003A9670 /* DOMSVGAnimateColorElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 850361280ACE007B001F3D9E /* DOMSVGAnimateColorElement.h */; };
@@ -21566,10 +21566,15 @@
buildActionMask = 2147483647;
files = (
3106037014327D2E00ABF4BA /* WebKitCSSFilterValue.h in Headers */,
+ A8EA800C0A19516E00A8EF5F /* StyleSheet.h in Headers */,
+ A8EA80070A19516E00A8EF5F /* CSSStyleSheet.h in Headers */,
319AE064142D6B24006563A1 /* StyleFilterData.h in Headers */,
319AE068142D78DD006563A1 /* FilterOperation.h in Headers */,
319AE06A142D78DD006563A1 /* FilterOperations.h in Headers */,
+ A8EA800E0A19516E00A8EF5F /* MediaList.h in Headers */,
5D8C4DC01428222C0026CE72 /* DisplaySleepDisabler.h in Headers */,
+ A80E6D0D0A1989CA007FB8C5 /* CSSRule.h in Headers */,
+ A80E6CF20A1989CA007FB8C5 /* CSSRuleList.h in Headers */,
B5B5DC6A119BB3D5002A8790 /* AbstractDatabase.h in Headers */,
41E1B1D10FF5986900576B3B /* AbstractWorker.h in Headers */,
29A8122E0FBB9C1D00510293 /* AccessibilityARIAGridCell.h in Headers */,
@@ -21852,8 +21857,6 @@
82E3D8DF122EA0D1003AE5BC /* CSSPropertySourceData.h in Headers */,
9362640B0DE1137D009D5A00 /* CSSReflectionDirection.h in Headers */,
BC5A12E00DC0414800C9AFAD /* CSSReflectValue.h in Headers */,
- A80E6D0D0A1989CA007FB8C5 /* CSSRule.h in Headers */,
- A80E6CF20A1989CA007FB8C5 /* CSSRuleList.h in Headers */,
371F51A10D262FA000ECE0D5 /* CSSSegmentedFontFace.h in Headers */,
A80E73520A199C77007FB8C5 /* CSSSelector.h in Headers */,
E4C1789B0EE6903800824D69 /* CSSSelectorList.h in Headers */,
@@ -21861,7 +21864,6 @@
A80E6E0F0A19911C007FB8C5 /* CSSStyleDeclaration.h in Headers */,
A80E6D0C0A1989CA007FB8C5 /* CSSStyleRule.h in Headers */,
BC772B400C4EA91E0083285F /* CSSStyleSelector.h in Headers */,
- A8EA80070A19516E00A8EF5F /* CSSStyleSheet.h in Headers */,
BC80C9880CD294EE00A0B7B3 /* CSSTimingFunctionValue.h in Headers */,
371F53E90D2704F900ECE0D5 /* CSSUnicodeRangeValue.h in Headers */,
DD7CDF250A23CF9800069928 /* CSSUnknownRule.h in Headers */,
@@ -23576,7 +23578,6 @@
97205AB81239291000B17380 /* MediaDocument.h in Headers */,
E44613AD0CD6331000FADA75 /* MediaError.h in Headers */,
4E1959220A39DABA00220FE5 /* MediaFeatureNames.h in Headers */,
- A8EA800E0A19516E00A8EF5F /* MediaList.h in Headers */,
E44613E40CD681A200FADA75 /* MediaPlayer.h in Headers */,
076F0D0E12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h in Headers */,
E44613E60CD681A900FADA75 /* MediaPlayerPrivateQTKit.h in Headers */,
@@ -24094,7 +24095,6 @@
BC2272E40E82EE9B00E7F975 /* StyleRareInheritedData.h in Headers */,
BC2272BD0E82EAAE00E7F975 /* StyleRareNonInheritedData.h in Headers */,
BC2272870E82E70700E7F975 /* StyleReflection.h in Headers */,
- A8EA800C0A19516E00A8EF5F /* StyleSheet.h in Headers */,
A8EA800A0A19516E00A8EF5F /* StyleSheetList.h in Headers */,
BC5EB5E50E81BF6D00B25965 /* StyleSurroundData.h in Headers */,
BC5EB8100E81F2CE00B25965 /* StyleTransformData.h in Headers */,
Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (97848 => 97849)
--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h 2011-10-19 12:11:40 UTC (rev 97849)
@@ -22,11 +22,13 @@
#ifndef JSDOMBinding_h
#define JSDOMBinding_h
+#include "CSSStyleSheet.h"
#include "JSDOMGlobalObject.h"
#include "JSDOMWrapper.h"
#include "DOMWrapperWorld.h"
#include "Document.h"
#include "Element.h"
+#include "MediaList.h"
#include "StyleBase.h"
#include <heap/Weak.h>
#include <runtime/FunctionPrototype.h>
@@ -184,6 +186,13 @@
return styleBase;
}
+ inline void* root(MediaList* mediaList)
+ {
+ if (CSSStyleSheet* parentStyleSheet = mediaList->parentStyleSheet())
+ return root(parentStyleSheet);
+ return mediaList;
+ }
+
const JSC::HashTable* getHashTableForGlobalData(JSC::JSGlobalData&, const JSC::HashTable* staticTable);
void reportException(JSC::ExecState*, JSC::JSValue exception);
Modified: trunk/Source/WebCore/css/CSSImportRule.cpp (97848 => 97849)
--- trunk/Source/WebCore/css/CSSImportRule.cpp 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/css/CSSImportRule.cpp 2011-10-19 12:11:40 UTC (rev 97849)
@@ -39,7 +39,7 @@
, m_loading(false)
{
if (m_lstMedia)
- m_lstMedia->setParent(this);
+ m_lstMedia->setParentStyleSheet(parent);
else
m_lstMedia = MediaList::create(this, String());
}
@@ -47,7 +47,7 @@
CSSImportRule::~CSSImportRule()
{
if (m_lstMedia)
- m_lstMedia->setParent(0);
+ m_lstMedia->setParentStyleSheet(0);
if (m_styleSheet)
m_styleSheet->setParent(0);
if (m_cachedSheet)
Modified: trunk/Source/WebCore/css/CSSMediaRule.cpp (97848 => 97849)
--- trunk/Source/WebCore/css/CSSMediaRule.cpp 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/css/CSSMediaRule.cpp 2011-10-19 12:11:40 UTC (rev 97849)
@@ -33,7 +33,7 @@
, m_lstMedia(media)
, m_lstCSSRules(rules)
{
- m_lstMedia->setParent(this);
+ m_lstMedia->setParentStyleSheet(parent);
int length = m_lstCSSRules->length();
for (int i = 0; i < length; i++)
m_lstCSSRules->item(i)->setParent(this);
@@ -42,7 +42,7 @@
CSSMediaRule::~CSSMediaRule()
{
if (m_lstMedia)
- m_lstMedia->setParent(0);
+ m_lstMedia->setParentStyleSheet(0);
int length = m_lstCSSRules->length();
for (int i = 0; i < length; i++)
Modified: trunk/Source/WebCore/css/CSSMediaRule.h (97848 => 97849)
--- trunk/Source/WebCore/css/CSSMediaRule.h 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/css/CSSMediaRule.h 2011-10-19 12:11:40 UTC (rev 97849)
@@ -31,7 +31,6 @@
namespace WebCore {
class CSSRuleList;
-class MediaList;
class CSSMediaRule : public CSSRule {
public:
Modified: trunk/Source/WebCore/css/MediaList.cpp (97848 => 97849)
--- trunk/Source/WebCore/css/MediaList.cpp 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/css/MediaList.cpp 2011-10-19 12:11:40 UTC (rev 97849)
@@ -57,15 +57,15 @@
* throw SYNTAX_ERR exception.
*/
-MediaList::MediaList(CSSStyleSheet* parentSheet, bool fallbackToDescriptor)
- : StyleBase(parentSheet)
- , m_fallback(fallbackToDescriptor)
+MediaList::MediaList(CSSStyleSheet* parentStyleSheet, bool fallbackToDescriptor)
+ : m_fallback(fallbackToDescriptor)
+ , m_parentStyleSheet(parentStyleSheet)
{
}
-MediaList::MediaList(CSSStyleSheet* parentSheet, const String& media, bool fallbackToDescriptor)
- : StyleBase(parentSheet)
- , m_fallback(fallbackToDescriptor)
+MediaList::MediaList(CSSStyleSheet* parentStyleSheet, const String& media, bool fallbackToDescriptor)
+ : m_fallback(fallbackToDescriptor)
+ , m_parentStyleSheet(parentStyleSheet)
{
ExceptionCode ec = 0;
setMediaText(media, ec);
@@ -82,8 +82,8 @@
}
MediaList::MediaList(CSSImportRule* parentRule, const String& media)
- : StyleBase(parentRule)
- , m_fallback(false)
+ : m_fallback(false)
+ , m_parentStyleSheet(parentRule->parentStyleSheet())
{
ExceptionCode ec = 0;
setMediaText(media, ec);
@@ -248,10 +248,10 @@
void MediaList::notifyChanged()
{
- for (StyleBase* p = parent(); p; p = p->parent()) {
- if (p->isCSSStyleSheet())
- return static_cast<CSSStyleSheet*>(p)->styleSheetChanged();
- }
+ if (!m_parentStyleSheet)
+ return;
+
+ m_parentStyleSheet->styleSheetChanged();
}
}
Modified: trunk/Source/WebCore/css/MediaList.h (97848 => 97849)
--- trunk/Source/WebCore/css/MediaList.h 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/css/MediaList.h 2011-10-19 12:11:40 UTC (rev 97849)
@@ -21,20 +21,21 @@
#ifndef MediaList_h
#define MediaList_h
-#include "StyleBase.h"
#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
class CSSImportRule;
+class CSSRule;
class CSSStyleSheet;
class MediaQuery;
typedef int ExceptionCode;
-class MediaList : public StyleBase {
+class MediaList : public RefCounted<MediaList> {
public:
static PassRefPtr<MediaList> create()
{
@@ -76,6 +77,14 @@
void appendMediaQuery(PassOwnPtr<MediaQuery>);
const Vector<MediaQuery*>& mediaQueries() const { return m_queries; }
+ CSSStyleSheet* parentStyleSheet() const { return m_parentStyleSheet; }
+ void setParentStyleSheet(CSSStyleSheet* styleSheet)
+ {
+ // MediaList should never be moved between style sheets.
+ ASSERT(styleSheet == m_parentStyleSheet || !m_parentStyleSheet || !styleSheet);
+ m_parentStyleSheet = styleSheet;
+ }
+
private:
MediaList(CSSStyleSheet* parentSheet, bool fallbackToDescription);
MediaList(CSSStyleSheet* parentSheet, const String& media, bool fallbackToDescription);
@@ -83,8 +92,10 @@
void notifyChanged();
+ bool m_fallback; // true if failed media query parsing should fallback to media description parsing.
+
+ CSSStyleSheet* m_parentStyleSheet;
Vector<MediaQuery*> m_queries;
- bool m_fallback; // true if failed media query parsing should fallback to media description parsing
};
} // namespace
Modified: trunk/Source/WebCore/css/StyleSheet.cpp (97848 => 97849)
--- trunk/Source/WebCore/css/StyleSheet.cpp 2011-10-19 12:02:18 UTC (rev 97848)
+++ trunk/Source/WebCore/css/StyleSheet.cpp 2011-10-19 12:11:40 UTC (rev 97849)
@@ -20,6 +20,7 @@
#include "config.h"
#include "StyleSheet.h"
+#include "CSSStyleSheet.h"
#include "MediaList.h"
#include "Node.h"
@@ -55,7 +56,7 @@
StyleSheet::~StyleSheet()
{
if (m_media)
- m_media->setParent(0);
+ m_media->setParentStyleSheet(0);
}
StyleSheet* StyleSheet::parentStyleSheet() const
@@ -65,11 +66,14 @@
void StyleSheet::setMedia(PassRefPtr<MediaList> media)
{
+ ASSERT(isCSSStyleSheet());
+ ASSERT(!media->parentStyleSheet() || media->parentStyleSheet() == this);
+
if (m_media)
- m_media->setParent(0);
+ m_media->setParentStyleSheet(0);
m_media = media;
- m_media->setParent(this);
+ m_media->setParentStyleSheet(static_cast<CSSStyleSheet*>(this));
}
KURL StyleSheet::completeURL(const String& url) const