gfx/2d/FilterNodeD2D1.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

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: 20; 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 MOZILLA_GFX_FILTERNODED2D1_H_
     7 #define MOZILLA_GFX_FILTERNODED2D1_H_
     9 #include "2D.h"
    10 #include "Filters.h"
    11 #include <d2d1_1.h>
    12 #include <cguid.h>
    14 namespace mozilla {
    15 namespace gfx {
    17 class FilterNodeD2D1 : public FilterNode
    18 {
    19 public:
    20   MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeD2D1)
    21   static TemporaryRef<FilterNode> Create(DrawTarget* aDT, ID2D1DeviceContext *aDC, FilterType aType);
    23   FilterNodeD2D1(DrawTarget* aDT, ID2D1Effect *aEffect, FilterType aType)
    24     : mDT(aDT)
    25     , mEffect(aEffect)
    26     , mType(aType)
    27   {
    28     InitUnmappedProperties();
    29   }
    31   virtual FilterBackend GetBackendType() { return FILTER_BACKEND_DIRECT2D1_1; }
    33   virtual void SetInput(uint32_t aIndex, SourceSurface *aSurface);
    34   virtual void SetInput(uint32_t aIndex, FilterNode *aFilter);
    36   virtual void SetAttribute(uint32_t aIndex, uint32_t aValue);
    37   virtual void SetAttribute(uint32_t aIndex, Float aValue);
    38   virtual void SetAttribute(uint32_t aIndex, const Point &aValue);
    39   virtual void SetAttribute(uint32_t aIndex, const Matrix5x4 &aValue);
    40   virtual void SetAttribute(uint32_t aIndex, const Point3D &aValue);
    41   virtual void SetAttribute(uint32_t aIndex, const Size &aValue);
    42   virtual void SetAttribute(uint32_t aIndex, const IntSize &aValue);
    43   virtual void SetAttribute(uint32_t aIndex, const Color &aValue);
    44   virtual void SetAttribute(uint32_t aIndex, const Rect &aValue);
    45   virtual void SetAttribute(uint32_t aIndex, const IntRect &aValue);
    46   virtual void SetAttribute(uint32_t aIndex, bool aValue);
    47   virtual void SetAttribute(uint32_t aIndex, const Float *aValues, uint32_t aSize);
    48   virtual void SetAttribute(uint32_t aIndex, const IntPoint &aValue);
    49   virtual void SetAttribute(uint32_t aIndex, const Matrix &aValue);
    51 protected:
    52   friend class DrawTargetD2D1;
    53   friend class DrawTargetD2D;
    54   friend class FilterNodeConvolveD2D1;
    56   virtual ID2D1Effect* InputEffect() { return mEffect.get(); }
    57   virtual ID2D1Effect* OutputEffect() { return mEffect.get(); }
    59   void InitUnmappedProperties();
    61   RefPtr<DrawTarget> mDT;
    62   RefPtr<ID2D1Effect> mEffect;
    63   FilterType mType;
    64 };
    66 class FilterNodeConvolveD2D1 : public FilterNodeD2D1
    67 {
    68 public:
    69   MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeConvolveD2D1)
    70   FilterNodeConvolveD2D1(DrawTarget *aDT, ID2D1DeviceContext *aDC);
    72   virtual void SetInput(uint32_t aIndex, SourceSurface *aSurface);
    73   virtual void SetInput(uint32_t aIndex, FilterNode *aFilter);
    75   virtual void SetAttribute(uint32_t aIndex, uint32_t aValue);
    76   virtual void SetAttribute(uint32_t aIndex, const IntSize &aValue);
    77   virtual void SetAttribute(uint32_t aIndex, const IntPoint &aValue);
    78   virtual void SetAttribute(uint32_t aIndex, const IntRect &aValue);
    80 private:
    81   void UpdateChain();
    82   void UpdateOffset();
    83   void UpdateSourceRect();
    85   RefPtr<ID2D1Image> mInput;
    86   RefPtr<ID2D1Effect> mInputEffect;
    87   RefPtr<ID2D1Effect> mFloodEffect;
    88   RefPtr<ID2D1Effect> mCompositeEffect;
    89   RefPtr<ID2D1Effect> mCropEffect;
    90   RefPtr<ID2D1Effect> mBorderEffect;
    91   ConvolveMatrixEdgeMode mEdgeMode;
    92   IntPoint mTarget;
    93   IntSize mKernelSize;
    94   IntRect mSourceRect;
    95 };
    97 class FilterNodeComponentTransferD2D1 : public FilterNodeD2D1
    98 {
    99 public:
   100   MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeComponentTransferD2D1)
   101   FilterNodeComponentTransferD2D1(DrawTarget *aDT, ID2D1DeviceContext *aDC, ID2D1Effect *aEffect, FilterType aType);
   103 protected:
   104   virtual ID2D1Effect* InputEffect() MOZ_OVERRIDE { return mPrePremultiplyEffect.get(); }
   105   virtual ID2D1Effect* OutputEffect() MOZ_OVERRIDE { return mPostUnpremultiplyEffect.get(); }
   107 private:
   108   RefPtr<ID2D1Effect> mPrePremultiplyEffect;
   109   RefPtr<ID2D1Effect> mPostUnpremultiplyEffect;
   110 };
   112 }
   113 }
   115 #endif

mercurial