Skip to content

Commit

Permalink
Bug 1619914 - part 2: Mark transaction class methods and their caller…
Browse files Browse the repository at this point in the history
… methods as `MOZ_CAN_RUN_SCRIPT r=m_kato

Differential Revision: https://phabricator.services.mozilla.com/D69303

--HG--
extra : moz-landing-system : lando
masayuki-nakano committed Apr 3, 2020
1 parent 3f95e60 commit 8390d2e
Showing 32 changed files with 129 additions and 109 deletions.
2 changes: 1 addition & 1 deletion editor/libeditor/ChangeAttributeTransaction.h
Original file line number Diff line number Diff line change
@@ -58,7 +58,7 @@ class ChangeAttributeTransaction final : public EditTransactionBase {

NS_DECL_EDITTRANSACTIONBASE

NS_IMETHOD RedoTransaction() override;
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;

private:
virtual ~ChangeAttributeTransaction() = default;
5 changes: 3 additions & 2 deletions editor/libeditor/ChangeStyleTransaction.h
Original file line number Diff line number Diff line change
@@ -59,7 +59,7 @@ class ChangeStyleTransaction final : public EditTransactionBase {

NS_DECL_EDITTRANSACTIONBASE

NS_IMETHOD RedoTransaction() override;
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;

/**
* Returns true if the list of white-space separated values contains aValue
@@ -106,7 +106,8 @@ class ChangeStyleTransaction final : public EditTransactionBase {
* is empty, remove the property from element's styles. If the boolean
* is false, just remove the style attribute.
*/
nsresult SetStyle(bool aAttributeWasSet, nsAString& aValue);
MOZ_CAN_RUN_SCRIPT nsresult SetStyle(bool aAttributeWasSet,
nsAString& aValue);

// The element to operate upon.
RefPtr<nsStyledElement> mStyledElement;
6 changes: 2 additions & 4 deletions editor/libeditor/CompositionTransaction.cpp
Original file line number Diff line number Diff line change
@@ -79,8 +79,7 @@ NS_INTERFACE_MAP_END_INHERITING(EditTransactionBase)
NS_IMPL_ADDREF_INHERITED(CompositionTransaction, EditTransactionBase)
NS_IMPL_RELEASE_INHERITED(CompositionTransaction, EditTransactionBase)

MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
CompositionTransaction::DoTransaction() {
NS_IMETHODIMP CompositionTransaction::DoTransaction() {
if (NS_WARN_IF(!mEditorBase) || NS_WARN_IF(!mTextNode)) {
return NS_ERROR_NOT_AVAILABLE;
}
@@ -152,8 +151,7 @@ CompositionTransaction::DoTransaction() {
return rv;
}

MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
CompositionTransaction::UndoTransaction() {
NS_IMETHODIMP CompositionTransaction::UndoTransaction() {
if (NS_WARN_IF(!mEditorBase) || NS_WARN_IF(!mTextNode)) {
return NS_ERROR_NOT_AVAILABLE;
}
4 changes: 2 additions & 2 deletions editor/libeditor/CompositionTransaction.h
Original file line number Diff line number Diff line change
@@ -71,14 +71,14 @@ class CompositionTransaction final : public EditTransactionBase {

void MarkFixed();

MOZ_CAN_RUN_SCRIPT_BOUNDARY static nsresult SetIMESelection(
MOZ_CAN_RUN_SCRIPT static nsresult SetIMESelection(
EditorBase& aEditorBase, dom::Text* aTextNode, uint32_t aOffsetInNode,
uint32_t aLengthOfCompositionString, const TextRangeArray* aRanges);

private:
virtual ~CompositionTransaction() = default;

nsresult SetSelectionForRanges();
MOZ_CAN_RUN_SCRIPT nsresult SetSelectionForRanges();

// The text element to operate upon.
RefPtr<dom::Text> mTextNode;
3 changes: 1 addition & 2 deletions editor/libeditor/CreateElementTransaction.cpp
Original file line number Diff line number Diff line change
@@ -69,8 +69,7 @@ NS_IMPL_RELEASE_INHERITED(CreateElementTransaction, EditTransactionBase)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(CreateElementTransaction)
NS_INTERFACE_MAP_END_INHERITING(EditTransactionBase)

MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
CreateElementTransaction::DoTransaction() {
NS_IMETHODIMP CreateElementTransaction::DoTransaction() {
if (NS_WARN_IF(!mEditorBase) || NS_WARN_IF(!mTag) ||
NS_WARN_IF(!mPointToInsert.IsSet())) {
return NS_ERROR_NOT_INITIALIZED;
4 changes: 2 additions & 2 deletions editor/libeditor/CreateElementTransaction.h
Original file line number Diff line number Diff line change
@@ -51,7 +51,7 @@ class CreateElementTransaction final : public EditTransactionBase {

NS_DECL_EDITTRANSACTIONBASE

NS_IMETHOD RedoTransaction() override;
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;

dom::Element* GetNewElement() const { return mNewElement; }

@@ -61,7 +61,7 @@ class CreateElementTransaction final : public EditTransactionBase {
/**
* InsertNewNode() inserts mNewNode before the child node at mPointToInsert.
*/
void InsertNewNode(ErrorResult& aError);
MOZ_CAN_RUN_SCRIPT void InsertNewNode(ErrorResult& aError);

// The document into which the new node will be inserted.
RefPtr<EditorBase> mEditorBase;
2 changes: 1 addition & 1 deletion editor/libeditor/DeleteNodeTransaction.h
Original file line number Diff line number Diff line change
@@ -48,7 +48,7 @@ class DeleteNodeTransaction final : public EditTransactionBase {

NS_DECL_EDITTRANSACTIONBASE

NS_IMETHOD RedoTransaction() override;
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;

protected:
virtual ~DeleteNodeTransaction() = default;
2 changes: 1 addition & 1 deletion editor/libeditor/DeleteRangeTransaction.h
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@ class DeleteRangeTransaction final : public EditAggregateTransaction {

NS_DECL_EDITTRANSACTIONBASE

NS_IMETHOD RedoTransaction() override;
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;

protected:
/**
6 changes: 2 additions & 4 deletions editor/libeditor/DeleteTextTransaction.cpp
Original file line number Diff line number Diff line change
@@ -97,8 +97,7 @@ bool DeleteTextTransaction::CanDoIt() const {
return mEditorBase->IsModifiableNode(*mTextNode);
}

MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
DeleteTextTransaction::DoTransaction() {
NS_IMETHODIMP DeleteTextTransaction::DoTransaction() {
if (NS_WARN_IF(!CanDoIt())) {
return NS_ERROR_NOT_AVAILABLE;
}
@@ -140,8 +139,7 @@ DeleteTextTransaction::DoTransaction() {

// XXX: We may want to store the selection state and restore it properly. Was
// it an insertion point or an extended selection?
MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
DeleteTextTransaction::UndoTransaction() {
NS_IMETHODIMP DeleteTextTransaction::UndoTransaction() {
if (NS_WARN_IF(!CanDoIt())) {
return NS_ERROR_NOT_AVAILABLE;
}
13 changes: 7 additions & 6 deletions editor/libeditor/EditAggregateTransaction.cpp
Original file line number Diff line number Diff line change
@@ -24,8 +24,8 @@ NS_INTERFACE_MAP_END_INHERITING(EditTransactionBase)
NS_IMETHODIMP EditAggregateTransaction::DoTransaction() {
// FYI: It's legal (but not very useful) to have an empty child list.
AutoTArray<OwningNonNull<EditTransactionBase>, 10> children(mChildren);
for (auto& childTransaction : children) {
nsresult rv = childTransaction->DoTransaction();
for (OwningNonNull<EditTransactionBase>& childTransaction : children) {
nsresult rv = MOZ_KnownLive(childTransaction)->DoTransaction();
if (NS_FAILED(rv)) {
NS_WARNING("EditTransactionBase::DoTransaction() failed");
return rv;
@@ -38,8 +38,9 @@ NS_IMETHODIMP EditAggregateTransaction::UndoTransaction() {
// FYI: It's legal (but not very useful) to have an empty child list.
// Undo goes through children backwards.
AutoTArray<OwningNonNull<EditTransactionBase>, 10> children(mChildren);
for (auto& childTransaction : Reversed(children)) {
nsresult rv = childTransaction->UndoTransaction();
for (OwningNonNull<EditTransactionBase>& childTransaction :
Reversed(children)) {
nsresult rv = MOZ_KnownLive(childTransaction)->UndoTransaction();
if (NS_FAILED(rv)) {
NS_WARNING("EditTransactionBase::UndoTransaction() failed");
return rv;
@@ -51,8 +52,8 @@ NS_IMETHODIMP EditAggregateTransaction::UndoTransaction() {
NS_IMETHODIMP EditAggregateTransaction::RedoTransaction() {
// It's legal (but not very useful) to have an empty child list.
AutoTArray<OwningNonNull<EditTransactionBase>, 10> children(mChildren);
for (auto& childTransaction : children) {
nsresult rv = childTransaction->RedoTransaction();
for (OwningNonNull<EditTransactionBase>& childTransaction : children) {
nsresult rv = MOZ_KnownLive(childTransaction)->RedoTransaction();
if (NS_FAILED(rv)) {
NS_WARNING("EditTransactionBase::RedoTransaction() failed");
return rv;
2 changes: 1 addition & 1 deletion editor/libeditor/EditAggregateTransaction.h
Original file line number Diff line number Diff line change
@@ -43,7 +43,7 @@ class EditAggregateTransaction : public EditTransactionBase {

NS_DECL_EDITTRANSACTIONBASE

NS_IMETHOD RedoTransaction() override;
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;
NS_IMETHOD Merge(nsITransaction* aTransaction, bool* aDidMerge) override;

/**
8 changes: 4 additions & 4 deletions editor/libeditor/EditTransactionBase.h
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@ class EditTransactionBase : public nsITransaction {
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(EditTransactionBase, nsITransaction)

NS_IMETHOD RedoTransaction(void) override;
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction(void) override;
NS_IMETHOD GetIsTransient(bool* aIsTransient) override;
NS_IMETHOD Merge(nsITransaction* aTransaction, bool* aDidMerge) override;

@@ -31,8 +31,8 @@ class EditTransactionBase : public nsITransaction {

} // namespace mozilla

#define NS_DECL_EDITTRANSACTIONBASE \
NS_IMETHOD DoTransaction() override; \
NS_IMETHOD UndoTransaction() override;
#define NS_DECL_EDITTRANSACTIONBASE \
MOZ_CAN_RUN_SCRIPT NS_IMETHOD DoTransaction() override; \
MOZ_CAN_RUN_SCRIPT NS_IMETHOD UndoTransaction() override;

#endif // #ifndef mozilla_EditTransactionBase_h
25 changes: 12 additions & 13 deletions editor/libeditor/EditorBase.cpp
Original file line number Diff line number Diff line change
@@ -360,7 +360,7 @@ nsresult EditorBase::PostCreate() {
// update nsTextStateManager and caret if we have focus
nsCOMPtr<nsIContent> focusedContent = GetFocusedContent();
if (focusedContent) {
DebugOnly<nsresult> rvIgnored = InitializeSelection(focusedContent);
DebugOnly<nsresult> rvIgnored = InitializeSelection(*focusedContent);
NS_WARNING_ASSERTION(
NS_SUCCEEDED(rvIgnored),
"EditorBase::InitializeSelection() failed, but ignored");
@@ -5074,14 +5074,11 @@ void EditorBase::InitializeSelectionAncestorLimit(nsIContent& aAncestorLimit) {
SelectionRefPtr()->SetAncestorLimiter(&aAncestorLimit);
}

nsresult EditorBase::InitializeSelection(EventTarget* aFocusEventTarget) {
nsresult EditorBase::InitializeSelection(nsINode& aFocusEventTargetNode) {
MOZ_ASSERT(IsEditActionDataAvailable());

nsCOMPtr<nsINode> targetNode = do_QueryInterface(aFocusEventTarget);
if (NS_WARN_IF(!targetNode)) {
return NS_ERROR_INVALID_ARG;
}
nsCOMPtr<nsIContent> selectionRootContent = FindSelectionRoot(targetNode);
nsCOMPtr<nsIContent> selectionRootContent =
FindSelectionRoot(&aFocusEventTargetNode);
if (!selectionRootContent) {
return NS_OK;
}
@@ -5113,7 +5110,8 @@ nsresult EditorBase::InitializeSelection(EventTarget* aFocusEventTarget) {
// Also, make sure to always ignore it for designMode, since that effectively
// overrides everything and we allow to edit stuff with
// contenteditable="false" subtrees in such a document.
caret->SetIgnoreUserModify(targetNode->OwnerDoc()->HasFlag(NODE_IS_EDITABLE));
caret->SetIgnoreUserModify(
aFocusEventTargetNode.OwnerDoc()->HasFlag(NODE_IS_EDITABLE));

// Init selection
rvIgnored =
@@ -5148,15 +5146,16 @@ nsresult EditorBase::InitializeSelection(EventTarget* aFocusEventTarget) {
EditorRawDOMPoint atStartOfFirstRange(firstRange->StartRef());
EditorRawDOMPoint betterInsertionPoint =
FindBetterInsertionPoint(atStartOfFirstRange);
Text* textNode = betterInsertionPoint.GetContainerAsText();
RefPtr<Text> textNode = betterInsertionPoint.GetContainerAsText();
MOZ_ASSERT(textNode,
"There must be text node if composition string is not empty");
if (textNode) {
MOZ_ASSERT(textNode->Length() >= mComposition->XPEndOffsetInTextNode(),
"The text node must be different from the old text node");
RefPtr<TextRangeArray> ranges = mComposition->GetRanges();
DebugOnly<nsresult> rvIgnored = CompositionTransaction::SetIMESelection(
*this, textNode, mComposition->XPOffsetInTextNode(),
mComposition->XPLengthInTextNode(), mComposition->GetRanges());
mComposition->XPLengthInTextNode(), ranges);
NS_WARNING_ASSERTION(
NS_SUCCEEDED(rvIgnored),
"CompositionTransaction::SetIMESelection() failed, but ignored");
@@ -5215,7 +5214,7 @@ void EditorBase::ReinitializeSelection(Element& aElement) {
return;
}

OnFocus(&aElement);
OnFocus(aElement);

// If previous focused editor turn on spellcheck and this editor doesn't
// turn on it, spellcheck state is mismatched. So we need to re-sync it.
@@ -5493,13 +5492,13 @@ bool EditorBase::IsAcceptableInputEvent(WidgetGUIEvent* aGUIEvent) {
return IsActiveInDOMWindow();
}

void EditorBase::OnFocus(EventTarget* aFocusEventTarget) {
void EditorBase::OnFocus(nsINode& aFocusEventTargetNode) {
AutoEditActionDataSetter editActionData(*this, EditAction::eNotEditing);
if (NS_WARN_IF(!editActionData.CanHandle())) {
return;
}

InitializeSelection(aFocusEventTarget);
InitializeSelection(aFocusEventTargetNode);
mSpellCheckerDictionaryUpdated = false;
if (mInlineSpellChecker && CanEnableSpellCheck()) {
DebugOnly<nsresult> rvIgnored =
10 changes: 5 additions & 5 deletions editor/libeditor/EditorBase.h
Original file line number Diff line number Diff line change
@@ -590,7 +590,7 @@ class EditorBase : public nsIEditor,
* All actions that have to be done when the editor is focused needs to be
* added here.
*/
void OnFocus(dom::EventTarget* aFocusEventTarget);
MOZ_CAN_RUN_SCRIPT void OnFocus(nsINode& aFocusEventTargetNode);

/** Resyncs spellchecking state (enabled/disabled). This should be called
* when anything that affects spellchecking state changes, such as the
@@ -604,7 +604,7 @@ class EditorBase : public nsIEditor,
* selection state even if this has no focus. So if destroying editor,
* we have to call this method for focused editor to set selection state.
*/
void ReinitializeSelection(Element& aElement);
MOZ_CAN_RUN_SCRIPT void ReinitializeSelection(Element& aElement);

/**
* InsertTextAsAction() inserts aStringToInsert at selection.
@@ -2361,7 +2361,7 @@ class EditorBase : public nsIEditor,
* XXX What's the difference with PlaceholderTransaction? Should we always
* use it instead?
*/
void BeginTransactionInternal();
MOZ_CAN_RUN_SCRIPT void BeginTransactionInternal();
MOZ_CAN_RUN_SCRIPT void EndTransactionInternal();

protected: // Shouldn't be used by friend classes
@@ -2583,7 +2583,7 @@ class EditorBase : public nsIEditor,
* a host of the editor, i.e., the editor doesn't get focus, this does
* nothing.
*/
nsresult InitializeSelection(dom::EventTarget* aFocusEventTarget);
MOZ_CAN_RUN_SCRIPT nsresult InitializeSelection(nsINode& aFocusEventTarget);

enum NotificationForEditorObservers {
eNotifyEditorObserversOfEnd,
@@ -2638,7 +2638,7 @@ class EditorBase : public nsIEditor,
EditorBase& aEditorBase MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: mEditorBase(aEditorBase) {
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
mEditorBase.BeginTransactionInternal();
MOZ_KnownLive(mEditorBase).BeginTransactionInternal();
}

MOZ_CAN_RUN_SCRIPT ~AutoTransactionBatch() {
2 changes: 1 addition & 1 deletion editor/libeditor/EditorEventListener.cpp
Original file line number Diff line number Diff line change
@@ -1175,7 +1175,7 @@ nsresult EditorEventListener::Focus(InternalFocusEvent* aFocusEvent) {
}
}

editorBase->OnFocus(target);
editorBase->OnFocus(*eventTargetNode);
if (DetachedFromEditorOrDefaultPrevented(aFocusEvent)) {
return NS_OK;
}
2 changes: 1 addition & 1 deletion editor/libeditor/EditorEventListener.h
Original file line number Diff line number Diff line change
@@ -75,7 +75,7 @@ class EditorEventListener : public nsIDOMEventListener {
}
MOZ_CAN_RUN_SCRIPT virtual nsresult MouseClick(
WidgetMouseEvent* aMouseClickEvent);
nsresult Focus(InternalFocusEvent* aFocusEvent);
MOZ_CAN_RUN_SCRIPT nsresult Focus(InternalFocusEvent* aFocusEvent);
nsresult Blur(InternalFocusEvent* aBlurEvent);
MOZ_CAN_RUN_SCRIPT nsresult DragEnter(dom::DragEvent* aDragEvent);
MOZ_CAN_RUN_SCRIPT nsresult DragOverOrDrop(dom::DragEvent* aDragEvent);
2 changes: 1 addition & 1 deletion editor/libeditor/EditorUtils.h
Original file line number Diff line number Diff line change
@@ -700,7 +700,7 @@ class MOZ_RAII AutoTransactionBatchExternal final {
EditorBase& aEditorBase MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: mEditorBase(aEditorBase) {
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
mEditorBase.BeginTransaction();
MOZ_KnownLive(mEditorBase).BeginTransaction();
}

MOZ_CAN_RUN_SCRIPT ~AutoTransactionBatchExternal() {
2 changes: 1 addition & 1 deletion editor/libeditor/HTMLEditor.cpp
Original file line number Diff line number Diff line change
@@ -5182,7 +5182,7 @@ void HTMLEditor::NotifyRootChanged() {
// new root. Otherwise, that is going to be done when this gets focus.
nsCOMPtr<nsINode> node = GetFocusedNode();
if (node) {
DebugOnly<nsresult> rvIgnored = InitializeSelection(node);
DebugOnly<nsresult> rvIgnored = InitializeSelection(*node);
NS_WARNING_ASSERTION(
NS_SUCCEEDED(rvIgnored),
"EditorBase::InitializeSelection() failed, but ignored");
3 changes: 1 addition & 2 deletions editor/libeditor/InsertNodeTransaction.cpp
Original file line number Diff line number Diff line change
@@ -60,8 +60,7 @@ NS_IMPL_RELEASE_INHERITED(InsertNodeTransaction, EditTransactionBase)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(InsertNodeTransaction)
NS_INTERFACE_MAP_END_INHERITING(EditTransactionBase)

MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
InsertNodeTransaction::DoTransaction() {
NS_IMETHODIMP InsertNodeTransaction::DoTransaction() {
if (NS_WARN_IF(!mEditorBase) || NS_WARN_IF(!mContentToInsert) ||
NS_WARN_IF(!mPointToInsert.IsSet())) {
return NS_ERROR_NOT_AVAILABLE;
6 changes: 2 additions & 4 deletions editor/libeditor/InsertTextTransaction.cpp
Original file line number Diff line number Diff line change
@@ -45,8 +45,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(InsertTextTransaction)
NS_INTERFACE_MAP_ENTRY_CONCRETE(InsertTextTransaction)
NS_INTERFACE_MAP_END_INHERITING(EditTransactionBase)

MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
InsertTextTransaction::DoTransaction() {
NS_IMETHODIMP InsertTextTransaction::DoTransaction() {
if (NS_WARN_IF(!mEditorBase) || NS_WARN_IF(!mTextNode)) {
return NS_ERROR_NOT_AVAILABLE;
}
@@ -82,8 +81,7 @@ InsertTextTransaction::DoTransaction() {
return NS_OK;
}

MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP
InsertTextTransaction::UndoTransaction() {
NS_IMETHODIMP InsertTextTransaction::UndoTransaction() {
if (NS_WARN_IF(!mEditorBase) || NS_WARN_IF(!mTextNode)) {
return NS_ERROR_NOT_INITIALIZED;
}
Loading

0 comments on commit 8390d2e

Please sign in to comment.