Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef __NS_SVGFILTERFRAME_H__
7 #define __NS_SVGFILTERFRAME_H__
9 #include "mozilla/Attributes.h"
10 #include "nsFrame.h"
11 #include "nsQueryFrame.h"
12 #include "nsSVGContainerFrame.h"
13 #include "nsSVGUtils.h"
15 class nsIAtom;
16 class nsIContent;
17 class nsIFrame;
18 class nsIPresShell;
19 class nsRenderingContext;
20 class nsStyleContext;
21 class nsSVGFilterPaintCallback;
22 class nsSVGIntegerPair;
23 class nsSVGLength2;
25 struct nsRect;
27 namespace mozilla {
28 namespace dom {
29 class SVGFilterElement;
30 }
31 }
33 typedef nsSVGContainerFrame nsSVGFilterFrameBase;
35 class nsSVGFilterFrame : public nsSVGFilterFrameBase
36 {
37 friend nsIFrame*
38 NS_NewSVGFilterFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
39 protected:
40 nsSVGFilterFrame(nsStyleContext* aContext)
41 : nsSVGFilterFrameBase(aContext),
42 mLoopFlag(false),
43 mNoHRefURI(false)
44 {
45 AddStateBits(NS_FRAME_IS_NONDISPLAY);
46 }
48 public:
49 NS_DECL_FRAMEARENA_HELPERS
51 // nsIFrame methods:
52 virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
53 const nsRect& aDirtyRect,
54 const nsDisplayListSet& aLists) MOZ_OVERRIDE {}
56 virtual nsresult AttributeChanged(int32_t aNameSpaceID,
57 nsIAtom* aAttribute,
58 int32_t aModType) MOZ_OVERRIDE;
60 #ifdef DEBUG
61 virtual void Init(nsIContent* aContent,
62 nsIFrame* aParent,
63 nsIFrame* aPrevInFlow) MOZ_OVERRIDE;
64 #endif
66 /**
67 * Get the "type" of the frame
68 *
69 * @see nsGkAtoms::svgFilterFrame
70 */
71 virtual nsIAtom* GetType() const MOZ_OVERRIDE;
73 private:
74 // Parse our xlink:href and set up our nsSVGPaintingProperty if we
75 // reference another filter and we don't have a property. Return
76 // the referenced filter's frame if available, null otherwise.
77 class AutoFilterReferencer;
78 friend class nsSVGFilterInstance;
79 nsSVGFilterFrame* GetReferencedFilter();
80 nsSVGFilterFrame* GetReferencedFilterIfNotInUse();
82 // Accessors to lookup filter attributes
83 uint16_t GetEnumValue(uint32_t aIndex, nsIContent *aDefault);
84 uint16_t GetEnumValue(uint32_t aIndex)
85 {
86 return GetEnumValue(aIndex, mContent);
87 }
88 const nsSVGLength2 *GetLengthValue(uint32_t aIndex, nsIContent *aDefault);
89 const nsSVGLength2 *GetLengthValue(uint32_t aIndex)
90 {
91 return GetLengthValue(aIndex, mContent);
92 }
93 const mozilla::dom::SVGFilterElement *GetFilterContent(nsIContent *aDefault);
94 const mozilla::dom::SVGFilterElement *GetFilterContent()
95 {
96 return GetFilterContent(mContent);
97 }
99 // This flag is used to detect loops in xlink:href processing
100 bool mLoopFlag;
101 bool mNoHRefURI;
102 };
104 #endif