Mozilla/mozilla/docshell/shistory/src/nsSHTransaction.cpp
radha%netscape.com 71c4f7bb3c Initial checkin. r=law a=don
git-svn-id: svn://10.0.0.236/trunk@56434 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-22 22:35:31 +00:00

180 lines
4.0 KiB
C++

/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications, Inc. Portions created by Netscape are
* Copyright (C) 1999, Mozilla. All Rights Reserved.
*
* Contributor(s):
* Radha Kulkarni <radha@netscape.com>
*/
#include "nsISupportsUtils.h"
#include "nsCOMPtr.h"
#include "nsIDOMDocument.h"
#include "nsSHTransaction.h"
#include "nsIGenericFactory.h"
#ifdef XXX_NS_DEBUG // XXX: we'll need a logging facility for debugging
#define WEB_TRACE(_bit,_args) \
PR_BEGIN_MACRO \
if (WEB_LOG_TEST(gLogModule,_bit)) { \
PR_LogPrint _args; \
} \
PR_END_MACRO
#else
#define WEB_TRACE(_bit,_args)
#endif
NS_IMPL_ISUPPORTS1(nsSHTransaction, nsISHTransaction)
nsSHTransaction::nsSHTransaction() : mSHEntry(nsnull), mParent(nsnull),
mChild(nsnull), mLRVList(nsnull)
{
NS_INIT_REFCNT();
}
nsSHTransaction::~nsSHTransaction()
{
NS_IF_RELEASE(mSHEntry);
mParent = nsnull; //Weak reference to parent transaction
NS_IF_RELEASE(mChild);
NS_IF_RELEASE(mLRVList);
}
NS_IMETHODIMP
nsSHTransaction::Create(nsISHEntry * aSHEntry, nsISHTransaction * aParent)
{
SetCurrentSHistoryEntry(aSHEntry);
if (aParent) {
// This will correctly set the parent child pointers
((nsSHTransaction *)aParent)->SetChild(this);
}
else
SetParent(aParent);
return NS_OK;
}
NS_IMETHODIMP
nsSHTransaction::GetCurrentSHistoryEntry(nsISHEntry ** aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
*aResult = mSHEntry;
NS_IF_ADDREF(mSHEntry);
return NS_OK;
}
nsresult
nsSHTransaction::SetCurrentSHistoryEntry(nsISHEntry * aSHEntry)
{
NS_IF_RELEASE(mSHEntry);
mSHEntry = aSHEntry;
NS_IF_ADDREF(mSHEntry);
return NS_OK;
}
NS_IMETHODIMP
nsSHTransaction::GetChild(nsISHTransaction * * aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
*aResult = mChild;
NS_IF_ADDREF(mChild);
return NS_OK;
}
nsresult
nsSHTransaction::SetChild(nsISHTransaction * aChild)
{
if (mChild) {
// There is already a child. Move the child to the LRV list
if (mLRVList) {
//Delete any old LRV item that was there.
}
// Make the child the LRV item
}
NS_ENSURE_SUCCESS(((nsSHTransaction *)aChild)->SetParent(this), NS_ERROR_FAILURE);
mChild = aChild;
NS_IF_ADDREF(aChild);
return NS_OK;
}
nsresult
nsSHTransaction::SetParent(nsISHTransaction * aParent)
{
/* This is weak reference to parent. Do not Addref it */
mParent = aParent;
return NS_OK;
}
nsresult
nsSHTransaction::GetParent(nsISHTransaction ** aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
*aResult = mParent;
NS_IF_ADDREF(*aResult);
return NS_OK;
}
NS_IMETHODIMP
nsSHTransaction::GetLrvList(nsISHTransaction ** aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
*aResult = mLRVList;
NS_IF_ADDREF(mLRVList);
return NS_OK;
}
NS_IMETHODIMP
NS_NewSHTransaction(nsISupports* aOuter, REFNSIID aIID, void** aResult)
{
NS_PRECONDITION(aResult != nsnull, "null ptr");
if (! aResult)
return NS_ERROR_NULL_POINTER;
NS_PRECONDITION(aOuter == nsnull, "no aggregation");
if (aOuter)
return NS_ERROR_NO_AGGREGATION;
nsresult rv = NS_OK;
nsSHTransaction* result = new nsSHTransaction();
if (! result)
return NS_ERROR_OUT_OF_MEMORY;
rv = result->QueryInterface(aIID, aResult);
if (NS_FAILED(rv)) {
delete result;
*aResult = nsnull;
return rv;
}
return rv;
}