LCOV - code coverage report
Current view: top level - editor/libeditor - DeleteNodeTransaction.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 23 45 51.1 %
Date: 2017-07-14 16:53:18 Functions: 8 13 61.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #include "DeleteNodeTransaction.h"
       7             : #include "mozilla/EditorBase.h"
       8             : #include "mozilla/SelectionState.h" // RangeUpdater
       9             : #include "nsDebug.h"
      10             : #include "nsError.h"
      11             : #include "nsAString.h"
      12             : 
      13             : namespace mozilla {
      14             : 
      15           1 : DeleteNodeTransaction::DeleteNodeTransaction(EditorBase& aEditorBase,
      16             :                                              nsINode& aNodeToDelete,
      17           1 :                                              RangeUpdater* aRangeUpdater)
      18             :   : mEditorBase(&aEditorBase)
      19             :   , mNodeToDelete(&aNodeToDelete)
      20             :   , mParentNode(aNodeToDelete.GetParentNode())
      21           1 :   , mRangeUpdater(aRangeUpdater)
      22             : {
      23             :   // XXX We're not sure if this is really necessary.
      24           1 :   if (!CanDoIt()) {
      25           0 :     mRangeUpdater = nullptr;
      26             :   }
      27           1 : }
      28             : 
      29           2 : DeleteNodeTransaction::~DeleteNodeTransaction()
      30             : {
      31           3 : }
      32             : 
      33           0 : NS_IMPL_CYCLE_COLLECTION_INHERITED(DeleteNodeTransaction, EditTransactionBase,
      34             :                                    mEditorBase,
      35             :                                    mNodeToDelete,
      36             :                                    mParentNode,
      37             :                                    mRefNode)
      38             : 
      39           5 : NS_IMPL_ADDREF_INHERITED(DeleteNodeTransaction, EditTransactionBase)
      40           5 : NS_IMPL_RELEASE_INHERITED(DeleteNodeTransaction, EditTransactionBase)
      41           7 : NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DeleteNodeTransaction)
      42           2 : NS_INTERFACE_MAP_END_INHERITING(EditTransactionBase)
      43             : 
      44             : bool
      45           3 : DeleteNodeTransaction::CanDoIt() const
      46             : {
      47          12 :   if (NS_WARN_IF(!mNodeToDelete) || NS_WARN_IF(!mEditorBase) ||
      48           9 :       !mParentNode || !mEditorBase->IsModifiableNode(mParentNode)) {
      49           0 :     return false;
      50             :   }
      51           3 :   return true;
      52             : }
      53             : 
      54             : NS_IMETHODIMP
      55           1 : DeleteNodeTransaction::DoTransaction()
      56             : {
      57           1 :   if (NS_WARN_IF(!CanDoIt())) {
      58           0 :     return NS_OK;
      59             :   }
      60             : 
      61             :   // Remember which child mNodeToDelete was (by remembering which child was
      62             :   // next).  Note that mRefNode can be nullptr.
      63           1 :   mRefNode = mNodeToDelete->GetNextSibling();
      64             : 
      65             :   // give range updater a chance.  SelAdjDeleteNode() needs to be called
      66             :   // *before* we do the action, unlike some of the other RangeItem update
      67             :   // methods.
      68           1 :   if (mRangeUpdater) {
      69           1 :     mRangeUpdater->SelAdjDeleteNode(mNodeToDelete);
      70             :   }
      71             : 
      72           2 :   ErrorResult error;
      73           1 :   mParentNode->RemoveChild(*mNodeToDelete, error);
      74           1 :   return error.StealNSResult();
      75             : }
      76             : 
      77             : NS_IMETHODIMP
      78           0 : DeleteNodeTransaction::UndoTransaction()
      79             : {
      80           0 :   if (NS_WARN_IF(!CanDoIt())) {
      81             :     // This is a legal state, the transaction is a no-op.
      82           0 :     return NS_OK;
      83             :   }
      84           0 :   ErrorResult error;
      85           0 :   nsCOMPtr<nsIContent> refNode = mRefNode;
      86           0 :   mParentNode->InsertBefore(*mNodeToDelete, refNode, error);
      87           0 :   return error.StealNSResult();
      88             : }
      89             : 
      90             : NS_IMETHODIMP
      91           0 : DeleteNodeTransaction::RedoTransaction()
      92             : {
      93           0 :   if (NS_WARN_IF(!CanDoIt())) {
      94             :     // This is a legal state, the transaction is a no-op.
      95           0 :     return NS_OK;
      96             :   }
      97             : 
      98           0 :   if (mRangeUpdater) {
      99           0 :     mRangeUpdater->SelAdjDeleteNode(mNodeToDelete);
     100             :   }
     101             : 
     102           0 :   ErrorResult error;
     103           0 :   mParentNode->RemoveChild(*mNodeToDelete, error);
     104           0 :   return error.StealNSResult();
     105             : }
     106             : 
     107             : NS_IMETHODIMP
     108           0 : DeleteNodeTransaction::GetTxnDescription(nsAString& aString)
     109             : {
     110           0 :   aString.AssignLiteral("DeleteNodeTransaction");
     111           0 :   return NS_OK;
     112             : }
     113             : 
     114             : } // namespace mozilla

Generated by: LCOV version 1.13