FrameClasses.py (10230B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 # Frame class definitions, used to generate FrameIdList.h and FrameTypeList.h 5 6 from FrameClass import AbstractFrame, Frame 7 8 # Most frames support these. 9 COMMON = { 10 "SupportsCSSTransforms", 11 "SupportsContainLayoutAndPaint", 12 "SupportsAspectRatio", 13 } 14 LEAF = {"Leaf"} 15 MATHML = {"MathML"} 16 SVG = {"SVG"} 17 BFC = {"BlockFormattingContext"} 18 LINE_PARTICIPANT = {"LineParticipant"} 19 20 BLOCK = COMMON | {"CanContainOverflowContainers"} 21 22 REPLACED = COMMON | {"Replaced"} 23 REPLACED_SIZING = REPLACED | {"ReplacedSizing"} 24 25 TABLE = COMMON - {"SupportsCSSTransforms"} 26 TABLE_PART = {"SupportsCSSTransforms", "TablePart"} 27 TABLE_CELL = TABLE_PART | {"SupportsContainLayoutAndPaint"} 28 MATHML_CONTAINER = (COMMON - {"SupportsContainLayoutAndPaint"}) | MATHML 29 SVG_CONTENT = (COMMON - {"SupportsContainLayoutAndPaint"}) | SVG 30 SVG_CONTAINER = SVG_CONTENT | {"SVGContainer"} 31 SVG_RENDERING_OBSERVER_CONTAINER = SVG_CONTAINER | {"SVGRenderingObserverContainer"} 32 33 # NOTE: Intentionally not including "COMMON" here. 34 INLINE = LINE_PARTICIPANT | {"BidiInlineContainer"} 35 RUBY_CONTENT = LINE_PARTICIPANT 36 # FIXME(bug 713387): Shouldn't be Replaced, probably. 37 TEXT = COMMON | LINE_PARTICIPANT | {"Replaced"} | LEAF 38 39 # See FrameClass.py and GenerateFrameLists.py for implementation details. 40 # The following is a list of all the frame classes, followed by the frame type, 41 # and a set of flags. 42 # 43 # The frame type is somewhat arbitrary (could literally be anything) but for 44 # new frame class implementations it's probably a good idea to make it a unique 45 # string (maybe matching the frame name). 46 # 47 # See bug 1555477 for some related discussion about the whole Type() set-up. 48 FRAME_CLASSES = [ 49 Frame("BRFrame", "Br", REPLACED | LINE_PARTICIPANT | LEAF), 50 Frame("nsBCTableCellFrame", "TableCell", TABLE_CELL), 51 Frame("nsBlockFrame", "Block", BLOCK), 52 Frame("nsCanvasFrame", "Canvas", BLOCK), 53 Frame("nsCheckboxRadioFrame", "CheckboxRadio", REPLACED | LEAF), 54 Frame("InputButtonControlFrame", "InputButtonControl", REPLACED | LEAF), 55 Frame("nsColorControlFrame", "ColorControl", REPLACED | LEAF), 56 Frame("nsColumnSetFrame", "ColumnSet", COMMON), 57 Frame("ColumnSetWrapperFrame", "ColumnSetWrapper", BLOCK | BFC), 58 Frame("nsComboboxControlFrame", "ComboboxControl", REPLACED | LEAF), 59 Frame("ComboboxLabelFrame", "Block", BLOCK), 60 Frame("nsContinuingTextFrame", "Text", TEXT), 61 Frame("nsDateTimeControlFrame", "DateTimeControl", REPLACED), 62 Frame("nsFieldSetFrame", "FieldSet", BLOCK), 63 Frame("nsFileControlFrame", "FileControl", REPLACED | LEAF | BFC), 64 Frame("FileControlLabelFrame", "Block", BLOCK | LEAF), 65 Frame("nsFirstLetterFrame", "Letter", INLINE), 66 Frame("nsFloatingFirstLetterFrame", "Letter", INLINE - LINE_PARTICIPANT), 67 Frame("nsFirstLineFrame", "Line", INLINE), 68 Frame("nsFlexContainerFrame", "FlexContainer", BLOCK), 69 Frame("nsIFrame", "None", COMMON), 70 Frame("nsGridContainerFrame", "GridContainer", BLOCK), 71 Frame("nsHTMLCanvasFrame", "HTMLCanvas", REPLACED_SIZING), 72 Frame("nsHTMLFramesetBlankFrame", "None", COMMON | LEAF), 73 Frame("nsHTMLFramesetBorderFrame", "None", COMMON | LEAF), 74 Frame("nsHTMLFramesetFrame", "FrameSet", COMMON | LEAF), 75 Frame("nsImageControlFrame", "ImageControl", REPLACED_SIZING | LEAF), 76 Frame("nsImageFrame", "Image", REPLACED_SIZING | {"LeafDynamic"}), 77 Frame("nsInlineFrame", "Inline", INLINE), 78 Frame("nsListControlFrame", "ListControl", REPLACED), 79 Frame("nsMathMLmathBlockFrame", "Block", BLOCK | MATHML | BFC), 80 Frame("nsMathMLmathInlineFrame", "Inline", INLINE | MATHML), 81 Frame("nsMathMLmencloseFrame", "None", MATHML_CONTAINER), 82 Frame("nsMathMLmfracFrame", "None", MATHML_CONTAINER), 83 Frame("nsMathMLmmultiscriptsFrame", "None", MATHML_CONTAINER), 84 Frame("nsMathMLmoFrame", "None", MATHML_CONTAINER), 85 Frame("nsMathMLmpaddedFrame", "None", MATHML_CONTAINER), 86 Frame("nsMathMLmrootFrame", "None", MATHML_CONTAINER), 87 Frame("nsMathMLmrowFrame", "None", MATHML_CONTAINER), 88 Frame("nsMathMLmspaceFrame", "None", MATHML_CONTAINER | LEAF), 89 Frame("nsMathMLmtableFrame", "Table", TABLE | MATHML), 90 Frame("nsMathMLmtableWrapperFrame", "TableWrapper", BLOCK | MATHML), 91 Frame("nsMathMLmtdFrame", "TableCell", TABLE_CELL | MATHML), 92 Frame("nsMathMLmtdInnerFrame", "Block", BLOCK | MATHML), 93 Frame("nsMathMLmtrFrame", "TableRow", TABLE_PART | MATHML), 94 Frame("nsMathMLmunderoverFrame", "None", MATHML_CONTAINER), 95 Frame("nsMathMLTokenFrame", "None", MATHML_CONTAINER), 96 Frame("nsMenuPopupFrame", "MenuPopup", BLOCK), 97 Frame("nsNumberControlFrame", "TextInput", REPLACED | LEAF), 98 Frame("nsPageBreakFrame", "PageBreak", COMMON | LEAF), 99 Frame("nsPageContentFrame", "PageContent", BLOCK), 100 Frame("nsPageFrame", "Page", COMMON), 101 Frame("nsPlaceholderFrame", "Placeholder", COMMON | LEAF), 102 Frame("nsProgressFrame", "Progress", REPLACED | LEAF), 103 Frame("nsRangeFrame", "Range", REPLACED | LEAF), 104 Frame("nsRubyBaseContainerFrame", "RubyBaseContainer", RUBY_CONTENT), 105 Frame("nsRubyBaseFrame", "RubyBase", RUBY_CONTENT), 106 Frame("nsRubyFrame", "Ruby", RUBY_CONTENT), 107 Frame("nsRubyTextContainerFrame", "RubyTextContainer", {"None"}), 108 Frame("nsRubyTextFrame", "RubyText", RUBY_CONTENT), 109 Frame("ScrollContainerFrame", "ScrollContainer", COMMON), 110 Frame("SimpleXULLeafFrame", "SimpleXULLeaf", COMMON | LEAF), 111 Frame("nsScrollbarButtonFrame", "SimpleXULLeaf", COMMON | LEAF), 112 Frame("nsScrollbarFrame", "Scrollbar", COMMON), 113 Frame("nsSearchControlFrame", "TextInput", REPLACED | LEAF), 114 Frame("nsSelectsAreaFrame", "Block", BLOCK | BFC), 115 Frame("nsPageSequenceFrame", "PageSequence", COMMON), 116 Frame("nsSliderFrame", "Slider", COMMON), 117 Frame("nsSplitterFrame", "SimpleXULLeaf", COMMON | LEAF), 118 Frame("nsSubDocumentFrame", "SubDocument", REPLACED_SIZING | LEAF), 119 Frame("PrintedSheetFrame", "PrintedSheet", COMMON), 120 Frame("SVGAFrame", "SVGA", SVG_CONTAINER), 121 Frame("SVGClipPathFrame", "SVGClipPath", SVG_RENDERING_OBSERVER_CONTAINER), 122 # Note that not all the SVGContainerFrame classes should have the rendering 123 # observer flag, but the specific instances (used for <svg:defs>) should. 124 Frame("SVGContainerFrame", "None", SVG_RENDERING_OBSERVER_CONTAINER), 125 Frame("SVGFEContainerFrame", "SVGFEContainer", SVG_CONTENT), 126 Frame("SVGFEImageFrame", "SVGFEImage", SVG_CONTENT | LEAF), 127 Frame("SVGFELeafFrame", "SVGFELeaf", SVG_CONTENT | LEAF), 128 Frame("SVGFEUnstyledLeafFrame", "SVGFEUnstyledLeaf", SVG_CONTENT | LEAF), 129 Frame("SVGFilterFrame", "SVGFilter", SVG_RENDERING_OBSERVER_CONTAINER), 130 Frame("SVGForeignObjectFrame", "SVGForeignObject", SVG_CONTENT), 131 Frame("SVGGeometryFrame", "SVGGeometry", SVG_CONTENT | LEAF), 132 Frame("SVGGFrame", "SVGG", SVG_CONTAINER), 133 Frame("SVGImageFrame", "SVGImage", SVG_CONTENT | LEAF), 134 Frame("SVGInnerSVGFrame", "SVGInnerSVG", SVG_CONTAINER), 135 Frame( 136 "SVGLinearGradientFrame", "SVGLinearGradient", SVG_RENDERING_OBSERVER_CONTAINER 137 ), 138 Frame("SVGMarkerFrame", "SVGMarker", SVG_RENDERING_OBSERVER_CONTAINER), 139 Frame("SVGMarkerAnonChildFrame", "SVGMarkerAnonChild", SVG_CONTAINER), 140 Frame("SVGMaskFrame", "SVGMask", SVG_RENDERING_OBSERVER_CONTAINER), 141 Frame( 142 "SVGOuterSVGFrame", 143 "SVGOuterSVG", 144 SVG_RENDERING_OBSERVER_CONTAINER 145 | {"Replaced", "ReplacedSizing", "SupportsContainLayoutAndPaint"}, 146 ), 147 Frame("SVGOuterSVGAnonChildFrame", "SVGOuterSVGAnonChild", SVG_CONTAINER), 148 Frame("SVGPatternFrame", "SVGPattern", SVG_RENDERING_OBSERVER_CONTAINER), 149 Frame( 150 "SVGRadialGradientFrame", "SVGRadialGradient", SVG_RENDERING_OBSERVER_CONTAINER 151 ), 152 Frame("SVGStopFrame", "SVGStop", SVG_CONTENT | LEAF), 153 Frame("SVGSwitchFrame", "SVGSwitch", SVG_CONTAINER), 154 Frame("SVGSymbolFrame", "SVGSymbol", SVG_RENDERING_OBSERVER_CONTAINER), 155 Frame("SVGTextFrame", "SVGText", SVG_CONTAINER), 156 # Not a leaf, though it always has a ShadowRoot, so in practice light DOM 157 # children never render. 158 Frame("SVGUseFrame", "SVGUse", SVG_CONTAINER), 159 Frame("MiddleCroppingLabelFrame", "MiddleCroppingLabel", BLOCK | LEAF), 160 Frame("SVGViewFrame", "SVGView", SVG_CONTENT | LEAF), 161 Frame("nsTableCellFrame", "TableCell", TABLE_CELL), 162 Frame("nsTableColFrame", "TableCol", TABLE_PART), 163 Frame("nsTableColGroupFrame", "TableColGroup", TABLE_PART), 164 Frame("nsTableFrame", "Table", TABLE), 165 Frame("nsTableWrapperFrame", "TableWrapper", BLOCK), 166 Frame("nsTableRowFrame", "TableRow", TABLE_PART), 167 Frame("nsTableRowGroupFrame", "TableRowGroup", TABLE_PART), 168 Frame("nsTextControlFrame", "TextInput", REPLACED | LEAF), 169 Frame("nsTextFrame", "Text", TEXT), 170 Frame("nsTreeBodyFrame", "SimpleXULLeaf", COMMON | LEAF), 171 Frame("nsVideoFrame", "HTMLVideo", REPLACED_SIZING), 172 Frame("nsAudioFrame", "HTMLVideo", REPLACED_SIZING - {"SupportsAspectRatio"}), 173 Frame("ViewportFrame", "Viewport", COMMON), 174 Frame("WBRFrame", "Wbr", COMMON | LEAF), 175 # Non-concrete classes (for FrameIID use) 176 AbstractFrame("ButtonControlFrame"), 177 AbstractFrame("MiddleCroppingBlockFrame"), 178 AbstractFrame("nsContainerFrame"), 179 AbstractFrame("nsLeafFrame"), 180 AbstractFrame("nsMathMLFrame"), 181 AbstractFrame("nsMathMLContainerFrame"), 182 AbstractFrame("nsRubyContentFrame"), 183 AbstractFrame("nsSplittableFrame"), 184 AbstractFrame("SVGDisplayContainerFrame"), 185 AbstractFrame("SVGGradientFrame"), 186 AbstractFrame("SVGPaintServerFrame"), 187 # Interfaces (for FrameIID use) 188 AbstractFrame("nsIAnonymousContentCreator"), 189 AbstractFrame("nsIMathMLFrame"), 190 AbstractFrame("nsIPercentBSizeObserver"), 191 AbstractFrame("nsIPopupContainer"), 192 AbstractFrame("nsIScrollbarMediator"), 193 AbstractFrame("nsISelectControlFrame"), 194 AbstractFrame("nsIStatefulFrame"), 195 AbstractFrame("ISVGDisplayableFrame"), 196 AbstractFrame("ISVGSVGFrame"), 197 AbstractFrame("nsITableCellLayout"), 198 AbstractFrame("nsITableLayout"), 199 ]