Bug 1451289 - Part 3: Merge ServoMediaRule and CSSMediaRule r=emilio

MozReview-Commit-ID: I7vpKO4LFt4

--HG--
extra : rebase_source : fc3ff2abee2cdc5006da741e717a618b2d3a94ef
This commit is contained in:
Nazım Can Altınova 2018-06-04 14:14:47 +02:00
parent 92aa0e63d1
commit 772ef770c8
7 changed files with 126 additions and 172 deletions

View File

@ -12,6 +12,98 @@
namespace mozilla {
namespace dom {
CSSMediaRule::CSSMediaRule(RefPtr<RawServoMediaRule> aRawRule,
uint32_t aLine, uint32_t aColumn)
: ConditionRule(Servo_MediaRule_GetRules(aRawRule).Consume(), aLine, aColumn)
, mRawRule(std::move(aRawRule))
{
}
CSSMediaRule::~CSSMediaRule()
{
if (mMediaList) {
mMediaList->SetStyleSheet(nullptr);
}
}
NS_IMPL_ADDREF_INHERITED(CSSMediaRule, css::ConditionRule)
NS_IMPL_RELEASE_INHERITED(CSSMediaRule, css::ConditionRule)
// QueryInterface implementation for MediaRule
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(CSSMediaRule)
NS_INTERFACE_MAP_END_INHERITING(css::ConditionRule)
NS_IMPL_CYCLE_COLLECTION_CLASS(CSSMediaRule)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(CSSMediaRule, css::ConditionRule)
if (tmp->mMediaList) {
tmp->mMediaList->SetStyleSheet(nullptr);
tmp->mMediaList = nullptr;
}
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(CSSMediaRule, css::ConditionRule)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMediaList)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
/* virtual */ void
CSSMediaRule::SetStyleSheet(StyleSheet* aSheet)
{
if (mMediaList) {
mMediaList->SetStyleSheet(aSheet);
}
ConditionRule::SetStyleSheet(aSheet);
}
#ifdef DEBUG
/* virtual */ void
CSSMediaRule::List(FILE* out, int32_t aIndent) const
{
nsAutoCString str;
for (int32_t i = 0; i < aIndent; i++) {
str.AppendLiteral(" ");
}
Servo_MediaRule_Debug(mRawRule, &str);
fprintf_stderr(out, "%s\n", str.get());
}
#endif
void
CSSMediaRule::GetConditionText(nsAString& aConditionText)
{
Media()->GetMediaText(aConditionText);
}
void
CSSMediaRule::SetConditionText(const nsAString& aConditionText,
ErrorResult& aRv)
{
Media()->SetMediaText(aConditionText);
}
/* virtual */ void
CSSMediaRule::GetCssText(nsAString& aCssText) const
{
Servo_MediaRule_GetCssText(mRawRule, &aCssText);
}
/* virtual */ dom::MediaList*
CSSMediaRule::Media()
{
if (!mMediaList) {
mMediaList = new MediaList(Servo_MediaRule_GetMedia(mRawRule).Consume());
mMediaList->SetStyleSheet(GetStyleSheet());
}
return mMediaList;
}
/* virtual */ size_t
CSSMediaRule::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
{
// TODO Implement this!
return aMallocSizeOf(this);
}
/* virtual */ JSObject*
CSSMediaRule::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
{

View File

@ -8,23 +8,48 @@
#define mozilla_dom_CSSMediaRule_h
#include "mozilla/css/GroupRule.h"
#include "mozilla/ServoBindingTypes.h"
namespace mozilla {
namespace dom {
class CSSMediaRule : public css::ConditionRule
class CSSMediaRule final : public css::ConditionRule
{
protected:
using ConditionRule::ConditionRule;
virtual ~CSSMediaRule() {}
public:
CSSMediaRule(RefPtr<RawServoMediaRule> aRawRule,
uint32_t aLine, uint32_t aColumn);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(CSSMediaRule, css::ConditionRule)
void SetStyleSheet(StyleSheet* aSheet) override;
#ifdef DEBUG
void List(FILE* out = stdout, int32_t aIndent = 0) const final;
#endif
RawServoMediaRule* Raw() const { return mRawRule; }
// WebIDL interface
uint16_t Type() const override { return CSSRuleBinding::MEDIA_RULE; }
virtual MediaList* Media() = 0;
// WebIDL interface
void GetCssText(nsAString& aCssText) const final;
void GetConditionText(nsAString& aConditionText) final;
void SetConditionText(const nsAString& aConditionText,
ErrorResult& aRv) final;
dom::MediaList* Media();
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf)
const override;
JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
private:
virtual ~CSSMediaRule();
RefPtr<RawServoMediaRule> mRawRule;
RefPtr<dom::MediaList> mMediaList;
};
} // namespace dom

View File

@ -9,6 +9,7 @@
#include "mozilla/ServoCSSRuleList.h"
#include "mozilla/dom/CSSKeyframesRule.h"
#include "mozilla/dom/CSSMediaRule.h"
#include "mozilla/dom/CSSNamespaceRule.h"
#include "mozilla/IntegerRange.h"
#include "mozilla/ServoBindings.h"
@ -17,7 +18,6 @@
#include "mozilla/ServoImportRule.h"
#include "mozilla/ServoFontFaceRule.h"
#include "mozilla/ServoFontFeatureValuesRule.h"
#include "mozilla/ServoMediaRule.h"
#include "mozilla/ServoPageRule.h"
#include "mozilla/ServoStyleRule.h"
#include "mozilla/ServoSupportsRule.h"
@ -106,7 +106,7 @@ ServoCSSRuleList::GetRule(uint32_t aIndex)
}
CASE_RULE(STYLE, Style)
CASE_RULE_CSS(KEYFRAMES, Keyframes)
CASE_RULE(MEDIA, Media)
CASE_RULE_CSS(MEDIA, Media)
CASE_RULE_CSS(NAMESPACE, Namespace)
CASE_RULE(PAGE, Page)
CASE_RULE(SUPPORTS, Supports)

View File

@ -1,110 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* representation of CSSMediaRule for stylo */
#include "mozilla/ServoMediaRule.h"
#include "mozilla/ServoBindings.h"
#include "mozilla/dom/MediaList.h"
using namespace mozilla::dom;
namespace mozilla {
ServoMediaRule::ServoMediaRule(RefPtr<RawServoMediaRule> aRawRule,
uint32_t aLine, uint32_t aColumn)
: CSSMediaRule(Servo_MediaRule_GetRules(aRawRule).Consume(), aLine, aColumn)
, mRawRule(std::move(aRawRule))
{
}
ServoMediaRule::~ServoMediaRule()
{
if (mMediaList) {
mMediaList->SetStyleSheet(nullptr);
}
}
NS_IMPL_ADDREF_INHERITED(ServoMediaRule, CSSMediaRule)
NS_IMPL_RELEASE_INHERITED(ServoMediaRule, CSSMediaRule)
// QueryInterface implementation for MediaRule
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ServoMediaRule)
NS_INTERFACE_MAP_END_INHERITING(CSSMediaRule)
NS_IMPL_CYCLE_COLLECTION_CLASS(ServoMediaRule)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(ServoMediaRule, CSSMediaRule)
if (tmp->mMediaList) {
tmp->mMediaList->SetStyleSheet(nullptr);
tmp->mMediaList = nullptr;
}
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(ServoMediaRule, CSSMediaRule)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMediaList)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
/* virtual */ void
ServoMediaRule::SetStyleSheet(StyleSheet* aSheet)
{
if (mMediaList) {
mMediaList->SetStyleSheet(aSheet);
}
CSSMediaRule::SetStyleSheet(aSheet);
}
#ifdef DEBUG
/* virtual */ void
ServoMediaRule::List(FILE* out, int32_t aIndent) const
{
nsAutoCString str;
for (int32_t i = 0; i < aIndent; i++) {
str.AppendLiteral(" ");
}
Servo_MediaRule_Debug(mRawRule, &str);
fprintf_stderr(out, "%s\n", str.get());
}
#endif
void
ServoMediaRule::GetConditionText(nsAString& aConditionText)
{
Media()->GetMediaText(aConditionText);
}
void
ServoMediaRule::SetConditionText(const nsAString& aConditionText,
ErrorResult& aRv)
{
Media()->SetMediaText(aConditionText);
}
/* virtual */ void
ServoMediaRule::GetCssText(nsAString& aCssText) const
{
Servo_MediaRule_GetCssText(mRawRule, &aCssText);
}
/* virtual */ dom::MediaList*
ServoMediaRule::Media()
{
if (!mMediaList) {
mMediaList = new MediaList(Servo_MediaRule_GetMedia(mRawRule).Consume());
mMediaList->SetStyleSheet(GetStyleSheet());
}
return mMediaList;
}
/* virtual */ size_t
ServoMediaRule::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
{
// TODO Implement this!
return aMallocSizeOf(this);
}
} // namespace mozilla

