fune/layout/style/BindingStyleRule.h
Emilio Cobos Álvarez 039592f4d8 Bug 1682003 - Avoid UTF-8 -> UTF-16 conversion during CSSOM serialization. r=heycam
This lifts a bunch of string conversions higher up the stack, but allows
us to make the servo code use utf-8 unconditionally, and seemed faster
in my benchmarking (see comment 0).

It should also make a bunch of attribute setters faster too (like
setting .cssText), now that we use UTF8String for them (we couldn't
because we couldn't specify different string types for the getter and
setters).

Differential Revision: https://phabricator.services.mozilla.com/D99590
2020-12-17 14:04:35 +00:00

70 lines
2.6 KiB
C++

/* -*- 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_BindingStyleRule_h__
#define mozilla_BindingStyleRule_h__
#include "nscore.h"
#include "nsString.h"
#include "mozilla/css/Rule.h"
#include "mozilla/NotNull.h"
/**
* Shared superclass for mozilla::css::StyleRule and mozilla::ServoStyleRule,
* for use from bindings code.
*/
class nsICSSDeclaration;
namespace mozilla {
class DeclarationBlock;
namespace dom {
class Element;
}
class BindingStyleRule : public css::Rule {
protected:
BindingStyleRule(StyleSheet* aSheet, css::Rule* aParentRule,
uint32_t aLineNumber, uint32_t aColumnNumber)
: css::Rule(aSheet, aParentRule, aLineNumber, aColumnNumber) {}
BindingStyleRule(const BindingStyleRule& aCopy) = default;
virtual ~BindingStyleRule() = default;
public:
// This is pure virtual because we have no members, and are an abstract class
// to start with. The fact that we have to have this declaration at all is
// kinda dumb. :(
virtual size_t SizeOfIncludingThis(
mozilla::MallocSizeOf aMallocSizeOf) const override MOZ_MUST_OVERRIDE = 0;
// Likewise for this one. We have to override our superclass, but don't
// really need to do anything in this method.
virtual bool IsCCLeaf() const override MOZ_MUST_OVERRIDE = 0;
virtual uint32_t GetSelectorCount() = 0;
virtual nsresult GetSelectorText(uint32_t aSelectorIndex,
nsACString& aText) = 0;
virtual nsresult GetSpecificity(uint32_t aSelectorIndex,
uint64_t* aSpecificity) = 0;
virtual nsresult SelectorMatchesElement(dom::Element* aElement,
uint32_t aSelectorIndex,
const nsAString& aPseudo,
bool aRelevantLinkVisited,
bool* aMatches) = 0;
virtual NotNull<DeclarationBlock*> GetDeclarationBlock() const = 0;
// WebIDL API
virtual void GetSelectorText(nsACString& aSelectorText) = 0;
virtual void SetSelectorText(const nsACString& aSelectorText) = 0;
virtual nsICSSDeclaration* Style() = 0;
virtual JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
};
} // namespace mozilla
#endif // mozilla_BindingStyleRule_h__