Parsed: 132724

  private function filter_eligible_strategies( $handle, $eligible = null, $checked = array() ) {
    // If no strategies are being passed, all strategies are eligible.
    if ( null === $eligible ) {
      $eligible = $this->delayed_strategies;
    }

    // If this handle was already checked, return early.
    if ( isset( $checked[ $handle ] ) ) {
      return $eligible;
    }

    // Mark this handle as checked.
    $checked[ $handle ] = true;

    // If this handle isn't registered, don't filter anything and return.
    if ( ! isset( $this->registered[ $handle ] ) ) {
      return $eligible;
    }

    // If the handle is not enqueued, don't filter anything and return.
    if ( ! $this->query( $handle, 'enqueued' ) ) {
      return $eligible;
    }

    $is_alias          = (bool) ! $this->registered[ $handle ]->src;
    $intended_strategy = $this->get_data( $handle, 'strategy' );

    // For non-alias handles, an empty intended strategy filters all strategies.
    if ( ! $is_alias && empty( $intended_strategy ) ) {
      return array();
    }

    // Handles with inline scripts attached in the 'after' position cannot be delayed.
    if ( $this->has_inline_script( $handle, 'after' ) ) {
      return array();
    }

    // If the intended strategy is 'defer', filter out 'async'.
    if ( 'defer' === $intended_strategy ) {
      $eligible = array( 'defer' );
    }

    $dependents = $this->get_dependents( $handle );

    // Recursively filter eligible strategies for dependents.
    foreach ( $dependents as $dependent ) {
      // Bail early once we know the eligible strategy is blocking.
      if ( empty( $eligible ) ) {
        return array();
      }

      $eligible = $this->filter_eligible_strategies( $dependent, $eligible, $checked );
    }

    return $eligible;
  }