mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 23:38:38 +09:00
Issue #2490 - Part 13: Convert media, supports, and moz-document rules to WebIDL.
This also converts the internal ConditionRule and GroupingRule classes.
This commit is contained in:
parent
6176bd62d9
commit
d1b6a584b8
14 changed files with 272 additions and 93 deletions
|
|
@ -35,6 +35,9 @@
|
|||
#include "mozilla/dom/CSSStyleDeclarationBinding.h"
|
||||
#include "mozilla/dom/CSSNamespaceRuleBinding.h"
|
||||
#include "mozilla/dom/CSSImportRuleBinding.h"
|
||||
#include "mozilla/dom/CSSMediaRuleBinding.h"
|
||||
#include "mozilla/dom/CSSSupportsRuleBinding.h"
|
||||
#include "mozilla/dom/CSSMozDocumentRuleBinding.h"
|
||||
#include "StyleRule.h"
|
||||
#include "nsFont.h"
|
||||
#include "nsIURI.h"
|
||||
|
|
@ -602,43 +605,85 @@ GroupRule::AppendRulesToCssText(nsAString& aCssText) const
|
|||
// nsIDOMCSSMediaRule or nsIDOMCSSMozDocumentRule methods
|
||||
nsresult
|
||||
GroupRule::GetCssRules(nsIDOMCSSRuleList* *aRuleList)
|
||||
{
|
||||
NS_ADDREF(*aRuleList = CssRules());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
CSSRuleList*
|
||||
GroupRule::CssRules()
|
||||
{
|
||||
if (!mRuleCollection) {
|
||||
mRuleCollection = new css::GroupRuleRuleList(this);
|
||||
}
|
||||
|
||||
NS_ADDREF(*aRuleList = mRuleCollection);
|
||||
return NS_OK;
|
||||
return mRuleCollection;
|
||||
}
|
||||
|
||||
nsresult
|
||||
GroupRule::InsertRule(const nsAString & aRule, uint32_t aIndex, uint32_t* _retval)
|
||||
{
|
||||
ErrorResult rv;
|
||||
*_retval = InsertRule(aRule, aIndex, rv);
|
||||
return rv.StealNSResult();
|
||||
}
|
||||
|
||||
uint32_t
|
||||
GroupRule::InsertRule(const nsAString& aRule, uint32_t aIndex, ErrorResult& aRv)
|
||||
{
|
||||
CSSStyleSheet* sheet = GetStyleSheet();
|
||||
NS_ENSURE_TRUE(sheet, NS_ERROR_FAILURE);
|
||||
|
||||
if (aIndex > uint32_t(mRules.Count()))
|
||||
return NS_ERROR_DOM_INDEX_SIZE_ERR;
|
||||
if (NS_WARN_IF(!sheet)) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (aIndex > uint32_t(mRules.Count())) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
NS_ASSERTION(uint32_t(mRules.Count()) <= INT32_MAX,
|
||||
"Too many style rules!");
|
||||
|
||||
return sheet->InsertRuleIntoGroup(aRule, this, aIndex, _retval);
|
||||
uint32_t retval;
|
||||
nsresult rv =
|
||||
sheet->InsertRuleIntoGroup(aRule, this, aIndex, &retval);
|
||||
if (NS_FAILED(rv)) {
|
||||
aRv.Throw(rv);
|
||||
return 0;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
nsresult
|
||||
GroupRule::DeleteRule(uint32_t aIndex)
|
||||
{
|
||||
CSSStyleSheet* sheet = GetStyleSheet();
|
||||
NS_ENSURE_TRUE(sheet, NS_ERROR_FAILURE);
|
||||
ErrorResult rv;
|
||||
DeleteRule(aIndex, rv);
|
||||
return rv.StealNSResult();
|
||||
}
|
||||
|
||||
if (aIndex >= uint32_t(mRules.Count()))
|
||||
return NS_ERROR_DOM_INDEX_SIZE_ERR;
|
||||
void
|
||||
GroupRule::DeleteRule(uint32_t aIndex, ErrorResult& aRv)
|
||||
{
|
||||
CSSStyleSheet* sheet = GetStyleSheet();
|
||||
if (NS_WARN_IF(!sheet)) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (aIndex >= uint32_t(mRules.Count())) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR);
|
||||
return;
|
||||
}
|
||||
|
||||
NS_ASSERTION(uint32_t(mRules.Count()) <= INT32_MAX,
|
||||
"Too many style rules!");
|
||||
|
||||
return sheet->DeleteRuleFromGroup(this, aIndex);
|
||||
nsresult rv = sheet->DeleteRuleFromGroup(this, aIndex);
|
||||
if (NS_FAILED(rv)) {
|
||||
aRv.Throw(rv);
|
||||
}
|
||||
}
|
||||
|
||||
/* virtual */ size_t
|
||||
|
|
@ -655,20 +700,31 @@ GroupRule::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
|
|||
return n;
|
||||
}
|
||||
|
||||
ConditionRule::ConditionRule(uint32_t aLineNumber, uint32_t aColumnNumber)
|
||||
: GroupRule(aLineNumber, aColumnNumber)
|
||||
{
|
||||
}
|
||||
|
||||
ConditionRule::ConditionRule(const ConditionRule& aCopy)
|
||||
: GroupRule(aCopy)
|
||||
{
|
||||
}
|
||||
|
||||
ConditionRule::~ConditionRule()
|
||||
{
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
// nsICSSMediaRule
|
||||
//
|
||||
MediaRule::MediaRule(uint32_t aLineNumber, uint32_t aColumnNumber)
|
||||
: GroupRule(aLineNumber, aColumnNumber)
|
||||
: ConditionRule(aLineNumber, aColumnNumber)
|
||||
{
|
||||
SetIsNotDOMBinding();
|
||||
}
|
||||
|
||||
MediaRule::MediaRule(const MediaRule& aCopy)
|
||||
: GroupRule(aCopy)
|
||||
: ConditionRule(aCopy)
|
||||
{
|
||||
SetIsNotDOMBinding();
|
||||
if (aCopy.mMedia) {
|
||||
mMedia = aCopy.mMedia->Clone();
|
||||
// XXXldb This doesn't really make sense.
|
||||
|
|
@ -683,18 +739,17 @@ MediaRule::~MediaRule()
|
|||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(MediaRule, GroupRule)
|
||||
NS_IMPL_RELEASE_INHERITED(MediaRule, GroupRule)
|
||||
NS_IMPL_ADDREF_INHERITED(MediaRule, ConditionRule)
|
||||
NS_IMPL_RELEASE_INHERITED(MediaRule, ConditionRule)
|
||||
|
||||
// QueryInterface implementation for MediaRule
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MediaRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSMediaRule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSMediaRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(GroupRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(ConditionRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED(MediaRule, GroupRule,
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED(MediaRule, ConditionRule,
|
||||
mMedia)
|
||||
|
||||
/* virtual */ void
|
||||
|
|
@ -764,6 +819,14 @@ MediaRule::Type() const
|
|||
return nsIDOMCSSRule::MEDIA_RULE;
|
||||
}
|
||||
|
||||
nsMediaList*
|
||||
MediaRule::Media() const
|
||||
{
|
||||
// In practice, if we end up being parsed at all, we have non-null mMedia. So
|
||||
// it's OK to claim we don't return null here.
|
||||
return mMedia;
|
||||
}
|
||||
|
||||
void
|
||||
MediaRule::GetCssTextImpl(nsAString& aCssText) const
|
||||
{
|
||||
|
|
@ -802,6 +865,15 @@ MediaRule::GetConditionText(nsAString& aConditionText)
|
|||
|
||||
NS_IMETHODIMP
|
||||
MediaRule::SetConditionText(const nsAString& aConditionText)
|
||||
{
|
||||
ErrorResult rv;
|
||||
SetConditionText(aConditionText, rv);
|
||||
return rv.StealNSResult();
|
||||
}
|
||||
|
||||
void
|
||||
MediaRule::SetConditionText(const nsAString& aConditionText,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
if (!mMedia) {
|
||||
RefPtr<nsMediaList> media = new nsMediaList();
|
||||
|
|
@ -809,11 +881,16 @@ MediaRule::SetConditionText(const nsAString& aConditionText)
|
|||
nsresult rv = media->SetMediaText(aConditionText);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
mMedia = media;
|
||||
} else {
|
||||
aRv.Throw(rv);
|
||||
}
|
||||
return rv;
|
||||
return;
|
||||
}
|
||||
|
||||
return mMedia->SetMediaText(aConditionText);
|
||||
nsresult rv = mMedia->SetMediaText(aConditionText);
|
||||
if (NS_FAILED(rv)) {
|
||||
aRv.Throw(rv);
|
||||
}
|
||||
}
|
||||
|
||||
// nsIDOMCSSMediaRule methods
|
||||
|
|
@ -852,8 +929,7 @@ MediaRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
|||
/* virtual */ JSObject*
|
||||
MediaRule::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
NS_NOTREACHED("We called SetIsNotDOMBinding() in our constructor");
|
||||
return nullptr;
|
||||
return CSSMediaRuleBinding::Wrap(aCx, this, aGivenProto);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -867,32 +943,29 @@ MediaRule::AppendConditionText(nsAString& aOutput) const
|
|||
}
|
||||
|
||||
DocumentRule::DocumentRule(uint32_t aLineNumber, uint32_t aColumnNumber)
|
||||
: GroupRule(aLineNumber, aColumnNumber)
|
||||
: ConditionRule(aLineNumber, aColumnNumber)
|
||||
{
|
||||
SetIsNotDOMBinding();
|
||||
}
|
||||
|
||||
DocumentRule::DocumentRule(const DocumentRule& aCopy)
|
||||
: GroupRule(aCopy)
|
||||
: ConditionRule(aCopy)
|
||||
, mURLs(new URL(*aCopy.mURLs))
|
||||
{
|
||||
SetIsNotDOMBinding();
|
||||
}
|
||||
|
||||
DocumentRule::~DocumentRule()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(DocumentRule, GroupRule)
|
||||
NS_IMPL_RELEASE_INHERITED(DocumentRule, GroupRule)
|
||||
NS_IMPL_ADDREF_INHERITED(DocumentRule, ConditionRule)
|
||||
NS_IMPL_RELEASE_INHERITED(DocumentRule, ConditionRule)
|
||||
|
||||
// QueryInterface implementation for DocumentRule
|
||||
NS_INTERFACE_MAP_BEGIN(DocumentRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSMozDocumentRule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSMozDocumentRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(GroupRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(ConditionRule)
|
||||
|
||||
#ifdef DEBUG
|
||||
/* virtual */ void
|
||||
|
|
@ -996,6 +1069,13 @@ DocumentRule::SetConditionText(const nsAString& aConditionText)
|
|||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
void
|
||||
DocumentRule::SetConditionText(const nsAString& aConditionText,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
// GroupRule interface
|
||||
/* virtual */ bool
|
||||
DocumentRule::UseForPresentation(nsPresContext* aPresContext,
|
||||
|
|
@ -1075,8 +1155,7 @@ DocumentRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
|||
DocumentRule::WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
NS_NOTREACHED("We called SetIsNotDOMBinding() in our constructor");
|
||||
return nullptr;
|
||||
return CSSMozDocumentRuleBinding::Wrap(aCx, this, aGivenProto);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2659,11 +2738,10 @@ namespace mozilla {
|
|||
CSSSupportsRule::CSSSupportsRule(bool aConditionMet,
|
||||
const nsString& aCondition,
|
||||
uint32_t aLineNumber, uint32_t aColumnNumber)
|
||||
: css::GroupRule(aLineNumber, aColumnNumber)
|
||||
: css::ConditionRule(aLineNumber, aColumnNumber)
|
||||
, mUseGroup(aConditionMet)
|
||||
, mCondition(aCondition)
|
||||
{
|
||||
SetIsNotDOMBinding();
|
||||
}
|
||||
|
||||
CSSSupportsRule::~CSSSupportsRule()
|
||||
|
|
@ -2671,11 +2749,10 @@ CSSSupportsRule::~CSSSupportsRule()
|
|||
}
|
||||
|
||||
CSSSupportsRule::CSSSupportsRule(const CSSSupportsRule& aCopy)
|
||||
: css::GroupRule(aCopy),
|
||||
: css::ConditionRule(aCopy),
|
||||
mUseGroup(aCopy.mUseGroup),
|
||||
mCondition(aCopy.mCondition)
|
||||
{
|
||||
SetIsNotDOMBinding();
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
|
|
@ -2716,16 +2793,15 @@ CSSSupportsRule::UseForPresentation(nsPresContext* aPresContext,
|
|||
return mUseGroup;
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(CSSSupportsRule, css::GroupRule)
|
||||
NS_IMPL_RELEASE_INHERITED(CSSSupportsRule, css::GroupRule)
|
||||
NS_IMPL_ADDREF_INHERITED(CSSSupportsRule, css::ConditionRule)
|
||||
NS_IMPL_RELEASE_INHERITED(CSSSupportsRule, css::ConditionRule)
|
||||
|
||||
// QueryInterface implementation for CSSSupportsRule
|
||||
NS_INTERFACE_MAP_BEGIN(CSSSupportsRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSSupportsRule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSSupportsRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(GroupRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(ConditionRule)
|
||||
|
||||
uint16_t
|
||||
CSSSupportsRule::Type() const
|
||||
|
|
@ -2774,6 +2850,13 @@ CSSSupportsRule::SetConditionText(const nsAString& aConditionText)
|
|||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
void
|
||||
CSSSupportsRule::SetConditionText(const nsAString& aConditionText,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
/* virtual */ size_t
|
||||
CSSSupportsRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
|
|
@ -2787,8 +2870,7 @@ CSSSupportsRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
|||
CSSSupportsRule::WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
NS_NOTREACHED("We called SetIsNotDOMBinding() in our constructor");
|
||||
return nullptr;
|
||||
return CSSSupportsRuleBinding::Wrap(aCx, this, aGivenProto);
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue