getComputedFixedEdges_(cachedViewMetrics = undefined) {
    const hScrollEnabled = this.workspace_.isMovableHorizontally();
    const vScrollEnabled = this.workspace_.isMovableVertically();

    const viewMetrics = cachedViewMetrics || this.getViewMetrics(false);

    const edges = {
      top: fixedEdges.top ? 0 : undefined,
      bottom: fixedEdges.bottom ? 0 : undefined,
      left: fixedEdges.left ? 0 : undefined,
      right: fixedEdges.right ? 0 : undefined,
    };
    if (fixedEdges.top && fixedEdges.bottom) {
      edges.bottom = viewMetrics.height;
    }
    if (fixedEdges.left && fixedEdges.right) {
      edges.right = viewMetrics.width;
    }

    if (!vScrollEnabled) {
      if (edges.top !== undefined) {
        edges.bottom = edges.top + viewMetrics.height;
      } else if (edges.bottom !== undefined) {
        edges.top = edges.bottom - viewMetrics.height;
      } else {
        edges.top = viewMetrics.top;
        edges.bottom = viewMetrics.top + viewMetrics.height;
      }
    }
    if (!hScrollEnabled) {
      if (edges.left !== undefined) {
        edges.right = edges.left + viewMetrics.width;
      } else if (edges.right !== undefined) {
        edges.left = edges.right - viewMetrics.width;
      } else {
        edges.left = viewMetrics.left;
        edges.right = viewMetrics.left + viewMetrics.width;
      }
    }
    return edges;
  }
Computes the fixed edges of the scroll area.
@param {!Blockly.MetricsManager.ContainerRegion=} cachedViewMetrics The
    view metrics if they have been previously computed. Passing in null may
    cause the view metrics to be computed again, if it is needed.
@returns {!Blockly.MetricsManager.FixedEdges} The fixed edges of the scroll
    area.
@protected
@override