File: nsFrameManager.h

package info (click to toggle)
firefox 141.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,616 kB
  • sloc: cpp: 7,426,508; javascript: 6,367,238; ansic: 3,707,354; python: 1,368,984; xml: 623,983; asm: 426,916; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (102 lines) | stat: -rw-r--r-- 3,450 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* Owns the frame tree and provides APIs to manipulate it */

#ifndef _nsFrameManager_h_
#define _nsFrameManager_h_

#include "mozilla/Attributes.h"
#include "nsDebug.h"
#include "nsFrameList.h"

class nsContainerFrame;
class nsIFrame;
class nsILayoutHistoryState;
class nsPlaceholderFrame;
class nsWindowSizes;

namespace mozilla {
struct FrameDestroyContext;
class PresShell;
class ViewportFrame;
}  // namespace mozilla

/**
 * Frame manager interface. The frame manager owns the frame tree model, and
 * handles structural manipulations to it, such as appending and inserting a
 * list of frames to a parent frame, or removing a child frame from a parent
 * frame.
 */
class nsFrameManager {
 public:
  using DestroyContext = mozilla::FrameDestroyContext;

  explicit nsFrameManager(mozilla::PresShell* aPresShell)
      : mPresShell(aPresShell) {
    MOZ_ASSERT(mPresShell, "need a pres shell");
  }
  ~nsFrameManager();

  /*
   * Gets and sets the root frame (i.e. ViewportFrame). The lifetime of the
   * root frame is controlled by the frame manager. When the frame manager is
   * destroyed, it destroys the entire frame hierarchy.
   */
  nsIFrame* GetRootFrame() const { return mRootFrame; }
  void SetRootFrame(mozilla::ViewportFrame* aRootFrame);

  /*
   * After Destroy is called, it is an error to call any FrameManager methods.
   * Destroy should be called when the frame tree managed by the frame
   * manager is no longer being displayed.
   */
  void Destroy();

  // Functions for manipulating the frame model
  void AppendFrames(nsContainerFrame* aParentFrame,
                    mozilla::FrameChildListID aListID,
                    nsFrameList&& aFrameList);

  void InsertFrames(nsContainerFrame* aParentFrame,
                    mozilla::FrameChildListID aListID, nsIFrame* aPrevFrame,
                    nsFrameList&& aFrameList);

  void RemoveFrame(DestroyContext&, mozilla::FrameChildListID, nsIFrame*);

  /*
   * Capture/restore frame state for the frame subtree rooted at aFrame.
   * aState is the document state storage object onto which each frame
   * stores its state.  Callers of CaptureFrameState are responsible for
   * traversing next continuations of special siblings of aFrame as
   * needed; this method will only work with actual frametree descendants
   * of aFrame.
   */

  void CaptureFrameState(nsIFrame* aFrame, nsILayoutHistoryState* aState);

  void RestoreFrameState(nsIFrame* aFrame, nsILayoutHistoryState* aState);

  /*
   * Add/restore state for one frame
   */
  void CaptureFrameStateFor(nsIFrame* aFrame, nsILayoutHistoryState* aState);

  void RestoreFrameStateFor(nsIFrame* aFrame, nsILayoutHistoryState* aState);

  void AddSizeOfIncludingThis(nsWindowSizes& aSizes) const;

 protected:
  // weak link, because the pres shell owns us
  mozilla::PresShell* MOZ_NON_OWNING_REF mPresShell;

  // Note: We use nsIFrame* instead of ViewportFrame* for mRootFrame to avoid
  // exposing ViewportFrame to the callers via GetRootFrame(), since they do not
  // depend on any ViewportFrame-specific APIs or details.
  nsIFrame* mRootFrame = nullptr;
};

#endif