Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/nsIFrame.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
/* interface for all rendering objects */
8
9
#ifndef nsIFrame_h___
10
#define nsIFrame_h___
11
12
#ifndef MOZILLA_INTERNAL_API
13
#error This header/class should only be used within Mozilla code. It should not be used by extensions.
14
#endif
15
16
0
#define MAX_REFLOW_DEPTH 200
17
18
/* nsIFrame is in the process of being deCOMtaminated, i.e., this file is eventually
19
   going to be eliminated, and all callers will use nsFrame instead.  At the moment
20
   we're midway through this process, so you will see inlined functions and member
21
   variables in this file.  -dwh */
22
23
#include <algorithm>
24
#include <stdio.h>
25
26
#include "CaretAssociationHint.h"
27
#include "FrameProperties.h"
28
#include "LayoutConstants.h"
29
#include "mozilla/layout/FrameChildList.h"
30
#include "mozilla/Maybe.h"
31
#include "mozilla/SmallPointerArray.h"
32
#include "mozilla/WritingModes.h"
33
#include "nsDirection.h"
34
#include "nsFrameList.h"
35
#include "nsFrameState.h"
36
#include "mozilla/ReflowOutput.h"
37
#include "nsITheme.h"
38
#include "nsLayoutUtils.h"
39
#include "nsQueryFrame.h"
40
#include "nsString.h"
41
#include "mozilla/ComputedStyle.h"
42
#include "nsStyleStruct.h"
43
#include "Visibility.h"
44
#include "nsChangeHint.h"
45
#include "mozilla/ComputedStyleInlines.h"
46
#include "mozilla/gfx/CompositorHitTestInfo.h"
47
#include "mozilla/gfx/MatrixFwd.h"
48
#include "nsDisplayItemTypes.h"
49
50
#ifdef ACCESSIBILITY
51
#include "mozilla/a11y/AccTypes.h"
52
#endif
53
54
/**
55
 * New rules of reflow:
56
 * 1. you get a WillReflow() followed by a Reflow() followed by a DidReflow() in order
57
 *    (no separate pass over the tree)
58
 * 2. it's the parent frame's responsibility to size/position the child's view (not
59
 *    the child frame's responsibility as it is today) during reflow (and before
60
 *    sending the DidReflow() notification)
61
 * 3. positioning of child frames (and their views) is done on the way down the tree,
62
 *    and sizing of child frames (and their views) on the way back up
63
 * 4. if you move a frame (outside of the reflow process, or after reflowing it),
64
 *    then you must make sure that its view (or its child frame's views) are re-positioned
65
 *    as well. It's reasonable to not position the view until after all reflowing the
66
 *    entire line, for example, but the frame should still be positioned and sized (and
67
 *    the view sized) during the reflow (i.e., before sending the DidReflow() notification)
68
 * 5. the view system handles moving of widgets, i.e., it's not our problem
69
 */
70
71
class nsAtom;
72
class nsPresContext;
73
class nsIPresShell;
74
class nsView;
75
class nsIWidget;
76
class nsISelectionController;
77
class nsBoxLayoutState;
78
class nsBoxLayout;
79
class nsILineIterator;
80
class nsDisplayItem;
81
class nsDisplayListBuilder;
82
class nsDisplayListSet;
83
class nsDisplayList;
84
class gfxSkipChars;
85
class gfxSkipCharsIterator;
86
class gfxContext;
87
class nsLineList_iterator;
88
class nsAbsoluteContainingBlock;
89
class nsIContent;
90
class nsContainerFrame;
91
class nsPlaceholderFrame;
92
class nsStyleChangeList;
93
class nsWindowSizes;
94
95
struct nsPeekOffsetStruct;
96
struct nsPoint;
97
struct nsRect;
98
struct nsSize;
99
struct nsMargin;
100
struct CharacterDataChangeInfo;
101
102
namespace mozilla {
103
104
enum class CSSPseudoElementType : uint8_t;
105
class EventStates;
106
struct ReflowInput;
107
class ReflowOutput;
108
class ServoRestyleState;
109
class DisplayItemData;
110
class EffectSet;
111
112
namespace layers {
113
class Layer;
114
class LayerManager;
115
} // namespace layers
116
117
namespace dom {
118
class Selection;
119
} // namespace dom
120
121
} // namespace mozilla
122
123
/**
124
 * Indication of how the frame can be split. This is used when doing runaround
125
 * of floats, and when pulling up child frames from a next-in-flow.
126
 *
127
 * The choices are splittable, not splittable at all, and splittable in
128
 * a non-rectangular fashion. This last type only applies to block-level
129
 * elements, and indicates whether splitting can be used when doing runaround.
130
 * If you can split across page boundaries, but you expect each continuing
131
 * frame to be the same width then return frSplittable and not
132
 * frSplittableNonRectangular.
133
 *
134
 * @see #GetSplittableType()
135
 */
136
typedef uint32_t nsSplittableType;
137
138
0
#define NS_FRAME_NOT_SPLITTABLE             0   // Note: not a bit!
139
#define NS_FRAME_SPLITTABLE                 0x1
140
#define NS_FRAME_SPLITTABLE_NON_RECTANGULAR 0x3
141
142
#define NS_FRAME_IS_SPLITTABLE(type)\
143
  (0 != ((type) & NS_FRAME_SPLITTABLE))
144
145
#define NS_FRAME_IS_NOT_SPLITTABLE(type)\
146
  (0 == ((type) & NS_FRAME_SPLITTABLE))
147
148
//----------------------------------------------------------------------
149
150
#define NS_SUBTREE_DIRTY(_frame)  \
151
0
  (((_frame)->GetStateBits() &      \
152
0
    (NS_FRAME_IS_DIRTY | NS_FRAME_HAS_DIRTY_CHILDREN)) != 0)
153
154
// 1 million CSS pixels less than our max app unit measure.
155
// For reflowing with an "infinite" available inline space per [css-sizing].
156
// (reflowing with an NS_UNCONSTRAINEDSIZE available inline size isn't allowed
157
//  and leads to assertions)
158
#define INFINITE_ISIZE_COORD nscoord(NS_MAXSIZE - (1000000*60))
159
160
//----------------------------------------------------------------------
161
162
namespace mozilla {
163
164
enum class LayoutFrameType : uint8_t {
165
#define FRAME_TYPE(ty_) ty_,
166
#include "mozilla/FrameTypeList.h"
167
#undef FRAME_TYPE
168
};
169
170
} // namespace mozilla
171
172
enum nsSelectionAmount {
173
  eSelectCharacter = 0, // a single Unicode character;
174
                        // do not use this (prefer Cluster) unless you
175
                        // are really sure it's what you want
176
  eSelectCluster   = 1, // a grapheme cluster: this is usually the right
177
                        // choice for movement or selection by "character"
178
                        // as perceived by the user
179
  eSelectWord      = 2,
180
  eSelectWordNoSpace = 3, // select a "word" without selecting the following
181
                          // space, no matter what the default platform
182
                          // behavior is
183
  eSelectLine      = 4, // previous drawn line in flow.
184
  // NOTE that selection code depends on the ordering of the above values,
185
  // allowing simple <= tests to check categories of caret movement.
186
  // Don't rearrange without checking the usage in nsSelection.cpp!
187
188
  eSelectBeginLine = 5,
189
  eSelectEndLine   = 6,
190
  eSelectNoAmount  = 7, // just bounce back current offset.
191
  eSelectParagraph = 8  // select a "paragraph"
192
};
193
194
enum nsSpread {
195
  eSpreadNone   = 0,
196
  eSpreadAcross = 1,
197
  eSpreadDown   = 2
198
};
199
200
// Carried out margin flags
201
#define NS_CARRIED_TOP_MARGIN_IS_AUTO    0x1
202
#define NS_CARRIED_BOTTOM_MARGIN_IS_AUTO 0x2
203
204
//----------------------------------------------------------------------
205
// Reflow status returned by the Reflow() methods.
206
class nsReflowStatus final {
207
  using StyleClear = mozilla::StyleClear;
208
209
public:
210
  nsReflowStatus()
211
    : mBreakType(StyleClear::None)
212
    , mInlineBreak(InlineBreak::None)
213
    , mCompletion(Completion::FullyComplete)
214
    , mNextInFlowNeedsReflow(false)
215
    , mTruncated(false)
216
    , mFirstLetterComplete(false)
217
  {}
218
219
  // Reset all the member variables.
220
  void Reset() {
221
    mBreakType = StyleClear::None;
222
    mInlineBreak = InlineBreak::None;
223
    mCompletion = Completion::FullyComplete;
224
    mNextInFlowNeedsReflow = false;
225
    mTruncated = false;
226
    mFirstLetterComplete = false;
227
  }
228
229
  // Return true if all member variables have their default values.
230
  bool IsEmpty() const {
231
    return (IsFullyComplete() &&
232
            !IsInlineBreak() &&
233
            !mNextInFlowNeedsReflow &&
234
            !mTruncated &&
235
            !mFirstLetterComplete);
236
  }
237
238
  // There are three possible completion statuses, represented by
239
  // mCompletion.
240
  //
241
  // Incomplete means the frame does *not* map all its content, and the
242
  // parent frame should create a continuing frame.
243
  //
244
  // OverflowIncomplete means that the frame has an overflow that is not
245
  // complete, but its own box is complete. (This happens when the content
246
  // overflows a fixed-height box.) The reflower should place and size the
247
  // frame and continue its reflow, but it needs to create an overflow
248
  // container as a continuation for this frame. See "Overflow containers"
249
  // documentation in nsContainerFrame.h for more information.
250
  //
251
  // FullyComplete means the frame is neither Incomplete nor
252
  // OverflowIncomplete. This is the default state for a nsReflowStatus.
253
  //
254
  enum class Completion : uint8_t {
255
    // The order of the enum values is important, which represents the
256
    // precedence when merging.
257
    FullyComplete,
258
    OverflowIncomplete,
259
    Incomplete,
260
  };
261
262
  bool IsIncomplete() const { return mCompletion == Completion::Incomplete; }
263
  bool IsOverflowIncomplete() const {
264
    return mCompletion == Completion::OverflowIncomplete;
265
  }
266
  bool IsFullyComplete() const {
267
    return mCompletion == Completion::FullyComplete;
268
  }
269
  // Just for convenience; not a distinct state.
270
  bool IsComplete() const { return !IsIncomplete(); }
271
272
  void SetIncomplete() {
273
    mCompletion = Completion::Incomplete;
274
  }
275
  void SetOverflowIncomplete() {
276
    mCompletion = Completion::OverflowIncomplete;
277
  }
278
279
  // mNextInFlowNeedsReflow bit flag means that the next-in-flow is dirty,
280
  // and also needs to be reflowed. This status only makes sense for a frame
281
  // that is not complete, i.e. you wouldn't set mNextInFlowNeedsReflow when
282
  // IsComplete() is true.
283
  bool NextInFlowNeedsReflow() const { return mNextInFlowNeedsReflow; }
284
  void SetNextInFlowNeedsReflow() { mNextInFlowNeedsReflow = true; }
285
286
  // mTruncated bit flag means that the part of the frame before the first
287
  // possible break point was unable to fit in the available space.
288
  // Therefore, the entire frame should be moved to the next continuation of
289
  // the parent frame. A frame that begins at the top of the page must never
290
  // be truncated. Doing so would likely cause an infinite loop.
291
  bool IsTruncated() const { return mTruncated; }
292
  void UpdateTruncated(const mozilla::ReflowInput& aReflowInput,
293
                       const mozilla::ReflowOutput& aMetrics);
294
295
  // Merge the frame completion status bits from aStatus into this.
296
  void MergeCompletionStatusFrom(const nsReflowStatus& aStatus)
297
  {
298
    if (mCompletion < aStatus.mCompletion) {
299
      mCompletion = aStatus.mCompletion;
300
    }
301
302
    // These asserts ensure that the mCompletion merging works as we expect.
303
    // (Incomplete beats OverflowIncomplete, which beats FullyComplete.)
304
    static_assert(Completion::Incomplete > Completion::OverflowIncomplete &&
305
                  Completion::OverflowIncomplete > Completion::FullyComplete,
306
                  "mCompletion merging won't work without this!");
307
308
    mNextInFlowNeedsReflow |= aStatus.mNextInFlowNeedsReflow;
309
    mTruncated |= aStatus.mTruncated;
310
  }
311
312
  // There are three possible inline-break statuses, represented by
313
  // mInlineBreak.
314
  //
315
  // "None" means no break is requested.
316
  // "Before" means the break should occur before the frame.
317
  // "After" means the break should occur after the frame.
318
  // (Here, "the frame" is the frame whose reflow results are being reported by
319
  // this nsReflowStatus.)
320
  //
321
  enum class InlineBreak : uint8_t {
322
    None,
323
    Before,
324
    After,
325
  };
326
327
  bool IsInlineBreak() const { return mInlineBreak != InlineBreak::None; }
328
  bool IsInlineBreakBefore() const {
329
    return mInlineBreak == InlineBreak::Before;
330
  }
331
  bool IsInlineBreakAfter() const {
332
    return mInlineBreak == InlineBreak::After;
333
  }
334
  StyleClear BreakType() const { return mBreakType; }
335
336
  // Set the inline line-break-before status, and reset other bit flags. The
337
  // break type is StyleClear::Line. Note that other frame completion status
338
  // isn't expected to matter after calling this method.
339
  void SetInlineLineBreakBeforeAndReset() {
340
    Reset();
341
    mBreakType = StyleClear::Line;
342
    mInlineBreak = InlineBreak::Before;
343
  }
344
345
  // Set the inline line-break-after status. The break type can be changed
346
  // via the optional aBreakType param.
347
  void SetInlineLineBreakAfter(StyleClear aBreakType = StyleClear::Line) {
348
    MOZ_ASSERT(aBreakType != StyleClear::None,
349
               "Break-after with StyleClear::None is meaningless!");
350
    mBreakType = aBreakType;
351
    mInlineBreak = InlineBreak::After;
352
  }
353
354
  // mFirstLetterComplete bit flag means the break was induced by
355
  // completion of a first-letter.
356
  bool FirstLetterComplete() const { return mFirstLetterComplete; }
357
  void SetFirstLetterComplete() { mFirstLetterComplete = true; }
358
359
private:
360
  StyleClear mBreakType;
361
  InlineBreak mInlineBreak;
362
  Completion mCompletion;
363
  bool mNextInFlowNeedsReflow : 1;
364
  bool mTruncated : 1;
365
  bool mFirstLetterComplete : 1;
366
};
367
368
#define NS_FRAME_SET_TRUNCATION(aStatus, aReflowInput, aMetrics) \
369
0
  aStatus.UpdateTruncated(aReflowInput, aMetrics);
370
371
#ifdef DEBUG
372
// Convert nsReflowStatus to a human-readable string.
373
std::ostream&
374
operator<<(std::ostream& aStream, const nsReflowStatus& aStatus);
375
#endif
376
377
//----------------------------------------------------------------------
378
379
/**
380
 * When there is no scrollable overflow rect, the visual overflow rect
381
 * may be stored as four 1-byte deltas each strictly LESS THAN 0xff, for
382
 * the four edges of the rectangle, or the four bytes may be read as a
383
 * single 32-bit "overflow-rect type" value including at least one 0xff
384
 * byte as an indicator that the value does NOT represent four deltas.
385
 * If all four deltas are zero, this means that no overflow rect has
386
 * actually been set (this is the initial state of newly-created frames).
387
 */
388
#define NS_FRAME_OVERFLOW_DELTA_MAX     0xfe // max delta we can store
389
390
#define NS_FRAME_OVERFLOW_NONE    0x00000000 // there are no overflow rects;
391
                                             // code relies on this being
392
                                             // the all-zero value
393
394
#define NS_FRAME_OVERFLOW_LARGE   0x000000ff // overflow is stored as a
395
                                             // separate rect property
396
397
/**
398
 * nsBidiLevel is the type of the level values in our Unicode Bidi
399
 * implementation.
400
 * It holds an embedding level and indicates the visual direction
401
 * by its bit 0 (even/odd value).<p>
402
 *
403
 * <li><code>aParaLevel</code> can be set to the
404
 * pseudo-level values <code>NSBIDI_DEFAULT_LTR</code>
405
 * and <code>NSBIDI_DEFAULT_RTL</code>.</li></ul>
406
 *
407
 * @see nsBidi::SetPara
408
 *
409
 * <p>The related constants are not real, valid level values.
410
 * <code>NSBIDI_DEFAULT_XXX</code> can be used to specify
411
 * a default for the paragraph level for
412
 * when the <code>SetPara</code> function
413
 * shall determine it but there is no
414
 * strongly typed character in the input.<p>
415
 *
416
 * Note that the value for <code>NSBIDI_DEFAULT_LTR</code> is even
417
 * and the one for <code>NSBIDI_DEFAULT_RTL</code> is odd,
418
 * just like with normal LTR and RTL level values -
419
 * these special values are designed that way. Also, the implementation
420
 * assumes that NSBIDI_MAX_EXPLICIT_LEVEL is odd.
421
 *
422
 * @see NSBIDI_DEFAULT_LTR
423
 * @see NSBIDI_DEFAULT_RTL
424
 * @see NSBIDI_LEVEL_OVERRIDE
425
 * @see NSBIDI_MAX_EXPLICIT_LEVEL
426
 */
427
typedef uint8_t nsBidiLevel;
428
429
/** Paragraph level setting.
430
 *  If there is no strong character, then set the paragraph level to 0 (left-to-right).
431
 */
432
#define NSBIDI_DEFAULT_LTR 0xfe
433
434
/** Paragraph level setting.
435
 *  If there is no strong character, then set the paragraph level to 1 (right-to-left).
436
 */
437
#define NSBIDI_DEFAULT_RTL 0xff
438
439
/**
440
 * Maximum explicit embedding level.
441
 * (The maximum resolved level can be up to <code>NSBIDI_MAX_EXPLICIT_LEVEL+1</code>).
442
 *
443
 */
444
#define NSBIDI_MAX_EXPLICIT_LEVEL 125
445
446
/** Bit flag for level input.
447
 *  Overrides directional properties.
448
 */
449
#define NSBIDI_LEVEL_OVERRIDE 0x80
450
451
/**
452
 * <code>nsBidiDirection</code> values indicate the text direction.
453
 */
