function getVisibleSelectionRect(global: any): ?FakeClientRect {
  const selection = global.getSelection();
  if (!selection.rangeCount) {
    return null;
  }

  const range = selection.getRangeAt(0);
  const boundingRect = getRangeBoundingClientRect(range);
  const {top, right, bottom, left} = boundingRect;

  // When a re-render leads to a node being removed, the DOM selection will
  // temporarily be placed on an ancestor node, which leads to an invalid
  // bounding rect. Discard this state.
  if (top === 0 && right === 0 && bottom === 0 && left === 0) {
    return null;
  }

  return boundingRect;
}
Return the bounding ClientRect for the visible DOM selection, if any.
In cases where there are no selected ranges or the bounding rect is
temporarily invalid, return null.

When using from an iframe, you should pass the iframe window object