fune/layout/svg/nsSVGUseFrame.h
Emilio Cobos Álvarez 68f214df2a Bug 1450250: Make svg:use use an actual shadow tree. r=heycam
Summary:
This fixes a couple fuzz bugs and prevents special-casing <svg:use> even more in
bug 1431255.

Unfortunately not as many hacks went away as I'd have hoped, since we still need
to match document rules, see the linked SVGWG issues.

But blocks_ancestor_combinators goes away, which is nice since it's on a very
hot path.

Test Plan: WPT for style invalidation, covered by existing tests otherwise.

Reviewers: heycam

Tags: #secure-revision

Bug #: 1450250

Differential Revision: https://phabricator.services.mozilla.com/D2154

MozReview-Commit-ID: C4mthjoSNFh
2018-07-20 14:44:51 +02:00

53 lines
1.4 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 __NS_SVGUSEFRAME_H__
#define __NS_SVGUSEFRAME_H__
// Keep in (case-insensitive) order:
#include "nsSVGGFrame.h"
class nsSVGUseFrame final
: public nsSVGGFrame
{
friend nsIFrame* NS_NewSVGUseFrame(nsIPresShell* aPresShell,
ComputedStyle* aStyle);
protected:
explicit nsSVGUseFrame(ComputedStyle* aStyle)
: nsSVGGFrame(aStyle, kClassID)
, mHasValidDimensions(true)
{
}
public:
NS_DECL_FRAMEARENA_HELPERS(nsSVGUseFrame)
// nsIFrame interface:
void Init(nsIContent* aContent,
nsContainerFrame* aParent,
nsIFrame* aPrevInFlow) override;
nsresult AttributeChanged(int32_t aNameSpaceID,
nsAtom* aAttribute,
int32_t aModType) override;
#ifdef DEBUG_FRAME_DUMP
nsresult GetFrameName(nsAString& aResult) const override
{
return MakeFrameName(NS_LITERAL_STRING("SVGUse"), aResult);
}
#endif
// nsSVGDisplayableFrame interface:
void ReflowSVG() override;
void NotifySVGChanged(uint32_t aFlags) override;
private:
bool mHasValidDimensions;
};
#endif // __NS_SVGUSEFRAME_H__