code: protected void handleMutation() {
  
          if (m_unregistered) {
              removeObserver();
              return;
          }
  
          int maxHeight = getState().getMaxHeight();
          if (m_currentHeight > 0) {
              removeObserver(); // prevent 'recursive' call of handleMutation (it's not actually recursive since it's async, but would still lead to an infinite number of calls)
              JavaScriptObject scrollPositionData = saveScrollPositions(m_widget.getElement());
              String classToAdd = "o-measuring-height";
              m_widget.addStyleName(classToAdd);
              m_widget.getElement().getStyle().clearHeight();
              int computedHeight = m_widget.getOffsetHeight();
              m_widget.removeStyleName(classToAdd);
              if ((computedHeight + 10) < m_currentHeight) {
                  m_currentHeight = -1;
                  m_rpc.fixHeight(m_currentHeight);
              } else {
                  m_widget.getElement().getStyle().setHeight(m_currentHeight, Unit.PX);
              }
              restoreScrollPositions(scrollPositionData);
              addMutationObserver(m_widget.getElement());
          } else if ((maxHeight > 0) && (m_widget.getOffsetHeight() > maxHeight)) {
              m_currentHeight = maxHeight;
              m_rpc.fixHeight(m_currentHeight);
          }
      }
docs: Handles the widget mutation.<p>