summaryrefslogtreecommitdiffstats
path: root/layout/style/ServoStyleSheet.h
diff options
context:
space:
mode:
Diffstat (limited to 'layout/style/ServoStyleSheet.h')
-rw-r--r--layout/style/ServoStyleSheet.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/layout/style/ServoStyleSheet.h b/layout/style/ServoStyleSheet.h
new file mode 100644
index 000000000..079f196eb
--- /dev/null
+++ b/layout/style/ServoStyleSheet.h
@@ -0,0 +1,90 @@
+/* -*- 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/. */
+
+#ifndef mozilla_ServoStyleSheet_h
+#define mozilla_ServoStyleSheet_h
+
+#include "mozilla/dom/SRIMetadata.h"
+#include "mozilla/RefPtr.h"
+#include "mozilla/ServoBindingTypes.h"
+#include "mozilla/StyleSheet.h"
+#include "mozilla/StyleSheetInfo.h"
+#include "nsStringFwd.h"
+
+namespace mozilla {
+
+/**
+ * CSS style sheet object that is a wrapper for a Servo Stylesheet.
+ */
+class ServoStyleSheet : public StyleSheet
+{
+public:
+ ServoStyleSheet(css::SheetParsingMode aParsingMode,
+ CORSMode aCORSMode,
+ net::ReferrerPolicy aReferrerPolicy,
+ const dom::SRIMetadata& aIntegrity);
+
+ bool HasRules() const;
+
+ void SetOwningDocument(nsIDocument* aDocument);
+
+ ServoStyleSheet* GetParentSheet() const;
+ void AppendStyleSheet(ServoStyleSheet* aSheet);
+
+ MOZ_MUST_USE nsresult ParseSheet(const nsAString& aInput,
+ nsIURI* aSheetURI,
+ nsIURI* aBaseURI,
+ nsIPrincipal* aSheetPrincipal,
+ uint32_t aLineNumber);
+
+ /**
+ * Called instead of ParseSheet to initialize the Servo stylesheet object
+ * for a failed load. Either ParseSheet or LoadFailed must be called before
+ * adding a ServoStyleSheet to a ServoStyleSet.
+ */
+ void LoadFailed();
+
+ size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const;
+
+#ifdef DEBUG
+ void List(FILE* aOut = stdout, int32_t aIndex = 0) const;
+#endif
+
+ RawServoStyleSheet* RawSheet() const { return mSheet; }
+
+ // WebIDL StyleSheet API
+ nsMediaList* Media() final;
+
+ // WebIDL CSSStyleSheet API
+ // Can't be inline because we can't include ImportRule here. And can't be
+ // called GetOwnerRule because that would be ambiguous with the ImportRule
+ // version.
+ nsIDOMCSSRule* GetDOMOwnerRule() const final;
+
+ void WillDirty() {}
+ void DidDirty() {}
+
+protected:
+ virtual ~ServoStyleSheet();
+
+ // Internal methods which do not have security check and completeness check.
+ dom::CSSRuleList* GetCssRulesInternal(ErrorResult& aRv);
+ uint32_t InsertRuleInternal(const nsAString& aRule,
+ uint32_t aIndex, ErrorResult& aRv);
+ void DeleteRuleInternal(uint32_t aIndex, ErrorResult& aRv);
+
+private:
+ void DropSheet();
+
+ RefPtr<RawServoStyleSheet> mSheet;
+ StyleSheetInfo mSheetInfo;
+
+ friend class StyleSheet;
+};
+
+} // namespace mozilla
+
+#endif // mozilla_ServoStyleSheet_h