Bug 1371453 Part 3: Change CSSImportRule definition so that media is optional, since in Servo it is derived from an optional stylesheet.
MozReview-Commit-ID: Gc4igqA1H0
--- a/dom/webidl/CSSImportRule.webidl
+++ b/dom/webidl/CSSImportRule.webidl
@@ -5,13 +5,16 @@
*
* The origin of this IDL file is
* https://drafts.csswg.org/cssom/#cssimportrule
*/
// https://drafts.csswg.org/cssom/#cssimportrule
interface CSSImportRule : CSSRule {
readonly attribute DOMString href;
- [SameObject, PutForwards=mediaText] readonly attribute MediaList media;
+ // Per spec, the .media is never null, but in our implementation it can
+ // be since stylesheet can be null, and in Stylo, media is derived from
+ // the stylesheet. See <https://bugzilla.mozilla.org/show_bug.cgi?id=1326509>.
+ [SameObject, PutForwards=mediaText] readonly attribute MediaList? media;
// Per spec, the .styleSheet is never null, but in our implementation it can
// be. See <https://bugzilla.mozilla.org/show_bug.cgi?id=1326509>.
[SameObject] readonly attribute CSSStyleSheet? styleSheet;
};
--- a/layout/style/CSSImportRule.cpp
+++ b/layout/style/CSSImportRule.cpp
@@ -26,17 +26,17 @@ CSSImportRule::IsCCLeaf() const
// We're not a leaf.
return false;
}
NS_IMETHODIMP
CSSImportRule::GetMedia(nsIDOMMediaList** aMedia)
{
NS_ENSURE_ARG_POINTER(aMedia);
- NS_ADDREF(*aMedia = Media());
+ NS_IF_ADDREF(*aMedia = GetMedia());
return NS_OK;
}
NS_IMETHODIMP
CSSImportRule::GetStyleSheet(nsIDOMCSSStyleSheet** aStyleSheet)
{
NS_ENSURE_ARG_POINTER(aStyleSheet);
NS_IF_ADDREF(*aStyleSheet = GetStyleSheet());
--- a/layout/style/CSSImportRule.h
+++ b/layout/style/CSSImportRule.h
@@ -32,17 +32,17 @@ public:
// nsIDOMCSSImportRule interface
NS_IMETHOD GetMedia(nsIDOMMediaList** aMedia) final;
NS_IMETHOD GetStyleSheet(nsIDOMCSSStyleSheet** aStyleSheet) final;
// WebIDL interface
uint16_t Type() const final { return nsIDOMCSSRule::IMPORT_RULE; }
// The XPCOM GetHref is fine, since it never fails.
- virtual dom::MediaList* Media() const = 0;
+ virtual dom::MediaList* GetMedia() const = 0;
virtual StyleSheet* GetStyleSheet() const = 0;
JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
};
} // namespace dom
} // namespace mozilla
--- a/layout/style/ImportRule.h
+++ b/layout/style/ImportRule.h
@@ -35,35 +35,36 @@ public:
private:
// for |Clone|
ImportRule(const ImportRule& aCopy);
~ImportRule();
public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ImportRule, Rule)
NS_DECL_ISUPPORTS_INHERITED
- // unhide since nsIDOMCSSImportRule has its own GetStyleSheet
+ // unhide since nsIDOMCSSImportRule has its own GetStyleSheet and GetMedia
using dom::CSSImportRule::GetStyleSheet;
+ using dom::CSSImportRule::GetMedia;
// Rule methods
#ifdef DEBUG
virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
#endif
virtual already_AddRefed<Rule> Clone() const override;
void SetSheet(CSSStyleSheet*);
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
// nsIDOMCSSImportRule interface
NS_IMETHOD GetHref(nsAString& aHref) final;
// WebIDL interface
void GetCssTextImpl(nsAString& aCssText) const override;
- dom::MediaList* Media() const final;
+ dom::MediaList* GetMedia() const final;
StyleSheet* GetStyleSheet() const final;
private:
nsString mURLSpec;
RefPtr<nsMediaList> mMedia;
RefPtr<CSSStyleSheet> mChildSheet;
};
--- a/layout/style/ServoImportRule.cpp
+++ b/layout/style/ServoImportRule.cpp
@@ -58,19 +58,20 @@ ServoImportRule::List(FILE* out, int32_t
str.AppendLiteral(" ");
}
Servo_ImportRule_Debug(mRawRule, &str);
fprintf_stderr(out, "%s\n", str.get());
}
#endif
dom::MediaList*
-ServoImportRule::Media() const
+ServoImportRule::GetMedia() const
{
- return mChildSheet->Media();
+ // When Bug 1326509 is fixed, we can assert mChildSheet instead.
+ return mChildSheet ? mChildSheet->Media() : nullptr;
}
StyleSheet*
ServoImportRule::GetStyleSheet() const
{
return mChildSheet;
}
--- a/layout/style/ServoImportRule.h
+++ b/layout/style/ServoImportRule.h
@@ -22,31 +22,32 @@ class ServoImportRule final : public dom
public:
ServoImportRule(RefPtr<RawServoImportRule> aRawRule,
ServoStyleSheet* aSheet,
uint32_t aLine, uint32_t aColumn);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ServoImportRule, dom::CSSImportRule)
- // unhide since nsIDOMCSSImportRule has its own GetStyleSheet
+ // unhide since nsIDOMCSSImportRule has its own GetStyleSheet and GetMedia
using dom::CSSImportRule::GetStyleSheet;
+ using dom::CSSImportRule::GetMedia;
#ifdef DEBUG
void List(FILE* out = stdout, int32_t aIndent = 0) const final;
#endif
already_AddRefed<css::Rule> Clone() const final;
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const final;
// nsIDOMCSSImportRule interface
NS_IMETHOD GetHref(nsAString& aHref) final;
// WebIDL interface
void GetCssTextImpl(nsAString& aCssText) const override;
- dom::MediaList* Media() const final;
+ dom::MediaList* GetMedia() const final;
StyleSheet* GetStyleSheet() const final;
private:
~ServoImportRule();
RefPtr<RawServoImportRule> mRawRule;
RefPtr<ServoStyleSheet> mChildSheet;
};
--- a/layout/style/nsCSSRules.cpp
+++ b/layout/style/nsCSSRules.cpp
@@ -272,17 +272,17 @@ ImportRule::GetCssTextImpl(nsAString& aC
aCssText.Append(' ');
aCssText.Append(mediaText);
}
}
aCssText.Append(';');
}
MediaList*
-ImportRule::Media() const
+ImportRule::GetMedia() const
{
return mMedia;
}
StyleSheet*
ImportRule::GetStyleSheet() const
{
return mChildSheet;