diff options
Diffstat (limited to 'layout/style/ServoStyleSheet.cpp')
-rw-r--r-- | layout/style/ServoStyleSheet.cpp | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/layout/style/ServoStyleSheet.cpp b/layout/style/ServoStyleSheet.cpp new file mode 100644 index 000000000..cfeae20d2 --- /dev/null +++ b/layout/style/ServoStyleSheet.cpp @@ -0,0 +1,143 @@ +/* -*- 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/. */ + +#include "mozilla/ServoStyleSheet.h" +#include "mozilla/StyleBackendType.h" + +namespace mozilla { + +ServoStyleSheet::ServoStyleSheet(css::SheetParsingMode aParsingMode, + CORSMode aCORSMode, + net::ReferrerPolicy aReferrerPolicy, + const dom::SRIMetadata& aIntegrity) + : StyleSheet(StyleBackendType::Servo, aParsingMode) + , mSheetInfo(aCORSMode, aReferrerPolicy, aIntegrity) +{ +} + +ServoStyleSheet::~ServoStyleSheet() +{ + DropSheet(); +} + +bool +ServoStyleSheet::HasRules() const +{ + return mSheet && Servo_StyleSheet_HasRules(mSheet); +} + +void +ServoStyleSheet::SetOwningDocument(nsIDocument* aDocument) +{ + // XXXheycam: Traverse to child ServoStyleSheets to set this, like + // CSSStyleSheet::SetOwningDocument does. + + mDocument = aDocument; +} + +ServoStyleSheet* +ServoStyleSheet::GetParentSheet() const +{ + // XXXheycam: When we implement support for child sheets, we'll have + // to fix SetOwningDocument to propagate the owning document down + // to the children. + MOZ_CRASH("stylo: not implemented"); +} + +void +ServoStyleSheet::AppendStyleSheet(ServoStyleSheet* aSheet) +{ + // XXXheycam: When we implement support for child sheets, we'll have + // to fix SetOwningDocument to propagate the owning document down + // to the children. + MOZ_CRASH("stylo: not implemented"); +} + +nsresult +ServoStyleSheet::ParseSheet(const nsAString& aInput, + nsIURI* aSheetURI, + nsIURI* aBaseURI, + nsIPrincipal* aSheetPrincipal, + uint32_t aLineNumber) +{ + DropSheet(); + + RefPtr<ThreadSafeURIHolder> base = new ThreadSafeURIHolder(aBaseURI); + RefPtr<ThreadSafeURIHolder> referrer = new ThreadSafeURIHolder(aSheetURI); + RefPtr<ThreadSafePrincipalHolder> principal = + new ThreadSafePrincipalHolder(aSheetPrincipal); + + nsCString baseString; + nsresult rv = aBaseURI->GetSpec(baseString); + NS_ENSURE_SUCCESS(rv, rv); + + NS_ConvertUTF16toUTF8 input(aInput); + mSheet = Servo_StyleSheet_FromUTF8Bytes(&input, mParsingMode, &baseString, + base, referrer, principal).Consume(); + + return NS_OK; +} + +void +ServoStyleSheet::LoadFailed() +{ + mSheet = Servo_StyleSheet_Empty(mParsingMode).Consume(); +} + +void +ServoStyleSheet::DropSheet() +{ + mSheet = nullptr; +} + +size_t +ServoStyleSheet::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const +{ + MOZ_CRASH("stylo: not implemented"); +} + +#ifdef DEBUG +void +ServoStyleSheet::List(FILE* aOut, int32_t aIndex) const +{ + MOZ_CRASH("stylo: not implemented"); +} +#endif + +nsMediaList* +ServoStyleSheet::Media() +{ + return nullptr; +} + +nsIDOMCSSRule* +ServoStyleSheet::GetDOMOwnerRule() const +{ + return nullptr; +} + +CSSRuleList* +ServoStyleSheet::GetCssRulesInternal(ErrorResult& aRv) +{ + aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); + return nullptr; +} + +uint32_t +ServoStyleSheet::InsertRuleInternal(const nsAString& aRule, + uint32_t aIndex, ErrorResult& aRv) +{ + aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); + return 0; +} + +void +ServoStyleSheet::DeleteRuleInternal(uint32_t aIndex, ErrorResult& aRv) +{ + aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); +} + +} // namespace mozilla |