View File

@ -1,52 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* representation of CSSMediaRule for stylo */
#ifndef mozilla_ServoMediaRule_h
#define mozilla_ServoMediaRule_h
#include "mozilla/dom/CSSMediaRule.h"
#include "mozilla/ServoBindingTypes.h"
namespace mozilla {
class ServoMediaRule final : public dom::CSSMediaRule
{
public:
ServoMediaRule(RefPtr<RawServoMediaRule> aRawRule,
uint32_t aLine, uint32_t aColumn);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ServoMediaRule, dom::CSSMediaRule)
void SetStyleSheet(StyleSheet* aSheet) override;
#ifdef DEBUG
void List(FILE* out = stdout, int32_t aIndent = 0) const final;
#endif
RawServoMediaRule* Raw() const { return mRawRule; }
// WebIDL interface
void GetCssText(nsAString& aCssText) const final;
void GetConditionText(nsAString& aConditionText) final;
void SetConditionText(const nsAString& aConditionText,
ErrorResult& aRv) final;
dom::MediaList* Media() final;
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf)
const override;
private:
virtual ~ServoMediaRule();
RefPtr<RawServoMediaRule> mRawRule;
RefPtr<dom::MediaList> mMediaList;
};
} // namespace mozilla
#endif // mozilla_ServoMediaRule_h

View File

@ -15,6 +15,7 @@
#include "mozilla/dom/MediaList.h"
#include "mozilla/dom/ShadowRoot.h"
#include "mozilla/dom/ShadowRootBinding.h"
#include "mozilla/ServoBindings.h"
#include "mozilla/ServoCSSRuleList.h"
#include "mozilla/ServoStyleSet.h"
#include "mozilla/StaticPrefs.h"

View File

@ -91,7 +91,6 @@ EXPORTS.mozilla += [
'ServoFontFaceRule.h',
'ServoFontFeatureValuesRule.h',
'ServoImportRule.h',
'ServoMediaRule.h',
'ServoPageRule.h',
'ServoSpecifiedValues.h',
'ServoStyleRule.h',
@ -208,7 +207,6 @@ UNIFIED_SOURCES += [
'ServoFontFaceRule.cpp',
'ServoFontFeatureValuesRule.cpp',
'ServoImportRule.cpp',
'ServoMediaRule.cpp',
'ServoPageRule.cpp',
'ServoSpecifiedValues.cpp',
'ServoStyleRule.cpp',