tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 ]