454
enum nsBidiDirection {
455
  /** All left-to-right text This is a 0 value. */
456
  NSBIDI_LTR,
457
  /** All right-to-left text This is a 1 value. */
458
  NSBIDI_RTL,
459
  /** Mixed-directional text. */
460
  NSBIDI_MIXED
461
};
462
463
namespace mozilla {
464
465
// https://drafts.csswg.org/css-align-3/#baseline-sharing-group
466
enum BaselineSharingGroup
467
{
468
  // NOTE Used as an array index so must be 0 and 1.
469
  eFirst = 0,
470
  eLast = 1,
471
};
472
473
// Loosely: https://drafts.csswg.org/css-align-3/#shared-alignment-context
474
enum class AlignmentContext
475
{
476
  eInline,
477
  eTable,
478
  eFlexbox,
479
  eGrid,
480
};
481
482
/*
483
 * For replaced elements only. Gets the intrinsic dimensions of this element.
484
 * The dimensions may only be one of the following two types:
485
 *
486
 *   eStyleUnit_Coord   - a length in app units
487
 *   eStyleUnit_None    - the element has no intrinsic size in this dimension
488
 */
489
struct IntrinsicSize {
490
  nsStyleCoord width, height;
491
492
  IntrinsicSize()
493
    : width(eStyleUnit_None), height(eStyleUnit_None)
494
  {}
495
  IntrinsicSize(const IntrinsicSize& rhs)
496
    : width(rhs.width), height(rhs.height)
497
  {}
498
  IntrinsicSize& operator=(const IntrinsicSize& rhs) {
499
    width = rhs.width; height = rhs.height; return *this;
500
  }
501
  bool operator==(const IntrinsicSize& rhs) {
502
    return width == rhs.width && height == rhs.height;
503
  }
504
  bool operator!=(const IntrinsicSize& rhs) {
505
    return !(*this == rhs);
506
  }
507
};
508
509
// Pseudo bidi embedding level indicating nonexistence.
510
static const nsBidiLevel kBidiLevelNone = 0xff;
511
512
struct FrameBidiData
513
{
514
  nsBidiLevel baseLevel;
515
  nsBidiLevel embeddingLevel;
516
  // The embedding level of virtual bidi formatting character before
517
  // this frame if any. kBidiLevelNone is used to indicate nonexistence
518
  // or unnecessity of such virtual character.
519
  nsBidiLevel precedingControl;
520
};
521
522
} // namespace mozilla
523
524
/// Generic destructor for frame properties. Calls delete.
525
template<typename T>
526
static void DeleteValue(T* aPropertyValue)
527
0
{
528
0
  delete aPropertyValue;
529
0
}
Unexecuted instantiation: Unified_cpp_xpcom_threads0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_xpcom_threads0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_xpcom_threads0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_xpcom_threads0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_xpcom_threads0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: xptdata.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: xptdata.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: xptdata.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: xptdata.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: xptdata.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_xpcom_build0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_xpcom_build0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_xpcom_build0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_xpcom_build0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_xpcom_build0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_netwerk_base0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_netwerk_base0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_netwerk_base0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_netwerk_base0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_netwerk_base0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_netwerk_protocol_ftp0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_netwerk_protocol_ftp0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_netwerk_protocol_ftp0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_netwerk_protocol_ftp0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_netwerk_protocol_ftp0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_protocol_http0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_protocol_http0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_protocol_http0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_protocol_http0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_protocol_http0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_protocol_http1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_protocol_http1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_protocol_http1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_protocol_http1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_protocol_http1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_protocol_websocket0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_protocol_websocket0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_protocol_websocket0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_protocol_websocket0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_protocol_websocket0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_protocol_wyciwyg0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_protocol_wyciwyg0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_protocol_wyciwyg0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_protocol_wyciwyg0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_protocol_wyciwyg0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_netwerk_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_netwerk_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_netwerk_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_netwerk_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_netwerk_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: BackgroundChildImpl.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: BackgroundChildImpl.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: BackgroundChildImpl.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: BackgroundChildImpl.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: BackgroundChildImpl.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: BackgroundParentImpl.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: BackgroundParentImpl.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: BackgroundParentImpl.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: BackgroundParentImpl.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: BackgroundParentImpl.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_ipc_glue0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_ipc_glue0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_ipc_glue0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_ipc_glue0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_ipc_glue0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_ipc_glue1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_ipc_glue1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_ipc_glue1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_ipc_glue1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_ipc_glue1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols10.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols10.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols10.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols10.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols10.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols11.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols11.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols11.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols11.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols11.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols12.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols12.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols12.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols12.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols12.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols13.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols13.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols13.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols13.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols13.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols14.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols14.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols14.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols14.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols14.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols15.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols15.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols15.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols15.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols15.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols16.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols16.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols16.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols16.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols16.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols17.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols17.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols17.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols17.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols17.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols18.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols18.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols18.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols18.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols18.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols19.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols19.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols19.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols19.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols19.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols2.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols2.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols2.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols2.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols2.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols20.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols20.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols20.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols20.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols20.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols21.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols21.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols21.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols21.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols21.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols22.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols22.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols22.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols22.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols22.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols23.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols23.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols23.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols23.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols23.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols24.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols24.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols24.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols24.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols24.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols25.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols25.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols25.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols25.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols25.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols26.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols26.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols26.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols26.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols26.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols27.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols27.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols27.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols27.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols27.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols28.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols28.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols28.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols28.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols28.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols29.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols29.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols29.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols29.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols29.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols3.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols3.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols3.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols3.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols3.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols30.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols30.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols30.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols30.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols30.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols31.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols31.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols31.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols31.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols31.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols4.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols4.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols4.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols4.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols4.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols5.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols5.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols5.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols5.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols5.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols6.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols6.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols6.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols6.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols6.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols7.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols7.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols7.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols7.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols7.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols8.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols8.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols8.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols8.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols8.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedProtocols9.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedProtocols9.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedProtocols9.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedProtocols9.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedProtocols9.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_js_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_js_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_js_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_js_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_js_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_hal0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_hal0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_hal0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_hal0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_hal0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_src_media-conduit0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_src_media-conduit0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_src_media-conduit0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_src_media-conduit0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_src_media-conduit0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_uriloader_exthandler0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_uriloader_exthandler0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_uriloader_exthandler0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_uriloader_exthandler0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_uriloader_exthandler0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_uriloader_prefetch0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_uriloader_prefetch0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_uriloader_prefetch0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_uriloader_prefetch0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_uriloader_prefetch0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_parser_html1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_parser_html1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_parser_html1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_parser_html1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_parser_html1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_parser_html2.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_parser_html2.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_parser_html2.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_parser_html2.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_parser_html2.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: SharedSurfaceGLX.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: SharedSurfaceGLX.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: SharedSurfaceGLX.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: SharedSurfaceGLX.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: SharedSurfaceGLX.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_gl0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_gl0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_gl0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_gl0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_gl0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_gl1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_gl1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_gl1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_gl1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_gl1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_gfx_layers2.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers2.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers2.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers2.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers2.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers2.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers2.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers3.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers3.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers3.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers3.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers3.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers3.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers3.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers4.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_gfx_layers5.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers5.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers5.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers5.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers5.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers5.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers5.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers6.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers6.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers6.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers6.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers6.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers6.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers6.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers7.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers7.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers7.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers7.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers7.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers8.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers8.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers8.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers8.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers8.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers8.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers8.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_layers9.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_layers9.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_layers9.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_layers9.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_layers9.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_layers9.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_layers9.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: gfxPlatform.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: gfxPlatform.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: gfxPlatform.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: gfxPlatform.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: gfxPlatform.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_thebes0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_thebes0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_thebes0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_thebes0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_thebes0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_thebes0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_thebes0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_gfx_thebes1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: GPUParent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: GPUParent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: GPUParent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: GPUParent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: GPUParent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: VRDisplayHost.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: VRDisplayHost.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: VRDisplayHost.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: VRDisplayHost.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: VRDisplayHost.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: VRDisplayLocal.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: VRDisplayLocal.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: VRDisplayLocal.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: VRDisplayLocal.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: VRDisplayLocal.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: gfxVRExternal.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: gfxVRExternal.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: gfxVRExternal.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: gfxVRExternal.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: gfxVRExternal.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: gfxVROpenVR.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: gfxVROpenVR.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: gfxVROpenVR.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: gfxVROpenVR.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: gfxVROpenVR.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: gfxVRPuppet.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: gfxVRPuppet.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: gfxVRPuppet.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: gfxVRPuppet.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: gfxVRPuppet.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_vr0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_vr0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_vr0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_vr0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_vr0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_vr1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_vr1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_vr1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_vr1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_vr1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_webrender_bindings0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_webrender_bindings0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_webrender_bindings0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_webrender_bindings0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_webrender_bindings0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: Unified_cpp_dom_animation0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_animation0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_animation0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_animation0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_animation0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_animation0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_animation0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: nsContentUtils.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsContentUtils.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsContentUtils.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsContentUtils.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsContentUtils.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsContentUtils.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: nsContentUtils.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: nsDOMWindowUtils.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsDOMWindowUtils.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsDOMWindowUtils.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsDOMWindowUtils.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsDOMWindowUtils.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsDOMWindowUtils.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: nsDOMWindowUtils.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: nsGlobalWindowInner.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsGlobalWindowInner.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsGlobalWindowInner.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsGlobalWindowInner.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsGlobalWindowInner.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsGlobalWindowInner.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: nsGlobalWindowInner.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: nsGlobalWindowOuter.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsGlobalWindowOuter.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsGlobalWindowOuter.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsGlobalWindowOuter.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsGlobalWindowOuter.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsGlobalWindowOuter.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: nsGlobalWindowOuter.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: nsObjectLoadingContent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsObjectLoadingContent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsObjectLoadingContent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsObjectLoadingContent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsObjectLoadingContent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsObjectLoadingContent.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: nsObjectLoadingContent.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<nsTArray<nsIFrame*> >(nsTArray<nsIFrame*>*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<mozilla::LogicalSize>(mozilla::LogicalSize*)
Unexecuted instantiation: Unified_cpp_dom_base4.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_base7.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_base8.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: UnionTypes.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnionTypes.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnionTypes.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnionTypes.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnionTypes.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnionTypes.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: UnionTypes.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: UnifiedBindings2.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedBindings2.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedBindings2.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedBindings2.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedBindings2.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedBindings2.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: UnifiedBindings2.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<mozilla::ComputedGridTrackInfo>(mozilla::ComputedGridTrackInfo*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<mozilla::ComputedGridLineInfo>(mozilla::ComputedGridLineInfo*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<nsBaseHashtable<nsStringHashKey, mozilla::css::GridNamedArea, mozilla::css::GridNamedArea> >(nsBaseHashtable<nsStringHashKey, mozilla::css::GridNamedArea, mozilla::css::GridNamedArea>*)
Unexecuted instantiation: UnifiedBindings4.cpp:void DeleteValue<nsTArray<mozilla::css::GridNamedArea> >(nsTArray<mozilla::css::GridNamedArea>*)
Unexecuted instantiation: UnifiedBindings9.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UnifiedBindings9.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UnifiedBindings9.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UnifiedBindings9.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UnifiedBindings9.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UnifiedBindings9.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: UnifiedBindings9.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: BrowserElementParent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: BrowserElementParent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: BrowserElementParent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: BrowserElementParent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: BrowserElementParent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: BrowserElementParent.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: BrowserElementParent.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_cache0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_cache0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_cache0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_cache0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_cache0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_cache1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_cache1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_cache1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_cache1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_cache1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_clients_manager0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_clients_manager0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_clients_manager0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_clients_manager0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_clients_manager0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: EventStateManager.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: EventStateManager.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: EventStateManager.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: EventStateManager.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: EventStateManager.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: EventStateManager.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: EventStateManager.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_events0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_events0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_events0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_events0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_events0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_events0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_events0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_events1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_events1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_events1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_events1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_events1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_events1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_events1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_events2.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_events2.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_events2.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_events2.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_events2.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_events2.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_events2.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_fetch0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_fetch0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_fetch0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_fetch0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_fetch0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_file0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_file0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_file0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_file0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_file0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_file_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_file_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_file_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_file_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_file_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_filesystem0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_filesystem0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_filesystem0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_filesystem0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_filesystem0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_gamepad0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_gamepad0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_gamepad0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_gamepad0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_gamepad0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsGeolocation.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsGeolocation.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsGeolocation.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsGeolocation.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsGeolocation.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_html1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_html1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_html1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_html1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_html1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_html1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_html1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_html4.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_html4.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_html4.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_html4.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_html4.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_html5.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_dom_html_input0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_html_input0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_html_input0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_html_input0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_html_input0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: AsmJSCache.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: AsmJSCache.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: AsmJSCache.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: AsmJSCache.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: AsmJSCache.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: RemoteVideoDecoder.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: RemoteVideoDecoder.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: RemoteVideoDecoder.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: RemoteVideoDecoder.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: RemoteVideoDecoder.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: VideoDecoderChild.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: VideoDecoderChild.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: VideoDecoderChild.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: VideoDecoderChild.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: VideoDecoderChild.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: VideoDecoderManagerChild.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: VideoDecoderManagerChild.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: VideoDecoderManagerChild.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: VideoDecoderManagerChild.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: VideoDecoderManagerChild.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: VideoDecoderManagerParent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: VideoDecoderManagerParent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: VideoDecoderManagerParent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: VideoDecoderManagerParent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: VideoDecoderManagerParent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: VideoDecoderParent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: VideoDecoderParent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: VideoDecoderParent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: VideoDecoderParent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: VideoDecoderParent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_systemservices0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_systemservices0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_systemservices0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_systemservices0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_systemservices0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_midi0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_midi0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_midi0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_midi0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_midi0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_notification0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_notification0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_notification0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_notification0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_notification0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_quota0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_quota0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_quota0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_quota0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_quota0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_security0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_security0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_security0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_security0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_security0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_storage0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_storage0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_storage0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_storage0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_storage0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_network0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_network0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_network0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_network0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_network0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_plugins_base0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_plugins_base0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_plugins_base0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_plugins_base0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_plugins_base0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_plugins_base0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_plugins_base0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: PluginInstanceChild.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: PluginInstanceChild.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: PluginInstanceChild.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: PluginInstanceChild.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: PluginInstanceChild.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_plugins_ipc1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: ActorsParent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: ActorsParent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: ActorsParent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: ActorsParent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: ActorsParent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_indexedDB1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: ContentChild.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: ContentChild.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: ContentChild.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: ContentChild.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: ContentChild.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: ProcessHangMonitor.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: ProcessHangMonitor.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: ProcessHangMonitor.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: ProcessHangMonitor.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: ProcessHangMonitor.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_ipc0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_ipc0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_ipc1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_ipc1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_ipc1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_ipc1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_ipc1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_ipc1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_dom_ipc1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_dom_workers1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_workers1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_workers1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_workers1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_workers1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_broadcastchannel0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_broadcastchannel0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_broadcastchannel0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_broadcastchannel0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_broadcastchannel0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_messagechannel0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_messagechannel0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_messagechannel0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_messagechannel0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_messagechannel0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_smil0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_smil0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_smil0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_smil0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_smil0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_webauthn0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_webauthn0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_webauthn0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_webauthn0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_webauthn0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xbl0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xbl0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xbl0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xbl0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xbl0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xbl1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xbl1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xbl1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xbl1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xbl1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xml0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xml0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xml0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xml0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xml0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xml0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xml0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xml0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xml0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xml0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xpath1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xslt_xslt1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_vr0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_vr0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_vr0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_vr0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_vr0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_u2f0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_u2f0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_u2f0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_u2f0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_u2f0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_webbrowserpersist0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_webbrowserpersist0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_webbrowserpersist0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_webbrowserpersist0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_webbrowserpersist0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_xhr0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_xhr0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_xhr0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_xhr0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_xhr0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_payments0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_payments0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_payments0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_payments0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_payments0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_serviceworkers1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_simpledb0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_simpledb0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_simpledb0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_simpledb0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_simpledb0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_presentation0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_presentation0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_presentation0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_presentation0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_presentation0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_dom_presentation1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_dom_presentation1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_dom_presentation1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_dom_presentation1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_dom_presentation1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_view0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_view0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_view0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_view0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_view0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_widget_headless0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_widget_headless0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_widget_headless0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_widget_headless0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_widget_headless0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsWindow.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsWindow.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsWindow.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsWindow.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsWindow.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_widget_gtk0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_widget_gtk0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_widget_gtk0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_widget_gtk0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_widget_gtk0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_widget_gtk1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_widget_gtk1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_widget_gtk1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_widget_gtk1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_widget_gtk1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_widget_gtk2.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_widget_gtk2.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_widget_gtk2.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_widget_gtk2.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_widget_gtk2.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_widget_gtk2.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_widget_gtk2.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_editor_libeditor0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_editor_libeditor0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_editor_libeditor0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_editor_libeditor0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_editor_libeditor0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<nsTArray<nsIFrame*> >(nsTArray<nsIFrame*>*)
Unexecuted instantiation: Unified_cpp_editor_libeditor1.cpp:void DeleteValue<mozilla::LogicalSize>(mozilla::LogicalSize*)
Unexecuted instantiation: Unified_cpp_editor_libeditor2.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_editor_libeditor2.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_editor_libeditor2.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_editor_libeditor2.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_editor_libeditor2.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_editor_spellchecker0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_editor_spellchecker0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_editor_spellchecker0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_editor_spellchecker0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_editor_spellchecker0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_editor_composer0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_editor_composer0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_editor_composer0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_editor_composer0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_editor_composer0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<mozilla::ComputedGridTrackInfo>(mozilla::ComputedGridTrackInfo*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<ComputedFlexContainerInfo>(ComputedFlexContainerInfo*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<mozilla::ComputedGridLineInfo>(mozilla::ComputedGridLineInfo*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsBaseHashtable<nsStringHashKey, mozilla::css::GridNamedArea, mozilla::css::GridNamedArea> >(nsBaseHashtable<nsStringHashKey, mozilla::css::GridNamedArea, mozilla::css::GridNamedArea>*)
Unexecuted instantiation: Unified_cpp_layout_style3.cpp:void DeleteValue<nsTArray<mozilla::css::GridNamedArea> >(nsTArray<mozilla::css::GridNamedArea>*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_layout_style4.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_layout_forms0.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsTArray<nsIFrame*> >(nsTArray<nsIFrame*>*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<BCPropertyData>(BCPropertyData*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsTableRowGroupFrame::FrameCursorData>(nsTableRowGroupFrame::FrameCursorData*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<mozilla::LogicalSize>(mozilla::LogicalSize*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_layout_ipc0.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_layout_inspector0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_inspector0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_inspector0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_inspector0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_inspector0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_printing0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_printing0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_printing0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_printing0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_printing0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_layout_build0.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_docshell_shistory0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_docshell_shistory0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_docshell_shistory0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_docshell_shistory0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_docshell_shistory0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_xpfe_appshell0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_xpfe_appshell0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_xpfe_appshell0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_xpfe_appshell0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_xpfe_appshell0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: AccessibleWrap.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: AccessibleWrap.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: AccessibleWrap.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: AccessibleWrap.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: AccessibleWrap.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: ApplicationAccessibleWrap.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: ApplicationAccessibleWrap.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: ApplicationAccessibleWrap.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: ApplicationAccessibleWrap.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: ApplicationAccessibleWrap.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: AtkSocketAccessible.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: AtkSocketAccessible.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: AtkSocketAccessible.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: AtkSocketAccessible.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: AtkSocketAccessible.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: DOMtoATK.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: DOMtoATK.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: DOMtoATK.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: DOMtoATK.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: DOMtoATK.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: DocAccessibleWrap.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: DocAccessibleWrap.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: DocAccessibleWrap.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: DocAccessibleWrap.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: DocAccessibleWrap.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Platform.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Platform.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Platform.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Platform.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Platform.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: RootAccessibleWrap.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: RootAccessibleWrap.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: RootAccessibleWrap.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: RootAccessibleWrap.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: RootAccessibleWrap.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: UtilInterface.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: UtilInterface.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: UtilInterface.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: UtilInterface.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: UtilInterface.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiHyperlink.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiHyperlink.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiHyperlink.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiHyperlink.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiHyperlink.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceAction.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceAction.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceAction.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceAction.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceAction.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceComponent.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceComponent.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceComponent.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceComponent.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceComponent.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceDocument.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceDocument.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceDocument.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceDocument.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceDocument.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceEditableText.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceEditableText.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceEditableText.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceEditableText.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceEditableText.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceHyperlinkImpl.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceHyperlinkImpl.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceHyperlinkImpl.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceHyperlinkImpl.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceHyperlinkImpl.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceHypertext.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceHypertext.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceHypertext.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceHypertext.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceHypertext.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceImage.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceImage.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceImage.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceImage.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceImage.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceSelection.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceSelection.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceSelection.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceSelection.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceSelection.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceTable.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceTable.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceTable.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceTable.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceTable.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceTableCell.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceTableCell.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceTableCell.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceTableCell.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceTableCell.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceText.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceText.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceText.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceText.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceText.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsMaiInterfaceValue.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsMaiInterfaceValue.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsMaiInterfaceValue.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsMaiInterfaceValue.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsMaiInterfaceValue.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_aom0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_accessible_aom0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_accessible_aom0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_accessible_aom0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_accessible_aom0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_base0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_accessible_base0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_accessible_base0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_accessible_base0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_accessible_base0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_accessible_base1.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, double>*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver> >(nsInterfaceHashtable<nsRefPtrHashKey<mozilla::URLAndReferrerInfo>, nsIMutationObserver>*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<nsTArray<nsIFrame*> >(nsTArray<nsIFrame*>*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void DeleteValue<mozilla::LogicalSize>(mozilla::LogicalSize*)
Unexecuted instantiation: Unified_cpp_accessible_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_accessible_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_accessible_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_accessible_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_accessible_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: DocAccessibleChild.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: DocAccessibleChild.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: DocAccessibleChild.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: DocAccessibleChild.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: DocAccessibleChild.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: ProxyAccessible.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: ProxyAccessible.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: ProxyAccessible.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: ProxyAccessible.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: ProxyAccessible.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_xpcom0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_accessible_xpcom0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_accessible_xpcom0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_accessible_xpcom0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_accessible_xpcom0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_xul0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_accessible_xul0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_accessible_xul0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_accessible_xul0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_accessible_xul0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_accessible_xul0.cpp:void DeleteValue<nsDisplayListBuilder::OutOfFlowDisplayData>(nsDisplayListBuilder::OutOfFlowDisplayData*)
Unexecuted instantiation: Unified_cpp_accessible_xul0.cpp:void DeleteValue<nsDisplayListBuilder::DisplayListBuildingData>(nsDisplayListBuilder::DisplayListBuildingData*)
Unexecuted instantiation: Unified_cpp_spellcheck_src0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_spellcheck_src0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_spellcheck_src0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_spellcheck_src0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_spellcheck_src0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_webrequest0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_webrequest0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_webrequest0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_webrequest0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_webrequest0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_components_find0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_components_find0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_components_find0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_components_find0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_components_find0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_perfmonitoring0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_perfmonitoring0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_perfmonitoring0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_perfmonitoring0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_perfmonitoring0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_reputationservice0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_reputationservice0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_reputationservice0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_reputationservice0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_reputationservice0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsTypeAheadFind.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsTypeAheadFind.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsTypeAheadFind.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsTypeAheadFind.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsTypeAheadFind.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_windowwatcher0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_windowwatcher0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_windowwatcher0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_windowwatcher0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_windowwatcher0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_printingui_ipc0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_printingui_ipc0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_printingui_ipc0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_printingui_ipc0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_printingui_ipc0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsFormFillController.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsFormFillController.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsFormFillController.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsFormFillController.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsFormFillController.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsAppRunner.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsAppRunner.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsAppRunner.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsAppRunner.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsAppRunner.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: nsEmbedFunctions.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: nsEmbedFunctions.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: nsEmbedFunctions.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: nsEmbedFunctions.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: nsEmbedFunctions.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_apz_test_gtest0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_apz_test_gtest0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_apz_test_gtest0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_apz_test_gtest0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_apz_test_gtest0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest1.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest1.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest1.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest1.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_gfx_tests_gtest1.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
Unexecuted instantiation: Unified_cpp_layout_base_gtest0.cpp:void DeleteValue<nsPoint>(nsPoint*)
Unexecuted instantiation: Unified_cpp_layout_base_gtest0.cpp:void DeleteValue<nsMargin>(nsMargin*)
Unexecuted instantiation: Unified_cpp_layout_base_gtest0.cpp:void DeleteValue<nsRect>(nsRect*)
Unexecuted instantiation: Unified_cpp_layout_base_gtest0.cpp:void DeleteValue<nsOverflowAreas>(nsOverflowAreas*)
Unexecuted instantiation: Unified_cpp_layout_base_gtest0.cpp:void DeleteValue<AutoTArray<nsDisplayItem*, 4ul> >(AutoTArray<nsDisplayItem*, 4ul>*)
530
531
/// Generic destructor for frame properties. Calls Release().
532
template<typename T>
533
static void ReleaseValue(T* aPropertyValue)
534
0
{
535
0
  aPropertyValue->Release();
536
0
}
Unexecuted instantiation: Unified_cpp_image1.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: Unified_cpp_image1.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: nsImageLoadingContent.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
Unexecuted instantiation: UnionTypes.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: UnionTypes.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: UnionTypes.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: UnionTypes.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: UnionTypes.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
Unexecuted instantiation: UnifiedBindings2.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: UnifiedBindings2.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: UnifiedBindings2.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: UnifiedBindings2.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: UnifiedBindings2.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
Unexecuted instantiation: UnifiedBindings9.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: UnifiedBindings9.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: UnifiedBindings9.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: UnifiedBindings9.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: UnifiedBindings9.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: Unified_cpp_dom_html0.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: Unified_cpp_layout_style1.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void ReleaseValue<mozilla::SVGTemplateElementObserver>(mozilla::SVGTemplateElementObserver*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void ReleaseValue<mozilla::SVGMaskObserverList>(mozilla::SVGMaskObserverList*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void ReleaseValue<mozilla::nsSVGPaintingProperty>(mozilla::nsSVGPaintingProperty*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void ReleaseValue<mozilla::SVGMarkerObserver>(mozilla::SVGMarkerObserver*)
Unexecuted instantiation: Unified_cpp_accessible_generic0.cpp:void ReleaseValue<mozilla::SVGTextPathObserver>(mozilla::SVGTextPathObserver*)
537
538
//----------------------------------------------------------------------
539
540
/**
541
 * A frame in the layout model. This interface is supported by all frame
542
 * objects.
543
 *
544
 * Frames can have multiple child lists: the default child list
545
 * (referred to as the <i>principal</i> child list, and additional named
546
 * child lists. There is an ordering of frames within a child list, but
547
 * there is no order defined between frames in different child lists of
548
 * the same parent frame.
549
 *
550
 * Frames are NOT reference counted. Use the Destroy() member function
551
 * to destroy a frame. The lifetime of the frame hierarchy is bounded by the
552
 * lifetime of the presentation shell which owns the frames.
553
 *
554
 * nsIFrame is a private Gecko interface. If you are not Gecko then you
555
 * should not use it. If you're not in layout, then you won't be able to
556
 * link to many of the functions defined here. Too bad.
557
 *
558
 * If you're not in layout but you must call functions in here, at least
559
 * restrict yourself to calling virtual methods, which won't hurt you as badly.
560
 */
561
class nsIFrame : public nsQueryFrame
562
{
563
public:
564
  using AlignmentContext = mozilla::AlignmentContext;
565
  using BaselineSharingGroup = mozilla::BaselineSharingGroup;
566
  template <typename T> using Maybe = mozilla::Maybe<T>;
567
  using Nothing = mozilla::Nothing;
568
  using OnNonvisible = mozilla::OnNonvisible;
569
  template<typename T=void>
570
  using PropertyDescriptor = const mozilla::FramePropertyDescriptor<T>*;
571
  using ReflowInput = mozilla::ReflowInput;
572
  using ReflowOutput = mozilla::ReflowOutput;
573
  using Visibility = mozilla::Visibility;
574
575
  typedef mozilla::ComputedStyle ComputedStyle;
576
  typedef mozilla::FrameProperties FrameProperties;
577
  typedef mozilla::layers::Layer Layer;
578
  typedef mozilla::layers::LayerManager LayerManager;
579
  typedef mozilla::layout::FrameChildList ChildList;
580
  typedef mozilla::layout::FrameChildListID ChildListID;
581
  typedef mozilla::layout::FrameChildListIDs ChildListIDs;
582
  typedef mozilla::layout::FrameChildListIterator ChildListIterator;
583
  typedef mozilla::layout::FrameChildListArrayIterator ChildListArrayIterator;
584
  typedef mozilla::gfx::DrawTarget DrawTarget;
585
  typedef mozilla::gfx::Matrix Matrix;
586
  typedef mozilla::gfx::Matrix4x4 Matrix4x4;
587
  typedef mozilla::gfx::Matrix4x4Flagged Matrix4x4Flagged;
588
  typedef mozilla::Sides Sides;
589
  typedef mozilla::LogicalSides LogicalSides;
590
  typedef mozilla::SmallPointerArray<mozilla::DisplayItemData> DisplayItemDataArray;
591
  typedef nsQueryFrame::ClassID ClassID;
592
593
  NS_DECL_QUERYFRAME_TARGET(nsIFrame)
594
595
  explicit nsIFrame(ClassID aID)
596
    : mRect()
597
    , mContent(nullptr)
598
    , mComputedStyle(nullptr)
599
    , mParent(nullptr)
600
    , mNextSibling(nullptr)
601
    , mPrevSibling(nullptr)
602
    , mState(NS_FRAME_FIRST_REFLOW | NS_FRAME_IS_DIRTY)
603
    , mClass(aID)
604
    , mMayHaveRoundedCorners(false)
605
    , mHasImageRequest(false)
606
    , mHasFirstLetterChild(false)
607
    , mParentIsWrapperAnonBox(false)
608
    , mIsWrapperBoxNeedingRestyle(false)
609
    , mReflowRequestedForCharDataChange(false)
610
    , mForceDescendIntoIfVisible(false)
611
    , mBuiltDisplayList(false)
612
    , mFrameIsModified(false)
613
    , mHasOverrideDirtyRegion(false)
614
    , mMayHaveWillChangeBudget(false)
615
    , mIsPrimaryFrame(false)
616
    , mMayHaveTransformAnimation(false)
617
    , mMayHaveOpacityAnimation(false)
618
    , mAllDescendantsAreInvisible(false)
619
  {
620
    mozilla::PodZero(&mOverflow);
621
  }
622
623
0
  nsPresContext* PresContext() const {
624
0
    return Style()->PresContextForFrame();
625
0
  }
626
627
0
  nsIPresShell* PresShell() const {
628
0
    return PresContext()->PresShell();
629
0
  }
630
631
  /**
632
   * Called to initialize the frame. This is called immediately after creating
633
   * the frame.
634
   *
635
   * If the frame is a continuing frame, then aPrevInFlow indicates the previous
636
   * frame (the frame that was split).
637
   *
638
   * Each subclass that need a view should override this method and call
639
   * CreateView() after calling its base class Init().
640
   *
641
   * @param   aContent the content object associated with the frame
642
   * @param   aParent the parent frame
643
   * @param   aPrevInFlow the prev-in-flow frame
644
   */
645
  virtual void Init(nsIContent*       aContent,
646
                    nsContainerFrame* aParent,
647
                    nsIFrame*         aPrevInFlow) = 0;
648
649
  using PostDestroyData = mozilla::layout::PostFrameDestroyData;
650
  struct MOZ_RAII AutoPostDestroyData
651
  {
652
    explicit AutoPostDestroyData(nsPresContext* aPresContext)
653
      : mPresContext(aPresContext) {}
654
    ~AutoPostDestroyData() {
655
      for (auto& content : mozilla::Reversed(mData.mAnonymousContent)) {
656
        nsIFrame::DestroyAnonymousContent(mPresContext, content.forget());
657
      }
658
    }
659
    nsPresContext* mPresContext;
660
    PostDestroyData mData;
661
  };
662
  /**
663
   * Destroys this frame and each of its child frames (recursively calls
664
   * Destroy() for each child). If this frame is a first-continuation, this
665
   * also removes the frame from the primary frame map and clears undisplayed
666
   * content for its content node.
667
   * If the frame is a placeholder, it also ensures the out-of-flow frame's
668
   * removal and destruction.
669
   */
670
  void Destroy() {
671
    AutoPostDestroyData data(PresContext());
672
    DestroyFrom(this, data.mData);
673
    // Note that |this| is deleted at this point.
674
  }
675
676
  /** Flags for PeekOffsetCharacter, PeekOffsetNoAmount, PeekOffsetWord return values.
677
    */
678
  enum FrameSearchResult {
679
    // Peek found a appropriate offset within frame.
680
    FOUND = 0x00,
681
    // try next frame for offset.
682
    CONTINUE = 0x1,
683
    // offset not found because the frame was empty of text.
684
    CONTINUE_EMPTY = 0x2 | CONTINUE,
685
    // offset not found because the frame didn't contain any text that could be selected.
686
    CONTINUE_UNSELECTABLE = 0x4 | CONTINUE,
687
  };
688
689
  /**
690
   * Options for PeekOffsetCharacter().
691
   */
692
  struct MOZ_STACK_CLASS PeekOffsetCharacterOptions
693
  {
694
    // Whether to restrict result to valid cursor locations (between grapheme
695
    // clusters) - if this is included, maintains "normal" behavior, otherwise,
696
    // used for selection by "code unit" (instead of "character")
697
    bool mRespectClusters;
698
    // Whether to check user-select style value - if this is included, checks
699
    // if user-select is all, then, it may return CONTINUE_UNSELECTABLE.
700
    bool mIgnoreUserStyleAll;
701
702
    PeekOffsetCharacterOptions()
703
      : mRespectClusters(true)
704
      , mIgnoreUserStyleAll(false)
705
0
    {
706
0
    }
707
  };
708
709
protected:
710
  friend class nsBlockFrame; // for access to DestroyFrom
711
712
  /**
713
   * Return true if the frame is part of a Selection.
714
   * Helper method to implement the public IsSelected() API.
715
   */
716
  virtual bool IsFrameSelected() const;
717
718
  /**
719
   * Implements Destroy(). Do not call this directly except from within a
720
   * DestroyFrom() implementation.
721
   *
722
   * @note This will always be called, so it is not necessary to override
723
   *       Destroy() in subclasses of nsFrame, just DestroyFrom().
724
   *
725
   * @param  aDestructRoot is the root of the subtree being destroyed
726
   */
727
  virtual void DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData) = 0;
728
  friend class nsFrameList; // needed to pass aDestructRoot through to children
729
  friend class nsLineBox;   // needed to pass aDestructRoot through to children
730
  friend class nsContainerFrame; // needed to pass aDestructRoot through to children
731
  friend class nsFrame; // need to assign mParent
732
  template<class Source> friend class do_QueryFrameHelper; // to read mClass
733
public:
734
735
  /**
736
   * Get the content object associated with this frame. Does not add a reference.
737
   */
738
0
  nsIContent* GetContent() const { return mContent; }
739
740
  /**
741
   * Get the frame that should be the parent for the frames of child elements
742
   * May return nullptr during reflow
743
   */
744
  virtual nsContainerFrame* GetContentInsertionFrame() { return nullptr; }
745
746
  /**
747
   * Move any frames on our overflow list to the end of our principal list.
748
   * @return true if there were any overflow frames
749
   */
750
  virtual bool DrainSelfOverflowList() { return false; }
751
752
  /**
753
   * Get the frame that should be scrolled if the content associated
754
   * with this frame is targeted for scrolling. For frames implementing
755
   * nsIScrollableFrame this will return the frame itself. For frames
756
   * like nsTextControlFrame that contain a scrollframe, will return
757
   * that scrollframe.
758
   */
759
  virtual nsIScrollableFrame* GetScrollTargetFrame() { return nullptr; }
760
761
  /**
762
   * Get the offsets of the frame. most will be 0,0
763
   *
764
   */
765
  virtual nsresult GetOffsets(int32_t &start, int32_t &end) const = 0;
766
767
  /**
768
   * Reset the offsets when splitting frames during Bidi reordering
769
   *
770
   */
771
  virtual void AdjustOffsetsForBidi(int32_t aStart, int32_t aEnd) {}
772
773
  /**
774
   * Get the style associated with this frame.
775
   */
776
0
  ComputedStyle* Style() const { return mComputedStyle; }
777
  void SetComputedStyle(ComputedStyle* aStyle)
778
  {
779
    if (aStyle != mComputedStyle) {
780
      MOZ_DIAGNOSTIC_ASSERT(PresShell() == aStyle->PresContextForFrame()->PresShell());
781
      RefPtr<ComputedStyle> oldComputedStyle = mComputedStyle.forget();
782
      mComputedStyle = aStyle;
783
      DidSetComputedStyle(oldComputedStyle);
784
    }
785
  }
786
787
  /**
788
   * SetComputedStyleWithoutNotification is for changes to the style
789
   * context that should suppress style change processing, in other
790
   * words, those that aren't really changes.  This generally means only
791
   * changes that happen during frame construction.
792
   */
793
  void SetComputedStyleWithoutNotification(ComputedStyle* aStyle)
794
  {
795
    if (aStyle != mComputedStyle) {
796
      MOZ_DIAGNOSTIC_ASSERT(PresShell() == aStyle->PresContextForFrame()->PresShell());
797
      mComputedStyle = aStyle;
798
    }
799
  }
800
801
  // Style post processing hook
802
  // Attention: the old style is the one we're forgetting,
803
  // and hence possibly completely bogus for GetStyle* purposes.
804
  // Use PeekStyleData instead.
805
  virtual void DidSetComputedStyle(ComputedStyle* aOldComputedStyle) = 0;
806
807
  /**
808
   * Define typesafe getter functions for each style struct by
809
   * preprocessing the list of style structs.  These functions are the
810
   * preferred way to get style data.  The macro creates functions like:
811
   *   const nsStyleBorder* StyleBorder();
812
   *   const nsStyleColor* StyleColor();
813
   *
814
   * Callers outside of libxul should use nsIDOMWindow::GetComputedStyle()
815
   * instead of these accessors.
816
   *
817
   * Callers can use Style*WithOptionalParam if they're in a function that
818
   * accepts an *optional* pointer the style struct.
819
   */
820
  #define STYLE_STRUCT(name_)                                         \
821
0
    const nsStyle##name_ * Style##name_ () const MOZ_NONNULL_RETURN { \
822
0
      NS_ASSERTION(mComputedStyle, "No style found!");                \
823
0
      return mComputedStyle->Style##name_ ();                         \
824
0
    }                                                                 \
Unexecuted instantiation: nsIFrame::StyleFont() const
Unexecuted instantiation: nsIFrame::StyleText() const
Unexecuted instantiation: nsIFrame::StyleVisibility() const
Unexecuted instantiation: nsIFrame::StyleUI() const
Unexecuted instantiation: nsIFrame::StylePosition() const
Unexecuted instantiation: nsIFrame::StyleDisplay() const
Unexecuted instantiation: nsIFrame::StyleUIReset() const
Unexecuted instantiation: nsIFrame::StyleTable() const
Unexecuted instantiation: nsIFrame::StyleBorder() const
825
    const nsStyle##name_ * Style##name_##WithOptionalParam(           \
826
0
      const nsStyle##name_ * aStyleStruct) const MOZ_NONNULL_RETURN { \
827
0
      if (aStyleStruct) {                                             \
828
0
        MOZ_ASSERT(aStyleStruct == Style##name_());                   \
829
0
        return aStyleStruct;                                          \
830
0
      }                                                               \
831
0
      return Style##name_();                                          \
832
0
    }
Unexecuted instantiation: nsIFrame::StyleFontWithOptionalParam(nsStyleFont const*) const
Unexecuted instantiation: nsIFrame::StyleColorWithOptionalParam(nsStyleColor const*) const
Unexecuted instantiation: nsIFrame::StyleListWithOptionalParam(nsStyleList const*) const
Unexecuted instantiation: nsIFrame::StyleTextWithOptionalParam(nsStyleText const*) const
Unexecuted instantiation: nsIFrame::StyleVisibilityWithOptionalParam(nsStyleVisibility const*) const
Unexecuted instantiation: nsIFrame::StyleUIWithOptionalParam(nsStyleUI const*) const
Unexecuted instantiation: nsIFrame::StyleTableBorderWithOptionalParam(nsStyleTableBorder const*) const
Unexecuted instantiation: nsIFrame::StyleSVGWithOptionalParam(nsStyleSVG const*) const
Unexecuted instantiation: nsIFrame::StyleBackgroundWithOptionalParam(nsStyleBackground const*) const
Unexecuted instantiation: nsIFrame::StylePositionWithOptionalParam(nsStylePosition const*) const
Unexecuted instantiation: nsIFrame::StyleTextResetWithOptionalParam(nsStyleTextReset const*) const
Unexecuted instantiation: nsIFrame::StyleDisplayWithOptionalParam(nsStyleDisplay const*) const
Unexecuted instantiation: nsIFrame::StyleContentWithOptionalParam(nsStyleContent const*) const
Unexecuted instantiation: nsIFrame::StyleUIResetWithOptionalParam(nsStyleUIReset const*) const
Unexecuted instantiation: nsIFrame::StyleTableWithOptionalParam(nsStyleTable const*) const
Unexecuted instantiation: nsIFrame::StyleMarginWithOptionalParam(nsStyleMargin const*) const
Unexecuted instantiation: nsIFrame::StylePaddingWithOptionalParam(nsStylePadding const*) const
Unexecuted instantiation: nsIFrame::StyleBorderWithOptionalParam(nsStyleBorder const*) const
Unexecuted instantiation: nsIFrame::StyleOutlineWithOptionalParam(nsStyleOutline const*) const
Unexecuted instantiation: nsIFrame::StyleXULWithOptionalParam(nsStyleXUL const*) const
Unexecuted instantiation: nsIFrame::StyleSVGResetWithOptionalParam(nsStyleSVGReset const*) const
Unexecuted instantiation: nsIFrame::StyleColumnWithOptionalParam(nsStyleColumn const*) const
Unexecuted instantiation: nsIFrame::StyleEffectsWithOptionalParam(nsStyleEffects const*) const
833
  #include "nsStyleStructList.h"
834
  #undef STYLE_STRUCT
835
836
  /** Also forward GetVisitedDependentColor to the style */
837
  template<typename T, typename S>
838
  nscolor GetVisitedDependentColor(T S::* aField)
839
    { return mComputedStyle->GetVisitedDependentColor(aField); }
840
841
  /**
842
   * These methods are to access any additional ComputedStyles that
843
   * the frame may be holding.
844
   *
845
   * These are styles that are children of the frame's primary style and are NOT
846
   * used as styles for any child frames.
847
   *
848
   * These contexts also MUST NOT have any child styles whatsoever. If you need
849
   * to insert styles into the style tree, then you should create pseudo element
850
   * frames to own them.
851
   *
852
   * The indicies must be consecutive and implementations MUST return null if
853
   * asked for an index that is out of range.
854
   */
855
  virtual ComputedStyle* GetAdditionalComputedStyle(int32_t aIndex) const = 0;
856
857
  virtual void SetAdditionalComputedStyle(int32_t aIndex,
858
                                          ComputedStyle* aComputedStyle) = 0;
859
860
  already_AddRefed<ComputedStyle> ComputeSelectionStyle() const;
861
862
  /**
863
   * Accessor functions for geometric parent.
864
   */
865
0
  nsContainerFrame* GetParent() const { return mParent; }
866
867
  /**
868
   * Gets the parent of a frame, using the parent of the placeholder for
869
   * out-of-flow frames.
870
   */
871
  inline nsContainerFrame* GetInFlowParent() const;
872
873
  /**
874
   * Gets the primary frame of the closest flattened tree ancestor that has a
875
   * frame (flattened tree ancestors may not have frames in presence of display:
876
   * contents).
877
   */
878
  inline nsIFrame* GetClosestFlattenedTreeAncestorPrimaryFrame() const;
879
880
  /**
881
   * Return the placeholder for this frame (which must be out-of-flow).
882
   * @note this will only return non-null if |this| is the first-in-flow
883
   * although we don't assert that here for legacy reasons.
884
   */
885
  inline nsPlaceholderFrame* GetPlaceholderFrame() const {
886
    MOZ_ASSERT(HasAnyStateBits(NS_FRAME_OUT_OF_FLOW));
887
    return GetProperty(PlaceholderFrameProperty());
888
  }
889
890
  /**
891
   * Set this frame's parent to aParent.
892
   * If the frame may have moved into or out of a scrollframe's
893
   * frame subtree, StickyScrollContainer::NotifyReparentedFrameAcrossScrollFrameBoundary
894
   * must also be called.
895
   */
896
  void SetParent(nsContainerFrame* aParent);
897
898
  /**
899
   * The frame's writing-mode, used for logical layout computations.
900
   * It's usually the 'writing-mode' computed value, but there are exceptions:
901
   *   * inner table frames copy the value from the table frame
902
   *     (@see nsTableRowGroupFrame::Init, nsTableRowFrame::Init etc)
903
   *   * the root element frame propagates its value to its ancestors
904
   *     (@see nsCanvasFrame::MaybePropagateRootElementWritingMode)
905
   *   * a scrolled frame propagates its value to its ancestor scroll frame
906
   *     (@see nsHTMLScrollFrame::ReloadChildFrames)
907
   */
908
0
  mozilla::WritingMode GetWritingMode() const { return mWritingMode; }
909
910
  /**
911
   * Construct a writing mode for line layout in this frame.  This is
912
   * the writing mode of this frame, except that if this frame is styled with
913
   * unicode-bidi:plaintext, we reset the direction to the resolved paragraph
914
   * level of the given subframe (typically the first frame on the line),
915
   * because the container frame could be split by hard line breaks into
916
   * multiple paragraphs with different base direction.
917
   * @param aSelfWM the WM of 'this'
918
   */
919
  mozilla::WritingMode WritingModeForLine(mozilla::WritingMode aSelfWM,
920
                                          nsIFrame* aSubFrame) const;
921
922
  /**
923
   * Bounding rect of the frame.
924
   *
925
   * For frames that are laid out according to CSS box model rules the values
926
   * are in app units, and the origin is relative to the upper-left of the
927
   * geometric parent.  The size includes the content area, borders, and
928
   * padding.
929
   *
930
   * Frames that are laid out according to SVG's coordinate space based rules
931
   * (frames with the NS_FRAME_SVG_LAYOUT bit set, which *excludes*
932
   * nsSVGOuterSVGFrame) are different.  Many frames of this type do not set or
933
   * use mRect, in which case the frame rect is undefined.  The exceptions are:
934
   *
935
   *   - nsSVGInnerSVGFrame
936
   *   - SVGGeometryFrame (used for <path>, <circle>, etc.)
937
   *   - nsSVGImageFrame
938
   *   - nsSVGForeignObjectFrame
939
   *
940
   * For these frames the frame rect contains the frame's element's userspace
941
   * bounds including fill, stroke and markers, but converted to app units
942
   * rather than being in user units (CSS px).  In the SVG code "userspace" is
943
   * defined to be the coordinate system for the attributes that define an
944
   * element's geometry (such as the 'cx' attribute for <circle>).  For more
945
   * precise details see these frames' implementations of the ReflowSVG method
946
   * where mRect is set.
947
   *
948
   * Note: moving or sizing the frame does not affect the view's size or
949
   * position.
950
   */
951
0
  nsRect GetRect() const { return mRect; }
952
0
  nsPoint GetPosition() const { return mRect.TopLeft(); }
953
  nsSize GetSize() const { return mRect.Size(); }
954
  nsRect GetRectRelativeToSelf() const {
955
    return nsRect(nsPoint(0, 0), mRect.Size());
956
  }
957
  /**
958
   * Dimensions and position in logical coordinates in the frame's writing mode
959
   *  or another writing mode
960
   */
961
  mozilla::LogicalRect GetLogicalRect(const nsSize& aContainerSize) const {
962
    return GetLogicalRect(GetWritingMode(), aContainerSize);
963
  }
964
  mozilla::LogicalPoint GetLogicalPosition(const nsSize& aContainerSize) const {
965
    return GetLogicalPosition(GetWritingMode(), aContainerSize);
966
  }
967
  mozilla::LogicalSize GetLogicalSize() const {
968
    return GetLogicalSize(GetWritingMode());
969
  }
970
  mozilla::LogicalRect GetLogicalRect(mozilla::WritingMode aWritingMode,
971
                                      const nsSize& aContainerSize) const {
972
    return mozilla::LogicalRect(aWritingMode, GetRect(), aContainerSize);
973
  }
974
  mozilla::LogicalPoint GetLogicalPosition(mozilla::WritingMode aWritingMode,
975
                                           const nsSize& aContainerSize) const {
976
    return GetLogicalRect(aWritingMode, aContainerSize).Origin(aWritingMode);
977
  }
978
  mozilla::LogicalSize GetLogicalSize(mozilla::WritingMode aWritingMode) const {
979
    return mozilla::LogicalSize(aWritingMode, GetSize());
980
  }
981
0
  nscoord IStart(const nsSize& aContainerSize) const {
982
0
    return IStart(GetWritingMode(), aContainerSize);
983
0
  }
984
  nscoord IStart(mozilla::WritingMode aWritingMode,
985
0
                 const nsSize& aContainerSize) const {
986
0
    return GetLogicalPosition(aWritingMode, aContainerSize).I(aWritingMode);
987
0
  }
988
0
  nscoord BStart(const nsSize& aContainerSize) const {
989
0
    return BStart(GetWritingMode(), aContainerSize);
990
0
  }
991
  nscoord BStart(mozilla::WritingMode aWritingMode,
992
0
                 const nsSize& aContainerSize) const {
993
0
    return GetLogicalPosition(aWritingMode, aContainerSize).B(aWritingMode);
994
0
  }
995
  nscoord ISize() const { return ISize(GetWritingMode()); }
996
  nscoord ISize(mozilla::WritingMode aWritingMode) const {
997
    return GetLogicalSize(aWritingMode).ISize(aWritingMode);
998
  }
999
  nscoord BSize() const { return BSize(GetWritingMode()); }
1000
  nscoord BSize(mozilla::WritingMode aWritingMode) const {
1001
    return GetLogicalSize(aWritingMode).BSize(aWritingMode);
1002
  }
1003
0
  nscoord ContentBSize() const { return ContentBSize(GetWritingMode()); }
1004
  nscoord ContentBSize(mozilla::WritingMode aWritingMode) const {
1005
    auto bp = GetLogicalUsedBorderAndPadding(aWritingMode);
1006
    bp.ApplySkipSides(GetLogicalSkipSides());
1007
    return std::max(0, BSize(aWritingMode) - bp.BStartEnd(aWritingMode));
1008
  }
1009
1010
  /**
1011
   * When we change the size of the frame's border-box rect, we may need to
1012
   * reset the overflow rect if it was previously stored as deltas.
1013
   * (If it is currently a "large" overflow and could be re-packed as deltas,
1014
   * we don't bother as the cost of the allocation has already been paid.)
1015
   * @param aRebuildDisplayItems If true, then adds this frame to the
1016
   * list of modified frames for display list building if the rect has changed.
1017
   * Only pass false if you're sure that the relevant display items will be rebuilt
1018
   * already (possibly by an ancestor being in the modified list), or if this is
1019
   * a temporary change.
1020
   */
1021
  void SetRect(const nsRect& aRect, bool aRebuildDisplayItems = true) {
1022
    if (aRect == mRect) {
1023
      return;
1024
    }
1025
    if (mOverflow.mType != NS_FRAME_OVERFLOW_LARGE &&
1026
        mOverflow.mType != NS_FRAME_OVERFLOW_NONE) {
1027
      nsOverflowAreas overflow = GetOverflowAreas();
1028
      mRect = aRect;
1029
      SetOverflowAreas(overflow);
1030
    } else {
1031
      mRect = aRect;
1032
    }
1033
    if (aRebuildDisplayItems) {
1034
      MarkNeedsDisplayItemRebuild();
1035
    }
1036
  }
1037
  /**
1038
   * Set this frame's rect from a logical rect in its own writing direction
1039
   */
1040
  void SetRect(const mozilla::LogicalRect& aRect,
1041
0
               const nsSize& aContainerSize) {
1042
0
    SetRect(GetWritingMode(), aRect, aContainerSize);
1043
0
  }
1044
  /**
1045
   * Set this frame's rect from a logical rect in a different writing direction
1046
   * (GetPhysicalRect will assert if the writing mode doesn't match)
1047
   */
1048
  void SetRect(mozilla::WritingMode aWritingMode,
1049
               const mozilla::LogicalRect& aRect,
1050
               const nsSize& aContainerSize) {
1051
    SetRect(aRect.GetPhysicalRect(aWritingMode, aContainerSize));
1052
  }
1053
1054
  /**
1055
   * Set this frame's size from a logical size in its own writing direction.
1056
   * This leaves the frame's logical position unchanged, which means its
1057
   * physical position may change (for right-to-left modes).
1058
   */
1059
  void SetSize(const mozilla::LogicalSize& aSize) {
1060
    SetSize(GetWritingMode(), aSize);
1061
  }
1062
  /*
1063
   * Set this frame's size from a logical size in a different writing direction.
1064
   * This leaves the frame's logical position in the given mode unchanged,
1065
   * which means its physical position may change (for right-to-left modes).
1066
   */
1067
  void SetSize(mozilla::WritingMode aWritingMode,
1068
               const mozilla::LogicalSize& aSize)
1069
  {
1070
    if ((!aWritingMode.IsVertical() && !aWritingMode.IsBidiLTR()) ||
1071
        aWritingMode.IsVerticalRL()) {
1072
      nscoord oldWidth = mRect.Width();
1073
      SetSize(aSize.GetPhysicalSize(aWritingMode));
1074
      mRect.x -= mRect.Width() - oldWidth;
1075
    } else {
1076
      SetSize(aSize.GetPhysicalSize(aWritingMode));
1077
    }
1078
  }
1079
1080
  /**
1081
   * Set this frame's physical size. This leaves the frame's physical position
1082
   * (topLeft) unchanged.
1083
   * @param aRebuildDisplayItems If true, then adds this frame to the
1084
   * list of modified frames for display list building if the size has changed.
1085
   * Only pass false if you're sure that the relevant display items will be rebuilt
1086
   * already (possibly by an ancestor being in the modified list), or if this is
1087
   * a temporary change.
1088
   */
1089
  void SetSize(const nsSize& aSize, bool aRebuildDisplayItems = true) {
1090
    SetRect(nsRect(mRect.TopLeft(), aSize), aRebuildDisplayItems);
1091
  }
1092
1093
  void SetPosition(const nsPoint& aPt) {
1094
    if (mRect.TopLeft() == aPt) {
1095
      return;
1096
    }
1097
    mRect.MoveTo(aPt);
1098
    MarkNeedsDisplayItemRebuild();
1099
  }
1100
  void SetPosition(mozilla::WritingMode aWritingMode,
1101
                   const mozilla::LogicalPoint& aPt,
1102
                   const nsSize& aContainerSize) {
1103
    // We subtract mRect.Size() from the container size to account for
1104
    // the fact that logical origins in RTL coordinate systems are at
1105
    // the top right of the frame instead of the top left.
1106
    SetPosition(aPt.GetPhysicalPoint(aWritingMode,
1107
                                    aContainerSize - mRect.Size()));
1108
  }
1109
1110
  /**
1111
   * Move the frame, accounting for relative positioning. Use this when
1112
   * adjusting the frame's position by a known amount, to properly update its
1113
   * saved normal position (see GetNormalPosition below).
1114
   *
1115
   * This must be used only when moving a frame *after*
1116
   * ReflowInput::ApplyRelativePositioning is called.  When moving
1117
   * a frame during the reflow process prior to calling
1118
   * ReflowInput::ApplyRelativePositioning, the position should
1119
   * simply be adjusted directly (e.g., using SetPosition()).
1120
   */
1121
  void MovePositionBy(const nsPoint& aTranslation);
1122
1123
  /**
1124
   * As above, using a logical-point delta in a given writing mode.
1125
   */
1126
  void MovePositionBy(mozilla::WritingMode aWritingMode,
1127
                      const mozilla::LogicalPoint& aTranslation)
1128
  {
1129
    // The LogicalPoint represents a vector rather than a point within a
1130
    // rectangular coordinate space, so we use a null containerSize when
1131
    // converting logical to physical.
1132
    const nsSize nullContainerSize;
1133
    MovePositionBy(aTranslation.GetPhysicalPoint(aWritingMode,
1134
                                                 nullContainerSize));
1135
  }
1136
1137
  /**
1138
   * Return frame's rect without relative positioning
1139
   */
1140
  nsRect GetNormalRect() const;
1141
1142
  /**
1143
   * Return frame's position without relative positioning.
1144
   * If aHasProperty is provided, returns whether the normal position
1145
   * was stored in a frame property.
1146
   */
1147
  inline nsPoint GetNormalPosition(bool* aHasProperty = nullptr) const;
1148
1149
  mozilla::LogicalPoint
1150
  GetLogicalNormalPosition(mozilla::WritingMode aWritingMode,
1151
                           const nsSize& aContainerSize) const
1152
  {
1153
    // Subtract the size of this frame from the container size to get
1154
    // the correct position in rtl frames where the origin is on the
1155
    // right instead of the left
1156
    return mozilla::LogicalPoint(aWritingMode,
1157
                                 GetNormalPosition(),
1158
                                 aContainerSize - mRect.Size());
1159
  }
1160
1161
  virtual nsPoint GetPositionOfChildIgnoringScrolling(const nsIFrame* aChild)
1162
  { return aChild->GetPosition(); }
1163
1164
  nsPoint GetPositionIgnoringScrolling() const;
1165
1166
  typedef AutoTArray<nsDisplayItem*, 4> DisplayItemArray;
1167
1168
#define NS_DECLARE_FRAME_PROPERTY_WITH_DTOR(prop, type, dtor)             \
1169
0
  static const mozilla::FramePropertyDescriptor<type>* prop() {           \
1170
0
    /* Use of constexpr caused startup crashes with MSVC2015u1 PGO. */    \
1171
0
    static const auto descriptor =                                        \
1172
0
      mozilla::FramePropertyDescriptor<type>::NewWithDestructor<dtor>();  \
1173
0
    return &descriptor;                                                   \
1174
0
  }
Unexecuted instantiation: nsIFrame::PaintedPresShellsProperty()
Unexecuted instantiation: mozilla::layers::WebRenderUserDataProperty::Key()
Unexecuted instantiation: Unified_cpp_gfx_layers11.cpp:mozilla::layers::BlobGroupDataProperty()
Unexecuted instantiation: nsTableFrame::PositionedTablePartArray()
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:TableBCProperty()
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:RowCursorProperty()
1175
1176
// Don't use this unless you really know what you're doing!
1177
#define NS_DECLARE_FRAME_PROPERTY_WITH_FRAME_IN_DTOR(prop, type, dtor)    \
1178
  static const mozilla::FramePropertyDescriptor<type>* prop() {           \
1179
    /* Use of constexpr caused startup crashes with MSVC2015u1 PGO. */    \
1180
    static const auto descriptor = mozilla::                              \
1181
      FramePropertyDescriptor<type>::NewWithDestructorWithFrame<dtor>();  \
1182
    return &descriptor;                                                   \
1183
  }
1184
1185
#define NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(prop, type)                \
1186
0
  static const mozilla::FramePropertyDescriptor<type>* prop() {           \
1187
0
    /* Use of constexpr caused startup crashes with MSVC2015u1 PGO. */    \
1188
0
    static const auto descriptor =                                        \
1189
0
      mozilla::FramePropertyDescriptor<type>::NewWithoutDestructor();     \
1190
0
    return &descriptor;                                                   \
1191
0
  }
Unexecuted instantiation: nsIFrame::RefusedAsyncAnimationProperty()
Unexecuted instantiation: nsIFrame::BidiDataProperty()
Unexecuted instantiation: nsIFrame::PlaceholderFrameProperty()
Unexecuted instantiation: Unified_cpp_layout_tables0.cpp:RowUnpaginatedHeightProperty()
1192
1193
#define NS_DECLARE_FRAME_PROPERTY_DELETABLE(prop, type) \
1194
  NS_DECLARE_FRAME_PROPERTY_WITH_DTOR(prop, type, DeleteValue)
1195
1196
#define NS_DECLARE_FRAME_PROPERTY_RELEASABLE(prop, type) \
1197
  NS_DECLARE_FRAME_PROPERTY_WITH_DTOR(prop, type, ReleaseValue)
1198
1199
#define NS_DECLARE_FRAME_PROPERTY_WITH_DTOR_NEVER_CALLED(prop, type)  \
1200
  static void AssertOnDestroyingProperty##prop(type*) {               \
1201
    MOZ_ASSERT_UNREACHABLE("Frame property " #prop " should never "   \
1202
                           "be destroyed by the FrameProperties class");  \
1203
  }                                                                   \
1204
  NS_DECLARE_FRAME_PROPERTY_WITH_DTOR(prop, type,                     \
1205
                                      AssertOnDestroyingProperty##prop)
1206
1207
#define NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(prop, type) \
1208
  NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(prop, mozilla::SmallValueHolder<type>)
1209
1210
  NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(IBSplitSibling, nsContainerFrame)
1211
  NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(IBSplitPrevSibling, nsContainerFrame)
1212
1213
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(NormalPositionProperty, nsPoint)
1214
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(ComputedOffsetProperty, nsMargin)
1215
1216
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(OutlineInnerRectProperty, nsRect)
1217
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(PreEffectsBBoxProperty, nsRect)
1218
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(PreTransformOverflowAreasProperty,
1219
                                      nsOverflowAreas)
1220
1221
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(OverflowAreasProperty, nsOverflowAreas)
1222
1223
  // The initial overflow area passed to FinishAndStoreOverflow. This is only set
1224
  // on frames that Preserve3D() or HasPerspective() or IsTransformed(), and
1225
  // when at least one of the overflow areas differs from the frame bound rect.
1226
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(InitialOverflowProperty, nsOverflowAreas)
1227
1228
#ifdef DEBUG
1229
  // InitialOverflowPropertyDebug is added to the frame to indicate that either
1230
  // the InitialOverflowProperty has been stored or the InitialOverflowProperty
1231
  // has been suppressed due to being set to the default value (frame bounds)
1232
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(DebugInitialOverflowPropertyApplied, bool)
1233
#endif
1234
1235
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(UsedMarginProperty, nsMargin)
1236
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(UsedPaddingProperty, nsMargin)
1237
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(UsedBorderProperty, nsMargin)
1238
1239
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(LineBaselineOffset, nscoord)
1240
1241
  // Temporary override for a flex item's main-size property (either width
1242
  // or height), imposed by its flex container.
1243
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(FlexItemMainSizeOverride, nscoord)
1244
1245
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(InvalidationRect, nsRect)
1246
1247
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(RefusedAsyncAnimationProperty, bool)
1248
1249
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(FragStretchBSizeProperty, nscoord)
1250
1251
  // The block-axis margin-box size associated with eBClampMarginBoxMinSize.
1252
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(BClampMarginBoxMinSizeProperty, nscoord)
1253
1254
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(IBaselinePadProperty, nscoord)
1255
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(BBaselinePadProperty, nscoord)
1256
1257
  NS_DECLARE_FRAME_PROPERTY_DELETABLE(DisplayItems, DisplayItemArray)
1258
1259
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(BidiDataProperty, mozilla::FrameBidiData)
1260
1261
  NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(PlaceholderFrameProperty, nsPlaceholderFrame)
1262
1263
  mozilla::FrameBidiData GetBidiData() const
1264
0
  {
1265
0
    bool exists;
1266
0
    mozilla::FrameBidiData bidiData = GetProperty(BidiDataProperty(), &exists);
1267
0
    if (!exists) {
1268
0
      bidiData.precedingControl = mozilla::kBidiLevelNone;
1269
0
    }
1270
0
    return bidiData;
1271
0
  }
1272
1273
  nsBidiLevel GetBaseLevel() const
1274
  {
1275
    return GetBidiData().baseLevel;
1276
  }
1277
1278
  nsBidiLevel GetEmbeddingLevel() const
1279
0
  {
1280
0
    return GetBidiData().embeddingLevel;
1281
0
  }
1282
1283
  /**
1284
   * Return the distance between the border edge of the frame and the
1285
   * margin edge of the frame.  Like GetRect(), returns the dimensions
1286
   * as of the most recent reflow.
1287
   *
1288
   * This doesn't include any margin collapsing that may have occurred.
1289
   *
1290
   * It also treats 'auto' margins as zero, and treats any margins that
1291
   * should have been turned into 'auto' because of overconstraint as
1292
   * having their original values.
1293
   */
1294
  virtual nsMargin GetUsedMargin() const;
1295
  virtual mozilla::LogicalMargin
1296
  GetLogicalUsedMargin(mozilla::WritingMode aWritingMode) const {
1297
    return mozilla::LogicalMargin(aWritingMode, GetUsedMargin());
1298
  }
1299
1300
  /**
1301
   * Return the distance between the border edge of the frame (which is
1302
   * its rect) and the padding edge of the frame. Like GetRect(), returns
1303
   * the dimensions as of the most recent reflow.
1304
   *
1305
   * Note that this differs from StyleBorder()->GetComputedBorder() in
1306
   * that this describes a region of the frame's box, and
1307
   * StyleBorder()->GetComputedBorder() describes a border.  They differ
1308
   * for tables (particularly border-collapse tables) and themed
1309
   * elements.
1310
   */
1311
  virtual nsMargin GetUsedBorder() const;
1312
  virtual mozilla::LogicalMargin
1313
  GetLogicalUsedBorder(mozilla::WritingMode aWritingMode) const {
1314
    return mozilla::LogicalMargin(aWritingMode, GetUsedBorder());
1315
  }
1316
1317
  /**
1318
   * Return the distance between the padding edge of the frame and the
1319
   * content edge of the frame.  Like GetRect(), returns the dimensions
1320
   * as of the most recent reflow.
1321
   */
1322
  virtual nsMargin GetUsedPadding() const;
1323
  virtual mozilla::LogicalMargin
1324
  GetLogicalUsedPadding(mozilla::WritingMode aWritingMode) const {
1325
    return mozilla::LogicalMargin(aWritingMode, GetUsedPadding());
1326
  }
1327
1328
0
  nsMargin GetUsedBorderAndPadding() const {
1329
0
    return GetUsedBorder() + GetUsedPadding();
1330
0
  }
1331
  mozilla::LogicalMargin
1332
  GetLogicalUsedBorderAndPadding(mozilla::WritingMode aWritingMode) const {
1333
    return mozilla::LogicalMargin(aWritingMode, GetUsedBorderAndPadding());
1334
  }
1335
1336
  /**
1337
   * Like the frame's rect (see |GetRect|), which is the border rect,
1338
   * other rectangles of the frame, in app units, relative to the parent.
1339
   */
1340
  nsRect GetPaddingRect() const;
1341
  nsRect GetPaddingRectRelativeToSelf() const;
1342
  nsRect GetContentRect() const;
1343
  nsRect GetContentRectRelativeToSelf() const;
1344
  nsRect GetMarginRectRelativeToSelf() const;
1345
1346
  /**
1347
   * The area to paint box-shadows around.  The default is the border rect.
1348
   * (nsFieldSetFrame overrides this).
1349
   */
1350
  virtual nsRect VisualBorderRectRelativeToSelf() const {
1351
    return nsRect(0, 0, mRect.Width(), mRect.Height());
1352
  }
1353
1354
  /**
1355
   * Get the size, in app units, of the border radii. It returns FALSE iff all
1356
   * returned radii == 0 (so no border radii), TRUE otherwise.
1357
   * For the aRadii indexes, use the enum HalfCorner constants in gfx/2d/Types.h
1358
   * If a side is skipped via aSkipSides, its corners are forced to 0.
1359
   *
1360
   * All corner radii are then adjusted so they do not require more
1361
   * space than aBorderArea, according to the algorithm in css3-background.
1362
   *
1363
   * aFrameSize is used as the basis for percentage widths and heights.
1364
   * aBorderArea is used for the adjustment of radii that might be too
1365
   * large.
1366
   * FIXME: In the long run, we can probably get away with only one of
1367
   * these, especially if we change the way we handle outline-radius (by
1368
   * removing it and inflating the border radius)
1369
   *
1370
   * Return whether any radii are nonzero.
1371
   */
1372
  static bool ComputeBorderRadii(const nsStyleCorners& aBorderRadius,
1373
                                 const nsSize& aFrameSize,
1374
                                 const nsSize& aBorderArea,
1375
                                 Sides aSkipSides,
1376
                                 nscoord aRadii[8]);
1377
1378
  /*
1379
   * Given a set of border radii for one box (e.g., border box), convert
1380
   * it to the equivalent set of radii for another box (e.g., in to
1381
   * padding box, out to outline box) by reducing radii or increasing
1382
   * nonzero radii as appropriate.
1383
   *
1384
   * Indices into aRadii are the enum HalfCorner constants in gfx/2d/Types.h
1385
   *
1386
   * Note that InsetBorderRadii is lossy, since it can turn nonzero
1387
   * radii into zero, and OutsetBorderRadii does not inflate zero radii.
1388
   * Therefore, callers should always inset or outset directly from the
1389
   * original value coming from style.
1390
   */
1391
  static void InsetBorderRadii(nscoord aRadii[8], const nsMargin &aOffsets);
1392
  static void OutsetBorderRadii(nscoord aRadii[8], const nsMargin &aOffsets);
1393
1394
  /**
1395
   * Fill in border radii for this frame.  Return whether any are nonzero.
1396
   * Indices into aRadii are the enum HalfCorner constants in gfx/2d/Types.h
1397
   * aSkipSides is a union of eSideBitsLeft/Right/Top/Bottom bits that says
1398
   * which side(s) to skip.
1399
   *
1400
   * Note: GetMarginBoxBorderRadii() and GetShapeBoxBorderRadii() work only
1401
   * on frames that establish block formatting contexts since they don't
1402
   * participate in margin-collapsing.
1403
   */
1404
  virtual bool GetBorderRadii(const nsSize& aFrameSize,
1405
                              const nsSize& aBorderArea,
1406
                              Sides aSkipSides,
1407
                              nscoord aRadii[8]) const;
1408
  bool GetBorderRadii(nscoord aRadii[8]) const;
1409
  bool GetMarginBoxBorderRadii(nscoord aRadii[8]) const;
1410
  bool GetPaddingBoxBorderRadii(nscoord aRadii[8]) const;
1411
  bool GetContentBoxBorderRadii(nscoord aRadii[8]) const;
1412
  bool GetBoxBorderRadii(nscoord aRadii[8], nsMargin aOffset, bool aIsOutset) const;
1413
  bool GetShapeBoxBorderRadii(nscoord aRadii[8]) const;
1414
1415
  /**
1416
   * XXX: this method will likely be replaced by GetVerticalAlignBaseline
1417
   * Get the position of the frame's baseline, relative to the top of
1418
   * the frame (its top border edge).  Only valid when Reflow is not
1419
   * needed.
1420
   * @note You should only call this on frames with a WM that's parallel to aWM.
1421
   * @param aWM the writing-mode of the alignment context, with the ltr/rtl
1422
   * direction tweak done by nsIFrame::GetWritingMode(nsIFrame*) in inline
1423
   * contexts (see that method).
1424
   */
1425
  virtual nscoord GetLogicalBaseline(mozilla::WritingMode aWM) const = 0;
1426
1427
  /**
1428
   * Synthesize a first(last) inline-axis baseline from our margin-box.
1429
   * An alphabetical baseline is at the start(end) edge and a central baseline
1430
   * is at the center of our block-axis margin-box (aWM tells which to use).
1431
   * https://drafts.csswg.org/css-align-3/#synthesize-baselines
1432
   * @note You should only call this on frames with a WM that's parallel to aWM.
1433
   * @param aWM the writing-mode of the alignment context
1434
   * @return an offset from our border-box block-axis start(end) edge for
1435
   * a first(last) baseline respectively
1436
   * (implemented in nsIFrameInlines.h)
1437
   */
1438
  inline nscoord SynthesizeBaselineBOffsetFromMarginBox(
1439
                   mozilla::WritingMode aWM,
1440
                   BaselineSharingGroup aGroup) const;
1441
1442
  /**
1443
   * Synthesize a first(last) inline-axis baseline from our border-box.
1444
   * An alphabetical baseline is at the start(end) edge and a central baseline
1445
   * is at the center of our block-axis border-box (aWM tells which to use).
1446
   * https://drafts.csswg.org/css-align-3/#synthesize-baselines
1447
   * @note The returned value is only valid when reflow is not needed.
1448
   * @note You should only call this on frames with a WM that's parallel to aWM.
1449
   * @param aWM the writing-mode of the alignment context
1450
   * @return an offset from our border-box block-axis start(end) edge for
1451
   * a first(last) baseline respectively
1452
   * (implemented in nsIFrameInlines.h)
1453
   */
1454
  inline nscoord SynthesizeBaselineBOffsetFromBorderBox(
1455
                   mozilla::WritingMode aWM,
1456
                   BaselineSharingGroup aGroup) const;
1457
1458
  /**
1459
   * Return the position of the frame's inline-axis baseline, or synthesize one
1460
   * for the given alignment context. The returned baseline is the distance from
1461
   * the block-axis border-box start(end) edge for aBaselineGroup eFirst(eLast).
1462
   * @note The returned value is only valid when reflow is not needed.
1463
   * @note You should only call this on frames with a WM that's parallel to aWM.
1464
   * @param aWM the writing-mode of the alignment context
1465
   * @param aBaselineOffset out-param, only valid if the method returns true
1466
   * (implemented in nsIFrameInlines.h)
1467
   */
1468
  inline nscoord BaselineBOffset(mozilla::WritingMode aWM,
1469
                                 BaselineSharingGroup aBaselineGroup,
1470
                                 AlignmentContext     aAlignmentContext) const;
1471
1472
  /**
1473
   * XXX: this method is taking over the role that GetLogicalBaseline has.
1474
   * Return true if the frame has a CSS2 'vertical-align' baseline.
1475
   * If it has, then the returned baseline is the distance from the block-
1476
   * axis border-box start edge.
1477
   * @note This method should only be used in AlignmentContext::eInline contexts.
1478
   * @note The returned value is only valid when reflow is not needed.
1479
   * @note You should only call this on frames with a WM that's parallel to aWM.
1480
   * @param aWM the writing-mode of the alignment context
1481
   * @param aBaseline the baseline offset, only valid if the method returns true
1482
   */
1483
  virtual bool GetVerticalAlignBaseline(mozilla::WritingMode aWM,
1484
                                        nscoord* aBaseline) const {
1485
    return false;
1486
  }
1487
1488
  /**
1489
   * Return true if the frame has a first(last) inline-axis natural baseline per
1490
   * CSS Box Alignment.  If so, then the returned baseline is the distance from
1491
   * the block-axis border-box start(end) edge for aBaselineGroup eFirst(eLast).
1492
   * https://drafts.csswg.org/css-align-3/#natural-baseline
1493
   * @note The returned value is only valid when reflow is not needed.
1494
   * @note You should only call this on frames with a WM that's parallel to aWM.
1495
   * @param aWM the writing-mode of the alignment context
1496
   * @param aBaseline the baseline offset, only valid if the method returns true
1497
   */
1498
  virtual bool GetNaturalBaselineBOffset(mozilla::WritingMode aWM,
1499
                                         BaselineSharingGroup aBaselineGroup,
1500
                                         nscoord*             aBaseline) const {
1501
    return false;
1502
  }
1503
1504
  /**
1505
   * Get the position of the baseline on which the caret needs to be placed,
1506
   * relative to the top of the frame.  This is mostly needed for frames
1507
   * which return a baseline from GetBaseline which is not useful for
1508
   * caret positioning.
1509
   */
1510
  virtual nscoord GetCaretBaseline() const {
1511
    return GetLogicalBaseline(GetWritingMode());
1512
  }
1513
1514
  ///////////////////////////////////////////////////////////////////////////////
1515
  // The public visibility API.
1516
  ///////////////////////////////////////////////////////////////////////////////
1517
1518
  /// @return true if we're tracking visibility for this frame.
1519
  bool TrackingVisibility() const
1520
  {
1521
    return bool(GetStateBits() & NS_FRAME_VISIBILITY_IS_TRACKED);
1522
  }
1523
1524
  /// @return the visibility state of this frame. See the Visibility enum
1525
  /// for the possible return values and their meanings.
1526
  Visibility GetVisibility() const;
1527
1528
  /// Update the visibility state of this frame synchronously.
1529
  /// XXX(seth): Avoid using this method; we should be relying on the refresh
1530
  /// driver for visibility updates. This method, which replaces
1531
  /// nsLayoutUtils::UpdateApproximateFrameVisibility(), exists purely as a
1532
  /// temporary measure to avoid changing behavior during the transition from
1533
  /// the old image visibility code.
1534
  void UpdateVisibilitySynchronously();
1535
1536
  // A frame property which stores the visibility state of this frame. Right
1537
  // now that consists of an approximate visibility counter represented as a
1538
  // uint32_t. When the visibility of this frame is not being tracked, this
1539
  // property is absent.
1540
  NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(VisibilityStateProperty, uint32_t);
1541
1542
protected:
1543
1544
  /**
1545
   * Subclasses can call this method to enable visibility tracking for this frame.
1546
   *
1547
   * If visibility tracking was previously disabled, this will schedule an
1548
   * update an asynchronous update of visibility.
1549
   */
1550
  void EnableVisibilityTracking();
1551
1552
  /**
1553
   * Subclasses can call this method to disable visibility tracking for this frame.
1554
   *
1555
   * Note that if visibility tracking was previously enabled, disabling visibility
1556
   * tracking will cause a synchronous call to OnVisibilityChange().
1557
   */
1558
  void DisableVisibilityTracking();
1559
1560
  /**
1561
   * Called when a frame transitions between visibility states (for example,
1562
   * from nonvisible to visible, or from visible to nonvisible).
1563
   *
1564
   * @param aNewVisibility    The new visibility state.
1565
   * @param aNonvisibleAction A requested action if the frame has become
1566
   *                          nonvisible. If Nothing(), no action is
1567
   *                          requested. If DISCARD_IMAGES is specified, the
1568
   *                          frame is requested to ask any images it's
1569
   *                          associated with to discard their surfaces if
1570
   *                          possible.
1571
   *
1572
   * Subclasses which override this method should call their parent class's
1573
   * implementation.
1574
   */
1575
  virtual void OnVisibilityChange(Visibility aNewVisibility,
1576
                                  const Maybe<OnNonvisible>& aNonvisibleAction = Nothing());
1577
1578
public:
1579
1580
  ///////////////////////////////////////////////////////////////////////////////
1581
  // Internal implementation for the approximate frame visibility API.
1582
  ///////////////////////////////////////////////////////////////////////////////
1583
1584
  /**
1585
   * We track the approximate visibility of frames using a counter; if it's
1586
   * non-zero, then the frame is considered visible. Using a counter allows us
1587
   * to account for situations where the frame may be visible in more than one
1588
   * place (for example, via -moz-element), and it simplifies the
1589
   * implementation of our approximate visibility tracking algorithms.
1590
   *
1591
   * @param aNonvisibleAction A requested action if the frame has become
1592
   *                          nonvisible. If Nothing(), no action is
1593
   *                          requested. If DISCARD_IMAGES is specified, the
1594
   *                          frame is requested to ask any images it's
1595
   *                          associated with to discard their surfaces if
1596
   *                          possible.
1597
   */
1598
  void DecApproximateVisibleCount(const Maybe<OnNonvisible>& aNonvisibleAction = Nothing());
1599
  void IncApproximateVisibleCount();
1600
1601
1602
  /**
1603
   * Get the specified child list.
1604
   *
1605
   * @param   aListID identifies the requested child list.
1606
   * @return  the child list.  If the requested list is unsupported by this
1607
   *          frame type, an empty list will be returned.
1608
   */
1609
  virtual const nsFrameList& GetChildList(ChildListID aListID) const = 0;
1610
0
  const nsFrameList& PrincipalChildList() const { return GetChildList(kPrincipalList); }
1611
  virtual void GetChildLists(nsTArray<ChildList>* aLists) const = 0;
1612
1613
  /**
1614
   * Gets the child lists for this frame, including
1615
   * ones belong to a child document.
1616
   */
1617
  void GetCrossDocChildLists(nsTArray<ChildList>* aLists);
1618
1619
  // The individual concrete child lists.
1620
  static const ChildListID kPrincipalList = mozilla::layout::kPrincipalList;
1621
  static const ChildListID kAbsoluteList = mozilla::layout::kAbsoluteList;
1622
  static const ChildListID kBulletList = mozilla::layout::kBulletList;
1623
  static const ChildListID kCaptionList = mozilla::layout::kCaptionList;
1624
  static const ChildListID kColGroupList = mozilla::layout::kColGroupList;
1625
  static const ChildListID kExcessOverflowContainersList = mozilla::layout::kExcessOverflowContainersList;
1626
  static const ChildListID kFixedList = mozilla::layout::kFixedList;
1627
  static const ChildListID kFloatList = mozilla::layout::kFloatList;
1628
  static const ChildListID kOverflowContainersList = mozilla::layout::kOverflowContainersList;
1629
  static const ChildListID kOverflowList = mozilla::layout::kOverflowList;
1630
  static const ChildListID kOverflowOutOfFlowList = mozilla::layout::kOverflowOutOfFlowList;
1631
  static const ChildListID kPopupList = mozilla::layout::kPopupList;
1632
  static const ChildListID kPushedFloatsList = mozilla::layout::kPushedFloatsList;
1633
  static const ChildListID kSelectPopupList = mozilla::layout::kSelectPopupList;
1634
  static const ChildListID kBackdropList = mozilla::layout::kBackdropList;
1635
  // A special alias for kPrincipalList that do not request reflow.
1636
  static const ChildListID kNoReflowPrincipalList = mozilla::layout::kNoReflowPrincipalList;
1637
1638
  /**
1639
   * Child frames are linked together in a doubly-linked list
1640
   */
1641
0
  nsIFrame* GetNextSibling() const { return mNextSibling; }
1642
  void SetNextSibling(nsIFrame* aNextSibling) {
1643
    NS_ASSERTION(this != aNextSibling, "Creating a circular frame list, this is very bad.");
1644
    if (mNextSibling && mNextSibling->GetPrevSibling() == this) {
1645
      mNextSibling->mPrevSibling = nullptr;
1646
    }
1647
    mNextSibling = aNextSibling;
1648
    if (mNextSibling) {
1649
      mNextSibling->mPrevSibling = this;
1650
    }
1651
  }
1652
1653
0
  nsIFrame* GetPrevSibling() const { return mPrevSibling; }
1654
1655
  /**
1656
   * Builds the display lists for the content represented by this frame
1657
   * and its descendants. The background+borders of this element must
1658
   * be added first, before any other content.
1659
   *
1660
   * This should only be called by methods in nsFrame. Instead of calling this
1661
   * directly, call either BuildDisplayListForStackingContext or
1662
   * BuildDisplayListForChild.
1663
   *
1664
   * See nsDisplayList.h for more information about display lists.
1665
   */
1666
  virtual void BuildDisplayList(nsDisplayListBuilder*   aBuilder,
1667
                                const nsDisplayListSet& aLists) {}
1668
  /**
1669
   * Displays the caret onto the given display list builder. The caret is
1670
   * painted on top of the rest of the display list items.
1671
   */
1672
  void DisplayCaret(nsDisplayListBuilder* aBuilder,
1673
                    nsDisplayList*        aList);
1674
1675
  /**
1676
   * Get the preferred caret color at the offset.
1677
   *
1678
   * @param aOffset is offset of the content.
1679
   */
1680
  virtual nscolor GetCaretColorAt(int32_t aOffset);
1681
1682
1683
0
  bool IsThemed(nsITheme::Transparency* aTransparencyState = nullptr) const {
1684
0
    return IsThemed(StyleDisplay(), aTransparencyState);
1685
0
  }
1686
  bool IsThemed(const nsStyleDisplay* aDisp,
1687
0
                nsITheme::Transparency* aTransparencyState = nullptr) const {
1688
0
    if (!aDisp->HasAppearance()) {
1689
0
      return false;
1690
0
    }
1691
0
    nsIFrame* mutable_this = const_cast<nsIFrame*>(this);
1692
0
    nsPresContext* pc = PresContext();
1693
0
    nsITheme* theme = pc->GetTheme();
1694
0
    if(!theme ||
1695
0
       !theme->ThemeSupportsWidget(pc, mutable_this, aDisp->mAppearance))
1696
0
      return false;
1697
0
    if (aTransparencyState) {
1698
0
      *aTransparencyState =
1699
0
        theme->GetWidgetTransparency(mutable_this, aDisp->mAppearance);
1700
0
    }
1701
0
    return true;
1702
0
  }
1703
1704
  /**
1705
   * Builds a display list for the content represented by this frame,
1706
   * treating this frame as the root of a stacking context.
1707
   * Optionally sets aCreatedContainerItem to true if we created a
1708
   * single container display item for the stacking context, and no
1709
   * other wrapping items are needed.
1710
   */
1711
  void BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
1712
                                          nsDisplayList*        aList,
1713
                                          bool*                 aCreatedContainerItem = nullptr);
1714
1715
  enum {
1716
    DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT = 0x01,
1717
    DISPLAY_CHILD_FORCE_STACKING_CONTEXT = 0x02,
1718
    DISPLAY_CHILD_INLINE = 0x04
1719
  };
1720
  /**
1721
   * Adjusts aDirtyRect for the child's offset, checks that the dirty rect
1722
   * actually intersects the child (or its descendants), calls BuildDisplayList
1723
   * on the child if necessary, and puts things in the right lists if the child
1724
   * is positioned.
1725
   *
1726
   * @param aFlags combination of DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT,
1727
   *    DISPLAY_CHILD_FORCE_STACKING_CONTEXT and DISPLAY_CHILD_INLINE
1728
   */
1729
  void BuildDisplayListForChild(nsDisplayListBuilder*   aBuilder,
1730
                                nsIFrame*               aChild,
1731
                                const nsDisplayListSet& aLists,
1732
                                uint32_t                aFlags = 0);
1733
1734
  bool RefusedAsyncAnimation() const
1735
0
  {
1736
0
    return GetProperty(RefusedAsyncAnimationProperty());
1737
0
  }
1738
1739
  /**
1740
   * Returns true if this frame is transformed (e.g. has CSS or SVG transforms)
1741
   * or if its parent is an SVG frame that has children-only transforms (e.g.
1742
   * an SVG viewBox attribute) or if its transform-style is preserve-3d or
1743
   * the frame has transform animations.
1744
   *
1745
   * @param aStyleDisplay:  If the caller has this->StyleDisplay(), providing
1746
   *   it here will improve performance.
1747
   */
1748
  bool IsTransformed(const nsStyleDisplay* aStyleDisplay) const;
1749
0
  bool IsTransformed() const {
1750
0
    return IsTransformed(StyleDisplay());
1751
0
  }
1752
1753
  /**
1754
   * Same as IsTransformed, except that it doesn't take SVG transforms
1755
   * into account.
1756
   */
1757
  bool IsCSSTransformed(const nsStyleDisplay* aStyleDisplay) const;
1758
1759
  /**
1760
   * True if this frame has any animation of transform in effect.
1761
   *
1762
   */
1763
  bool HasAnimationOfTransform() const;
1764
1765
  /**
1766
   * Returns true if the frame is translucent or the frame has opacity
1767
   * animations for the purposes of creating a stacking context.
1768
   *
1769
   * @param aEffectSet: This function may need to look up EffectSet property.
1770
   *   If a caller already have one, pass it in can save property look up
1771
   *   time; otherwise, just left it as nullptr.
1772
   */
1773
  bool HasOpacity(mozilla::EffectSet* aEffectSet = nullptr) const
1774
  {
1775
    return HasOpacityInternal(1.0f, aEffectSet);
1776
  }
1777
  /**
1778
   * Returns true if the frame is translucent for display purposes.
1779
   *
1780
   * @param aEffectSet: This function may need to look up EffectSet property.
1781
   *   If a caller already have one, pass it in can save property look up
1782
   *   time; otherwise, just left it as nullptr.
1783
   */
1784
  bool HasVisualOpacity(mozilla::EffectSet* aEffectSet = nullptr) const
1785
  {
1786
    // Treat an opacity value of 0.99 and above as opaque.  This is an
1787
    // optimization aimed at Web content which use opacity:0.99 as a hint for
1788
    // creating a stacking context only.
1789
    return HasOpacityInternal(0.99f, aEffectSet);
1790
  }
1791
1792
   /**
1793
   * Return true if this frame might be using a transform getter.
1794
   */
1795
  virtual bool HasTransformGetter() const { return false; }
1796
1797
  /**
1798
   * Returns true if this frame is an SVG frame that has SVG transforms applied
1799
   * to it, or if its parent frame is an SVG frame that has children-only
1800
   * transforms (e.g. an SVG viewBox attribute).
1801
   * If aOwnTransforms is non-null and the frame has its own SVG transforms,
1802
   * aOwnTransforms will be set to these transforms. If aFromParentTransforms
1803
   * is non-null and the frame has an SVG parent with children-only transforms,
1804
   * then aFromParentTransforms will be set to these transforms.
1805
   */
1806
  virtual bool IsSVGTransformed(Matrix *aOwnTransforms = nullptr,
1807
                                Matrix *aFromParentTransforms = nullptr) const;
1808
1809
  /**
1810
   * Returns whether this frame will attempt to extend the 3d transforms of its
1811
   * children. This requires transform-style: preserve-3d, as well as no clipping
1812
   * or svg effects.
1813
   *
1814
   * @param aStyleDisplay:  If the caller has this->StyleDisplay(), providing
1815
   *   it here will improve performance.
1816
   *
1817
   * @param aEffectSet: This function may need to look up EffectSet property.
1818
   *   If a caller already have one, pass it in can save property look up
1819
   *   time; otherwise, just left it as nullptr.
1820
   */
1821
  bool Extend3DContext(const nsStyleDisplay* aStyleDisplay,
1822
                       mozilla::EffectSet* aEffectSet = nullptr) const;
1823
  bool Extend3DContext(mozilla::EffectSet* aEffectSet = nullptr) const {
1824
    return Extend3DContext(StyleDisplay(), aEffectSet);
1825
  }
1826
1827
  /**
1828
   * Returns whether this frame has a parent that Extend3DContext() and has
1829
   * its own transform (or hidden backface) to be combined with the parent's
1830
   * transform.
1831
   *
1832
   * @param aStyleDisplay:  If the caller has this->StyleDisplay(), providing
1833
   *   it here will improve performance.
1834
   */
1835
  bool Combines3DTransformWithAncestors(const nsStyleDisplay* aStyleDisplay) const;
1836
0
  bool Combines3DTransformWithAncestors() const {
1837
0
    return Combines3DTransformWithAncestors(StyleDisplay());
1838
0
  }
1839
1840
  /**
1841
   * Returns whether this frame has a hidden backface and has a parent that
1842
   * Extend3DContext(). This is useful because in some cases the hidden
1843
   * backface can safely be ignored if it could not be visible anyway.
1844
   *
1845
   */
1846
  bool In3DContextAndBackfaceIsHidden() const;
1847
1848
  bool IsPreserve3DLeaf(const nsStyleDisplay* aStyleDisplay,
1849
                        mozilla::EffectSet* aEffectSet = nullptr) const {
1850
    return Combines3DTransformWithAncestors(aStyleDisplay) &&
1851
           !Extend3DContext(aStyleDisplay, aEffectSet);
1852
  }
1853
  bool IsPreserve3DLeaf(mozilla::EffectSet* aEffectSet = nullptr) const {
1854
    return IsPreserve3DLeaf(StyleDisplay(), aEffectSet);
1855
  }
1856
1857
  bool HasPerspective(const nsStyleDisplay* aStyleDisplay) const;
1858
  bool HasPerspective() const {
1859
    return HasPerspective(StyleDisplay());
1860
  }
1861
1862
  bool ChildrenHavePerspective(const nsStyleDisplay* aStyleDisplay) const;
1863
  bool ChildrenHavePerspective() const {
1864
    return ChildrenHavePerspective(StyleDisplay());
1865
  }
1866
1867
  /**
1868
   * Includes the overflow area of all descendants that participate in the current
1869
   * 3d context into aOverflowAreas.
1870
   */
1871
  void ComputePreserve3DChildrenOverflow(nsOverflowAreas& aOverflowAreas);
1872
1873
  void RecomputePerspectiveChildrenOverflow(const nsIFrame* aStartFrame);
1874
1875
  /**
1876
   * Returns the number of ancestors between this and the root of our frame tree
1877
   */
1878
  uint32_t GetDepthInFrameTree() const;
1879
1880
  /**
1881
   * Event handling of GUI events.
1882
   *
1883
   * @param   aEvent event structure describing the type of event and rge widget
1884
   *            where the event originated
1885
   *          The |point| member of this is in the coordinate system of the
1886
   *          view returned by GetOffsetFromView.
1887
   * @param   aEventStatus a return value indicating whether the event was handled
1888
   *            and whether default processing should be done
1889
   *
1890
   * XXX From a frame's perspective it's unclear what the effect of the event status
1891
   * is. Does it cause the event to continue propagating through the frame hierarchy
1892
   * or is it just returned to the widgets?
1893
   *
1894
   * @see     WidgetGUIEvent
1895
   * @see     nsEventStatus
1896
   */
1897
  virtual nsresult  HandleEvent(nsPresContext* aPresContext,
1898
                                mozilla::WidgetGUIEvent* aEvent,
1899
                                nsEventStatus* aEventStatus) = 0;
1900
1901
  virtual nsresult  GetContentForEvent(mozilla::WidgetEvent* aEvent,
1902
                                       nsIContent** aContent) = 0;
1903
1904
  // This structure keeps track of the content node and offsets associated with
1905
  // a point; there is a primary and a secondary offset associated with any
1906
  // point.  The primary and secondary offsets differ when the point is over a
1907
  // non-text object.  The primary offset is the expected position of the
1908
  // cursor calculated from a point; the secondary offset, when it is different,
1909
  // indicates that the point is in the boundaries of some selectable object.
1910
  // Note that the primary offset can be after the secondary offset; for places
1911
  // that need the beginning and end of the object, the StartOffset and
1912
  // EndOffset helpers can be used.
1913
  struct MOZ_STACK_CLASS ContentOffsets
1914
  {
1915
    ContentOffsets() : offset(0)
1916
                     , secondaryOffset(0)
1917
                     , associate(mozilla::CARET_ASSOCIATE_BEFORE) {}
1918
    bool IsNull() { return !content; }
1919
    // Helpers for places that need the ends of the offsets and expect them in
1920
    // numerical order, as opposed to wanting the primary and secondary offsets
1921
    int32_t StartOffset() { return std::min(offset, secondaryOffset); }
1922
    int32_t EndOffset() { return std::max(offset, secondaryOffset); }
1923
1924
    nsCOMPtr<nsIContent> content;
1925
    int32_t offset;
1926
    int32_t secondaryOffset;
1927
    // This value indicates whether the associated content is before or after
1928
    // the offset; the most visible use is to allow the caret to know which line
1929
    // to display on.
1930
    mozilla::CaretAssociationHint associate;
1931
  };
1932
  enum {
1933
    IGNORE_SELECTION_STYLE = 0x01,
1934
    // Treat visibility:hidden frames as non-selectable
1935
    SKIP_HIDDEN = 0x02
1936
  };
1937
  /**
1938
   * This function calculates the content offsets for selection relative to
1939
   * a point.  Note that this should generally only be callled on the event
1940
   * frame associated with an event because this function does not account
1941
   * for frame lists other than the primary one.
1942
   * @param aPoint point relative to this frame
1943
   */
1944
  ContentOffsets GetContentOffsetsFromPoint(const nsPoint& aPoint,
1945
                                            uint32_t aFlags = 0);
1946
1947
  virtual ContentOffsets GetContentOffsetsFromPointExternal(const nsPoint& aPoint,
1948
                                                            uint32_t aFlags = 0)
1949
  { return GetContentOffsetsFromPoint(aPoint, aFlags); }
1950
1951
  /**
1952
   * Ensure that aImage gets notifed when the underlying image request loads
1953
   * or animates.
1954
   */
1955
  void AssociateImage(const nsStyleImage& aImage, nsPresContext* aPresContext,
1956
                      uint32_t aImageLoaderFlags);
1957
1958
  /**
1959
   * This structure holds information about a cursor. mContainer represents a
1960
   * loaded image that should be preferred. If it is not possible to use it, or
1961
   * if it is null, mCursor should be used.
1962
   */
1963
  struct MOZ_STACK_CLASS Cursor {
1964
    nsCOMPtr<imgIContainer> mContainer;
1965
    int32_t mCursor = NS_STYLE_CURSOR_AUTO;
1966
    bool mHaveHotspot = false;
1967
    bool mLoading = false;
1968
    float mHotspotX = 0.0f, mHotspotY = 0.0f;
1969
  };
1970
  /**
1971
   * Get the cursor for a given frame.
1972
   */
1973
  virtual nsresult  GetCursor(const nsPoint&  aPoint,
1974
                              Cursor&         aCursor) = 0;
1975
1976
  /**
1977
   * Get a point (in the frame's coordinate space) given an offset into
1978
   * the content. This point should be on the baseline of text with
1979
   * the correct horizontal offset
1980
   */
1981
  virtual nsresult  GetPointFromOffset(int32_t                  inOffset,
1982
                                       nsPoint*                 outPoint) = 0;
1983
1984
  /**
1985
   * Get a list of character rects in a given range.
1986
   * This is similar version of GetPointFromOffset.
1987
   */
1988
  virtual nsresult  GetCharacterRectsInRange(int32_t aInOffset,
1989
                                             int32_t aLength,
1990
                                             nsTArray<nsRect>& aRects) = 0;
1991
1992
  /**
1993
   * Get the child frame of this frame which contains the given
1994
   * content offset. outChildFrame may be this frame, or nullptr on return.
1995
   * outContentOffset returns the content offset relative to the start
1996
   * of the returned node. You can also pass a hint which tells the method
1997
   * to stick to the end of the first found frame or the beginning of the
1998
   * next in case the offset falls on a boundary.
1999
   */
2000
  virtual nsresult GetChildFrameContainingOffset(int32_t    inContentOffset,
2001
                                                 bool       inHint,//false stick left
2002
                                                 int32_t*   outFrameContentOffset,
2003
                                                 nsIFrame** outChildFrame) = 0;
2004
2005
 /**
2006
   * Get the current frame-state value for this frame. aResult is
2007
   * filled in with the state bits.
2008
   */
2009
0
  nsFrameState GetStateBits() const { return mState; }
2010
2011
  /**
2012
   * Update the current frame-state value for this frame.
2013
   */
2014
0
  void AddStateBits(nsFrameState aBits) { mState |= aBits; }
2015
  void RemoveStateBits(nsFrameState aBits) { mState &= ~aBits; }
2016
  void AddOrRemoveStateBits(nsFrameState aBits, bool aVal) {
2017
    aVal ? AddStateBits(aBits) : RemoveStateBits(aBits);
2018
  }
2019
2020
  /**
2021
   * Checks if the current frame-state includes all of the listed bits
2022
   */
2023
  bool HasAllStateBits(nsFrameState aBits) const
2024
  {
2025
    return (mState & aBits) == aBits;
2026
  }
2027
2028
  /**
2029
   * Checks if the current frame-state includes any of the listed bits
2030
   */
2031
  bool HasAnyStateBits(nsFrameState aBits) const
2032
0
  {
2033
0
    return mState & aBits;
2034
0
  }
2035
2036
  /**
2037
   * Return true if this frame is the primary frame for mContent.
2038
   */
2039
  bool IsPrimaryFrame() const { return mIsPrimaryFrame; }
2040
2041
  void SetIsPrimaryFrame(bool aIsPrimary) { mIsPrimaryFrame = aIsPrimary; }
2042
2043
  /**
2044
   * This call is invoked on the primary frame for a character data content
2045
   * node, when it is changed in the content tree.
2046
   */
2047
  virtual nsresult  CharacterDataChanged(const CharacterDataChangeInfo&) = 0;
2048
2049
  /**
2050
   * This call is invoked when the value of a content objects's attribute
2051
   * is changed.
2052
   * The first frame that maps that content is asked to deal
2053
   * with the change by doing whatever is appropriate.
2054
   *
2055
   * @param aNameSpaceID the namespace of the attribute
2056
   * @param aAttribute the atom name of the attribute
2057
   * @param aModType Whether or not the attribute was added, changed, or removed.
2058
   *   The constants are defined in MutationEvent.webidl.
2059
   */
2060
  virtual nsresult  AttributeChanged(int32_t         aNameSpaceID,
2061
                                     nsAtom*        aAttribute,
2062
                                     int32_t         aModType) = 0;
2063
2064
  /**
2065
   * When the content states of a content object change, this method is invoked
2066
   * on the primary frame of that content object.
2067
   *
2068
   * @param aStates the changed states
2069
   */
2070
  virtual void ContentStatesChanged(mozilla::EventStates aStates);
2071
2072
  /**
2073
   * Return how your frame can be split.
2074
   */
2075
  virtual nsSplittableType GetSplittableType() const = 0;
2076
2077
  /**
2078
   * Continuation member functions
2079
   */
2080
  virtual nsIFrame* GetPrevContinuation() const = 0;
2081
  virtual void SetPrevContinuation(nsIFrame*) = 0;
2082
  virtual nsIFrame* GetNextContinuation() const = 0;
2083
  virtual void SetNextContinuation(nsIFrame*) = 0;
2084
  virtual nsIFrame* FirstContinuation() const {
2085
    return const_cast<nsIFrame*>(this);
2086
  }
2087
  virtual nsIFrame* LastContinuation() const {
2088
    return const_cast<nsIFrame*>(this);
2089
  }
2090
2091
  /**
2092
   * GetTailContinuation gets the last non-overflow-container continuation
2093
   * in the continuation chain, i.e. where the next sibling element
2094
   * should attach).
2095
   */
2096
  nsIFrame* GetTailContinuation();
2097
2098
  /**
2099
   * Flow member functions
2100
   */
2101
  virtual nsIFrame* GetPrevInFlowVirtual() const = 0;
2102
  nsIFrame* GetPrevInFlow() const { return GetPrevInFlowVirtual(); }
2103
  virtual void SetPrevInFlow(nsIFrame*) = 0;
2104
2105
  virtual nsIFrame* GetNextInFlowVirtual() const = 0;
2106
  nsIFrame* GetNextInFlow() const { return GetNextInFlowVirtual(); }
2107
  virtual void SetNextInFlow(nsIFrame*) = 0;
2108
2109
  /**
2110
   * Return the first frame in our current flow.
2111
   */
2112
  virtual nsIFrame* FirstInFlow() const {
2113
    return const_cast<nsIFrame*>(this);
2114
  }
2115
2116
  /**
2117
   * Return the last frame in our current flow.
2118
   */
2119
  virtual nsIFrame* LastInFlow() const {
2120
    return const_cast<nsIFrame*>(this);
2121
  }
2122
2123
  /**
2124
   * Note: "width" in the names and comments on the following methods
2125
   * means inline-size, which could be height in vertical layout
2126
   */
2127
2128
  /**
2129
   * Mark any stored intrinsic width information as dirty (requiring
2130
   * re-calculation).  Note that this should generally not be called
2131
   * directly; nsPresShell::FrameNeedsReflow will call it instead.
2132
   */
2133
  virtual void MarkIntrinsicISizesDirty() = 0;
2134
2135
  /**
2136
   * Get the min-content intrinsic inline size of the frame.  This must be
2137
   * less than or equal to the max-content intrinsic inline size.
2138
   *
2139
   * This is *not* affected by the CSS 'min-width', 'width', and
2140
   * 'max-width' properties on this frame, but it is affected by the
2141
   * values of those properties on this frame's descendants.  (It may be
2142
   * called during computation of the values of those properties, so it
2143
   * cannot depend on any values in the nsStylePosition for this frame.)
2144
   *
2145
   * The value returned should **NOT** include the space required for
2146
   * padding and border.
2147
   *
2148
   * Note that many frames will cache the result of this function call
2149
   * unless MarkIntrinsicISizesDirty is called.
2150
   *
2151
   * It is not acceptable for a frame to mark itself dirty when this
2152
   * method is called.
2153
   *
2154
   * This method must not return a negative value.
2155
   */
2156
  virtual nscoord GetMinISize(gfxContext *aRenderingContext) = 0;
2157
2158
  /**
2159
   * Get the max-content intrinsic inline size of the frame.  This must be
2160
   * greater than or equal to the min-content intrinsic inline size.
2161
   *
2162
   * Otherwise, all the comments for |GetMinISize| above apply.
2163
   */
2164
  virtual nscoord GetPrefISize(gfxContext *aRenderingContext) = 0;
2165
2166
  /**
2167
   * |InlineIntrinsicISize| represents the intrinsic width information
2168
   * in inline layout.  Code that determines the intrinsic width of a
2169
   * region of inline layout accumulates the result into this structure.
2170
   * This pattern is needed because we need to maintain state
2171
   * information about whitespace (for both collapsing and trimming).
2172
   */
2173
  struct InlineIntrinsicISizeData {
2174
    InlineIntrinsicISizeData()
2175
      : mLine(nullptr)
2176
      , mLineContainer(nullptr)
2177
      , mPrevLines(0)
2178
      , mCurrentLine(0)
2179
      , mTrailingWhitespace(0)
2180
      , mSkipWhitespace(true)
2181
    {}
2182
2183
    // The line. This may be null if the inlines are not associated with
2184
    // a block or if we just don't know the line.
2185
    const nsLineList_iterator* mLine;
2186
2187
    // The line container. Private, to ensure we always use SetLineContainer
2188
    // to update it.
2189
    //
2190
    // Note that nsContainerFrame::DoInlineIntrinsicISize will clear the
2191
    // |mLine| and |mLineContainer| fields when following a next-in-flow link,
2192
    // so we must not assume these can always be dereferenced.
2193
  private:
2194
    nsIFrame* mLineContainer;
2195
2196
    // Setter and getter for the lineContainer field:
2197
  public:
2198
    void SetLineContainer(nsIFrame* aLineContainer)
2199
    {
2200
      mLineContainer = aLineContainer;
2201
    }
2202
    nsIFrame* LineContainer() const { return mLineContainer; }
2203
2204
    // The maximum intrinsic width for all previous lines.
2205
    nscoord mPrevLines;
2206
2207
    // The maximum intrinsic width for the current line.  At a line
2208
    // break (mandatory for preferred width; allowed for minimum width),
2209
    // the caller should call |Break()|.
2210
    nscoord mCurrentLine;
2211
2212
    // This contains the width of the trimmable whitespace at the end of
2213
    // |mCurrentLine|; it is zero if there is no such whitespace.
2214
    nscoord mTrailingWhitespace;
2215
2216
    // True if initial collapsable whitespace should be skipped.  This
2217
    // should be true at the beginning of a block, after hard breaks
2218
    // and when the last text ended with whitespace.
2219
    bool mSkipWhitespace;
2220
2221
    // Floats encountered in the lines.
2222
    class FloatInfo {
2223
    public:
2224
      FloatInfo(const nsIFrame* aFrame, nscoord aWidth)
2225
        : mFrame(aFrame), mWidth(aWidth)
2226
      { }
2227
      const nsIFrame* Frame() const { return mFrame; }
2228
      nscoord         Width() const { return mWidth; }
2229
2230
    private:
2231
      const nsIFrame* mFrame;
2232
      nscoord         mWidth;
2233
    };
2234
2235
    nsTArray<FloatInfo> mFloats;
2236
  };
2237
2238
  struct InlineMinISizeData : public InlineIntrinsicISizeData {
2239
    InlineMinISizeData()
2240
      : mAtStartOfLine(true)
2241
    {}
2242
2243
    // The default implementation for nsIFrame::AddInlineMinISize.
2244
    void DefaultAddInlineMinISize(nsIFrame* aFrame,
2245
                                  nscoord   aISize,
2246
                                  bool      aAllowBreak = true);
2247
2248
    // We need to distinguish forced and optional breaks for cases where the
2249
    // current line total is negative.  When it is, we need to ignore
2250
    // optional breaks to prevent min-width from ending up bigger than
2251
    // pref-width.
2252
    void ForceBreak();
2253
2254
    // If the break here is actually taken, aHyphenWidth must be added to the
2255
    // width of the current line.
2256
    void OptionallyBreak(nscoord aHyphenWidth = 0);
2257
2258
    // Whether we're currently at the start of the line.  If we are, we
2259
    // can't break (for example, between the text-indent and the first
2260
    // word).
2261
    bool mAtStartOfLine;
2262
  };
2263
2264
  struct InlinePrefISizeData : public InlineIntrinsicISizeData {
2265
    typedef mozilla::StyleClear StyleClear;
2266
2267
    InlinePrefISizeData()
2268
      : mLineIsEmpty(true)
2269
    {}
2270
2271
    /**
2272
     * Finish the current line and start a new line.
2273
     *
2274
     * @param aBreakType controls whether isize of floats are considered
2275
     * and what floats are kept for the next line:
2276
     *  * |None| skips handling floats, which means no floats are
2277
     *    removed, and isizes of floats are not considered either.
2278
     *  * |Both| takes floats into consideration when computing isize
2279
     *    of the current line, and removes all floats after that.
2280
     *  * |Left| and |Right| do the same as |Both| except that they only
2281
     *    remove floats on the given side, and any floats on the other
2282
     *    side that are prior to a float on the given side that has a
2283
     *    'clear' property that clears them.
2284
     * All other values of StyleClear must be converted to the four
2285
     * physical values above for this function.
2286
     */
2287
    void ForceBreak(StyleClear aBreakType = StyleClear::Both);
2288
2289
    // The default implementation for nsIFrame::AddInlinePrefISize.
2290
    void DefaultAddInlinePrefISize(nscoord aISize);
2291
2292
    // True if the current line contains nothing other than placeholders.
2293
    bool mLineIsEmpty;
2294
  };
2295
2296
  /**
2297
   * Add the intrinsic minimum width of a frame in a way suitable for
2298
   * use in inline layout to an |InlineIntrinsicISizeData| object that
2299
   * represents the intrinsic width information of all the previous
2300
   * frames in the inline layout region.
2301
   *
2302
   * All *allowed* breakpoints within the frame determine what counts as
2303
   * a line for the |InlineIntrinsicISizeData|.  This means that
2304
   * |aData->mTrailingWhitespace| will always be zero (unlike for
2305
   * AddInlinePrefISize).
2306
   *
2307
   * All the comments for |GetMinISize| apply, except that this function
2308
   * is responsible for adding padding, border, and margin and for
2309
   * considering the effects of 'width', 'min-width', and 'max-width'.
2310
   *
2311
   * This may be called on any frame.  Frames that do not participate in
2312
   * line breaking can inherit the default implementation on nsFrame,
2313
   * which calls |GetMinISize|.
2314
   */
2315
  virtual void
2316
  AddInlineMinISize(gfxContext *aRenderingContext,
2317
                    InlineMinISizeData *aData) = 0;
2318
2319
  /**
2320
   * Add the intrinsic preferred width of a frame in a way suitable for
2321
   * use in inline layout to an |InlineIntrinsicISizeData| object that
2322
   * represents the intrinsic width information of all the previous
2323
   * frames in the inline layout region.
2324
   *
2325
   * All the comments for |AddInlineMinISize| and |GetPrefISize| apply,
2326
   * except that this fills in an |InlineIntrinsicISizeData| structure
2327
   * based on using all *mandatory* breakpoints within the frame.
2328
   */
2329
  virtual void
2330
  AddInlinePrefISize(gfxContext *aRenderingContext,
2331
                     InlinePrefISizeData *aData) = 0;
2332
2333
  /**
2334
   * Return the horizontal components of padding, border, and margin
2335
   * that contribute to the intrinsic width that applies to the parent.
2336
   * @param aPercentageBasis the percentage basis to use for padding/margin -
2337
   *   i.e. the Containing Block's inline-size
2338
   */
2339
  struct IntrinsicISizeOffsetData {
2340
    nscoord hPadding, hBorder, hMargin;
2341
2342
    IntrinsicISizeOffsetData()
2343
      : hPadding(0), hBorder(0), hMargin(0)
2344
    {}
2345
  };
2346
  virtual IntrinsicISizeOffsetData
2347
  IntrinsicISizeOffsets(nscoord aPercentageBasis = NS_UNCONSTRAINEDSIZE) = 0;
2348
2349
  /**
2350
   * Return the bsize components of padding, border, and margin
2351
   * that contribute to the intrinsic width that applies to the parent.
2352
   * @param aPercentageBasis the percentage basis to use for padding/margin -
2353
   *   i.e. the Containing Block's inline-size
2354
   */
2355
  IntrinsicISizeOffsetData
2356
  IntrinsicBSizeOffsets(nscoord aPercentageBasis = NS_UNCONSTRAINEDSIZE);
2357
2358
  virtual mozilla::IntrinsicSize GetIntrinsicSize() = 0;
2359
2360
  /**
2361
   * Get the intrinsic ratio of this element, or nsSize(0,0) if it has
2362
   * no intrinsic ratio.  The intrinsic ratio is the ratio of the
2363
   * height/width of a box with an intrinsic size or the intrinsic
2364
   * aspect ratio of a scalable vector image without an intrinsic size.
2365
   *
2366
   * Either one of the sides may be zero, indicating a zero or infinite
2367
   * ratio.
2368
   */
2369
  virtual nsSize GetIntrinsicRatio() = 0;
2370
2371
  /**
2372
   * Bit-flags to pass to ComputeSize in |aFlags| parameter.
2373
   */
2374
  enum ComputeSizeFlags {
2375
    eDefault =           0,
2376
    /**
2377
     * Set if the frame is in a context where non-replaced blocks should
2378
     * shrink-wrap (e.g., it's floating, absolutely positioned, or
2379
     * inline-block).
2380
     */
2381
    eShrinkWrap =        1 << 0,
2382
    /**
2383
     * Set if we'd like to compute our 'auto' bsize, regardless of our actual
2384
     * corresponding computed value. (e.g. to get an intrinsic height for flex
2385
     * items with "min-height: auto" to use during flexbox layout.)
2386
     */
2387
    eUseAutoBSize =      1 << 1,
2388
    /**
2389
     * Indicates that we should clamp the margin-box min-size to the given CB
2390
     * size.  This is used for implementing the grid area clamping here:
2391
     * https://drafts.csswg.org/css-grid/#min-size-auto
2392
     */
2393
    eIClampMarginBoxMinSize = 1 << 2, // clamp in our inline axis
2394
    eBClampMarginBoxMinSize = 1 << 3, // clamp in our block axis
2395
    /**
2396
     * The frame is stretching (per CSS Box Alignment) and doesn't have an
2397
     * Automatic Minimum Size in the indicated axis.
2398
     * (may be used for both flex/grid items, but currently only used for Grid)
2399
     * https://drafts.csswg.org/css-grid/#min-size-auto
2400
     * https://drafts.csswg.org/css-align-3/#valdef-justify-self-stretch
2401
     */
2402
    eIApplyAutoMinSize = 1 << 4, // only has an effect when eShrinkWrap is false
2403
  };
2404
2405
  /**
2406
   * Compute the size that a frame will occupy.  Called while
2407
   * constructing the ReflowInput to be used to Reflow the frame,
2408
   * in order to fill its mComputedWidth and mComputedHeight member
2409
   * variables.
2410
   *
2411
   * The |height| member of the return value may be
2412
   * NS_UNCONSTRAINEDSIZE, but the |width| member must not be.
2413
   *
2414
   * Note that the reason that border and padding need to be passed
2415
   * separately is so that the 'box-sizing' property can be handled.
2416
   * Thus aMargin includes absolute positioning offsets as well.
2417
   *
2418
   * @param aWritingMode  The writing mode to use for the returned size
2419
   *                      (need not match this frame's writing mode).
2420
   *                      This is also the writing mode of the passed-in
2421
   *                      LogicalSize parameters.
2422
   * @param aCBSize  The size of the element's containing block.  (Well,
2423
   *                 the |height| component isn't really.)
2424
   * @param aAvailableWidth  The available width for 'auto' widths.
2425
   *                         This is usually the same as aCBSize.width,
2426
   *                         but differs in cases such as block
2427
   *                         formatting context roots next to floats, or
2428
   *                         in some cases of float reflow in quirks
2429
   *                         mode.
2430
   * @param aMargin  The sum of the vertical / horizontal margins
2431
   *                 ***AND*** absolute positioning offsets (top, right,
2432
   *                 bottom, left) of the frame, including actual values
2433
   *                 resulting from percentages and from the
2434
   *                 "hypothetical box" for absolute positioning, but
2435
   *                 not including actual values resulting from 'auto'
2436
   *                 margins or ignored 'auto' values in absolute
2437
   *                 positioning.
2438
   * @param aBorder  The sum of the vertical / horizontal border widths
2439
   *                 of the frame.
2440
   * @param aPadding The sum of the vertical / horizontal margins of
2441
   *                 the frame, including actual values resulting from
2442
   *                 percentages.
2443
   * @param aFlags   Flags to further customize behavior (definitions above).
2444
   */
2445
  virtual mozilla::LogicalSize
2446
  ComputeSize(gfxContext *aRenderingContext,
2447
              mozilla::WritingMode aWritingMode,
2448
              const mozilla::LogicalSize& aCBSize,
2449
              nscoord aAvailableISize,
2450
              const mozilla::LogicalSize& aMargin,
2451
              const mozilla::LogicalSize& aBorder,
2452
              const mozilla::LogicalSize& aPadding,
2453
              ComputeSizeFlags aFlags) = 0;
2454
2455
  /**
2456
   * Compute a tight bounding rectangle for the frame. This is a rectangle
2457
   * that encloses the pixels that are actually drawn. We're allowed to be
2458
   * conservative and currently we don't try very hard. The rectangle is
2459
   * in appunits and relative to the origin of this frame.
2460
   *
2461
   * This probably only needs to include frame bounds, glyph bounds, and
2462
   * text decorations, but today it sometimes includes other things that
2463
   * contribute to visual overflow.
2464
   *
2465
   * @param aDrawTarget a draw target that can be used if we need
2466
   * to do measurement
2467
   */
2468
  virtual nsRect ComputeTightBounds(DrawTarget* aDrawTarget) const;
2469
2470
  /**
2471
   * This function is similar to GetPrefISize and ComputeTightBounds: it
2472
   * computes the left and right coordinates of a preferred tight bounding
2473
   * rectangle for the frame. This is a rectangle that would enclose the pixels
2474
   * that are drawn if we lay out the element without taking any optional line
2475
   * breaks. The rectangle is in appunits and relative to the origin of this
2476
   * frame. Currently, this function is only implemented for nsBlockFrame and
2477
   * nsTextFrame and is used to determine intrinsic widths of MathML token
2478
   * elements.
2479
2480
   * @param aContext a rendering context that can be used if we need
2481
   * to do measurement
2482
   * @param aX      computed left coordinate of the tight bounding rectangle
2483
   * @param aXMost  computed intrinsic width of the tight bounding rectangle
2484
   *
2485
   */
2486
  virtual nsresult GetPrefWidthTightBounds(gfxContext* aContext,
2487
                                           nscoord* aX,
2488
                                           nscoord* aXMost);
2489
2490
  /**
2491
   * The frame is given an available size and asked for its desired
2492
   * size.  This is the frame's opportunity to reflow its children.
2493
   *
2494
   * If the frame has the NS_FRAME_IS_DIRTY bit set then it is
2495
   * responsible for completely reflowing itself and all of its
2496
   * descendants.
2497
   *
2498
   * Otherwise, if the frame has the NS_FRAME_HAS_DIRTY_CHILDREN bit
2499
   * set, then it is responsible for reflowing at least those
2500
   * children that have NS_FRAME_HAS_DIRTY_CHILDREN or NS_FRAME_IS_DIRTY
2501
   * set.
2502
   *
2503
   * If a difference in available size from the previous reflow causes
2504
   * the frame's size to change, it should reflow descendants as needed.
2505
   *
2506
   * @param aReflowOutput <i>out</i> parameter where you should return the
2507
   *          desired size and ascent/descent info. You should include any
2508
   *          space you want for border/padding in the desired size you return.
2509
   *
2510
   *          It's okay to return a desired size that exceeds the avail
2511
   *          size if that's the smallest you can be, i.e. it's your
2512
   *          minimum size.
2513
   *
2514
   *          For an incremental reflow you are responsible for invalidating
2515
   *          any area within your frame that needs repainting (including
2516
   *          borders). If your new desired size is different than your current
2517
   *          size, then your parent frame is responsible for making sure that
2518
   *          the difference between the two rects is repainted
2519
   *
2520
   * @param aReflowInput information about your reflow including the reason
2521
   *          for the reflow and the available space in which to lay out. Each
2522
   *          dimension of the available space can either be constrained or
2523
   *          unconstrained (a value of NS_UNCONSTRAINEDSIZE).
2524
   *
2525
   *          Note that the available space can be negative. In this case you
2526
   *          still must return an accurate desired size. If you're a container
2527
   *          you must <b>always</b> reflow at least one frame regardless of the
2528
   *          available space
2529
   *
2530
   * @param aStatus a return value indicating whether the frame is complete
2531
   *          and whether the next-in-flow is dirty and needs to be reflowed
2532
   */
2533
  virtual void Reflow(nsPresContext*           aPresContext,
2534
                      ReflowOutput&     aReflowOutput,
2535
                      const ReflowInput& aReflowInput,
2536
                      nsReflowStatus&          aStatus) = 0;
2537
2538
  /**
2539
   * Post-reflow hook. After a frame is reflowed this method will be called
2540
   * informing the frame that this reflow process is complete, and telling the
2541
   * frame the status returned by the Reflow member function.
2542
   *
2543
   * This call may be invoked many times, while NS_FRAME_IN_REFLOW is set, before
2544
   * it is finally called once with a NS_FRAME_REFLOW_COMPLETE value. When called
2545
   * with a NS_FRAME_REFLOW_COMPLETE value the NS_FRAME_IN_REFLOW bit in the
2546
   * frame state will be cleared.
2547
   *
2548
   * XXX This doesn't make sense. If the frame is reflowed but not complete, then
2549
   * the status should have IsIncomplete() equal to true.
2550
   * XXX Don't we want the semantics to dictate that we only call this once for
2551
   * a given reflow?
2552
   */
2553
  virtual void DidReflow(nsPresContext*           aPresContext,
2554
                         const ReflowInput* aReflowInput) = 0;
2555
2556
  /**
2557
   * Updates the overflow areas of the frame. This can be called if an
2558
   * overflow area of the frame's children has changed without reflowing.
2559
   * @return true if either of the overflow areas for this frame have changed.
2560
   */
2561
  bool UpdateOverflow();
2562
2563
  /**
2564
   * Computes any overflow area created by the frame itself (outside of the
2565
   * frame bounds) and includes it into aOverflowAreas.
2566
   *
2567
   * Returns false if updating overflow isn't supported for this frame.
2568
   * If the frame requires a reflow instead, then it is responsible
2569
   * for scheduling one.
2570
   */
2571
  virtual bool ComputeCustomOverflow(nsOverflowAreas& aOverflowAreas) = 0;
2572
2573
  /**
2574
   * Computes any overflow area created by children of this frame and
2575
   * includes it into aOverflowAreas.
2576
   */
2577
  virtual void UnionChildOverflow(nsOverflowAreas& aOverflowAreas) = 0;
2578
2579
  /**
2580
   * Helper method used by block reflow to identify runs of text so
2581
   * that proper word-breaking can be done.
2582
   *
2583
   * @return
2584
   *    true if we can continue a "text run" through the frame. A
2585
   *    text run is text that should be treated contiguously for line
2586
   *    and word breaking.
2587
   */
2588
  virtual bool CanContinueTextRun() const = 0;
2589
2590
  /**
2591
   * Computes an approximation of the rendered text of the frame and its
2592
   * continuations. Returns nothing for non-text frames.
2593
   * The appended text will often not contain all the whitespace from source,
2594
   * depending on CSS white-space processing.
2595
   * if aEndOffset goes past end, use the text up to the string's end.
2596
   * Call this on the primary frame for a text node.
2597
   * aStartOffset and aEndOffset can be content offsets or offsets in the
2598
   * rendered text, depending on aOffsetType.
2599
   * Returns a string, as well as offsets identifying the start of the text
2600
   * within the rendered text for the whole node, and within the text content
2601
   * of the node.
2602
   */
2603
  struct RenderedText {
2604
    nsAutoString mString;
2605
    uint32_t mOffsetWithinNodeRenderedText;
2606
    int32_t mOffsetWithinNodeText;
2607
    RenderedText() : mOffsetWithinNodeRenderedText(0),
2608
        mOffsetWithinNodeText(0) {}
2609
  };
2610
  enum class TextOffsetType {
2611
    // Passed-in start and end offsets are within the content text.
2612
    OFFSETS_IN_CONTENT_TEXT,
2613
    // Passed-in start and end offsets are within the rendered text.
2614
    OFFSETS_IN_RENDERED_TEXT
2615
  };
2616
  enum class TrailingWhitespace {
2617
    TRIM_TRAILING_WHITESPACE,
2618
    // Spaces preceding a caret at the end of a line should not be trimmed
2619
    DONT_TRIM_TRAILING_WHITESPACE
2620
  };
2621
  virtual RenderedText GetRenderedText(uint32_t aStartOffset = 0,
2622
                                       uint32_t aEndOffset = UINT32_MAX,
2623
                                       TextOffsetType aOffsetType =
2624
                                           TextOffsetType::OFFSETS_IN_CONTENT_TEXT,
2625
                                       TrailingWhitespace aTrimTrailingWhitespace =
2626
                                           TrailingWhitespace::TRIM_TRAILING_WHITESPACE)
2627
  { return RenderedText(); }
2628
2629
  /**
2630
   * Returns true if the frame contains any non-collapsed characters.
2631
   * This method is only available for text frames, and it will return false
2632
   * for all other frame types.
2633
   */
2634
  virtual bool HasAnyNoncollapsedCharacters()
2635
  { return false; }
2636
2637
  /**
2638
   * Returns true if events of the given type targeted at this frame
2639
   * should only be dispatched to the system group.
2640
   */
2641
  virtual bool OnlySystemGroupDispatch(mozilla::EventMessage aMessage) const
2642
  { return false; }
2643
2644
  //
2645
  // Accessor functions to an associated view object:
2646
  //
2647
0
  bool HasView() const { return !!(mState & NS_FRAME_HAS_VIEW); }
2648
protected:
2649
  virtual nsView* GetViewInternal() const
2650
  {
2651
    MOZ_ASSERT_UNREACHABLE("method should have been overridden by subclass");
2652
    return nullptr;
2653
  }
2654
  virtual void SetViewInternal(nsView* aView)
2655
  {
2656
    MOZ_ASSERT_UNREACHABLE("method should have been overridden by subclass");
2657
  }
2658
public:
2659
  nsView* GetView() const
2660
0
  {
2661
0
    if (MOZ_LIKELY(!HasView())) {
2662
0
      return nullptr;
2663
0
    }
2664
0
    nsView* view = GetViewInternal();
2665
0
    MOZ_ASSERT(view, "GetViewInternal() should agree with HasView()");
2666
0
    return view;
2667
0
  }
2668
  void SetView(nsView* aView);
2669
2670
  /**
2671
   * Find the closest view (on |this| or an ancestor).
2672
   * If aOffset is non-null, it will be set to the offset of |this|
2673
   * from the returned view.
2674
   */
2675
  nsView* GetClosestView(nsPoint* aOffset = nullptr) const;
2676
2677
  /**
2678
   * Find the closest ancestor (excluding |this| !) that has a view
2679
   */
2680
  nsIFrame* GetAncestorWithView() const;
2681
2682
  /**
2683
   * Sets the view's attributes from the frame style.
2684
   * Call this for nsChangeHint_SyncFrameView style changes or when the view
2685
   * has just been created.
2686
   * @param aView the frame's view or use GetView() if nullptr is given
2687
   */
2688
  void SyncFrameViewProperties(nsView* aView = nullptr);
2689
2690
  /**
2691
   * Get the offset between the coordinate systems of |this| and aOther.
2692
   * Adding the return value to a point in the coordinate system of |this|
2693
   * will transform the point to the coordinate system of aOther.
2694
   *
2695
   * aOther must be non-null.
2696
   *
2697
   * This function is fastest when aOther is an ancestor of |this|.
2698
   *
2699
   * This function _DOES NOT_ work across document boundaries.
2700
   * Use this function only when |this| and aOther are in the same document.
2701
   *
2702
   * NOTE: this actually returns the offset from aOther to |this|, but
2703
   * that offset is added to transform _coordinates_ from |this| to
2704
   * aOther.
2705
   */
2706
  nsPoint GetOffsetTo(const nsIFrame* aOther) const;
2707
2708
  /**
2709
   * Just like GetOffsetTo, but treats all scrollframes as scrolled to
2710
   * their origin.
2711
   */
2712
  nsPoint GetOffsetToIgnoringScrolling(const nsIFrame* aOther) const;
2713
2714
  /**
2715
   * Get the offset between the coordinate systems of |this| and aOther
2716
   * expressed in appunits per dev pixel of |this|' document. Adding the return
2717
   * value to a point that is relative to the origin of |this| will make the
2718
   * point relative to the origin of aOther but in the appunits per dev pixel
2719
   * ratio of |this|.
2720
   *
2721
   * aOther must be non-null.
2722
   *
2723
   * This function is fastest when aOther is an ancestor of |this|.
2724
   *
2725
   * This function works across document boundaries.
2726
   *
2727
   * Because this function may cross document boundaries that have different
2728
   * app units per dev pixel ratios it needs to be used very carefully.
2729
   *
2730
   * NOTE: this actually returns the offset from aOther to |this|, but
2731
   * that offset is added to transform _coordinates_ from |this| to
2732
   * aOther.
2733
   */
2734
  nsPoint GetOffsetToCrossDoc(const nsIFrame* aOther) const;
2735
2736
  /**
2737
   * Like GetOffsetToCrossDoc, but the caller can specify which appunits
2738
   * to return the result in.
2739
   */
2740
  nsPoint GetOffsetToCrossDoc(const nsIFrame* aOther, const int32_t aAPD) const;
2741
2742
  /**
2743
   * Get the rect of the frame relative to the top-left corner of the
2744
   * screen in CSS pixels.
2745
   * @return the CSS pixel rect of the frame relative to the top-left
2746
   *         corner of the screen.
2747
   */
2748
  mozilla::CSSIntRect GetScreenRect() const;
2749
2750
  /**
2751
   * Get the screen rect of the frame in app units.
2752
   * @return the app unit rect of the frame in screen coordinates.
2753
   */
2754
  nsRect GetScreenRectInAppUnits() const;
2755
2756
  /**
2757
   * Returns the offset from this frame to the closest geometric parent that
2758
   * has a view. Also returns the containing view or null in case of error
2759
   */
2760
  void GetOffsetFromView(nsPoint& aOffset, nsView** aView) const;
2761
2762
  /**
2763
   * Returns the nearest widget containing this frame. If this frame has a
2764
   * view and the view has a widget, then this frame's widget is
2765
   * returned, otherwise this frame's geometric parent is checked
2766
   * recursively upwards.
2767
   */
2768
  nsIWidget* GetNearestWidget() const;
2769
2770
  /**
2771
   * Same as GetNearestWidget() above but uses an outparam to return the offset
2772
   * of this frame to the returned widget expressed in appunits of |this| (the
2773
   * widget might be in a different document with a different zoom).
2774
   */
2775
  nsIWidget* GetNearestWidget(nsPoint& aOffset) const;
2776
2777
  /**
2778
   * Whether the content for this frame is disabled, used for event handling.
2779
   */
2780
  bool IsContentDisabled() const;
2781
2782
  /**
2783
   * Get the "type" of the frame.
2784
   *
2785
   * @see mozilla::LayoutFrameType
2786
   */
2787
0
  mozilla::LayoutFrameType Type() const {
2788
0
    MOZ_ASSERT(uint8_t(mClass) < mozilla::ArrayLength(sLayoutFrameTypes));
2789
0
    return sLayoutFrameTypes[uint8_t(mClass)];
2790
0
  }
2791
2792
#define FRAME_TYPE(name_)                                                      \
2793
  bool Is##name_##Frame() const                                                \
2794
0
  {                                                                            \
2795
0
    return Type() == mozilla::LayoutFrameType::name_;                          \
2796
0
  }
Unexecuted instantiation: nsIFrame::IsBlockFrame() const
Unexecuted instantiation: nsIFrame::IsBrFrame() const
Unexecuted instantiation: nsIFrame::IsBulletFrame() const
Unexecuted instantiation: nsIFrame::IsBCTableCellFrame() const
Unexecuted instantiation: nsIFrame::IsCheckboxRadioFrame() const
Unexecuted instantiation: nsIFrame::IsColorControlFrame() const
Unexecuted instantiation: nsIFrame::IsColumnSetWrapperFrame() const
Unexecuted instantiation: nsIFrame::IsComboboxDisplayFrame() const
Unexecuted instantiation: nsIFrame::IsDateTimeControlFrame() const
Unexecuted instantiation: nsIFrame::IsFlexContainerFrame() const
Unexecuted instantiation: nsIFrame::IsGfxButtonControlFrame() const
Unexecuted instantiation: nsIFrame::IsGridContainerFrame() const
Unexecuted instantiation: nsIFrame::IsHTMLButtonControlFrame() const
Unexecuted instantiation: nsIFrame::IsHTMLCanvasFrame() const
Unexecuted instantiation: nsIFrame::IsHTMLVideoFrame() const
Unexecuted instantiation: nsIFrame::IsImageControlFrame() const
Unexecuted instantiation: nsIFrame::IsInlineFrame() const
Unexecuted instantiation: nsIFrame::IsLeafBoxFrame() const
Unexecuted instantiation: nsIFrame::IsMenuFrame() const
Unexecuted instantiation: nsIFrame::IsMenuPopupFrame() const
Unexecuted instantiation: nsIFrame::IsMeterFrame() const
Unexecuted instantiation: nsIFrame::IsNoneFrame() const
Unexecuted instantiation: nsIFrame::IsNumberControlFrame() const
Unexecuted instantiation: nsIFrame::IsPageFrame() const
Unexecuted instantiation: nsIFrame::IsPageBreakFrame() const
Unexecuted instantiation: nsIFrame::IsPageContentFrame() const
Unexecuted instantiation: nsIFrame::IsPlaceholderFrame() const
Unexecuted instantiation: nsIFrame::IsProgressFrame() const
Unexecuted instantiation: nsIFrame::IsScrollbarFrame() const
Unexecuted instantiation: nsIFrame::IsSequenceFrame() const
Unexecuted instantiation: nsIFrame::IsSliderFrame() const
Unexecuted instantiation: nsIFrame::IsSVGClipPathFrame() const
Unexecuted instantiation: nsIFrame::IsSVGFELeafFrame() const
Unexecuted instantiation: nsIFrame::IsSVGFEImageFrame() const
Unexecuted instantiation: nsIFrame::IsSVGFEUnstyledLeafFrame() const
Unexecuted instantiation: nsIFrame::IsSVGGFrame() const
Unexecuted instantiation: nsIFrame::IsSVGGenericContainerFrame() const
Unexecuted instantiation: nsIFrame::IsSVGImageFrame() const
Unexecuted instantiation: nsIFrame::IsSVGInnerSVGFrame() const
Unexecuted instantiation: nsIFrame::IsSVGMaskFrame() const
Unexecuted instantiation: nsIFrame::IsSVGMarkerFrame() const
Unexecuted instantiation: nsIFrame::IsSVGMarkerAnonChildFrame() const
Unexecuted instantiation: nsIFrame::IsSVGOuterSVGFrame() const
Unexecuted instantiation: nsIFrame::IsSVGOuterSVGAnonChildFrame() const
Unexecuted instantiation: nsIFrame::IsSVGPatternFrame() const
Unexecuted instantiation: nsIFrame::IsSVGSwitchFrame() const
Unexecuted instantiation: nsIFrame::IsSVGSymbolFrame() const
Unexecuted instantiation: nsIFrame::IsSVGViewFrame() const
Unexecuted instantiation: nsIFrame::IsTableColFrame() const
Unexecuted instantiation: nsIFrame::IsTableRowFrame() const
Unexecuted instantiation: nsIFrame::IsTableRowGroupFrame() const
Unexecuted instantiation: nsIFrame::IsTextFrame() const
Unexecuted instantiation: nsIFrame::IsTextInputFrame() const
Unexecuted instantiation: nsIFrame::IsViewportFrame() const
Unexecuted instantiation: nsIFrame::IsXULLabelFrame() const
2797
#include "mozilla/FrameTypeList.h"
2798
#undef FRAME_TYPE
2799
2800
  /**
2801
   * Returns a transformation matrix that converts points in this frame's
2802
   * coordinate space to points in some ancestor frame's coordinate space.
2803
   * The frame decides which ancestor it will use as a reference point.
2804
   * If this frame has no ancestor, aOutAncestor will be set to null.
2805
   *
2806
   * @param aStopAtAncestor don't look further than aStopAtAncestor. If null,
2807
   *   all ancestors (including across documents) will be traversed.
2808
   * @param aOutAncestor [out] The ancestor frame the frame has chosen.  If
2809
   *   this frame has no ancestor, *aOutAncestor will be set to null. If
2810
   * this frame is not a root frame, then *aOutAncestor will be in the same
2811
   * document as this frame. If this frame IsTransformed(), then *aOutAncestor
2812
   * will be the parent frame (if not preserve-3d) or the nearest non-transformed
2813
   * ancestor (if preserve-3d).
2814
   * @return A Matrix4x4 that converts points in this frame's coordinate space
2815
   *   into points in aOutAncestor's coordinate space.
2816
   */
2817
  enum {
2818
    IN_CSS_UNITS = 1 << 0,
2819
    STOP_AT_STACKING_CONTEXT_AND_DISPLAY_PORT = 1 << 1
2820
  };
2821
  Matrix4x4Flagged GetTransformMatrix(const nsIFrame* aStopAtAncestor,
2822
                                      nsIFrame **aOutAncestor,
2823
                                      uint32_t aFlags = 0) const;
2824
2825
  /**
2826
   * Bit-flags to pass to IsFrameOfType()
2827
   */
2828
  enum {
2829
    eMathML =                           1 << 0,
2830
    eSVG =                              1 << 1,
2831
    eSVGForeignObject =                 1 << 2,
2832
    eSVGContainer =                     1 << 3,
2833
    eSVGGeometry =                      1 << 4,
2834
    eSVGPaintServer =                   1 << 5,
2835
    eBidiInlineContainer =              1 << 6,
2836
    // the frame is for a replaced element, such as an image
2837
    eReplaced =                         1 << 7,
2838
    // Frame that contains a block but looks like a replaced element
2839
    // from the outside
2840
    eReplacedContainsBlock =            1 << 8,
2841
    // A frame that participates in inline reflow, i.e., one that
2842
    // requires ReflowInput::mLineLayout.
2843
    eLineParticipant =                  1 << 9,
2844
    eXULBox =                           1 << 10,
2845
    eCanContainOverflowContainers =     1 << 11,
2846
    eBlockFrame =                       1 << 12,
2847
    eTablePart =                        1 << 13,
2848
    // If this bit is set, the frame doesn't allow ignorable whitespace as
2849
    // children. For example, the whitespace between <table>\n<tr>\n<td>
2850
    // will be excluded during the construction of children.
2851
    eExcludesIgnorableWhitespace =      1 << 14,
2852
    eSupportsCSSTransforms =            1 << 15,
2853
2854
    // A replaced element that has replaced-element sizing
2855
    // characteristics (i.e., like images or iframes), as opposed to
2856
    // inline-block sizing characteristics (like form controls).
2857
    eReplacedSizing =                   1 << 16,
2858
2859
    // Does this frame class support 'contain: layout' and
2860
    // 'contain:paint' (supporting one is equivalent to supporting the
2861
    // other).
2862
    eSupportsContainLayoutAndPaint =    1 << 17,
2863
2864
    // These are to allow nsFrame::Init to assert that IsFrameOfType
2865
    // implementations all call the base class method.  They are only
2866
    // meaningful in DEBUG builds.
2867
    eDEBUGAllFrames =                   1 << 30,
2868
    eDEBUGNoFrames =                    1 << 31
2869
  };
2870
2871
  /**
2872
   * API for doing a quick check if a frame is of a given
2873
   * type. Returns true if the frame matches ALL flags passed in.
2874
   *
2875
   * Implementations should always override with inline virtual
2876
   * functions that call the base class's IsFrameOfType method.
2877
   */
2878
  virtual bool IsFrameOfType(uint32_t aFlags) const
2879
  {
2880
    return !(aFlags & ~(
2881
#ifdef DEBUG
2882
                        nsIFrame::eDEBUGAllFrames |
2883
#endif
2884
                        nsIFrame::eSupportsCSSTransforms |
2885
                        nsIFrame::eSupportsContainLayoutAndPaint
2886
                        ));
2887
  }
2888
2889
  /**
2890
   * Returns true if the frame is a block wrapper.
2891
   */
2892
  bool IsBlockWrapper() const;
2893
2894
  /**
2895
   * Get this frame's CSS containing block.
2896
   *
2897
   * The algorithm is defined in
2898
   * http://www.w3.org/TR/CSS2/visudet.html#containing-block-details.
2899
   *
2900
   * NOTE: This is guaranteed to return a non-null pointer when invoked on any
2901
   * frame other than the root frame.
2902
   *
2903
   * Requires SKIP_SCROLLED_FRAME to get behaviour matching the spec, otherwise
2904
   * it can return anonymous inner scrolled frames. Bug 1204044 is filed for
2905
   * investigating whether any of the callers actually require the default
2906
   * behaviour.
2907
   */
2908
  enum {
2909
    // If the containing block is an anonymous scrolled frame, then skip over
2910
    // this and return the outer scroll frame.
2911
    SKIP_SCROLLED_FRAME = 0x01
2912
  };
2913
  nsIFrame* GetContainingBlock(uint32_t aFlags,
2914
                               const nsStyleDisplay* aStyleDisplay) const;
2915
0
  nsIFrame* GetContainingBlock(uint32_t aFlags = 0) const {
2916
0
    return GetContainingBlock(aFlags, StyleDisplay());
2917
0
  }
2918
2919
  /**
2920
   * Is this frame a containing block for floating elements?
2921
   * Note that very few frames are, so default to false.
2922
   */
2923
  virtual bool IsFloatContainingBlock() const { return false; }
2924
2925
  /**
2926
   * Is this a leaf frame?  Frames that want the frame constructor to be able
2927
   * to construct kids for them should return false, all others should return
2928
   * true.  Note that returning true here does not mean that the frame _can't_
2929
   * have kids.  It could still have kids created via
2930
   * nsIAnonymousContentCreator.  Returning true indicates that "normal"
2931
   * (non-anonymous, XBL-bound, CSS generated content, etc) children should not
2932
   * be constructed.
2933
   */
2934
  bool IsLeaf() const
2935
  {
2936
    MOZ_ASSERT(uint8_t(mClass) < mozilla::ArrayLength(sFrameClassBits));
2937
    FrameClassBits bits = sFrameClassBits[uint8_t(mClass)];
2938
    if (MOZ_UNLIKELY(bits & eFrameClassBitsDynamicLeaf)) {
2939
      return IsLeafDynamic();
2940
    }
2941
    return bits & eFrameClassBitsLeaf;
2942
  }
2943
2944
  /**
2945
   * Marks all display items created by this frame as needing a repaint,
2946
   * and calls SchedulePaint() if requested and one is not already pending.
2947
   *
2948
   * This includes all display items created by this frame, including
2949
   * container types.
2950
   *
2951
   * @param aDisplayItemKey If specified, only issues an invalidate
2952
   * if this frame painted a display item of that type during the
2953
   * previous paint. SVG rendering observers are always notified.
2954
   * @param aRebuildDisplayItems If true, then adds this frame to the
2955
   * list of modified frames for display list building. Only pass false
2956
   * if you're sure that the relevant display items will be rebuilt
2957
   * already (possibly by an ancestor being in the modified list).
2958
   */
2959
  virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true);
2960
2961
  /**
2962
   * Same as InvalidateFrame(), but only mark a fixed rect as needing
2963
   * repainting.
2964
   *
2965
   * @param aRect The rect to invalidate, relative to the TopLeft of the
2966
   * frame's border box.
2967
   * @param aDisplayItemKey If specified, only issues an invalidate
2968
   * if this frame painted a display item of that type during the
2969
   * previous paint. SVG rendering observers are always notified.
2970
   * @param aRebuildDisplayItems If true, then adds this frame to the
2971
   * list of modified frames for display list building. Only pass false
2972
   * if you're sure that the relevant display items will be rebuilt
2973
   * already (possibly by an ancestor being in the modified list).
2974
   */
2975
  virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true);
2976
2977
  /**
2978
   * Calls InvalidateFrame() on all frames descendant frames (including
2979
   * this one).
2980
   *
2981
   * This function doesn't walk through placeholder frames to invalidate
2982
   * the out-of-flow frames.
2983
   *
2984
   * @param aRebuildDisplayItems If true, then adds this frame to the
2985
   * list of modified frames for display list building. Only pass false
2986
   * if you're sure that the relevant display items will be rebuilt
2987
   * already (possibly by an ancestor being in the modified list).
2988
   */
2989
  void InvalidateFrameSubtree(bool aRebuildDisplayItems = true);
2990
2991
  /**
2992
   * Called when a frame is about to be removed and needs to be invalidated.
2993
   * Normally does nothing since DLBI handles removed frames.
2994
   */
2995
  virtual void InvalidateFrameForRemoval() {}
2996
2997
  /**
2998
   * When HasUserData(frame->LayerIsPrerenderedDataKey()), then the
2999
   * entire overflow area of this frame has been rendered in its
3000
   * layer(s).
3001
   */
3002
  static void* LayerIsPrerenderedDataKey() {
3003
    return &sLayerIsPrerenderedDataKey;
3004
  }
3005
  static uint8_t sLayerIsPrerenderedDataKey;
3006
3007
   /**
3008
   * Try to update this frame's transform without invalidating any
3009
   * content.  Return true iff successful.  If unsuccessful, the
3010
   * caller is responsible for scheduling an invalidating paint.
3011
   *
3012
   * If the result is true, aLayerResult will be filled in with the
3013
   * transform layer for the frame.
3014
   */
3015
  bool TryUpdateTransformOnly(Layer** aLayerResult);
3016
3017
  /**
3018
   * Checks if a frame has had InvalidateFrame() called on it since the
3019
   * last paint.
3020
   *
3021
   * If true, then the invalid rect is returned in aRect, with an
3022
   * empty rect meaning all pixels drawn by this frame should be
3023
   * invalidated.
3024
   * If false, aRect is left unchanged.
3025
   */
3026
  bool IsInvalid(nsRect& aRect);
3027
3028
  /**
3029
   * Check if any frame within the frame subtree (including this frame)
3030
   * returns true for IsInvalid().
3031
   */
3032
  bool HasInvalidFrameInSubtree()
3033
  {
3034
    return HasAnyStateBits(NS_FRAME_NEEDS_PAINT | NS_FRAME_DESCENDANT_NEEDS_PAINT);
3035
  }
3036
3037
  /**
3038
   * Removes the invalid state from the current frame and all
3039
   * descendant frames.
3040
   */
3041
  void ClearInvalidationStateBits();
3042
3043
  /**
3044
   * Ensures that the refresh driver is running, and schedules a view
3045
   * manager flush on the next tick.
3046
   *
3047
   * The view manager flush will update the layer tree, repaint any
3048
   * invalid areas in the layer tree and schedule a layer tree
3049
   * composite operation to display the layer tree.
3050
   *
3051
   * In general it is not necessary for frames to call this when they change.
3052
   * For example, changes that result in a reflow will have this called for
3053
   * them by PresContext::DoReflow when the reflow begins. Style changes that
3054
   * do not trigger a reflow should have this called for them by
3055
   * DoApplyRenderingChangeToTree.
3056
   *
3057
   * @param aType PAINT_COMPOSITE_ONLY : No changes have been made
3058
   * that require a layer tree update, so only schedule a layer
3059
   * tree composite.
3060
   * PAINT_DELAYED_COMPRESS : Schedule a paint to be executed after a delay, and
3061
   * put FrameLayerBuilder in 'compressed' mode that avoids short cut optimizations.
3062
   */
3063
  enum PaintType {
3064
    PAINT_DEFAULT = 0,
3065
    PAINT_COMPOSITE_ONLY,
3066
    PAINT_DELAYED_COMPRESS
3067
  };
3068
  void SchedulePaint(PaintType aType = PAINT_DEFAULT, bool aFrameChanged = true);
3069
3070
  // Similar to SchedulePaint() but without calling
3071
  // InvalidateRenderingObservers() for SVG.
3072
  void SchedulePaintWithoutInvalidatingObservers(
3073
    PaintType aType = PAINT_DEFAULT);
3074
3075
  /**
3076
   * Checks if the layer tree includes a dedicated layer for this
3077
   * frame/display item key pair, and invalidates at least aDamageRect
3078
   * area within that layer.
3079
   *
3080
   * If no layer is found, calls InvalidateFrame() instead.
3081
   *
3082
   * @param aDamageRect Area of the layer to invalidate.
3083
   * @param aFrameDamageRect If no layer is found, the area of the frame to
3084
   *                         invalidate. If null, the entire frame will be
3085
   *                         invalidated.
3086
   * @param aDisplayItemKey Display item type.
3087
   * @param aFlags UPDATE_IS_ASYNC : Will skip the invalidation
3088
   * if the found layer is being composited by a remote
3089
   * compositor.
3090
   * @return Layer, if found, nullptr otherwise.
3091
   */
3092
  enum {
3093
    UPDATE_IS_ASYNC = 1 << 0
3094
  };
3095
  Layer* InvalidateLayer(DisplayItemType aDisplayItemKey,
3096
                         const nsIntRect* aDamageRect = nullptr,
3097
                         const nsRect* aFrameDamageRect = nullptr,
3098
                         uint32_t aFlags = 0);
3099
3100
  void MarkNeedsDisplayItemRebuild();
3101
3102
  /**
3103
   * Returns a rect that encompasses everything that might be painted by
3104
   * this frame.  This includes this frame, all its descendant frames, this
3105
   * frame's outline, and descendant frames' outline, but does not include
3106
   * areas clipped out by the CSS "overflow" and "clip" properties.
3107
   *
3108
   * HasOverflowRects() (below) will return true when this overflow
3109
   * rect has been explicitly set, even if it matches mRect.
3110
   * XXX Note: because of a space optimization using the formula above,
3111
   * during reflow this function does not give accurate data if
3112
   * FinishAndStoreOverflow has been called but mRect hasn't yet been
3113
   * updated yet.  FIXME: This actually isn't true, but it should be.
3114
   *
3115
   * The visual overflow rect should NEVER be used for things that
3116
   * affect layout.  The scrollable overflow rect is permitted to affect
3117
   * layout.
3118
   *
3119
   * @return the rect relative to this frame's origin, but after
3120
   * CSS transforms have been applied (i.e. not really this frame's coordinate
3121
   * system, and may not contain the frame's border-box, e.g. if there
3122
   * is a CSS transform scaling it down)
3123
   */
3124
  nsRect GetVisualOverflowRect() const {
3125
    return GetOverflowRect(eVisualOverflow);
3126
  }
3127
3128
  /**
3129
   * Returns a rect that encompasses the area of this frame that the
3130
   * user should be able to scroll to reach.  This is similar to
3131
   * GetVisualOverflowRect, but does not include outline or shadows, and
3132
   * may in the future include more margins than visual overflow does.
3133
   * It does not include areas clipped out by the CSS "overflow" and
3134
   * "clip" properties.
3135
   *
3136
   * HasOverflowRects() (below) will return true when this overflow
3137
   * rect has been explicitly set, even if it matches mRect.
3138
   * XXX Note: because of a space optimization using the formula above,
3139
   * during reflow this function does not give accurate data if
3140
   * FinishAndStoreOverflow has been called but mRect hasn't yet been
3141
   * updated yet.
3142
   *
3143
   * @return the rect relative to this frame's origin, but after
3144
   * CSS transforms have been applied (i.e. not really this frame's coordinate
3145
   * system, and may not contain the frame's border-box, e.g. if there
3146
   * is a CSS transform scaling it down)
3147
   */
3148
  nsRect GetScrollableOverflowRect() const {
3149
    return GetOverflowRect(eScrollableOverflow);
3150
  }
3151
3152
  nsRect GetOverflowRect(nsOverflowType aType) const;
3153
3154
  nsOverflowAreas GetOverflowAreas() const;
3155
3156
  /**
3157
   * Same as GetOverflowAreas, except in this frame's coordinate
3158
   * system (before transforms are applied).
3159
   *
3160
   * @return the overflow areas relative to this frame, before any CSS transforms have
3161
   * been applied, i.e. in this frame's coordinate system
3162
   */
3163
  nsOverflowAreas GetOverflowAreasRelativeToSelf() const;
3164
3165
  /**
3166
   * Same as GetScrollableOverflowRect, except relative to the parent
3167
   * frame.
3168
   *
3169
   * @return the rect relative to the parent frame, in the parent frame's
3170
   * coordinate system
3171
   */
3172
  nsRect GetScrollableOverflowRectRelativeToParent() const;
3173
3174
  /**
3175
   * Same as GetScrollableOverflowRect, except in this frame's coordinate
3176
   * system (before transforms are applied).
3177
   *
3178
   * @return the rect relative to this frame, before any CSS transforms have
3179
   * been applied, i.e. in this frame's coordinate system
3180
   */
3181
  nsRect GetScrollableOverflowRectRelativeToSelf() const;
3182
3183
  /**
3184
   * Like GetVisualOverflowRect, except in this frame's
3185
   * coordinate system (before transforms are applied).
3186
   *
3187
   * @return the rect relative to this frame, before any CSS transforms have
3188
   * been applied, i.e. in this frame's coordinate system
3189
   */
3190
  nsRect GetVisualOverflowRectRelativeToSelf() const;
3191
3192
  /**
3193
   * Same as GetVisualOverflowRect, except relative to the parent
3194
   * frame.
3195
   *
3196
   * @return the rect relative to the parent frame, in the parent frame's
3197
   * coordinate system
3198
   */
3199
  nsRect GetVisualOverflowRectRelativeToParent() const;
3200
3201
  /**
3202
   * Returns this frame's visual overflow rect as it would be before taking
3203
   * account of SVG effects or transforms. The rect returned is relative to
3204
   * this frame.
3205
   */
3206
  nsRect GetPreEffectsVisualOverflowRect() const;
3207
3208
  /**
3209
   * Store the overflow area in the frame's mOverflow.mVisualDeltas
3210
   * fields or as a frame property in the frame manager so that it can
3211
   * be retrieved later without reflowing the frame. Returns true if either of
3212
   * the overflow areas changed.
3213
   */
3214
  bool FinishAndStoreOverflow(nsOverflowAreas& aOverflowAreas,
3215
                              nsSize aNewSize, nsSize* aOldSize = nullptr,
3216
                              const nsStyleDisplay* aStyleDisplay = nullptr);
3217
3218
  bool FinishAndStoreOverflow(ReflowOutput* aMetrics,
3219
                              const nsStyleDisplay* aStyleDisplay = nullptr) {
3220
    return FinishAndStoreOverflow(aMetrics->mOverflowAreas,
3221
                                  nsSize(aMetrics->Width(), aMetrics->Height()),
3222
                                  nullptr, aStyleDisplay);
3223
  }
3224
3225
  /**
3226
   * Returns whether the frame has an overflow rect that is different from
3227
   * its border-box.
3228
   */
3229
  bool HasOverflowAreas() const {
3230
    return mOverflow.mType != NS_FRAME_OVERFLOW_NONE;
3231
  }
3232
3233
  /**
3234
   * Removes any stored overflow rects (visual and scrollable) from the frame.
3235
   * Returns true if the overflow changed.
3236
   */
3237
  bool ClearOverflowRects();
3238
3239
  /**
3240
   * Determine whether borders, padding, margins etc should NOT be applied
3241
   * on certain sides of the frame.
3242
   * @see mozilla::Sides in gfx/2d/BaseMargin.h
3243
   * @see mozilla::LogicalSides in layout/generic/WritingModes.h
3244
   *
3245
   * @note (See also bug 743402, comment 11) GetSkipSides() checks to see
3246
   *       if this frame has a previous or next continuation to determine
3247
   *       if a side should be skipped.
3248
   *       Unfortunately, this only works after reflow has been completed. In
3249
   *       lieu of this, during reflow, an ReflowInput parameter can be
3250
   *       passed in, indicating that it should be used to determine if sides
3251
   *       should be skipped during reflow.
3252
   */
3253
  Sides GetSkipSides(const ReflowInput* aReflowInput = nullptr) const;
3254
  virtual LogicalSides
3255
  GetLogicalSkipSides(const ReflowInput* aReflowInput = nullptr) const {
3256
    return LogicalSides();
3257
  }
3258
3259
  /**
3260
   * @returns true if this frame is selected.
3261
   */
3262
  bool IsSelected() const;
3263
3264
  /**
3265
   *  called to discover where this frame, or a parent frame has user-select style
3266
   *  applied, which affects that way that it is selected.
3267
   *
3268
   *  @param aSelectStyle  out param. Returns the type of selection style found
3269
   *                        (using values defined in nsStyleConsts.h).
3270
   *
3271
   *  @return Whether the frame can be selected (i.e. is not affected by
3272
   *          user-select: none)
3273
   */
3274
  bool IsSelectable(mozilla::StyleUserSelect* aSelectStyle) const;
3275
3276
  /**
3277
   *  Called to retrieve the SelectionController associated with the frame.
3278
   *  @param aSelCon will contain the selection controller associated with
3279
   *  the frame.
3280
   */
3281
  virtual nsresult  GetSelectionController(nsPresContext *aPresContext, nsISelectionController **aSelCon) = 0;
3282
3283
  /**
3284
   *  Call to get nsFrameSelection for this frame.
3285
   */
3286
  already_AddRefed<nsFrameSelection> GetFrameSelection();
3287
3288
  /**
3289
   * GetConstFrameSelection returns an object which methods are safe to use for
3290
   * example in nsIFrame code.
3291
   */
3292
  const nsFrameSelection* GetConstFrameSelection() const;
3293
3294
  /**
3295
   *  called to find the previous/next character, word, or line  returns the actual
3296
   *  nsIFrame and the frame offset.  THIS DOES NOT CHANGE SELECTION STATE
3297
   *  uses frame's begin selection state to start. if no selection on this frame will
3298
   *  return NS_ERROR_FAILURE
3299
   *  @param aPOS is defined in nsFrameSelection
3300
   */
3301
  virtual nsresult PeekOffset(nsPeekOffsetStruct *aPos);
3302
3303
  /**
3304
   *  called to find the previous/next non-anonymous selectable leaf frame.
3305
   *  @param aDirection [in] the direction to move in (eDirPrevious or eDirNext)
3306
   *  @param aVisual [in] whether bidi caret behavior is visual (true) or logical (false)
3307
   *  @param aJumpLines [in] whether to allow jumping across line boundaries
3308
   *  @param aScrollViewStop [in] whether to stop when reaching a scroll frame boundary
3309
   *  @param aOutFrame [out] the previous/next selectable leaf frame
3310
   *  @param aOutOffset [out] 0 indicates that we arrived at the beginning of the output frame;
3311
   *                          -1 indicates that we arrived at its end.
3312
   *  @param aOutJumpedLine [out] whether this frame and the returned frame are on different lines
3313
   *  @param aOutMovedOverNonSelectableText [out] whether we jumped over a non-selectable
3314
   *                                              frame during the search
3315
   */
3316
  nsresult GetFrameFromDirection(nsDirection aDirection, bool aVisual,
3317
                                 bool aJumpLines, bool aScrollViewStop,
3318
                                 nsIFrame** aOutFrame, int32_t* aOutOffset,
3319
                                 bool* aOutJumpedLine, bool* aOutMovedOverNonSelectableText);
3320
3321
  /**
3322
   *  called to see if the children of the frame are visible from indexstart to index end.
3323
   *  this does not change any state. returns true only if the indexes are valid and any of
3324
   *  the children are visible.  for textframes this index is the character index.
3325
   *  if aStart = aEnd result will be false
3326
   *  @param aStart start index of first child from 0-N (number of children)
3327
   *  @param aEnd   end index of last child from 0-N
3328
   *  @param aRecurse should this frame talk to siblings to get to the contents other children?
3329
   *  @param aFinished did this frame have the aEndIndex? or is there more work to do
3330
   *  @param _retval  return value true or false. false = range is not rendered.
3331
   */
3332
  virtual nsresult CheckVisibility(nsPresContext* aContext, int32_t aStartIndex, int32_t aEndIndex, bool aRecurse, bool *aFinished, bool *_retval)=0;
3333
3334
  /**
3335
   * Called to tell a frame that one of its child frames is dirty (i.e.,
3336
   * has the NS_FRAME_IS_DIRTY *or* NS_FRAME_HAS_DIRTY_CHILDREN bit
3337
   * set).  This should always set the NS_FRAME_HAS_DIRTY_CHILDREN on
3338
   * the frame, and may do other work.
3339
   */
3340
  virtual void ChildIsDirty(nsIFrame* aChild) = 0;
3341
3342
  /**
3343
   * Called to retrieve this frame's accessible.
3344
   * If this frame implements Accessibility return a valid accessible
3345
   * If not return NS_ERROR_NOT_IMPLEMENTED.
3346
   * Note: Accessible must be refcountable. Do not implement directly on your frame
3347
   * Use a mediatior of some kind.
3348
   */
3349
#ifdef ACCESSIBILITY
3350
  virtual mozilla::a11y::AccType AccessibleType() = 0;
3351
#endif
3352
3353
  /**
3354
   * Get the frame whose style should be the parent of this frame's style (i.e.,
3355
   * provide the parent style).
3356
   *
3357
   * This frame must either be an ancestor of this frame or a child.  If
3358
   * this returns a child frame, then the child frame must be sure to
3359
   * return a grandparent or higher!  Furthermore, if a child frame is
3360
   * returned it must have the same GetContent() as this frame.
3361
   *
3362
   * @param aProviderFrame (out) the frame associated with the returned value
3363
   *     or nullptr if the style is for display:contents content.
3364
   * @return The style that should be the parent of this frame's style. Null is
3365
   *         permitted, and means that this frame's style should be the root of
3366
   *         the style tree.
3367
   */
3368
  virtual ComputedStyle* GetParentComputedStyle(nsIFrame** aProviderFrame) const = 0;
3369
3370
  /**
3371
   * Called by RestyleManager to update the style of anonymous boxes
3372
   * directly associated with this frame.
3373
   *
3374
   * The passed-in ServoRestyleState can be used to create new ComputedStyles as
3375
   * needed, as well as posting changes to the change list.
3376
   *
3377
   * It's guaranteed to already have a change in it for this frame and this
3378
   * frame's content.
3379
   *
3380
   * This function will be called after this frame's style has already been
3381
   * updated.  This function will only be called on frames which have the
3382
   * NS_FRAME_OWNS_ANON_BOXES bit set.
3383
   */
3384
  void UpdateStyleOfOwnedAnonBoxes(mozilla::ServoRestyleState& aRestyleState)
3385
  {
3386
    if (GetStateBits() & NS_FRAME_OWNS_ANON_BOXES) {
3387
      DoUpdateStyleOfOwnedAnonBoxes(aRestyleState);
3388
    }
3389
  }
3390
3391
protected:
3392
  // This does the actual work of UpdateStyleOfOwnedAnonBoxes.  It calls
3393
  // AppendDirectlyOwnedAnonBoxes to find all of the anonymous boxes
3394
  // owned by this frame, and then updates styles on each of them.
3395
  void DoUpdateStyleOfOwnedAnonBoxes(mozilla::ServoRestyleState& aRestyleState);
3396
3397
  // A helper for DoUpdateStyleOfOwnedAnonBoxes for the specific case
3398
  // of the owned anon box being a child of this frame.
3399
  void UpdateStyleOfChildAnonBox(nsIFrame* aChildFrame,
3400
                                 mozilla::ServoRestyleState& aRestyleState);
3401
3402
  // Allow ServoRestyleState to call UpdateStyleOfChildAnonBox.
3403
  friend class mozilla::ServoRestyleState;
3404
3405
public:
3406
  // A helper both for UpdateStyleOfChildAnonBox, and to update frame-backed
3407
  // pseudo-elements in RestyleManager.
3408
  //
3409
  // This gets a ComputedStyle that will be the new style for `aChildFrame`, and
3410
  // takes care of updating it, calling CalcStyleDifference, and adding to the
3411
  // change list as appropriate.
3412
  //
3413
  // If aContinuationComputedStyle is not Nothing, it should be used for
3414
  // continuations instead of aNewComputedStyle.  In either case, changehints
3415
  // are only computed based on aNewComputedStyle.
3416
  //
3417
  // Returns the generated change hint for the frame.
3418
  static nsChangeHint UpdateStyleOfOwnedChildFrame(
3419
    nsIFrame* aChildFrame,
3420
    ComputedStyle* aNewComputedStyle,
3421
    mozilla::ServoRestyleState& aRestyleState,
3422
    const Maybe<ComputedStyle*>& aContinuationComputedStyle = Nothing());
3423
3424
  struct OwnedAnonBox
3425
  {
3426
    typedef void (*UpdateStyleFn)(nsIFrame* aOwningFrame,
3427
                                  nsIFrame* aAnonBox,
3428
                                  mozilla::ServoRestyleState& aRestyleState);
3429
3430
    explicit OwnedAnonBox(nsIFrame* aAnonBoxFrame,
3431
                          UpdateStyleFn aUpdateStyleFn = nullptr)
3432
      : mAnonBoxFrame(aAnonBoxFrame)
3433
      , mUpdateStyleFn(aUpdateStyleFn)
3434
    {}
3435
3436
    nsIFrame* mAnonBoxFrame;
3437
    UpdateStyleFn mUpdateStyleFn;
3438
  };
3439
3440
  /**
3441
   * Appends information about all of the anonymous boxes owned by this frame,
3442
   * including other anonymous boxes owned by those which this frame owns
3443
   * directly.
3444
   */
3445
0
  void AppendOwnedAnonBoxes(nsTArray<OwnedAnonBox>& aResult) {
3446
0
    if (GetStateBits() & NS_FRAME_OWNS_ANON_BOXES) {
3447
0
      if (IsInlineFrame()) {
3448
0
        // See comment in nsIFrame::DoUpdateStyleOfOwnedAnonBoxes for why
3449
0
        // we skip nsInlineFrames.
3450
0
        return;
3451
0
      }
3452
0
      DoAppendOwnedAnonBoxes(aResult);
3453
0
    }
3454
0
  }
3455
3456
protected:
3457
  // This does the actual work of AppendOwnedAnonBoxes.
3458
  void DoAppendOwnedAnonBoxes(nsTArray<OwnedAnonBox>& aResult);
3459
3460
public:
3461
  /**
3462
   * Hook subclasses can override to return their owned anonymous boxes.
3463
   *
3464
   * This function only appends anonymous boxes that are directly owned by
3465
   * this frame, i.e. direct children or (for certain frames) a wrapper
3466
   * parent, unlike AppendOwnedAnonBoxes, which will append all anonymous
3467
   * boxes transitively owned by this frame.
3468
   */
3469
  virtual void AppendDirectlyOwnedAnonBoxes(nsTArray<OwnedAnonBox>& aResult);
3470
3471
  /**
3472
   * Determines whether a frame is visible for painting;
3473
   * taking into account whether it is painting a selection or printing.
3474
   */
3475
  bool IsVisibleForPainting(nsDisplayListBuilder* aBuilder);
3476
  /**
3477
   * Determines whether a frame is visible for painting or collapsed;
3478
   * taking into account whether it is painting a selection or printing,
3479
   */
3480
  bool IsVisibleOrCollapsedForPainting(nsDisplayListBuilder* aBuilder);
3481
  /**
3482
   * As above, but slower because we have to recompute some stuff that
3483
   * aBuilder already has.
3484
   */
3485
  bool IsVisibleForPainting();
3486
  /**
3487
   * Check whether this frame is visible in the current selection. Returns
3488
   * true if there is no current selection.
3489
   */
3490
  bool IsVisibleInSelection(nsDisplayListBuilder* aBuilder);
3491
3492
  /**
3493
   * Overridable function to determine whether this frame should be considered
3494
   * "in" the given non-null aSelection for visibility purposes.
3495
   */
3496
  virtual bool IsVisibleInSelection(mozilla::dom::Selection* aSelection);
3497
3498
  /**
3499
   * Determines if this frame is a stacking context.
3500
   *
3501
   * @param aIsPositioned The precomputed result of IsAbsPosContainingBlock
3502
   * on the StyleDisplay().
3503
   */
3504
  bool IsStackingContext(mozilla::EffectSet* aEffectSet,
3505
                         const nsStyleDisplay* aStyleDisplay,
3506
                         const nsStylePosition* aStylePosition,
3507
                         const nsStyleEffects* aStyleEffects,
3508
                         bool aIsPositioned);
3509
  bool IsStackingContext();
3510
3511
  virtual bool HonorPrintBackgroundSettings() { return true; }
3512
3513
  /**
3514
   * Determine whether the frame is logically empty, which is roughly
3515
   * whether the layout would be the same whether or not the frame is
3516
   * present.  Placeholder frames should return true.  Block frames
3517
   * should be considered empty whenever margins collapse through them,
3518
   * even though those margins are relevant.  Text frames containing
3519
   * only whitespace that does not contribute to the height of the line
3520
   * should return true.
3521
   */
3522
  virtual bool IsEmpty() = 0;
3523
  /**
3524
   * Return the same as IsEmpty(). This may only be called after the frame
3525
   * has been reflowed and before any further style or content changes.
3526
   */
3527
  virtual bool CachedIsEmpty();
3528
  /**
3529
   * Determine whether the frame is logically empty, assuming that all
3530
   * its children are empty.
3531
   */
3532
  virtual bool IsSelfEmpty() = 0;
3533
3534
  /**
3535
   * IsGeneratedContentFrame returns whether a frame corresponds to
3536
   * generated content
3537
   *
3538
   * @return whether the frame correspods to generated content
3539
   */
3540
  bool IsGeneratedContentFrame() const {
3541
    return (mState & NS_FRAME_GENERATED_CONTENT) != 0;
3542
  }
3543
3544
  /**
3545
   * IsPseudoFrame returns whether a frame is a pseudo frame (eg an
3546
   * anonymous table-row frame created for a CSS table-cell without an
3547
   * enclosing table-row.
3548
   *
3549
   * @param aParentContent the content node corresponding to the parent frame
3550
   * @return whether the frame is a pseudo frame
3551
   */
3552
  bool IsPseudoFrame(const nsIContent* aParentContent) {
3553
    return mContent == aParentContent;
3554
  }
3555
3556
  /**
3557
   * Support for reading and writing properties on the frame.
3558
   * These call through to the frame's FrameProperties object, if it
3559
   * exists, but avoid creating it if no property is ever set.
3560
   */
3561
  template<typename T>
3562
  FrameProperties::PropertyType<T>
3563
  GetProperty(FrameProperties::Descriptor<T> aProperty,
3564
              bool* aFoundResult = nullptr) const
3565
0
  {
3566
0
    return mProperties.Get(aProperty, aFoundResult);
3567
0
  }
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<nsPlaceholderFrame>::Type nsIFrame::GetProperty<nsPlaceholderFrame>(mozilla::FramePropertyDescriptor<nsPlaceholderFrame> const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<mozilla::SmallValueHolder<mozilla::FrameBidiData> >::Type nsIFrame::GetProperty<mozilla::SmallValueHolder<mozilla::FrameBidiData> >(mozilla::FramePropertyDescriptor<mozilla::SmallValueHolder<mozilla::FrameBidiData> > const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<mozilla::SmallValueHolder<bool> >::Type nsIFrame::GetProperty<mozilla::SmallValueHolder<bool> >(mozilla::FramePropertyDescriptor<mozilla::SmallValueHolder<bool> > const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<nsTArray<nsCOMPtr<nsIWeakReference> > >::Type nsIFrame::GetProperty<nsTArray<nsCOMPtr<nsIWeakReference> > >(mozilla::FramePropertyDescriptor<nsTArray<nsCOMPtr<nsIWeakReference> > > const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<nsRefPtrHashtable<nsGenericHashKey<mozilla::layers::WebRenderUserDataKey>, mozilla::layers::WebRenderUserData> >::Type nsIFrame::GetProperty<nsRefPtrHashtable<nsGenericHashKey<mozilla::layers::WebRenderUserDataKey>, mozilla::layers::WebRenderUserData> >(mozilla::FramePropertyDescriptor<nsRefPtrHashtable<nsGenericHashKey<mozilla::layers::WebRenderUserDataKey>, mozilla::layers::WebRenderUserData> > const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<nsTArray<mozilla::layers::BlobItemData*> >::Type nsIFrame::GetProperty<nsTArray<mozilla::layers::BlobItemData*> >(mozilla::FramePropertyDescriptor<nsTArray<mozilla::layers::BlobItemData*> > const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<nsTArray<nsIFrame*> >::Type nsIFrame::GetProperty<nsTArray<nsIFrame*> >(mozilla::FramePropertyDescriptor<nsTArray<nsIFrame*> > const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<BCPropertyData>::Type nsIFrame::GetProperty<BCPropertyData>(mozilla::FramePropertyDescriptor<BCPropertyData> const*, bool*) const
Unexecuted instantiation: mozilla::detail::FramePropertyTypeHelper<nsTableRowGroupFrame::FrameCursorData>::Type nsIFrame::GetProperty<nsTableRowGroupFrame::FrameCursorData>(mozilla::FramePropertyDescriptor<nsTableRowGroupFrame::FrameCursorData> const*, bool*) const
3568
3569
  template<typename T>
3570
  bool HasProperty(FrameProperties::Descriptor<T> aProperty) const
3571
  {
3572
    return mProperties.Has(aProperty);
3573
  }
3574
3575
  // Add a property, or update an existing property for the given descriptor.
3576
  template<typename T>
3577
  void SetProperty(FrameProperties::Descriptor<T> aProperty,
3578
                   FrameProperties::PropertyType<T> aValue)
3579
0
  {
3580
0
    mProperties.Set(aProperty, aValue, this);
3581
0
  }
Unexecuted instantiation: void nsIFrame::SetProperty<nsTArray<nsCOMPtr<nsIWeakReference> > >(mozilla::FramePropertyDescriptor<nsTArray<nsCOMPtr<nsIWeakReference> > > const*, mozilla::detail::FramePropertyTypeHelper<nsTArray<nsCOMPtr<nsIWeakReference> > >::Type)
Unexecuted instantiation: void nsIFrame::SetProperty<nsTArray<mozilla::layers::BlobItemData*> >(mozilla::FramePropertyDescriptor<nsTArray<mozilla::layers::BlobItemData*> > const*, mozilla::detail::FramePropertyTypeHelper<nsTArray<mozilla::layers::BlobItemData*> >::Type)
Unexecuted instantiation: void nsIFrame::SetProperty<nsTArray<nsIFrame*> >(mozilla::FramePropertyDescriptor<nsTArray<nsIFrame*> > const*, mozilla::detail::FramePropertyTypeHelper<nsTArray<nsIFrame*> >::Type)
Unexecuted instantiation: void nsIFrame::SetProperty<BCPropertyData>(mozilla::FramePropertyDescriptor<BCPropertyData> const*, mozilla::detail::FramePropertyTypeHelper<BCPropertyData>::Type)
Unexecuted instantiation: void nsIFrame::SetProperty<nsTableRowGroupFrame::FrameCursorData>(mozilla::FramePropertyDescriptor<nsTableRowGroupFrame::FrameCursorData> const*, mozilla::detail::FramePropertyTypeHelper<nsTableRowGroupFrame::FrameCursorData>::Type)
3582
3583
  // Unconditionally add a property; use ONLY if the descriptor is known
3584
  // to NOT already be present.
3585
  template<typename T>
3586
  void AddProperty(FrameProperties::Descriptor<T> aProperty,
3587
                   FrameProperties::PropertyType<T> aValue)
3588
0
  {
3589
0
    mProperties.Add(aProperty, aValue);
3590
0
  }
3591
3592
  template<typename T>
3593
  FrameProperties::PropertyType<T>
3594
  RemoveProperty(FrameProperties::Descriptor<T> aProperty,
3595
                 bool* aFoundResult = nullptr)
3596
0
  {
3597
0
    return mProperties.Remove(aProperty, aFoundResult);
3598
0
  }
3599
3600
  template<typename T>
3601
  void DeleteProperty(FrameProperties::Descriptor<T> aProperty)
3602
0
  {
3603
0
    mProperties.Delete(aProperty, this);
3604
0
  }
Unexecuted instantiation: void nsIFrame::DeleteProperty<nsTArray<mozilla::layers::BlobItemData*> >(mozilla::FramePropertyDescriptor<nsTArray<mozilla::layers::BlobItemData*> > const*)
Unexecuted instantiation: void nsIFrame::DeleteProperty<nsTableRowGroupFrame::FrameCursorData>(mozilla::FramePropertyDescriptor<nsTableRowGroupFrame::FrameCursorData> const*)
3605
3606
  void DeleteAllProperties()
3607
  {
3608
    mProperties.DeleteAll(this);
3609
  }
3610
3611
  // nsIFrames themselves are in the nsPresArena, and so are not measured here.
3612
  // Instead, this measures heap-allocated things hanging off the nsIFrame, and
3613
  // likewise for its descendants.
3614
  virtual void AddSizeOfExcludingThisForTree(nsWindowSizes& aWindowSizes) const;
3615
3616
  /**
3617
   * Return true if and only if this frame obeys visibility:hidden.
3618
   * if it does not, then nsContainerFrame will hide its view even though
3619
   * this means children can't be made visible again.
3620
   */
3621
  virtual bool SupportsVisibilityHidden() { return true; }
3622
3623
  /**
3624
   * Returns the clip rect set via the 'clip' property, if the 'clip' property
3625
   * applies to this frame; otherwise returns Nothing(). The 'clip' property
3626
   * applies to HTML frames if they are absolutely positioned. The 'clip'
3627
   * property applies to SVG frames regardless of the value of the 'position'
3628
   * property.
3629
   *
3630
   * The coordinates of the returned rectangle are relative to this frame's
3631
   * origin.
3632
   */
3633
  Maybe<nsRect> GetClipPropClipRect(const nsStyleDisplay* aDisp,
3634
                                    const nsStyleEffects* aEffects,
3635
                                    const nsSize& aSize) const;
3636
3637
  /**
3638
   * Check if this frame is focusable and in the current tab order.
3639
   * Tabbable is indicated by a nonnegative tabindex & is a subset of focusable.
3640
   * For example, only the selected radio button in a group is in the
3641
   * tab order, unless the radio group has no selection in which case
3642
   * all of the visible, non-disabled radio buttons in the group are
3643
   * in the tab order. On the other hand, all of the visible, non-disabled
3644
   * radio buttons are always focusable via clicking or script.
3645
   * Also, depending on the pref accessibility.tabfocus some widgets may be
3646
   * focusable but removed from the tab order. This is the default on
3647
   * Mac OS X, where fewer items are focusable.
3648
   * @param  [in, optional] aTabIndex the computed tab index
3649
   *         < 0 if not tabbable
3650
   *         == 0 if in normal tab order
3651
   *         > 0 can be tabbed to in the order specified by this value
3652
   * @param  [in, optional] aWithMouse, is this focus query for mouse clicking
3653
   * @return whether the frame is focusable via mouse, kbd or script.
3654
   */
3655
  virtual bool IsFocusable(int32_t *aTabIndex = nullptr, bool aWithMouse = false);
3656
3657
  // BOX LAYOUT METHODS
3658
  // These methods have been migrated from nsIBox and are in the process of
3659
  // being refactored. DO NOT USE OUTSIDE OF XUL.
3660
  bool IsXULBoxFrame() const
3661
  {
3662
    return IsFrameOfType(nsIFrame::eXULBox);
3663
  }
3664
3665
  enum Halignment {
3666
    hAlign_Left,
3667
    hAlign_Right,
3668
    hAlign_Center
3669
  };
3670
3671
  enum Valignment {
3672
    vAlign_Top,
3673
    vAlign_Middle,
3674
    vAlign_BaseLine,
3675
    vAlign_Bottom
3676
  };
3677
3678
  /**
3679
   * This calculates the minimum size required for a box based on its state
3680
   * @param[in] aBoxLayoutState The desired state to calculate for
3681
   * @return The minimum size
3682
   */
3683
  virtual nsSize GetXULMinSize(nsBoxLayoutState& aBoxLayoutState) = 0;
3684
3685
  /**
3686
   * This calculates the preferred size of a box based on its state
3687
   * @param[in] aBoxLayoutState The desired state to calculate for
3688
   * @return The preferred size
3689
   */
3690
  virtual nsSize GetXULPrefSize(nsBoxLayoutState& aBoxLayoutState) = 0;
3691
3692
  /**
3693
   * This calculates the maximum size for a box based on its state
3694
   * @param[in] aBoxLayoutState The desired state to calculate for
3695
   * @return The maximum size
3696
   */
3697
  virtual nsSize GetXULMaxSize(nsBoxLayoutState& aBoxLayoutState) = 0;
3698
3699
  /**
3700
   * This returns the minimum size for the scroll area if this frame is
3701
   * being scrolled. Usually it's (0,0).
3702
   */
3703
  virtual nsSize GetXULMinSizeForScrollArea(nsBoxLayoutState& aBoxLayoutState) = 0;
3704
3705
  // Implemented in nsBox, used in nsBoxFrame
3706
  uint32_t GetXULOrdinal();
3707
3708
  virtual nscoord GetXULFlex() = 0;
3709
  virtual nscoord GetXULBoxAscent(nsBoxLayoutState& aBoxLayoutState) = 0;
3710
  virtual bool IsXULCollapsed() = 0;
3711
  // This does not alter the overflow area. If the caller is changing
3712
  // the box size, the caller is responsible for updating the overflow
3713
  // area. It's enough to just call XULLayout or SyncLayout on the
3714
  // box. You can pass true to aRemoveOverflowArea as a
3715
  // convenience.
3716
  virtual void SetXULBounds(nsBoxLayoutState& aBoxLayoutState, const nsRect& aRect,
3717
                            bool aRemoveOverflowAreas = false) = 0;
3718
  nsresult XULLayout(nsBoxLayoutState& aBoxLayoutState);
3719
  // Box methods.  Note that these do NOT just get the CSS border, padding,
3720
  // etc.  They also talk to nsITheme.
3721
  virtual nsresult GetXULBorderAndPadding(nsMargin& aBorderAndPadding);
3722
  virtual nsresult GetXULBorder(nsMargin& aBorder)=0;
3723
  virtual nsresult GetXULPadding(nsMargin& aBorderAndPadding)=0;
3724
  virtual nsresult GetXULMargin(nsMargin& aMargin)=0;
3725
  virtual void SetXULLayoutManager(nsBoxLayout* aLayout) { }
3726
  virtual nsBoxLayout* GetXULLayoutManager() { return nullptr; }
3727
  nsresult GetXULClientRect(nsRect& aContentRect);
3728
3729
  virtual uint32_t GetXULLayoutFlags()
3730
  { return 0; }
3731
3732
  // For nsSprocketLayout
3733
  virtual Valignment GetXULVAlign() const = 0;
3734
  virtual Halignment GetXULHAlign() const = 0;
3735
3736
  bool IsXULHorizontal() const { return (mState & NS_STATE_IS_HORIZONTAL) != 0; }
3737
  bool IsXULNormalDirection() const { return (mState & NS_STATE_IS_DIRECTION_NORMAL) != 0; }
3738
3739
  nsresult XULRedraw(nsBoxLayoutState& aState);
3740
  virtual nsresult XULRelayoutChildAtOrdinal(nsIFrame* aChild)=0;
3741
3742
  static bool AddXULPrefSize(nsIFrame* aBox, nsSize& aSize, bool& aWidth, bool& aHeightSet);
3743
  static bool AddXULMinSize(nsBoxLayoutState& aState, nsIFrame* aBox,
3744
                            nsSize& aSize, bool& aWidth, bool& aHeightSet);
3745
  static bool AddXULMaxSize(nsIFrame* aBox, nsSize& aSize, bool& aWidth, bool& aHeightSet);
3746
  static bool AddXULFlex(nsIFrame* aBox, nscoord& aFlex);
3747
3748
  // END OF BOX LAYOUT METHODS
3749
  // The above methods have been migrated from nsIBox and are in the process of
3750
  // being refactored. DO NOT USE OUTSIDE OF XUL.
3751
3752
  /**
3753
   * @return true if this text frame ends with a newline character.  It
3754
   * should return false if this is not a text frame.
3755
   */
3756
  virtual bool HasSignificantTerminalNewline() const;
3757
3758
  struct CaretPosition {
3759
    CaretPosition();
3760
    ~CaretPosition();
3761
3762
    nsCOMPtr<nsIContent> mResultContent;
3763
    int32_t              mContentOffset;
3764
  };
3765
3766
  /**
3767
   * gets the first or last possible caret position within the frame
3768
   *
3769
   * @param  [in] aStart
3770
   *         true  for getting the first possible caret position
3771
   *         false for getting the last possible caret position
3772
   * @return The caret position in a CaretPosition.
3773
   *         the returned value is a 'best effort' in case errors
3774
   *         are encountered rummaging through the frame.
3775
   */
3776
  CaretPosition GetExtremeCaretPosition(bool aStart);
3777
3778
  /**
3779
   * Get a line iterator for this frame, if supported.
3780
   *
3781
   * @return nullptr if no line iterator is supported.
3782
   * @note dispose the line iterator using nsILineIterator::DisposeLineIterator
3783
   */
3784
  virtual nsILineIterator* GetLineIterator() = 0;
3785
3786
  /**
3787
   * If this frame is a next-in-flow, and its prev-in-flow has something on its
3788
   * overflow list, pull those frames into the child list of this one.
3789
   */
3790
  virtual void PullOverflowsFromPrevInFlow() {}
3791
3792
  /**
3793
   * Clear the list of child PresShells generated during the last paint
3794
   * so that we can begin generating a new one.
3795
   */
3796
  void ClearPresShellsFromLastPaint() {
3797
    PaintedPresShellList()->Clear();
3798
  }
3799
3800
  /**
3801
   * Flag a child PresShell as painted so that it will get its paint count
3802
   * incremented during empty transactions.
3803
   */
3804
  void AddPaintedPresShell(nsIPresShell* shell) {
3805
    PaintedPresShellList()->AppendElement(do_GetWeakReference(shell));
3806
  }
3807
3808
  /**
3809
   * Increment the paint count of all child PresShells that were painted during
3810
   * the last repaint.
3811
   */
3812
  void UpdatePaintCountForPaintedPresShells() {
3813
    for (nsWeakPtr& item : *PaintedPresShellList()) {
3814
      nsCOMPtr<nsIPresShell> shell = do_QueryReferent(item);
3815
      if (shell) {
3816
        shell->IncrementPaintCount();
3817
      }
3818
    }
3819
  }
3820
3821
  /**
3822
   * @return true if we painted @aShell during the last repaint.
3823
   */
3824
  bool DidPaintPresShell(nsIPresShell* aShell)
3825
0
  {
3826
0
    for (nsWeakPtr& item : *PaintedPresShellList()) {
3827
0
      nsCOMPtr<nsIPresShell> shell = do_QueryReferent(item);
3828
0
      if (shell == aShell) {
3829
0
        return true;
3830
0
      }
3831
0
    }
3832
0
    return false;
3833
0
  }
3834
3835
  /**
3836
   * Accessors for the absolute containing block.
3837
   */
3838
  bool IsAbsoluteContainer() const { return !!(mState & NS_FRAME_HAS_ABSPOS_CHILDREN); }
3839
  bool HasAbsolutelyPositionedChildren() const;
3840
  nsAbsoluteContainingBlock* GetAbsoluteContainingBlock() const;
3841
  void MarkAsAbsoluteContainingBlock();
3842
  void MarkAsNotAbsoluteContainingBlock();
3843
  // Child frame types override this function to select their own child list name
3844
  virtual mozilla::layout::FrameChildListID GetAbsoluteListID() const { return kAbsoluteList; }
3845
3846
  // Checks if we (or any of our descendents) have NS_FRAME_PAINTED_THEBES set, and
3847
  // clears this bit if so.
3848
  bool CheckAndClearPaintedState();
3849
3850
  // Checks if we (or any of our descendents) have mBuiltDisplayList set, and
3851
  // clears this bit if so.
3852
  bool CheckAndClearDisplayListState();
3853
3854
  // CSS visibility just doesn't cut it because it doesn't inherit through
3855
  // documents. Also if this frame is in a hidden card of a deck then it isn't
3856
  // visible either and that isn't expressed using CSS visibility. Also if it
3857
  // is in a hidden view (there are a few cases left and they are hopefully
3858
  // going away soon).
3859
  // If the VISIBILITY_CROSS_CHROME_CONTENT_BOUNDARY flag is passed then we
3860
  // ignore the chrome/content boundary, otherwise we stop looking when we
3861
  // reach it.
3862
  enum {
3863
    VISIBILITY_CROSS_CHROME_CONTENT_BOUNDARY = 0x01
3864
  };
3865
  bool IsVisibleConsideringAncestors(uint32_t aFlags = 0) const;
3866
3867
  struct FrameWithDistance
3868
  {
3869
    nsIFrame* mFrame;
3870
    nscoord mXDistance;
3871
    nscoord mYDistance;
3872
  };
3873
3874
  /**
3875
   * Finds a frame that is closer to a specified point than a current
3876
   * distance.  Distance is measured as for text selection -- a closer x
3877
   * distance beats a closer y distance.
3878
   *
3879
   * Normally, this function will only check the distance between this
3880
   * frame's rectangle and the specified point.  SVGTextFrame overrides
3881
   * this so that it can manage all of its descendant frames and take
3882
   * into account any SVG text layout.
3883
   *
3884
   * If aPoint is closer to this frame's rectangle than aCurrentBestFrame
3885
   * indicates, then aCurrentBestFrame is updated with the distance between
3886
   * aPoint and this frame's rectangle, and with a pointer to this frame.
3887
   * If aPoint is not closer, then aCurrentBestFrame is left unchanged.
3888
   *
3889
   * @param aPoint The point to check for its distance to this frame.
3890
   * @param aCurrentBestFrame Pointer to a struct that will be updated with
3891
   *   a pointer to this frame and its distance to aPoint, if this frame
3892
   *   is indeed closer than the current distance in aCurrentBestFrame.
3893
   */
3894
  virtual void FindCloserFrameForSelection(const nsPoint& aPoint,
3895
                                           FrameWithDistance* aCurrentBestFrame);
3896
3897
  /**
3898
   * Is this a flex item? (i.e. a non-abs-pos child of a flex container)
3899
   */
3900
  inline bool IsFlexItem() const;
3901
  /**
3902
   * Is this a flex or grid item? (i.e. a non-abs-pos child of a flex/grid container)
3903
   */
3904
  inline bool IsFlexOrGridItem() const;
3905
  inline bool IsFlexOrGridContainer() const;
3906
3907
  /**
3908
   * @return true if this frame is used as a table caption.
3909
   */
3910
  inline bool IsTableCaption() const;
3911
3912
  inline bool IsBlockInside() const;
3913
  inline bool IsBlockOutside() const;
3914
  inline bool IsInlineOutside() const;
3915
  inline mozilla::StyleDisplay GetDisplay() const;
3916
  inline bool IsFloating() const;
3917
  inline bool IsAbsPosContainingBlock() const;
3918
  inline bool IsFixedPosContainingBlock() const;
3919
  inline bool IsRelativelyPositioned() const;
3920
  inline bool IsAbsolutelyPositioned(const nsStyleDisplay* aStyleDisplay = nullptr) const;
3921
3922
  /**
3923
   * Returns the vertical-align value to be used for layout, if it is one
3924
   * of the enumerated values.  If this is an SVG text frame, it returns a value
3925
   * that corresponds to the value of dominant-baseline.  If the
3926
   * vertical-align property has length or percentage value, this returns
3927
   * eInvalidVerticalAlign.
3928
   */
3929
  uint8_t VerticalAlignEnum() const;
3930
  enum { eInvalidVerticalAlign = 0xFF };
3931
3932
  void CreateOwnLayerIfNeeded(nsDisplayListBuilder* aBuilder, nsDisplayList* aList,
3933
                              bool* aCreatedContainerItem = nullptr);
3934
3935
  /**
3936
   * Adds the NS_FRAME_IN_POPUP state bit to aFrame, and
3937
   * all descendant frames (including cross-doc ones).
3938
   */
3939
  static void AddInPopupStateBitToDescendants(nsIFrame* aFrame);
3940
  /**
3941
   * Removes the NS_FRAME_IN_POPUP state bit from aFrame and
3942
   * all descendant frames (including cross-doc ones), unless
3943
   * the frame is a popup itself.
3944
   */
3945
  static void RemoveInPopupStateBitFromDescendants(nsIFrame* aFrame);
3946
3947
  /**
3948
   * Sorts the given nsFrameList, so that for every two adjacent frames in the
3949
   * list, the former is less than or equal to the latter, according to the
3950
   * templated IsLessThanOrEqual method.
3951
   *
3952
   * Note: this method uses a stable merge-sort algorithm.
3953
   */
3954
  template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
3955
  static void SortFrameList(nsFrameList& aFrameList);
3956
3957
  /**
3958
   * Returns true if the given frame list is already sorted, according to the
3959
   * templated IsLessThanOrEqual function.
3960
   */
3961
  template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
3962
  static bool IsFrameListSorted(nsFrameList& aFrameList);
3963
3964
  /**
3965
   * Return true if aFrame is in an {ib} split and is NOT one of the
3966
   * continuations of the first inline in it.
3967
   */
3968
  bool FrameIsNonFirstInIBSplit() const {
3969
    return (GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) &&
3970
      FirstContinuation()->GetProperty(nsIFrame::IBSplitPrevSibling());
3971
  }
3972
3973
  /**
3974
   * Return true if aFrame is in an {ib} split and is NOT one of the
3975
   * continuations of the last inline in it.
3976
   */
3977
  bool FrameIsNonLastInIBSplit() const {
3978
    return (GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) &&
3979
      FirstContinuation()->GetProperty(nsIFrame::IBSplitSibling());
3980
  }
3981
3982
  /**
3983
   * Return whether this is a frame whose width is used when computing
3984
   * the font size inflation of its descendants.
3985
   */
3986
  bool IsContainerForFontSizeInflation() const {
3987
    return GetStateBits() & NS_FRAME_FONT_INFLATION_CONTAINER;
3988
  }
3989
3990
  /**
3991
   * Return whether this frame keeps track of overflow areas. (Frames for
3992
   * non-display SVG elements -- e.g. <clipPath> -- do not maintain overflow
3993
   * areas, because they're never painted.)
3994
   */
3995
  bool FrameMaintainsOverflow() const {
3996
    return !HasAllStateBits(NS_FRAME_SVG_LAYOUT | NS_FRAME_IS_NONDISPLAY);
3997
  }
3998
3999
  /*
4000
   * @param aStyleDisplay:  If the caller has this->StyleDisplay(), providing
4001
   *   it here will improve performance.
4002
   */
4003
  bool BackfaceIsHidden(const nsStyleDisplay* aStyleDisplay) const {
4004
    MOZ_ASSERT(aStyleDisplay == StyleDisplay());
4005
    return aStyleDisplay->BackfaceIsHidden();
4006
  }
4007
0
  bool BackfaceIsHidden() const {
4008
0
    return StyleDisplay()->BackfaceIsHidden();
4009
0
  }
4010
4011
  /**
4012
   * Returns true if the frame is scrolled out of view.
4013
   */
4014
  bool IsScrolledOutOfView() const;
4015
4016
  /**
4017
   * Computes a 2D matrix from the -moz-window-transform and
4018
   * -moz-window-transform-origin properties on aFrame.
4019
   * Values that don't result in a 2D matrix will be ignored and an identity
4020
   * matrix will be returned instead.
4021
   */
4022
  Matrix ComputeWidgetTransform();
4023
4024
  /**
4025
   * Applies the values from the -moz-window-* properties to the widget.
4026
   */
4027
  virtual void UpdateWidgetProperties();
4028
4029
  /**
4030
   * @return true iff this frame has one or more associated image requests.
4031
   * @see mozilla::css::ImageLoader.
4032
   */
4033
  bool HasImageRequest() const { return mHasImageRequest; }
4034
4035
  /**
4036
   * Update this frame's image request state.
4037
   */
4038
0
  void SetHasImageRequest(bool aHasRequest) { mHasImageRequest = aHasRequest; }
4039
4040
  /**
4041
   * Whether this frame has a first-letter child.  If it does, the frame is
4042
   * actually an nsContainerFrame and the first-letter frame can be gotten by
4043
   * walking up to the nearest ancestor blockframe and getting its first
4044
   * continuation's nsContainerFrame::FirstLetterProperty() property.  This will
4045
   * only return true for the first continuation of the first-letter's parent.
4046
   */
4047
  bool HasFirstLetterChild() const { return mHasFirstLetterChild; }
4048
4049
  /**
4050
   * Whether this frame's parent is a wrapper anonymous box.  See documentation
4051
   * for mParentIsWrapperAnonBox.
4052
   */
4053
  bool ParentIsWrapperAnonBox() const { return mParentIsWrapperAnonBox; }
4054
  void SetParentIsWrapperAnonBox() { mParentIsWrapperAnonBox = true; }
4055
4056
  /**
4057
   * Whether this is a wrapper anonymous box needing a restyle.
4058
   */
4059
  bool IsWrapperAnonBoxNeedingRestyle() const {
4060
    return mIsWrapperBoxNeedingRestyle;
4061
  }
4062
  void SetIsWrapperAnonBoxNeedingRestyle(bool aNeedsRestyle) {
4063
    mIsWrapperBoxNeedingRestyle = aNeedsRestyle;
4064
  }
4065
4066
  bool MayHaveTransformAnimation() const {
4067
    return mMayHaveTransformAnimation;
4068
  }
4069
0
  void SetMayHaveTransformAnimation() {
4070
0
    mMayHaveTransformAnimation = true;
4071
0
  }
4072
  bool MayHaveOpacityAnimation() const {
4073
    return mMayHaveOpacityAnimation;
4074
  }
4075
0
  void SetMayHaveOpacityAnimation() {
4076
0
    mMayHaveOpacityAnimation = true;
4077
0
  }
4078
4079
  // Returns true if this frame is visible or may have visible descendants.
4080
0
  bool IsVisibleOrMayHaveVisibleDescendants() const {
4081
0
    return !mAllDescendantsAreInvisible || StyleVisibility()->IsVisible();
4082
0
  }
4083
  // Update mAllDescendantsAreInvisible flag for this frame and ancestors.
4084
  void UpdateVisibleDescendantsState();
4085
4086
  /**
4087
   * If this returns true, the frame it's called on should get the
4088
   * NS_FRAME_HAS_DIRTY_CHILDREN bit set on it by the caller; either directly
4089
   * if it's already in reflow, or via calling FrameNeedsReflow() to schedule a
4090
   * reflow.
4091
   */
4092
  virtual bool RenumberFrameAndDescendants(int32_t* aOrdinal,
4093
                                           int32_t aDepth,
4094
                                           int32_t aIncrement,
4095
                                           bool aForCounting) { return false; }
4096
4097
  /**
4098
   * Helper function - computes the content-box inline size for aCoord.
4099
   */
4100
  nscoord ComputeISizeValue(gfxContext*         aRenderingContext,
4101
                            nscoord             aContainingBlockISize,
4102
                            nscoord             aContentEdgeToBoxSizing,
4103
                            nscoord             aBoxSizingToMarginEdge,
4104
                            const nsStyleCoord& aCoord,
4105
                            ComputeSizeFlags    aFlags = eDefault);
4106
4107
0
  DisplayItemDataArray& DisplayItemData() { return mDisplayItemData; }
4108
4109
  void AddDisplayItem(nsDisplayItem* aItem);
4110
  bool RemoveDisplayItem(nsDisplayItem* aItem);
4111
  void RemoveDisplayItemDataForDeletion();
4112
  bool HasDisplayItems();
4113
  bool HasDisplayItem(nsDisplayItem* aItem);
4114
4115
  bool ForceDescendIntoIfVisible() { return mForceDescendIntoIfVisible; }
4116
  void SetForceDescendIntoIfVisible(bool aForce) { mForceDescendIntoIfVisible = aForce; }
4117
4118
  bool BuiltDisplayList() { return mBuiltDisplayList; }
4119
  void SetBuiltDisplayList(bool aBuilt) { mBuiltDisplayList = aBuilt; }
4120
4121
  bool IsFrameModified() { return mFrameIsModified; }
4122
  void SetFrameIsModified(bool aFrameIsModified) { mFrameIsModified = aFrameIsModified; }
4123
4124
  bool HasOverrideDirtyRegion() { return mHasOverrideDirtyRegion; }
4125
  void SetHasOverrideDirtyRegion(bool aHasDirtyRegion) { mHasOverrideDirtyRegion = aHasDirtyRegion; }
4126
4127
  bool MayHaveWillChangeBudget() { return mMayHaveWillChangeBudget; }
4128
  void SetMayHaveWillChangeBudget(bool aHasBudget) { mMayHaveWillChangeBudget = aHasBudget; }
4129
4130
  /**
4131
   * Returns the set of flags indicating the properties of the frame that the
4132
   * compositor might care about for hit-testing purposes. Note that this function
4133
   * must be called during Gecko display list construction time (i.e while the
4134
   * frame tree is being traversed) because that is when the display list builder
4135
   * has the necessary state set up correctly.
4136
   */
4137
  mozilla::gfx::CompositorHitTestInfo GetCompositorHitTestInfo(nsDisplayListBuilder* aBuilder);
4138
4139
protected:
4140
  static void DestroyAnonymousContent(nsPresContext* aPresContext,
4141
                                      already_AddRefed<nsIContent>&& aContent);
4142
4143
  /**
4144
   * Reparent this frame's view if it has one.
4145
   */
4146
  void ReparentFrameViewTo(nsViewManager* aViewManager,
4147
                           nsView*        aNewParentView,
4148
                           nsView*        aOldParentView);
4149
4150
  /**
4151
   * To be overridden by frame classes that have a varying IsLeaf() state and
4152
   * is indicating that with DynamicLeaf in nsFrameIdList.h.
4153
   * @see IsLeaf()
4154
   */
4155
  virtual bool IsLeafDynamic() const { return false; }
4156
4157
  // Members
4158
  nsRect                 mRect;
4159
  nsCOMPtr<nsIContent>   mContent;
4160
  RefPtr<ComputedStyle> mComputedStyle;
4161
private:
4162
  nsContainerFrame* mParent;
4163
  nsIFrame*        mNextSibling;  // doubly-linked list of frames
4164
  nsIFrame*        mPrevSibling;  // Do not touch outside SetNextSibling!
4165
4166
  DisplayItemDataArray mDisplayItemData;
4167
4168
  void MarkAbsoluteFramesForDisplayList(nsDisplayListBuilder* aBuilder);
4169
4170
0
  static void DestroyPaintedPresShellList(nsTArray<nsWeakPtr>* list) {
4171
0
    list->Clear();
4172
0
    delete list;
4173
0
  }
4174
4175
  // Stores weak references to all the PresShells that were painted during
4176
  // the last paint event so that we can increment their paint count during
4177
  // empty transactions
4178
  NS_DECLARE_FRAME_PROPERTY_WITH_DTOR(PaintedPresShellsProperty,
4179
                                      nsTArray<nsWeakPtr>,
4180
                                      DestroyPaintedPresShellList)
4181
4182
0
  nsTArray<nsWeakPtr>* PaintedPresShellList() {
4183
0
    nsTArray<nsWeakPtr>* list = GetProperty(PaintedPresShellsProperty());
4184
0
4185
0
    if (!list) {
4186
0
      list = new nsTArray<nsWeakPtr>();
4187
0
      SetProperty(PaintedPresShellsProperty(), list);
4188
0
    }
4189
0
4190
0
    return list;
4191
0
  }
4192
4193
protected:
4194
  /**
4195
   * Copies aRootElemWM to mWritingMode on 'this' and all its ancestors.
4196
   */
4197
  inline void PropagateRootElementWritingMode(mozilla::WritingMode aRootElemWM);
4198
4199
  void MarkInReflow() {
4200
#ifdef DEBUG_dbaron_off
4201
    // bug 81268
4202
    NS_ASSERTION(!(mState & NS_FRAME_IN_REFLOW), "frame is already in reflow");
4203
#endif
4204
    AddStateBits(NS_FRAME_IN_REFLOW);
4205
  }
4206
4207
  nsFrameState     mState;
4208
4209
  /**
4210
   * List of properties attached to the frame.
4211
   */
4212
  FrameProperties  mProperties;
4213
4214
  // When there is an overflow area only slightly larger than mRect,
4215
  // we store a set of four 1-byte deltas from the edges of mRect
4216
  // rather than allocating a whole separate rectangle property.
4217
  // Note that these are unsigned values, all measured "outwards"
4218
  // from the edges of mRect, so /mLeft/ and /mTop/ are reversed from
4219
  // our normal coordinate system.
4220
  // If mOverflow.mType == NS_FRAME_OVERFLOW_LARGE, then the
4221
  // delta values are not meaningful and the overflow area is stored
4222
  // as a separate rect property.
4223
  struct VisualDeltas {
4224
    uint8_t mLeft;
4225
    uint8_t mTop;
4226
    uint8_t mRight;
4227
    uint8_t mBottom;
4228
    bool operator==(const VisualDeltas& aOther) const
4229
    {
4230
      return mLeft == aOther.mLeft && mTop == aOther.mTop &&
4231
             mRight == aOther.mRight && mBottom == aOther.mBottom;
4232
    }
4233
    bool operator!=(const VisualDeltas& aOther) const
4234
    {
4235
      return !(*this == aOther);
4236
    }
4237
  };
4238
  union {
4239
    uint32_t     mType;
4240
    VisualDeltas mVisualDeltas;
4241
  } mOverflow;
4242
4243
  /** @see GetWritingMode() */
4244
  mozilla::WritingMode mWritingMode;
4245
4246
  /** The ClassID of the concrete class of this instance. */
4247
  ClassID mClass; // 1 byte
4248
4249
  bool mMayHaveRoundedCorners : 1;
4250
4251
  /**
4252
   * True iff this frame has one or more associated image requests.
4253
   * @see mozilla::css::ImageLoader.
4254
   */
4255
  bool mHasImageRequest : 1;
4256
4257
  /**
4258
   * True if this frame has a continuation that has a first-letter frame, or its
4259
   * placeholder, as a child.  In that case this frame has a blockframe ancestor
4260
   * that has the first-letter frame hanging off it in the
4261
   * nsContainerFrame::FirstLetterProperty() property.
4262
   */
4263
  bool mHasFirstLetterChild : 1;
4264
4265
  /**
4266
   * True if this frame's parent is a wrapper anonymous box (e.g. a table
4267
   * anonymous box as specified at
4268
   * <https://www.w3.org/TR/CSS21/tables.html#anonymous-boxes>).
4269
   *
4270
   * We could compute this information directly when we need it, but it wouldn't
4271
   * be all that cheap, and since this information is immutable for the lifetime
4272
   * of the frame we might as well cache it.
4273
   *
4274
   * Note that our parent may itself have mParentIsWrapperAnonBox set to true.
4275
   */
4276
  bool mParentIsWrapperAnonBox : 1;
4277
4278
  /**
4279
   * True if this is a wrapper anonymous box needing a restyle.  This is used to
4280
   * track, during stylo post-traversal, whether we've already recomputed the
4281
   * style of this anonymous box, if we end up seeing it twice.
4282
   */
4283
  bool mIsWrapperBoxNeedingRestyle : 1;
4284
4285
  /**
4286
   * This bit is used in nsTextFrame::CharacterDataChanged() as an optimization
4287
   * to skip redundant reflow-requests when the character data changes multiple
4288
   * times between reflows. If this flag is set, then it implies that the
4289
   * NS_FRAME_IS_DIRTY state bit is also set (and that intrinsic sizes have
4290
   * been marked as dirty on our ancestor chain).
4291
   *
4292
   * XXXdholbert This bit is *only* used on nsTextFrame, but it lives here on
4293
   * nsIFrame simply because this is where we've got unused state bits
4294
   * available in a gap. If bits become more scarce, we should perhaps consider
4295
   * expanding the range of frame-specific state bits in nsFrameStateBits.h and
4296
   * moving this to be one of those (e.g. by swapping one of the adjacent
4297
   * general-purpose bits to take the place of this bool:1 here, so we can grow
4298
   * that range of frame-specific bits by 1).
4299
   */
4300
  bool mReflowRequestedForCharDataChange : 1;
4301
4302
  /**
4303
   * This bit is used during BuildDisplayList to mark frames that need to
4304
   * have display items rebuilt. We will descend into them if they are
4305
   * currently visible, even if they don't intersect the dirty area.
4306
   */
4307
  bool mForceDescendIntoIfVisible : 1;
4308
4309
  /**
4310
   * True if we have built display items for this frame since
4311
   * the last call to CheckAndClearDisplayListState, false
4312
   * otherwise. Used for the reftest harness to verify minimal
4313
   * display list building.
4314
   */
4315
  bool mBuiltDisplayList : 1;
4316
4317
  bool mFrameIsModified : 1;
4318
4319
  bool mHasOverrideDirtyRegion : 1;
4320
4321
  /**
4322
   * True if frame has will-change, and currently has display
4323
   * items consuming some of the will-change budget.
4324
   */
4325
  bool mMayHaveWillChangeBudget : 1;
4326
4327
private:
4328
  /**
4329
   * True if this is the primary frame for mContent.
4330
   */
4331
  bool mIsPrimaryFrame : 1;
4332
4333
  bool mMayHaveTransformAnimation : 1;
4334
  bool mMayHaveOpacityAnimation : 1;
4335
4336
  /**
4337
   * True if we are certain that all descendants are not visible.
4338
   *
4339
   * This flag is conservative in that it might sometimes be false even if, in
4340
   * fact, all descendants are invisible.
4341
   * For example; an element is visibility:visible and has a visibility:hidden
4342
   * child. This flag is stil false in such case.
4343
   */
4344
  bool mAllDescendantsAreInvisible : 1;
4345
4346
protected:
4347
4348
  // There is a 1-bit gap left here.
4349
4350
  // Helpers
4351
  /**
4352
   * Can we stop inside this frame when we're skipping non-rendered whitespace?
4353
   * @param  aForward [in] Are we moving forward (or backward) in content order.
4354
   * @param  aOffset [in/out] At what offset into the frame to start looking.
4355
   *         on output - what offset was reached (whether or not we found a place to stop).
4356
   * @return STOP: An appropriate offset was found within this frame,
4357
   *         and is given by aOffset.
4358
   *         CONTINUE: Not found within this frame, need to try the next frame.
4359
   *         see enum FrameSearchResult for more details.
4360
   */
4361
  virtual FrameSearchResult PeekOffsetNoAmount(bool aForward, int32_t* aOffset) = 0;
4362
4363
  /**
4364
   * Search the frame for the next character
4365
   * @param  aForward [in] Are we moving forward (or backward) in content order.
4366
   * @param  aOffset [in/out] At what offset into the frame to start looking.
4367
   *         on output - what offset was reached (whether or not we found a place to stop).
4368
   * @param  aOptions [in] Options, see the comment in
4369
   *         PeekOffsetCharacterOptions for the detail.
4370
   * @return STOP: An appropriate offset was found within this frame,
4371
   *         and is given by aOffset.
4372
   *         CONTINUE: Not found within this frame, need to try the next frame.
4373
   *         see enum FrameSearchResult for more details.
4374
   */
4375
  virtual FrameSearchResult
4376
  PeekOffsetCharacter(bool aForward, int32_t* aOffset,
4377
                      PeekOffsetCharacterOptions aOptions =
4378
                        PeekOffsetCharacterOptions()) = 0;
4379
  static_assert(sizeof(PeekOffsetCharacterOptions) <= sizeof(intptr_t),
4380
                "aOptions should be changed to const reference");
4381
4382
  /**
4383
   * Search the frame for the next word boundary
4384
   * @param  aForward [in] Are we moving forward (or backward) in content order.
4385
   * @param  aWordSelectEatSpace [in] true: look for non-whitespace following
4386
   *         whitespace (in the direction of movement).
4387
   *         false: look for whitespace following non-whitespace (in the
4388
   *         direction  of movement).
4389
   * @param  aIsKeyboardSelect [in] Was the action initiated by a keyboard operation?
4390
   *         If true, punctuation immediately following a word is considered part
4391
   *         of that word. Otherwise, a sequence of punctuation is always considered
4392
   *         as a word on its own.
4393
   * @param  aOffset [in/out] At what offset into the frame to start looking.
4394
   *         on output - what offset was reached (whether or not we found a place to stop).
4395
   * @param  aState [in/out] the state that is carried from frame to frame
4396
   * @return true: An appropriate offset was found within this frame,
4397
   *         and is given by aOffset.
4398
   *         false: Not found within this frame, need to try the next frame.
4399
   */
4400
  struct PeekWordState {
4401
    // true when we're still at the start of the search, i.e., we can't return
4402
    // this point as a valid offset!
4403
    bool mAtStart;
4404
    // true when we've encountered at least one character of the pre-boundary type
4405
    // (whitespace if aWordSelectEatSpace is true, non-whitespace otherwise)
4406
    bool mSawBeforeType;
4407
    // true when the last character encountered was punctuation
4408
    bool mLastCharWasPunctuation;
4409
    // true when the last character encountered was whitespace
4410
    bool mLastCharWasWhitespace;
4411
    // true when we've seen non-punctuation since the last whitespace
4412
    bool mSeenNonPunctuationSinceWhitespace;
4413
    // text that's *before* the current frame when aForward is true, *after*
4414
    // the current frame when aForward is false. Only includes the text
4415
    // on the current line.
4416
    nsAutoString mContext;
4417
4418
    PeekWordState() : mAtStart(true), mSawBeforeType(false),
4419
        mLastCharWasPunctuation(false), mLastCharWasWhitespace(false),
4420
        mSeenNonPunctuationSinceWhitespace(false) {}
4421
    void SetSawBeforeType() { mSawBeforeType = true; }
4422
    void Update(bool aAfterPunctuation, bool aAfterWhitespace) {
4423
      mLastCharWasPunctuation = aAfterPunctuation;
4424
      mLastCharWasWhitespace = aAfterWhitespace;
4425
      if (aAfterWhitespace) {
4426
        mSeenNonPunctuationSinceWhitespace = false;
4427
      } else if (!aAfterPunctuation) {
4428
        mSeenNonPunctuationSinceWhitespace = true;
4429
      }
4430
      mAtStart = false;
4431
    }
4432
  };
4433
  virtual FrameSearchResult PeekOffsetWord(bool aForward, bool aWordSelectEatSpace, bool aIsKeyboardSelect,
4434
                                int32_t* aOffset, PeekWordState* aState) = 0;
4435
4436
  /**
4437
   * Search for the first paragraph boundary before or after the given position
4438
   * @param  aPos See description in nsFrameSelection.h. The following fields are
4439
   *              used by this method:
4440
   *              Input: mDirection
4441
   *              Output: mResultContent, mContentOffset
4442
   */
4443
  nsresult PeekOffsetParagraph(nsPeekOffsetStruct *aPos);
4444
4445
private:
4446
  // Get a pointer to the overflow areas property attached to the frame.
4447
  nsOverflowAreas* GetOverflowAreasProperty() const {
4448
    MOZ_ASSERT(mOverflow.mType == NS_FRAME_OVERFLOW_LARGE);
4449
    nsOverflowAreas* overflow = GetProperty(OverflowAreasProperty());
4450
    MOZ_ASSERT(overflow);
4451
    return overflow;
4452
  }
4453
4454
  nsRect GetVisualOverflowFromDeltas() const {
4455
    MOZ_ASSERT(mOverflow.mType != NS_FRAME_OVERFLOW_LARGE,
4456
               "should not be called when overflow is in a property");
4457
    // Calculate the rect using deltas from the frame's border rect.
4458
    // Note that the mOverflow.mDeltas fields are unsigned, but we will often
4459
    // need to return negative values for the left and top, so take care
4460
    // to cast away the unsigned-ness.
4461
    return nsRect(-(int32_t)mOverflow.mVisualDeltas.mLeft,
4462
                  -(int32_t)mOverflow.mVisualDeltas.mTop,
4463
                  mRect.Width() + mOverflow.mVisualDeltas.mRight +
4464
                                  mOverflow.mVisualDeltas.mLeft,
4465
                  mRect.Height() + mOverflow.mVisualDeltas.mBottom +
4466
                                   mOverflow.mVisualDeltas.mTop);
4467
  }
4468
  /**
4469
   * Returns true if any overflow changed.
4470
   */
4471
  bool SetOverflowAreas(const nsOverflowAreas& aOverflowAreas);
4472
4473
  // Helper-functions for SortFrameList():
4474
  template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
4475
  static nsIFrame* SortedMerge(nsIFrame *aLeft, nsIFrame *aRight);
4476
4477
  template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
4478
  static nsIFrame* MergeSort(nsIFrame *aSource);
4479
4480
  bool HasOpacityInternal(float aThreshold,
4481
                          mozilla::EffectSet* aEffectSet = nullptr) const;
4482
4483
  // Maps mClass to LayoutFrameType.
4484
  static const mozilla::LayoutFrameType sLayoutFrameTypes[
4485
#define FRAME_ID(...) 1 +
4486
#define ABSTRACT_FRAME_ID(...)
4487
#include "nsFrameIdList.h"
4488
#undef FRAME_ID
4489
#undef ABSTRACT_FRAME_ID
4490
  0];
4491
4492
  enum FrameClassBits {
4493
    eFrameClassBitsNone        = 0x0,
4494
    eFrameClassBitsLeaf        = 0x1,
4495
    eFrameClassBitsDynamicLeaf = 0x2,
4496
  };
4497
  // Maps mClass to IsLeaf() flags.
4498
  static const FrameClassBits sFrameClassBits[
4499
#define FRAME_ID(...) 1 +
4500
#define ABSTRACT_FRAME_ID(...)
4501
#include "nsFrameIdList.h"
4502
#undef FRAME_ID
4503
#undef ABSTRACT_FRAME_ID
4504
  0];
4505
4506
#ifdef DEBUG_FRAME_DUMP
4507
public:
4508
  static void IndentBy(FILE* out, int32_t aIndent) {
4509
    while (--aIndent >= 0) fputs("  ", out);
4510
  }
4511
  void ListTag(FILE* out) const {
4512
    ListTag(out, this);
4513
  }
4514
  static void ListTag(FILE* out, const nsIFrame* aFrame) {
4515
    nsAutoCString t;
4516
    ListTag(t, aFrame);
4517
    fputs(t.get(), out);
4518
  }
4519
  static void ListTag(FILE* out, const nsFrameList& aFrameList) {
4520
    for (nsIFrame* frame : aFrameList) {
4521
      ListTag(out, frame);
4522
    }
4523
  }
4524
  void ListTag(nsACString& aTo) const;
4525
  nsAutoCString ListTag() const {
4526
    nsAutoCString tag;
4527
    ListTag(tag);
4528
    return tag;
4529
  }
4530
  static void ListTag(nsACString& aTo, const nsIFrame* aFrame);
4531
  void ListGeneric(nsACString& aTo, const char* aPrefix = "", uint32_t aFlags = 0) const;
4532
  enum {
4533
    TRAVERSE_SUBDOCUMENT_FRAMES = 0x01
4534
  };
4535
  virtual void List(FILE* out = stderr, const char* aPrefix = "", uint32_t aFlags = 0) const;
4536
  /**
4537
   * lists the frames beginning from the root frame
4538
   * - calls root frame's List(...)
4539
   */
4540
  static void RootFrameList(nsPresContext* aPresContext,
4541
                            FILE* out = stderr, const char* aPrefix = "");
4542
  virtual void DumpFrameTree() const;
4543
  void DumpFrameTreeLimited() const;
4544
4545
  virtual nsresult  GetFrameName(nsAString& aResult) const = 0;
4546
#endif
4547
};
4548
4549
//----------------------------------------------------------------------
4550
4551
/**
4552
 * AutoWeakFrame can be used to keep a reference to a nsIFrame in a safe way.
4553
 * Whenever an nsIFrame object is deleted, the AutoWeakFrames pointing
4554
 * to it will be cleared.  AutoWeakFrame is for variables on the stack or
4555
 * in static storage only, there is also a WeakFrame below for heap uses.
4556
 *
4557
 * Create AutoWeakFrame object when it is sure that nsIFrame object
4558
 * is alive and after some operations which may destroy the nsIFrame
4559
 * (for example any DOM modifications) use IsAlive() or GetFrame() methods to
4560
 * check whether it is safe to continue to use the nsIFrame object.
4561
 *
4562
 * @note The usage of this class should be kept to a minimum.
4563
 */
4564
class WeakFrame;
4565
class MOZ_NONHEAP_CLASS AutoWeakFrame
4566
{
4567
public:
4568
  explicit AutoWeakFrame()
4569
3
    : mPrev(nullptr), mFrame(nullptr) {}
4570
4571
  AutoWeakFrame(const AutoWeakFrame& aOther)
4572
    : mPrev(nullptr), mFrame(nullptr)
4573
0
  {
4574
0
    Init(aOther.GetFrame());
4575
0
  }
4576
4577
  MOZ_IMPLICIT AutoWeakFrame(const WeakFrame& aOther);
4578
4579
  MOZ_IMPLICIT AutoWeakFrame(nsIFrame* aFrame)
4580
    : mPrev(nullptr), mFrame(nullptr)
4581
  {
4582
    Init(aFrame);
4583
  }
4584
4585
0
  AutoWeakFrame& operator=(AutoWeakFrame& aOther) {
4586
0
    Init(aOther.GetFrame());
4587
0
    return *this;
4588
0
  }
4589
4590
0
  AutoWeakFrame& operator=(nsIFrame* aFrame) {
4591
0
    Init(aFrame);
4592
0
    return *this;
4593
0
  }
4594
4595
  nsIFrame* operator->()
4596
0
  {
4597
0
    return mFrame;
4598
0
  }
4599
4600
  operator nsIFrame*()
4601
0
  {
4602
0
    return mFrame;
4603
0
  }
4604
4605
  void Clear(nsIPresShell* aShell) {
4606
    if (aShell) {
4607
      aShell->RemoveAutoWeakFrame(this);
4608
    }
4609
    mFrame = nullptr;
4610
    mPrev = nullptr;
4611
  }
4612
4613
  bool IsAlive() { return !!mFrame; }
4614
4615
0
  nsIFrame* GetFrame() const { return mFrame; }
4616
4617
  AutoWeakFrame* GetPreviousWeakFrame() { return mPrev; }
4618
4619
  void SetPreviousWeakFrame(AutoWeakFrame* aPrev) { mPrev = aPrev; }
4620
4621
  ~AutoWeakFrame()
4622
  {
4623
    Clear(mFrame ? mFrame->PresContext()->GetPresShell() : nullptr);
4624
  }
4625
private:
4626
  // Not available for the heap!
4627
  void* operator new(size_t) = delete;
4628
  void* operator new[](size_t) = delete;
4629
  void operator delete(void*) = delete;
4630
  void operator delete[](void*) = delete;
4631
4632
  void Init(nsIFrame* aFrame);
4633
4634
  AutoWeakFrame*  mPrev;
4635
  nsIFrame*       mFrame;
4636
};
4637
4638
// Use nsIFrame's fast-path to avoid QueryFrame:
4639
inline do_QueryFrameHelper<nsIFrame>
4640
do_QueryFrame(AutoWeakFrame& s)
4641
0
{
4642
0
  return do_QueryFrameHelper<nsIFrame>(s.GetFrame());
4643
0
}
4644
4645
/**
4646
 * @see AutoWeakFrame
4647
 */
4648
class MOZ_HEAP_CLASS WeakFrame
4649
{
4650
public:
4651
0
  WeakFrame() : mFrame(nullptr) {}
4652
4653
  WeakFrame(const WeakFrame& aOther) : mFrame(nullptr)
4654
  {
4655
    Init(aOther.GetFrame());
4656
  }
4657
4658
  MOZ_IMPLICIT WeakFrame(const AutoWeakFrame& aOther) : mFrame(nullptr)
4659
0
  {
4660
0
    Init(aOther.GetFrame());
4661
0
  }
4662
4663
  MOZ_IMPLICIT WeakFrame(nsIFrame* aFrame) : mFrame(nullptr)
4664
0
  {
4665
0
    Init(aFrame);
4666
0
  }
4667
4668
  ~WeakFrame()
4669
0
  {
4670
0
    Clear(mFrame ? mFrame->PresContext()->GetPresShell() : nullptr);
4671
0
  }
4672
4673
0
  WeakFrame& operator=(WeakFrame& aOther) {
4674
0
    Init(aOther.GetFrame());
4675
0
    return *this;
4676
0
  }
4677
4678
0
  WeakFrame& operator=(nsIFrame* aFrame) {
4679
0
    Init(aFrame);
4680
0
    return *this;
4681
0
  }
4682
4683
0
  nsIFrame* operator->() { return mFrame; }
4684
0
  operator nsIFrame*() { return mFrame; }
4685
4686
0
  void Clear(nsIPresShell* aShell) {
4687
0
    if (aShell) {
4688
0
      aShell->RemoveWeakFrame(this);
4689
0
    }
4690
0
    mFrame = nullptr;
4691
0
  }
4692
4693
0
  bool IsAlive() { return !!mFrame; }
4694
0
  nsIFrame* GetFrame() const { return mFrame; }
4695
4696
private:
4697
  void Init(nsIFrame* aFrame);
4698
4699
  nsIFrame* mFrame;
4700
};
4701
4702
// Use nsIFrame's fast-path to avoid QueryFrame:
4703
inline do_QueryFrameHelper<nsIFrame>
4704
do_QueryFrame(WeakFrame& s)
4705
0
{
4706
0
  return do_QueryFrameHelper<nsIFrame>(s.GetFrame());
4707
0
}
4708
4709
inline bool
4710
nsFrameList::ContinueRemoveFrame(nsIFrame* aFrame)
4711
{
4712
  MOZ_ASSERT(!aFrame->GetPrevSibling() || !aFrame->GetNextSibling(),
4713
             "Forgot to call StartRemoveFrame?");
4714
  if (aFrame == mLastChild) {
4715
    MOZ_ASSERT(!aFrame->GetNextSibling(), "broken frame list");
4716
    nsIFrame* prevSibling = aFrame->GetPrevSibling();
4717
    if (!prevSibling) {
4718
      MOZ_ASSERT(aFrame == mFirstChild, "broken frame list");
4719
      mFirstChild = mLastChild = nullptr;
4720
      return true;
4721
    }
4722
    MOZ_ASSERT(prevSibling->GetNextSibling() == aFrame, "Broken frame linkage");
4723
    prevSibling->SetNextSibling(nullptr);
4724
    mLastChild = prevSibling;
4725
    return true;
4726
  }
4727
  if (aFrame == mFirstChild) {
4728
    MOZ_ASSERT(!aFrame->GetPrevSibling(), "broken frame list");
4729
    mFirstChild = aFrame->GetNextSibling();
4730
    aFrame->SetNextSibling(nullptr);
4731
    MOZ_ASSERT(mFirstChild, "broken frame list");
4732
    return true;
4733
  }
4734
  return false;
4735
}
4736
4737
inline bool
4738
nsFrameList::StartRemoveFrame(nsIFrame* aFrame)
4739
{
4740
  if (aFrame->GetPrevSibling() && aFrame->GetNextSibling()) {
4741
    UnhookFrameFromSiblings(aFrame);
4742
    return true;
4743
  }
4744
  return ContinueRemoveFrame(aFrame);
4745
}
4746
4747
inline void
4748
nsFrameList::Enumerator::Next()
4749
0
{
4750
0
  NS_ASSERTION(!AtEnd(), "Should have checked AtEnd()!");
4751
0
  mFrame = mFrame->GetNextSibling();
4752
0
}
4753
4754
inline
4755
nsFrameList::FrameLinkEnumerator::
4756
FrameLinkEnumerator(const nsFrameList& aList, nsIFrame* aPrevFrame)
4757
  : Enumerator(aList)
4758
{
4759
  mPrev = aPrevFrame;
4760
  mFrame = aPrevFrame ? aPrevFrame->GetNextSibling() : aList.FirstChild();
4761
}
4762
4763
inline void
4764
nsFrameList::FrameLinkEnumerator::Next()
4765
{
4766
  mPrev = mFrame;
4767
  Enumerator::Next();
4768
}
4769
4770
template<typename Predicate>
4771
inline void
4772
nsFrameList::FrameLinkEnumerator::Find(Predicate&& aPredicate)
4773
{
4774
  static_assert(
4775
    std::is_same<typename mozilla::FunctionTypeTraits<Predicate>::ReturnType,
4776
                 bool>::value &&
4777
    mozilla::FunctionTypeTraits<Predicate>::arity == 1 &&
4778
    std::is_same<typename mozilla::FunctionTypeTraits<Predicate>::template ParameterType<0>,
4779
                 nsIFrame*>::value,
4780
    "aPredicate should be of this function signature: bool(nsIFrame*)");
4781
4782
  for (; !AtEnd(); Next()) {
4783
    if (aPredicate(mFrame)) {
4784
      return;
4785
    }
4786
  }
4787
}
4788
4789
// Operators of nsFrameList::Iterator
4790
// ---------------------------------------------------
4791
4792
inline nsFrameList::Iterator&
4793
nsFrameList::Iterator::operator++()
4794
0
{
4795
0
  mCurrent = mCurrent->GetNextSibling();
4796
0
  return *this;
4797
0
}
4798
4799
inline nsFrameList::Iterator&
4800
nsFrameList::Iterator::operator--()
4801
{
4802
  if (!mCurrent) {
4803
    mCurrent = mList.LastChild();
4804
  } else {
4805
    mCurrent = mCurrent->GetPrevSibling();
4806
  }
4807
  return *this;
4808
}
4809
4810
// Helper-functions for nsIFrame::SortFrameList()
4811
// ---------------------------------------------------
4812
4813
template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
4814
/* static */ nsIFrame*
4815
nsIFrame::SortedMerge(nsIFrame *aLeft, nsIFrame *aRight)
4816
{
4817
  MOZ_ASSERT(aLeft && aRight, "SortedMerge must have non-empty lists");
4818
4819
  nsIFrame *result;
4820
  // Unroll first iteration to avoid null-check 'result' inside the loop.
4821
  if (IsLessThanOrEqual(aLeft, aRight)) {
4822
    result = aLeft;
4823
    aLeft = aLeft->GetNextSibling();
4824
    if (!aLeft) {
4825
      result->SetNextSibling(aRight);
4826
      return result;
4827
    }
4828
  }
4829
  else {
4830
    result = aRight;
4831
    aRight = aRight->GetNextSibling();
4832
    if (!aRight) {
4833
      result->SetNextSibling(aLeft);
4834
      return result;
4835
    }
4836
  }
4837
4838
  nsIFrame *last = result;
4839
  for (;;) {
4840
    if (IsLessThanOrEqual(aLeft, aRight)) {
4841
      last->SetNextSibling(aLeft);
4842
      last = aLeft;
4843
      aLeft = aLeft->GetNextSibling();
4844
      if (!aLeft) {
4845
        last->SetNextSibling(aRight);
4846
        return result;
4847
      }
4848
    }
4849
    else {
4850
      last->SetNextSibling(aRight);
4851
      last = aRight;
4852
      aRight = aRight->GetNextSibling();
4853
      if (!aRight) {
4854
        last->SetNextSibling(aLeft);
4855
        return result;
4856
      }
4857
    }
4858
  }
4859
}
4860
4861
template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
4862
/* static */ nsIFrame*
4863
nsIFrame::MergeSort(nsIFrame *aSource)
4864
{
4865
  MOZ_ASSERT(aSource, "MergeSort null arg");
4866
4867
  nsIFrame *sorted[32] = { nullptr };
4868
  nsIFrame **fill = &sorted[0];
4869
  nsIFrame **left;
4870
  nsIFrame *rest = aSource;
4871
4872
  do {
4873
    nsIFrame *current = rest;
4874
    rest = rest->GetNextSibling();
4875
    current->SetNextSibling(nullptr);
4876
4877
    // Merge it with sorted[0] if present; then merge the result with sorted[1] etc.
4878
    // sorted[0] is a list of length 1 (or nullptr).
4879
    // sorted[1] is a list of length 2 (or nullptr).
4880
    // sorted[2] is a list of length 4 (or nullptr). etc.
4881
    for (left = &sorted[0]; left != fill && *left; ++left) {
4882
      current = SortedMerge<IsLessThanOrEqual>(*left, current);
4883
      *left = nullptr;
4884
    }
4885
4886
    // Fill the empty slot that we couldn't merge with the last result.
4887
    *left = current;
4888
4889
    if (left == fill)
4890
      ++fill;
4891
  } while (rest);
4892
4893
  // Collect and merge the results.
4894
  nsIFrame *result = nullptr;
4895
  for (left = &sorted[0]; left != fill; ++left) {
4896
    if (*left) {
4897
      result = result ? SortedMerge<IsLessThanOrEqual>(*left, result) : *left;
4898
    }
4899
  }
4900
  return result;
4901
}
4902
4903
template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
4904
/* static */ void
4905
nsIFrame::SortFrameList(nsFrameList& aFrameList)
4906
{
4907
  nsIFrame* head = MergeSort<IsLessThanOrEqual>(aFrameList.FirstChild());
4908
  aFrameList = nsFrameList(head, nsLayoutUtils::GetLastSibling(head));
4909
  MOZ_ASSERT(IsFrameListSorted<IsLessThanOrEqual>(aFrameList),
4910
             "After we sort a frame list, it should be in sorted order...");
4911
}
4912
4913
template<bool IsLessThanOrEqual(nsIFrame*, nsIFrame*)>
4914
/* static */ bool
4915
nsIFrame::IsFrameListSorted(nsFrameList& aFrameList)
4916
{
4917
  if (aFrameList.IsEmpty()) {
4918
    // empty lists are trivially sorted.
4919
    return true;
4920
  }
4921
4922
  // We'll walk through the list with two iterators, one trailing behind the
4923
  // other. The list is sorted IFF trailingIter <= iter, across the whole list.
4924
  nsFrameList::Enumerator trailingIter(aFrameList);
4925
  nsFrameList::Enumerator iter(aFrameList);
4926
  iter.Next(); // Skip |iter| past first frame. (List is nonempty, so we can.)
4927
4928
  // Now, advance the iterators in parallel, comparing each adjacent pair.
4929
  while (!iter.AtEnd()) {
4930
    MOZ_ASSERT(!trailingIter.AtEnd(), "trailing iter shouldn't finish first");
4931
    if (!IsLessThanOrEqual(trailingIter.get(), iter.get())) {
4932
      return false;
4933
    }
4934
    trailingIter.Next();
4935
    iter.Next();
4936
  }
4937
4938
  // We made it to the end without returning early, so the list is sorted.
4939
  return true;
4940
}
4941
4942
// Needs to be defined here rather than nsIFrameInlines.h, because it is used
4943
// within this header.
4944
nsPoint
4945
nsIFrame::GetNormalPosition(bool* aHasProperty) const
4946
{
4947
  nsPoint* normalPosition = GetProperty(NormalPositionProperty());
4948
  if (normalPosition) {
4949
    if (aHasProperty) {
4950
      *aHasProperty = true;
4951
    }
4952
    return *normalPosition;
4953
  }
4954
  if (aHasProperty) {
4955
    *aHasProperty = false;
4956
  }
4957
  return GetPosition();
4958
}
4959
4960
#endif /* nsIFrame_h___ */