handleForcePseudoState method

void handleForcePseudoState(
  1. int? id,
  2. Map<String, dynamic> params
)

https://chromedevtools.github.io/devtools-protocol/tot/CSS/#method-forcePseudoState Enables or disables forcing certain pseudo classes for the given node. Params: { nodeId:

Implementation

void handleForcePseudoState(int? id, Map<String, dynamic> params) {
  final ctx = dbgContext;
  if (ctx == null) {
    sendToFrontend(id, JSONEncodableMap({}));
    return;
  }

  final int? frontendNodeId = params['nodeId'] as int?;
  final List<dynamic>? forced = params['forcedPseudoClasses'] as List<dynamic>?;
  if (frontendNodeId == null || forced == null) {
    sendToFrontend(id, JSONEncodableMap({}));
    return;
  }

  final states = <String>{};
  for (final v in forced) {
    if (v is String && v.isNotEmpty) states.add(v.toLowerCase());
  }
  _forcedPseudoStates[frontendNodeId] = states;

  // If element exists, request style recalculation to reflect potential pseudo state effects
  try {
    final targetId = ctx.getTargetIdByNodeId(frontendNodeId);
    if (targetId != null && targetId != 0) {
      final BindingObject? obj = ctx.getBindingObject(Pointer.fromAddress(targetId));
      if (obj is Element) {
        obj.ownerDocument.markElementStyleDirty(obj);
        obj.ownerDocument.updateStyleIfNeeded();
      }
    }
  } catch (_) {}

  // Signal computed style subscribers
  _trackNodeComputedUpdate(frontendNodeId);

  if (DebugFlags.enableDevToolsProtocolLogs) {
    devToolsProtocolLogger
        .finer('[DevTools] CSS.forcePseudoState node=$frontendNodeId states=${states.join(',')}');
  }
  sendToFrontend(id, JSONEncodableMap({}));
}