Open Bug 1476227 Opened 6 years ago Updated 2 years ago

[meta] Review isAnonymous flag behavior for shadowAnonymous elements

Categories

(DevTools :: Inspector, enhancement, P3)

enhancement

Tracking

(Not tracked)

People

(Reporter: jdescottes, Unassigned)

References

(Depends on 5 open bugs, Blocks 1 open bug)

Details

(Keywords: meta)

Right now shadowAnonymous elements in the inspector share most of the limitations of the other anonymous nodes (ie XBLAnonymous, NativeAnonymous).

See below a review of how our current anonymous flags are created and used:

Usage of anonymous flags;
-  shadowAnonymous: 
  - used for isNativeAnonymous 
    ```
    const isNativeAnonymous = (node) =>
      hasBindingParent(node) && !(isXBLAnonymous(node) || isShadowAnonymous(node));
    ```
  + Implementation: similar to what we do in css-selector.js "getShadowRoot()"
- isXBLAnonymous: 
  - used for isNativeAnonymous (see snippet above)
  - used in standardTreeWalkerFilter
  ```
  // Ignore all native and XBL anonymous content inside a non-XUL document.
  // We need to do this to skip things like form controls, scrollbars,
  // video controls, etc (see bug 1187482).
  if (!isInXULDocument(node) && (isXBLAnonymous(node) ||
                                  isNativeAnonymous(node))) {
    return nodeFilterConstants.FILTER_SKIP;
  }
  ```
  + Implementation: Is in bindingParent.getAnonymousNodes and is not a shadowAnonymouns
- isNativeAnonymous: 
  - used in standardTreeWalkerFilter (see snippet above)
  + Implementation: has a bindingParent, is not XBL, is not Shadow
- isAnonymous:
  - used in markup-container.js isDraggable() (anonymous nodes are not draggable)
  - used in rules.js refreshAddRuleButtonState() (anonymous nodes cannot have new rules defined)
  - used in style-inspector-menu.js _openMenu() (again to prevent defining new rules)
  - used in rule-editor.js isSelectorEditable() (anonymous stylesheets cannot be edited)
  - used in inspector.js 
    canAddHTMLChild()
    _openMenu() (flags isEditableElement, isDuplicatableElement)
    duplicateNode()
    isDeletable()
  + Implementation: ```getRootBindingParent(node) !== node;```, should be true for any of the more specialized isXxxAnonymous 

As you can see, the generic "isAnonymous" prevents a lot of actions. But for instance, let's look at all the limitations from inspector.js: can't edit the element, can't delete the element etc... Does this really make sense for shadow anonymous nodes?

I think ultimately shadowAnonymous (not sure if we should actually keep calling them that) should behave more like elements from a nested iframe than like elements from a XBL binding.
Brian, how do you feel about that, should we turn on certain inspector features for shadow anonymous nodes?
Flags: needinfo?(bgrinstead)
Keywords: meta
Summary: Review isAnonymous flag behavior for shadowAnonymous elements → [meta] Review isAnonymous flag behavior for shadowAnonymous elements
Depends on: 1478584
Depends on: 1478588, 1478586
Depends on: 1478579, 1478583
(In reply to Julian Descottes [:jdescottes][:julian] from comment #1)
> Brian, how do you feel about that, should we turn on certain inspector
> features for shadow anonymous nodes?

Sorry for missing this question. If individual context menu items / features make sense for nodes in Shadow DOM then yes, enabling them specifically for shadow anonymous makes sense to me. Thanks for breaking that down into bugs.
Flags: needinfo?(bgrinstead)
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.