mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 04:38:02 +00:00
Bug 1659276 - Make AutoPlaceholderBatch
choose whether do or do not ScrollSelectionIntoView
r=m_kato
The root cause of this bug is a bug of async `ScrollSelectionIntoView` that is what it won't be canceled even if web app changes scroll position with any API. Fixing it is really risky and this bug affects an existing website. Therefore, this patch makes the constructors of `AutoPlaceholderBatch` take whether do or do not `ScrollSelectionIntoView` when it's destructed. And makes `HTMLEditor::SetInlinePropertyAsAction()` not request `ScrollSelectionIntoView` for taking back the traditional behavior. Note that this patch does not make it an optional argument because it's hard to guess that it'll run `ScrollSelectionIntoView` automatically. Differential Revision: https://phabricator.services.mozilla.com/D87819
This commit is contained in:
parent
db978c9443
commit
19c23d725f
@ -993,7 +993,8 @@ void EditorBase::BeginPlaceholderTransaction(nsStaticAtom& aTransactionName) {
|
||||
mPlaceholderBatch++;
|
||||
}
|
||||
|
||||
void EditorBase::EndPlaceholderTransaction() {
|
||||
void EditorBase::EndPlaceholderTransaction(
|
||||
ScrollSelectionIntoView aScrollSelectionIntoView) {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
MOZ_ASSERT(mPlaceholderBatch > 0,
|
||||
"zero or negative placeholder batch count when ending batch!");
|
||||
@ -1015,10 +1016,12 @@ void EditorBase::EndPlaceholderTransaction() {
|
||||
// flushed and PresShell/PresContext/Frames may be dead. See bug 418470.
|
||||
// XXX Even if we're destroyed, we need to keep handling below because
|
||||
// this method changes a lot of status. We should rewrite this safer.
|
||||
DebugOnly<nsresult> rvIgnored = ScrollSelectionFocusIntoView();
|
||||
NS_WARNING_ASSERTION(
|
||||
NS_SUCCEEDED(rvIgnored),
|
||||
"EditorBase::ScrollSelectionFocusIntoView() failed, but Ignored");
|
||||
if (aScrollSelectionIntoView == ScrollSelectionIntoView::Yes) {
|
||||
DebugOnly<nsresult> rvIgnored = ScrollSelectionFocusIntoView();
|
||||
NS_WARNING_ASSERTION(
|
||||
NS_SUCCEEDED(rvIgnored),
|
||||
"EditorBase::ScrollSelectionFocusIntoView() failed, but Ignored");
|
||||
}
|
||||
|
||||
// cached for frame offset are Not available now
|
||||
SelectionRefPtr()->SetCanCacheFrameOffset(false);
|
||||
@ -2142,7 +2145,8 @@ NS_IMETHODIMP EditorBase::CloneAttributes(Element* aDestElement,
|
||||
|
||||
void EditorBase::CloneAttributesWithTransaction(Element& aDestElement,
|
||||
Element& aSourceElement) {
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// Use transaction system for undo only if destination is already in the
|
||||
// document
|
||||
@ -3703,7 +3707,8 @@ nsresult EditorBase::DeleteSelectionAsAction(
|
||||
}
|
||||
|
||||
// delete placeholder txns merge.
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::DeleteTxnName);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::DeleteTxnName,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = DeleteSelectionAsSubAction(aDirectionAndAmount, aStripWrappers);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"EditorBase::DeleteSelectionAsSubAction() failed");
|
||||
@ -4951,7 +4956,8 @@ nsresult EditorBase::InsertTextAsAction(const nsAString& aStringToInsert,
|
||||
if (!AsHTMLEditor()) {
|
||||
nsContentUtils::PlatformToDOMLineBreaks(stringToInsert);
|
||||
}
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertTextAsSubAction(stringToInsert);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"EditorBase::InsertTextAsSubAction() failed");
|
||||
@ -5003,7 +5009,8 @@ NS_IMETHODIMP EditorBase::InsertLineBreak() {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertLineBreakAsSubAction();
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"EditorBase::InsertLineBreakAsSubAction() failed");
|
||||
|
@ -1924,7 +1924,9 @@ class EditorBase : public nsIEditor,
|
||||
*/
|
||||
MOZ_CAN_RUN_SCRIPT_BOUNDARY void BeginPlaceholderTransaction(
|
||||
nsStaticAtom& aTransactionName);
|
||||
MOZ_CAN_RUN_SCRIPT_BOUNDARY void EndPlaceholderTransaction();
|
||||
enum class ScrollSelectionIntoView { No, Yes };
|
||||
MOZ_CAN_RUN_SCRIPT_BOUNDARY void EndPlaceholderTransaction(
|
||||
ScrollSelectionIntoView aScrollSelectionIntoView);
|
||||
|
||||
void BeginUpdateViewBatch();
|
||||
MOZ_CAN_RUN_SCRIPT void EndUpdateViewBatch();
|
||||
@ -2328,21 +2330,28 @@ class EditorBase : public nsIEditor,
|
||||
*/
|
||||
class MOZ_RAII AutoPlaceholderBatch final {
|
||||
public:
|
||||
explicit AutoPlaceholderBatch(EditorBase& aEditorBase)
|
||||
: mEditorBase(aEditorBase) {
|
||||
AutoPlaceholderBatch(EditorBase& aEditorBase,
|
||||
ScrollSelectionIntoView aScrollSelectionIntoView)
|
||||
: mEditorBase(aEditorBase),
|
||||
mScrollSelectionIntoView(aScrollSelectionIntoView) {
|
||||
mEditorBase->BeginPlaceholderTransaction(*nsGkAtoms::_empty);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch(EditorBase& aEditorBase,
|
||||
nsStaticAtom& aTransactionName)
|
||||
: mEditorBase(aEditorBase) {
|
||||
nsStaticAtom& aTransactionName,
|
||||
ScrollSelectionIntoView aScrollSelectionIntoView)
|
||||
: mEditorBase(aEditorBase),
|
||||
mScrollSelectionIntoView(aScrollSelectionIntoView) {
|
||||
mEditorBase->BeginPlaceholderTransaction(aTransactionName);
|
||||
}
|
||||
|
||||
~AutoPlaceholderBatch() { mEditorBase->EndPlaceholderTransaction(); }
|
||||
~AutoPlaceholderBatch() {
|
||||
mEditorBase->EndPlaceholderTransaction(mScrollSelectionIntoView);
|
||||
}
|
||||
|
||||
protected:
|
||||
OwningNonNull<EditorBase> mEditorBase;
|
||||
ScrollSelectionIntoView mScrollSelectionIntoView;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -522,7 +522,8 @@ nsresult HTMLEditor::SetFinalPosition(int32_t aX, int32_t aY) {
|
||||
y.AppendInt(newY);
|
||||
|
||||
// we want one transaction only from a user's point of view
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
if (NS_WARN_IF(!mAbsolutelyPositionedObject)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
@ -588,7 +589,8 @@ nsresult HTMLEditor::SetPositionToAbsoluteOrStatic(Element& aElement,
|
||||
nsresult HTMLEditor::SetPositionToAbsolute(Element& aElement) {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
int32_t x, y;
|
||||
DebugOnly<nsresult> rvIgnored = GetElementOrigin(aElement, x, y);
|
||||
@ -619,7 +621,8 @@ nsresult HTMLEditor::SetPositionToAbsolute(Element& aElement) {
|
||||
}
|
||||
|
||||
nsresult HTMLEditor::SetPositionToStatic(Element& aElement) {
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
DebugOnly<nsresult> rvIgnored = NS_OK;
|
||||
rvIgnored = mCSSEditUtils->RemoveCSSProperty(aElement, *nsGkAtoms::position,
|
||||
@ -701,7 +704,8 @@ NS_IMETHODIMP HTMLEditor::GetGridSize(uint32_t* aSize) {
|
||||
|
||||
// self-explanatory
|
||||
void HTMLEditor::SetTopAndLeft(Element& aElement, int32_t aX, int32_t aY) {
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
DebugOnly<nsresult> rvIgnored = NS_OK;
|
||||
rvIgnored =
|
||||
mCSSEditUtils->SetCSSPropertyPixels(aElement, *nsGkAtoms::left, aX);
|
||||
|
@ -1734,7 +1734,8 @@ EditActionResult HTMLEditor::InsertParagraphSeparatorAsSubAction() {
|
||||
|
||||
// XXX This may be called by execCommand() with "insertParagraph".
|
||||
// In such case, naming the transaction "TypingTxnName" is odd.
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
@ -5173,7 +5174,8 @@ EditActionResult HTMLEditor::MakeOrChangeListAndListItemAsSubAction(
|
||||
return EditActionIgnored();
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// XXX EditSubAction::eCreateOrChangeDefinitionListItem and
|
||||
// EditSubAction::eCreateOrChangeList are treated differently in
|
||||
@ -5766,7 +5768,8 @@ nsresult HTMLEditor::RemoveListAtSelectionAsSubAction() {
|
||||
return result.Rv();
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eRemoveList, nsIEditor::eNext, ignoredError);
|
||||
@ -6064,7 +6067,8 @@ nsresult HTMLEditor::MaybeInsertPaddingBRElementForEmptyLastLineAtSelection() {
|
||||
EditActionResult HTMLEditor::IndentAsSubAction() {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eIndent, nsIEditor::eNext, ignoredError);
|
||||
@ -6739,7 +6743,8 @@ nsresult HTMLEditor::HandleHTMLIndentAtSelectionInternal() {
|
||||
EditActionResult HTMLEditor::OutdentAsSubAction() {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eOutdent, nsIEditor::eNext, ignoredError);
|
||||
@ -7514,7 +7519,8 @@ bool HTMLEditor::IsEmptyBlockElement(Element& aElement,
|
||||
EditActionResult HTMLEditor::AlignAsSubAction(const nsAString& aAlignType) {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eSetOrClearAlignment, nsIEditor::eNext,
|
||||
@ -12135,7 +12141,8 @@ nsresult HTMLEditor::ChangeMarginStart(Element& aElement,
|
||||
EditActionResult HTMLEditor::SetSelectionToAbsoluteAsSubAction() {
|
||||
MOZ_ASSERT(IsTopLevelEditSubActionDataAvailable());
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eSetPositionToAbsolute, nsIEditor::eNext,
|
||||
@ -12520,7 +12527,8 @@ nsresult HTMLEditor::MoveSelectedContentsToDivElementToMakeItAbsolutePosition(
|
||||
EditActionResult HTMLEditor::SetSelectionToStaticAsSubAction() {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eSetPositionToStatic, nsIEditor::eNext,
|
||||
@ -12598,7 +12606,8 @@ EditActionResult HTMLEditor::SetSelectionToStaticAsSubAction() {
|
||||
EditActionResult HTMLEditor::AddZIndexAsSubAction(int32_t aChange) {
|
||||
MOZ_ASSERT(IsEditActionDataAvailable());
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this,
|
||||
|
@ -983,7 +983,8 @@ nsresult HTMLEditor::InsertLineBreakAsAction(nsIPrincipal* aPrincipal) {
|
||||
|
||||
// XXX This method may be called by "insertLineBreak" command. So, using
|
||||
// TypingTxnName here is odd in such case.
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertBRElementAtSelectionWithTransaction();
|
||||
NS_WARNING_ASSERTION(
|
||||
NS_SUCCEEDED(rv),
|
||||
@ -1243,7 +1244,8 @@ nsresult HTMLEditor::ReplaceHeadContentsWithSourceWithTransaction(
|
||||
// Mac linebreaks: Map any remaining CR to LF:
|
||||
inputString.ReplaceSubstring(u"\r"_ns, u"\n"_ns);
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// Get the first range in the selection, for context:
|
||||
RefPtr<const nsRange> range = SelectionRefPtr()->GetRangeAt(0);
|
||||
@ -1347,7 +1349,8 @@ NS_IMETHODIMP HTMLEditor::RebuildDocumentFromSource(
|
||||
}
|
||||
|
||||
// Time to change the document
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
nsReadingIterator<char16_t> endtotal;
|
||||
aSourceString.EndReading(endtotal);
|
||||
@ -1625,7 +1628,8 @@ nsresult HTMLEditor::InsertElementAtSelectionAsAction(
|
||||
|
||||
UndefineCaretBidiLevel();
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertElement, nsIEditor::eNext, ignoredError);
|
||||
@ -2355,7 +2359,8 @@ nsresult HTMLEditor::FormatBlockContainerAsSubAction(nsAtom& aTagName) {
|
||||
|
||||
MOZ_ASSERT(&aTagName != nsGkAtoms::dd && &aTagName != nsGkAtoms::dt);
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eCreateOrRemoveBlock, nsIEditor::eNext,
|
||||
@ -2937,7 +2942,8 @@ nsresult HTMLEditor::InsertLinkAroundSelectionAsAction(
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// Set all attributes found on the supplied anchor element
|
||||
RefPtr<nsDOMAttributeMap> attributeMap = anchor->Attributes();
|
||||
@ -5435,7 +5441,8 @@ nsresult HTMLEditor::SetCSSBackgroundColorWithTransaction(
|
||||
|
||||
bool selectionIsCollapsed = SelectionRefPtr()->IsCollapsed();
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertElement, nsIEditor::eNext, ignoredError);
|
||||
|
@ -102,7 +102,8 @@ nsresult HTMLEditor::LoadHTML(const nsAString& aInputString) {
|
||||
return NS_ERROR_EDITOR_DESTROYED;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertHTMLSource, nsIEditor::eNext, ignoredError);
|
||||
@ -450,7 +451,8 @@ nsresult HTMLEditor::HTMLWithContextInserter::Run(
|
||||
|
||||
// force IME commit; set up rules sniffing and batching
|
||||
mHTMLEditor.CommitComposition();
|
||||
AutoPlaceholderBatch treatAsOneTransaction(mHTMLEditor);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(mHTMLEditor,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
MOZ_KnownLive(mHTMLEditor), EditSubAction::ePasteHTMLContent,
|
||||
@ -1416,7 +1418,8 @@ nsresult HTMLEditor::BlobReader::OnResult(const nsACString& aResult) {
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*mHTMLEditor);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*mHTMLEditor,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
RefPtr<Document> sourceDocument(mSourceDoc);
|
||||
EditorDOMPoint pointToInsert(mPointToInsert);
|
||||
rv = MOZ_KnownLive(mHTMLEditor)
|
||||
@ -1618,7 +1621,8 @@ nsresult HTMLEditor::InsertObject(const nsACString& aType, nsISupports* aObject,
|
||||
return rv;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = DoInsertHTMLWithContext(stuffToPaste, EmptyString(), EmptyString(),
|
||||
NS_LITERAL_STRING_FROM_CSTRING(kFileMime),
|
||||
aSourceDoc, aPointToInsert, aDoDeleteSelection,
|
||||
@ -1692,7 +1696,8 @@ nsresult HTMLEditor::InsertFromTransferable(nsITransferable* aTransferable,
|
||||
nsresult rv = ParseCFHTML(cfhtml, getter_Copies(cffragment),
|
||||
getter_Copies(cfcontext));
|
||||
if (NS_SUCCEEDED(rv) && !cffragment.IsEmpty()) {
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(
|
||||
*this, ScrollSelectionIntoView::Yes);
|
||||
// If we have our private HTML flavor, we will only use the fragment
|
||||
// from the CF_HTML. The rest comes from the clipboard.
|
||||
if (aHavePrivateHTMLFlavor) {
|
||||
@ -1735,7 +1740,8 @@ nsresult HTMLEditor::InsertFromTransferable(nsITransferable* aTransferable,
|
||||
}
|
||||
|
||||
if (!stuffToPaste.IsEmpty()) {
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(
|
||||
*this, ScrollSelectionIntoView::Yes);
|
||||
if (bestFlavor.EqualsLiteral(kHTMLMime)) {
|
||||
nsresult rv = DoInsertHTMLWithContext(
|
||||
stuffToPaste, aContextStr, aInfoStr, flavor, aSourceDoc,
|
||||
@ -2281,7 +2287,8 @@ nsresult HTMLEditor::PasteAsQuotationAsAction(int32_t aClipboardType,
|
||||
|
||||
UndefineCaretBidiLevel();
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertQuotation, nsIEditor::eNext, ignoredError);
|
||||
@ -2410,7 +2417,8 @@ nsresult HTMLEditor::PasteAsPlaintextQuotation(int32_t aSelectionType) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertAsPlaintextQuotation(stuffToPaste, true, 0);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"HTMLEditor::InsertAsPlaintextQuotation() failed");
|
||||
@ -2506,7 +2514,8 @@ nsresult HTMLEditor::InsertTextWithQuotations(
|
||||
// The whole operation should be undoable in one transaction:
|
||||
// XXX Why isn't enough to use only AutoPlaceholderBatch here?
|
||||
AutoTransactionBatch bundleAllTransactions(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
rv = InsertTextWithQuotationsInternal(aStringToInsert);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
@ -2626,7 +2635,8 @@ nsresult HTMLEditor::InsertAsQuotation(const nsAString& aQuotedText,
|
||||
"CanHandleAndMaybeDispatchBeforeInputEvent(), failed");
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertAsPlaintextQuotation(aQuotedText, true, aNodeInserted);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"HTMLEditor::InsertAsPlaintextQuotation() failed");
|
||||
@ -2642,7 +2652,8 @@ nsresult HTMLEditor::InsertAsQuotation(const nsAString& aQuotedText,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
nsAutoString citation;
|
||||
rv = InsertAsCitedQuotationInternal(aQuotedText, citation, false,
|
||||
aNodeInserted);
|
||||
@ -2856,7 +2867,8 @@ NS_IMETHODIMP HTMLEditor::Rewrap(bool aRespectNewlines) {
|
||||
// undoable in one transaction.
|
||||
// XXX Why isn't enough to use only AutoPlaceholderBatch here?
|
||||
AutoTransactionBatch bundleAllTransactions(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertTextWithQuotationsInternal(wrapped);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"HTMLEditor::InsertTextWithQuotationsInternal() failed");
|
||||
@ -2884,7 +2896,8 @@ NS_IMETHODIMP HTMLEditor::InsertAsCitedQuotation(const nsAString& aQuotedText,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertAsPlaintextQuotation(aQuotedText, true, aNodeInserted);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"HTMLEditor::InsertAsPlaintextQuotation() failed");
|
||||
@ -2900,7 +2913,8 @@ NS_IMETHODIMP HTMLEditor::InsertAsCitedQuotation(const nsAString& aQuotedText,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertAsCitedQuotationInternal(aQuotedText, aCitation, aInsertHTML,
|
||||
aNodeInserted);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
|
@ -1166,7 +1166,8 @@ void HTMLEditor::SetFinalSize(int32_t aX, int32_t aY) {
|
||||
: 0);
|
||||
|
||||
// we want one transaction only from a user's point of view
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
RefPtr<Element> resizedObject(mResizedObject);
|
||||
|
||||
if (mResizedObjectIsAbsolutelyPositioned) {
|
||||
|
@ -77,7 +77,10 @@ nsresult HTMLEditor::SetInlinePropertyAsAction(nsAtom& aProperty,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
// XXX Due to bug 1659276 and bug 1659924, we should not scroll selection
|
||||
// into view after setting the new style.
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::No);
|
||||
|
||||
nsAtom* property = &aProperty;
|
||||
nsAtom* attribute = aAttribute;
|
||||
@ -220,7 +223,8 @@ nsresult HTMLEditor::SetInlinePropertyInternal(
|
||||
return result.Rv();
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertElement, nsIEditor::eNext, ignoredError);
|
||||
@ -1615,7 +1619,8 @@ nsresult HTMLEditor::RemoveAllInlinePropertiesAsAction(
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eRemoveAllTextProperties, nsIEditor::eNext,
|
||||
@ -1788,7 +1793,8 @@ nsresult HTMLEditor::RemoveInlinePropertyInternal(
|
||||
return result.Rv();
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eRemoveTextProperty, nsIEditor::eNext,
|
||||
@ -2149,7 +2155,8 @@ nsresult HTMLEditor::RelativeFontChange(FontSize aDir) {
|
||||
}
|
||||
|
||||
// Wrap with txn batching, rules sniffing, and selection preservation code
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eSetTextProperty, nsIEditor::eNext, ignoredError);
|
||||
|
@ -237,7 +237,8 @@ nsresult HTMLEditor::InsertTableCellsWithTransaction(
|
||||
MOZ_ASSERT_UNREACHABLE("Invalid InsertPosition");
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent auto insertion of BR in new cell until we're done
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertNode, nsIEditor::eNext, ignoredError);
|
||||
@ -484,7 +485,8 @@ nsresult HTMLEditor::InsertTableColumnsWithTransaction(
|
||||
// Should not be empty since we've already found a cell.
|
||||
MOZ_ASSERT(!tableSize.IsEmpty());
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent auto insertion of <br> element in new cell until we're done.
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertNode, nsIEditor::eNext, ignoredError);
|
||||
@ -718,7 +720,8 @@ nsresult HTMLEditor::InsertTableRowsWithTransaction(
|
||||
// Should not be empty since we've already found a cell.
|
||||
MOZ_ASSERT(!tableSize.IsEmpty());
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent auto insertion of BR in new cell until we're done
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
*this, EditSubAction::eInsertNode, nsIEditor::eNext, ignoredError);
|
||||
@ -974,7 +977,8 @@ NS_IMETHODIMP HTMLEditor::DeleteTable() {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = DeleteTableElementAndChildrenWithTransaction(*table);
|
||||
NS_WARNING_ASSERTION(
|
||||
NS_SUCCEEDED(rv),
|
||||
@ -1020,7 +1024,8 @@ nsresult HTMLEditor::DeleteTableCellWithTransaction(
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent rules testing until we're done
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
@ -1323,7 +1328,8 @@ nsresult HTMLEditor::DeleteTableCellContentsWithTransaction() {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent rules testing until we're done
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
@ -1427,7 +1433,8 @@ nsresult HTMLEditor::DeleteSelectedTableColumnsWithTransaction(
|
||||
return error.StealNSResult();
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// Prevent rules testing until we're done
|
||||
IgnoredErrorResult ignoredError;
|
||||
@ -1685,7 +1692,8 @@ nsresult HTMLEditor::DeleteSelectedTableRowsWithTransaction(
|
||||
return error.StealNSResult();
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// Prevent rules testing until we're done
|
||||
IgnoredErrorResult ignoredError;
|
||||
@ -2315,7 +2323,8 @@ NS_IMETHODIMP HTMLEditor::SplitTableCell() {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent auto insertion of BR in new cell until we're done
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
@ -2590,7 +2599,8 @@ NS_IMETHODIMP HTMLEditor::SwitchTableCellHeaderType(Element* aSourceCell,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent auto insertion of BR in new cell created by
|
||||
// ReplaceContainerAndCloneAttributesWithTransaction().
|
||||
IgnoredErrorResult ignoredError;
|
||||
@ -2658,7 +2668,8 @@ NS_IMETHODIMP HTMLEditor::JoinTableCells(bool aMergeNonContiguousContents) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Don't let Rules System change the selection
|
||||
AutoTransactionsConserveSelection dontChangeSelection(*this);
|
||||
|
||||
@ -3330,7 +3341,8 @@ nsresult HTMLEditor::NormalizeTableInternal(Element& aTableOrElementInTable) {
|
||||
// Save current selection
|
||||
AutoSelectionRestorer restoreSelectionLater(*this);
|
||||
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treateAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
// Prevent auto insertion of BR in new cell until we're done
|
||||
IgnoredErrorResult ignoredError;
|
||||
AutoEditSubActionNotifier startToHandleEditSubAction(
|
||||
|
@ -397,7 +397,8 @@ nsresult TextEditor::OnInputText(const nsAString& aStringToInsert) {
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertTextAsSubAction(aStringToInsert);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"EditorBase::InsertTextAsSubAction() failed");
|
||||
@ -420,7 +421,8 @@ nsresult TextEditor::InsertLineBreakAsAction(nsIPrincipal* aPrincipal) {
|
||||
|
||||
// XXX This may be called by execCommand() with "insertParagraph".
|
||||
// In such case, naming the transaction "TypingTxnName" is odd.
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::TypingTxnName,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertLineBreakAsSubAction();
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"EditorBase::InsertLineBreakAsSubAction() failed");
|
||||
@ -441,7 +443,8 @@ nsresult TextEditor::SetTextAsAction(const nsAString& aString,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = SetTextAsSubAction(aString);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"TextEditor::SetTextAsSubAction() failed");
|
||||
@ -497,7 +500,8 @@ nsresult TextEditor::ReplaceTextAsAction(const nsAString& aString,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// This should emulates inserting text for better undo/redo behavior.
|
||||
IgnoredErrorResult ignoredError;
|
||||
@ -771,7 +775,8 @@ nsresult TextEditor::OnCompositionChange(
|
||||
RefPtr<nsCaret> caret = GetCaret();
|
||||
|
||||
{
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::IMETxnName);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::IMETxnName,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
MOZ_ASSERT(
|
||||
mIsInEditSubAction,
|
||||
@ -1177,7 +1182,8 @@ nsresult TextEditor::CutAsAction(nsIPrincipal* aPrincipal) {
|
||||
}
|
||||
// XXX This transaction name is referred by PlaceholderTransaction::Merge()
|
||||
// so that we need to keep using it here.
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::DeleteTxnName);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this, *nsGkAtoms::DeleteTxnName,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = DeleteSelectionAsSubAction(
|
||||
eNone, IsTextEditor() ? nsIEditor::eNoStrip : nsIEditor::eStrip);
|
||||
NS_WARNING_ASSERTION(
|
||||
@ -1451,7 +1457,8 @@ nsresult TextEditor::PasteAsQuotationAsAction(int32_t aClipboardType,
|
||||
return EditorBase::ToGenericNSResult(rv);
|
||||
}
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
rv = InsertWithQuotationsAsSubAction(stuffToPaste);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
|
||||
"TextEditor::InsertWithQuotationsAsSubAction() failed");
|
||||
|
@ -170,7 +170,8 @@ nsresult TextEditor::InsertTextFromTransferable(
|
||||
// Sanitize possible carriage returns in the string to be inserted
|
||||
nsContentUtils::PlatformToDOMLineBreaks(stuffToPaste);
|
||||
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
nsresult rv = InsertTextAsSubAction(stuffToPaste);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("EditorBase::InsertTextAsSubAction() failed");
|
||||
@ -322,7 +323,8 @@ nsresult TextEditor::OnDrop(DragEvent* aDropEvent) {
|
||||
}
|
||||
|
||||
// Combine any deletion and drop insertion into one transaction.
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this);
|
||||
AutoPlaceholderBatch treatAsOneTransaction(*this,
|
||||
ScrollSelectionIntoView::Yes);
|
||||
|
||||
// Don't dispatch "selectionchange" event until inserting all contents.
|
||||
SelectionBatcher selectionBatcher(SelectionRefPtr());
|
||||
@ -543,7 +545,7 @@ nsresult TextEditor::DeleteSelectionByDragAsAction(bool aDispatchInputEvent) {
|
||||
// But keep using placeholder transaction for "insertFromDrop" if there is.
|
||||
Maybe<AutoPlaceholderBatch> treatAsOneTransaction;
|
||||
if (requestedByAnotherEditor) {
|
||||
treatAsOneTransaction.emplace(*this);
|
||||
treatAsOneTransaction.emplace(*this, ScrollSelectionIntoView::Yes);
|
||||
}
|
||||
|
||||
rv = DeleteSelectionAsSubAction(nsIEditor::eNone, IsTextEditor()
|
||||
|
@ -231,6 +231,7 @@ skip-if = os == "android" #Bug 1575739
|
||||
[test_bug1581337.html]
|
||||
[test_bug1619852.html]
|
||||
[test_bug1620778.html]
|
||||
[test_bug1659276.html]
|
||||
[test_abs_positioner_appearance.html]
|
||||
[test_abs_positioner_positioning_elements.html]
|
||||
skip-if = os == 'android' # Bug 1525959
|
||||
|
78
editor/libeditor/tests/test_bug1659276.html
Normal file
78
editor/libeditor/tests/test_bug1659276.html
Normal file
@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Test for Bug 1659276</title>
|
||||
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
|
||||
</head>
|
||||
<body>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
document.designMode="on";
|
||||
while (window.find("Lorem")) {
|
||||
document.execCommand("BackColor", 0, 'pink');
|
||||
}
|
||||
document.designMode="off";
|
||||
scroll(0,0);
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.waitForFocus(async () => {
|
||||
function waitForTickOfRefeshDriver() {
|
||||
function awaitOneRefresh() {
|
||||
return new Promise(function(aResolve, aReject) {
|
||||
requestAnimationFrame(aResolve);
|
||||
});
|
||||
}
|
||||
return awaitOneRefresh().then(awaitOneRefresh);
|
||||
}
|
||||
await waitForTickOfRefeshDriver();
|
||||
is(document.documentElement.scrollTop, 0, "scrollTop should be 0");
|
||||
is(document.documentElement.scrollLeft, 0, "scrollLeft should be 0");
|
||||
SimpleTest.finish();
|
||||
});
|
||||
</script>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user