The main fix here involves the introduction of the nsHTMLEditor::IsNodeInActiveEditor
API. This API returns true if the current selection in the document falls
inside the active editable section. The patch adds a bunch of checks using
this API to various places in the code to make sure that editing operations do
not escape their editing host.
There are also some unrelated fixes to range promotion code which fix the
bugs that have existed in that code before, but because of the lack of this
check were not uncovered before.
This patch also removes the nsTextEditUtils::InBody API which only made sense
in designMode documents, and was insufficient for contenteditable elements.