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: 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_FILTERS_H_
7 #define MOZILLA_GFX_FILTERS_H_
9 #include "Types.h"
10 #include "mozilla/RefPtr.h"
12 #include "Point.h"
13 #include "Matrix.h"
14 #include <vector>
16 namespace mozilla {
17 namespace gfx {
19 class SourceSurface;
21 enum FilterBackend {
22 FILTER_BACKEND_SOFTWARE = 0,
23 FILTER_BACKEND_DIRECT2D1_1,
24 FILTER_BACKEND_RECORDING
25 };
27 enum TransformFilterAtts
28 {
29 ATT_TRANSFORM_MATRIX = 0, // Matrix
30 ATT_TRANSFORM_FILTER // Filter
31 };
33 enum TransformFilterInputs
34 {
35 IN_TRANSFORM_IN = 0
36 };
38 enum BlendFilterAtts
39 {
40 ATT_BLEND_BLENDMODE = 0 // uint32_t
41 };
43 enum BlendMode
44 {
45 BLEND_MODE_MULTIPLY = 0,
46 BLEND_MODE_SCREEN,
47 BLEND_MODE_DARKEN,
48 BLEND_MODE_LIGHTEN
49 };
51 enum BlendFilterInputs
52 {
53 IN_BLEND_IN = 0,
54 IN_BLEND_IN2
55 };
57 enum MorphologyFilterAtts
58 {
59 ATT_MORPHOLOGY_RADII = 0, // IntSize
60 ATT_MORPHOLOGY_OPERATOR // MorphologyOperator
61 };
63 enum MorphologyOperator
64 {
65 MORPHOLOGY_OPERATOR_ERODE = 0,
66 MORPHOLOGY_OPERATOR_DILATE
67 };
69 enum MorphologyFilterInputs
70 {
71 IN_MORPHOLOGY_IN = 0
72 };
74 enum AlphaMode
75 {
76 ALPHA_MODE_PREMULTIPLIED = 0,
77 ALPHA_MODE_STRAIGHT
78 };
80 enum ColorMatrixFilterAtts
81 {
82 ATT_COLOR_MATRIX_MATRIX = 0, // Matrix5x4
83 ATT_COLOR_MATRIX_ALPHA_MODE // AlphaMode
84 };
86 enum ColorMatrixFilterInputs
87 {
88 IN_COLOR_MATRIX_IN = 0
89 };
91 enum FloodFilterAtts
92 {
93 ATT_FLOOD_COLOR = 0 // Color
94 };
96 enum FloodFilterInputs
97 {
98 IN_FLOOD_IN = 0
99 };
101 enum TileFilterAtts
102 {
103 ATT_TILE_SOURCE_RECT = 0 // IntRect
104 };
106 enum TileFilterInputs
107 {
108 IN_TILE_IN = 0
109 };
111 enum TransferAtts
112 {
113 ATT_TRANSFER_DISABLE_R = 0, // bool
114 ATT_TRANSFER_DISABLE_G, // bool
115 ATT_TRANSFER_DISABLE_B, // bool
116 ATT_TRANSFER_DISABLE_A // bool
117 };
119 enum TransferInputs
120 {
121 IN_TRANSFER_IN = 0
122 };
124 enum TableTransferAtts
125 {
126 ATT_TABLE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
127 ATT_TABLE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
128 ATT_TABLE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
129 ATT_TABLE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
130 ATT_TABLE_TRANSFER_TABLE_R, // Float[]
131 ATT_TABLE_TRANSFER_TABLE_G, // Float[]
132 ATT_TABLE_TRANSFER_TABLE_B, // Float[]
133 ATT_TABLE_TRANSFER_TABLE_A // Float[]
134 };
136 enum TableTransferInputs
137 {
138 IN_TABLE_TRANSFER_IN = IN_TRANSFER_IN
139 };
141 enum DiscreteTransferAtts
142 {
143 ATT_DISCRETE_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
144 ATT_DISCRETE_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
145 ATT_DISCRETE_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
146 ATT_DISCRETE_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
147 ATT_DISCRETE_TRANSFER_TABLE_R, // Float[]
148 ATT_DISCRETE_TRANSFER_TABLE_G, // Float[]
149 ATT_DISCRETE_TRANSFER_TABLE_B, // Float[]
150 ATT_DISCRETE_TRANSFER_TABLE_A // Float[]
151 };
153 enum DiscreteTransferInputs
154 {
155 IN_DISCRETE_TRANSFER_IN = IN_TRANSFER_IN
156 };
158 enum LinearTransferAtts
159 {
160 ATT_LINEAR_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
161 ATT_LINEAR_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
162 ATT_LINEAR_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
163 ATT_LINEAR_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
164 ATT_LINEAR_TRANSFER_SLOPE_R, // Float
165 ATT_LINEAR_TRANSFER_SLOPE_G, // Float
166 ATT_LINEAR_TRANSFER_SLOPE_B, // Float
167 ATT_LINEAR_TRANSFER_SLOPE_A, // Float
168 ATT_LINEAR_TRANSFER_INTERCEPT_R, // Float
169 ATT_LINEAR_TRANSFER_INTERCEPT_G, // Float
170 ATT_LINEAR_TRANSFER_INTERCEPT_B, // Float
171 ATT_LINEAR_TRANSFER_INTERCEPT_A // Float
172 };
174 enum LinearTransferInputs
175 {
176 IN_LINEAR_TRANSFER_IN = IN_TRANSFER_IN
177 };
179 enum GammaTransferAtts
180 {
181 ATT_GAMMA_TRANSFER_DISABLE_R = ATT_TRANSFER_DISABLE_R,
182 ATT_GAMMA_TRANSFER_DISABLE_G = ATT_TRANSFER_DISABLE_G,
183 ATT_GAMMA_TRANSFER_DISABLE_B = ATT_TRANSFER_DISABLE_B,
184 ATT_GAMMA_TRANSFER_DISABLE_A = ATT_TRANSFER_DISABLE_A,
185 ATT_GAMMA_TRANSFER_AMPLITUDE_R, // Float
186 ATT_GAMMA_TRANSFER_AMPLITUDE_G, // Float
187 ATT_GAMMA_TRANSFER_AMPLITUDE_B, // Float
188 ATT_GAMMA_TRANSFER_AMPLITUDE_A, // Float
189 ATT_GAMMA_TRANSFER_EXPONENT_R, // Float
190 ATT_GAMMA_TRANSFER_EXPONENT_G, // Float
191 ATT_GAMMA_TRANSFER_EXPONENT_B, // Float
192 ATT_GAMMA_TRANSFER_EXPONENT_A, // Float
193 ATT_GAMMA_TRANSFER_OFFSET_R, // Float
194 ATT_GAMMA_TRANSFER_OFFSET_G, // Float
195 ATT_GAMMA_TRANSFER_OFFSET_B, // Float
196 ATT_GAMMA_TRANSFER_OFFSET_A // Float
197 };
199 enum GammaTransferInputs
200 {
201 IN_GAMMA_TRANSFER_IN = IN_TRANSFER_IN
202 };
204 enum ConvolveMatrixAtts
205 {
206 ATT_CONVOLVE_MATRIX_KERNEL_SIZE = 0, // IntSize
207 ATT_CONVOLVE_MATRIX_KERNEL_MATRIX, // Float[]
208 ATT_CONVOLVE_MATRIX_DIVISOR, // Float
209 ATT_CONVOLVE_MATRIX_BIAS, // Float
210 ATT_CONVOLVE_MATRIX_TARGET, // IntPoint
211 ATT_CONVOLVE_MATRIX_SOURCE_RECT, // IntRect
212 ATT_CONVOLVE_MATRIX_EDGE_MODE, // ConvolveMatrixEdgeMode
213 ATT_CONVOLVE_MATRIX_KERNEL_UNIT_LENGTH, // Size
214 ATT_CONVOLVE_MATRIX_PRESERVE_ALPHA, // bool
215 };
217 enum ConvolveMatrixEdgeMode
218 {
219 EDGE_MODE_DUPLICATE = 0,
220 EDGE_MODE_WRAP,
221 EDGE_MODE_NONE
222 };
224 enum ConvolveMatrixInputs
225 {
226 IN_CONVOLVE_MATRIX_IN = 0
227 };
229 enum DisplacementMapAtts
230 {
231 ATT_DISPLACEMENT_MAP_SCALE = 0, // Float
232 ATT_DISPLACEMENT_MAP_X_CHANNEL, // ColorChannel
233 ATT_DISPLACEMENT_MAP_Y_CHANNEL // ColorChannel
234 };
236 enum ColorChannel
237 {
238 COLOR_CHANNEL_R = 0,
239 COLOR_CHANNEL_G,
240 COLOR_CHANNEL_B,
241 COLOR_CHANNEL_A
242 };
244 enum DisplacementMapInputs
245 {
246 IN_DISPLACEMENT_MAP_IN = 0,
247 IN_DISPLACEMENT_MAP_IN2
248 };
250 enum TurbulenceAtts
251 {
252 ATT_TURBULENCE_BASE_FREQUENCY = 0, // Size
253 ATT_TURBULENCE_NUM_OCTAVES, // uint32_t
254 ATT_TURBULENCE_SEED, // uint32_t
255 ATT_TURBULENCE_STITCHABLE, // bool
256 ATT_TURBULENCE_TYPE, // TurbulenceType
257 ATT_TURBULENCE_RECT // IntRect
258 };
260 enum TurbulenceType
261 {
262 TURBULENCE_TYPE_TURBULENCE = 0,
263 TURBULENCE_TYPE_FRACTAL_NOISE
264 };
266 enum ArithmeticCombineAtts
267 {
268 ATT_ARITHMETIC_COMBINE_COEFFICIENTS = 0 // Float[4]
269 };
271 enum ArithmeticCombineInputs
272 {
273 IN_ARITHMETIC_COMBINE_IN = 0,
274 IN_ARITHMETIC_COMBINE_IN2
275 };
277 enum CompositeAtts
278 {
279 ATT_COMPOSITE_OPERATOR = 0 // CompositeOperator
280 };
282 enum CompositeOperator
283 {
284 COMPOSITE_OPERATOR_OVER = 0,
285 COMPOSITE_OPERATOR_IN,
286 COMPOSITE_OPERATOR_OUT,
287 COMPOSITE_OPERATOR_ATOP,
288 COMPOSITE_OPERATOR_XOR
289 };
291 enum CompositeInputs
292 {
293 // arbitrary number of inputs
294 IN_COMPOSITE_IN_START = 0
295 };
297 enum GaussianBlurAtts
298 {
299 ATT_GAUSSIAN_BLUR_STD_DEVIATION = 0 // Float
300 };
302 enum GaussianBlurInputs
303 {
304 IN_GAUSSIAN_BLUR_IN = 0
305 };
307 enum DirectionalBlurAtts
308 {
309 ATT_DIRECTIONAL_BLUR_STD_DEVIATION = 0, // Float
310 ATT_DIRECTIONAL_BLUR_DIRECTION // BlurDirection
311 };
313 enum BlurDirection
314 {
315 BLUR_DIRECTION_X = 0,
316 BLUR_DIRECTION_Y
317 };
319 enum DirectionalBlurInputs
320 {
321 IN_DIRECTIONAL_BLUR_IN = 0
322 };
324 enum LightingAtts
325 {
326 ATT_POINT_LIGHT_POSITION = 0, // Point3D
328 ATT_SPOT_LIGHT_POSITION, // Point3D
329 ATT_SPOT_LIGHT_POINTS_AT, // Point3D
330 ATT_SPOT_LIGHT_FOCUS, // Float
331 ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE, // Float
333 ATT_DISTANT_LIGHT_AZIMUTH, // Float
334 ATT_DISTANT_LIGHT_ELEVATION, // Float
336 ATT_LIGHTING_COLOR, // Color
337 ATT_LIGHTING_SURFACE_SCALE, // Float
338 ATT_LIGHTING_KERNEL_UNIT_LENGTH, // Size
340 ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT, // Float
342 ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT, // Float
343 ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT // Float
344 };
346 enum LightingInputs
347 {
348 IN_LIGHTING_IN = 0
349 };
351 enum PointDiffuseAtts
352 {
353 ATT_POINT_DIFFUSE_POSITION = ATT_POINT_LIGHT_POSITION,
354 ATT_POINT_DIFFUSE_COLOR = ATT_LIGHTING_COLOR,
355 ATT_POINT_DIFFUSE_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
356 ATT_POINT_DIFFUSE_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
357 ATT_POINT_DIFFUSE_DIFFUSE_CONSTANT = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
358 };
360 enum PointDiffuseInputs
361 {
362 IN_POINT_DIFFUSE_IN = IN_LIGHTING_IN
363 };
365 enum SpotDiffuseAtts
366 {
367 ATT_SPOT_DIFFUSE_POSITION = ATT_SPOT_LIGHT_POSITION,
368 ATT_SPOT_DIFFUSE_POINTS_AT = ATT_SPOT_LIGHT_POINTS_AT,
369 ATT_SPOT_DIFFUSE_FOCUS = ATT_SPOT_LIGHT_FOCUS,
370 ATT_SPOT_DIFFUSE_LIMITING_CONE_ANGLE = ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,
371 ATT_SPOT_DIFFUSE_COLOR = ATT_LIGHTING_COLOR,
372 ATT_SPOT_DIFFUSE_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
373 ATT_SPOT_DIFFUSE_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
374 ATT_SPOT_DIFFUSE_DIFFUSE_CONSTANT = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
375 };
377 enum SpotDiffuseInputs
378 {
379 IN_SPOT_DIFFUSE_IN = IN_LIGHTING_IN
380 };
382 enum DistantDiffuseAtts
383 {
384 ATT_DISTANT_DIFFUSE_AZIMUTH = ATT_DISTANT_LIGHT_AZIMUTH,
385 ATT_DISTANT_DIFFUSE_ELEVATION = ATT_DISTANT_LIGHT_ELEVATION,
386 ATT_DISTANT_DIFFUSE_COLOR = ATT_LIGHTING_COLOR,
387 ATT_DISTANT_DIFFUSE_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
388 ATT_DISTANT_DIFFUSE_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
389 ATT_DISTANT_DIFFUSE_DIFFUSE_CONSTANT = ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT
390 };
392 enum DistantDiffuseInputs
393 {
394 IN_DISTANT_DIFFUSE_IN = IN_LIGHTING_IN
395 };
397 enum PointSpecularAtts
398 {
399 ATT_POINT_SPECULAR_POSITION = ATT_POINT_LIGHT_POSITION,
400 ATT_POINT_SPECULAR_COLOR = ATT_LIGHTING_COLOR,
401 ATT_POINT_SPECULAR_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
402 ATT_POINT_SPECULAR_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
403 ATT_POINT_SPECULAR_SPECULAR_CONSTANT = ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
404 ATT_POINT_SPECULAR_SPECULAR_EXPONENT = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
405 };
407 enum PointSpecularInputs
408 {
409 IN_POINT_SPECULAR_IN = IN_LIGHTING_IN
410 };
412 enum SpotSpecularAtts
413 {
414 ATT_SPOT_SPECULAR_POSITION = ATT_SPOT_LIGHT_POSITION,
415 ATT_SPOT_SPECULAR_POINTS_AT = ATT_SPOT_LIGHT_POINTS_AT,
416 ATT_SPOT_SPECULAR_FOCUS = ATT_SPOT_LIGHT_FOCUS,
417 ATT_SPOT_SPECULAR_LIMITING_CONE_ANGLE = ATT_SPOT_LIGHT_LIMITING_CONE_ANGLE,
418 ATT_SPOT_SPECULAR_COLOR = ATT_LIGHTING_COLOR,
419 ATT_SPOT_SPECULAR_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
420 ATT_SPOT_SPECULAR_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
421 ATT_SPOT_SPECULAR_SPECULAR_CONSTANT = ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
422 ATT_SPOT_SPECULAR_SPECULAR_EXPONENT = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
423 };
425 enum SpotSpecularInputs
426 {
427 IN_SPOT_SPECULAR_IN = IN_LIGHTING_IN
428 };
430 enum DistantSpecularAtts
431 {
432 ATT_DISTANT_SPECULAR_AZIMUTH = ATT_DISTANT_LIGHT_AZIMUTH,
433 ATT_DISTANT_SPECULAR_ELEVATION = ATT_DISTANT_LIGHT_ELEVATION,
434 ATT_DISTANT_SPECULAR_COLOR = ATT_LIGHTING_COLOR,
435 ATT_DISTANT_SPECULAR_SURFACE_SCALE = ATT_LIGHTING_SURFACE_SCALE,
436 ATT_DISTANT_SPECULAR_KERNEL_UNIT_LENGTH = ATT_LIGHTING_KERNEL_UNIT_LENGTH,
437 ATT_DISTANT_SPECULAR_SPECULAR_CONSTANT = ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT,
438 ATT_DISTANT_SPECULAR_SPECULAR_EXPONENT = ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT
439 };
441 enum DistantSpecularInputs
442 {
443 IN_DISTANT_SPECULAR_IN = IN_LIGHTING_IN
444 };
446 enum CropAtts
447 {
448 ATT_CROP_RECT = 0 // Rect
449 };
451 enum CropInputs
452 {
453 IN_CROP_IN = 0
454 };
456 enum PremultiplyInputs
457 {
458 IN_PREMULTIPLY_IN = 0
459 };
461 enum UnpremultiplyInputs
462 {
463 IN_UNPREMULTIPLY_IN = 0
464 };
466 class FilterNode : public RefCounted<FilterNode>
467 {
468 public:
469 MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNode)
470 virtual ~FilterNode() {}
472 virtual FilterBackend GetBackendType() = 0;
474 virtual void SetInput(uint32_t aIndex, SourceSurface *aSurface) { MOZ_CRASH(); }
475 virtual void SetInput(uint32_t aIndex, FilterNode *aFilter) { MOZ_CRASH(); }
477 virtual void SetAttribute(uint32_t aIndex, bool) { MOZ_CRASH(); }
478 virtual void SetAttribute(uint32_t aIndex, uint32_t) { MOZ_CRASH(); }
479 virtual void SetAttribute(uint32_t aIndex, Float) { MOZ_CRASH(); }
480 virtual void SetAttribute(uint32_t aIndex, const Size &) { MOZ_CRASH(); }
481 virtual void SetAttribute(uint32_t aIndex, const IntSize &) { MOZ_CRASH(); }
482 virtual void SetAttribute(uint32_t aIndex, const IntPoint &) { MOZ_CRASH(); }
483 virtual void SetAttribute(uint32_t aIndex, const Rect &) { MOZ_CRASH(); }
484 virtual void SetAttribute(uint32_t aIndex, const IntRect &) { MOZ_CRASH(); }
485 virtual void SetAttribute(uint32_t aIndex, const Point &) { MOZ_CRASH(); }
486 virtual void SetAttribute(uint32_t aIndex, const Matrix &) { MOZ_CRASH(); }
487 virtual void SetAttribute(uint32_t aIndex, const Matrix5x4 &) { MOZ_CRASH(); }
488 virtual void SetAttribute(uint32_t aIndex, const Point3D &) { MOZ_CRASH(); }
489 virtual void SetAttribute(uint32_t aIndex, const Color &) { MOZ_CRASH(); }
490 virtual void SetAttribute(uint32_t aIndex, const Float* aFloat, uint32_t aSize) { MOZ_CRASH(); }
492 protected:
493 friend class Factory;
495 FilterNode() {}
496 };
498 }
499 }
501 #endif