More code for feature 36547. CODE NOT PART OF THE BUILD. Will provide reviewer when

feature is enabled.
This commit is contained in:
radha%netscape.com 2005-08-18 11:15:39 +00:00
Родитель 450fa8dcb0
Коммит 2d9f46f7c5
3 изменённых файлов: 40 добавлений и 19 удалений

Просмотреть файл

@ -43,7 +43,7 @@ interface nsISHContainer : nsISupports
/**
* Add a new child SHEntry. Adds to the end of the list.
*/
void AddChild(in nsISHEntry child);
void AddChild(in nsISHEntry child, in long offset);
/**
* Removes a child SHEntry

Просмотреть файл

@ -46,7 +46,7 @@ NS_IMPL_RELEASE(nsSHEntry)
NS_INTERFACE_MAP_BEGIN(nsSHEntry)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISHEntry)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISHContainer)
NS_INTERFACE_MAP_ENTRY(nsISHContainer)
NS_INTERFACE_MAP_ENTRY(nsISHEntry)
NS_INTERFACE_MAP_END
@ -171,12 +171,16 @@ nsSHEntry::GetChildCount(PRInt32 * aCount)
}
NS_IMETHODIMP
nsSHEntry::AddChild(nsISHEntry * aChild)
nsSHEntry::AddChild(nsISHEntry * aChild, PRInt32 aOffset)
{
NS_ENSURE_ARG_POINTER(aChild);
NS_ENSURE_TRUE(aChild, NS_ERROR_FAILURE);
NS_ENSURE_SUCCESS(aChild->SetParent(this), NS_ERROR_FAILURE);
mChildren.AppendElement((void *)aChild);
PRInt32 childCount = mChildren.Count();
if (aOffset < childCount)
mChildren.InsertElementAt((void *) aChild, aOffset);
else
mChildren.AppendElement((void *)aChild);
NS_ADDREF(aChild);
return NS_OK;
@ -185,7 +189,7 @@ nsSHEntry::AddChild(nsISHEntry * aChild)
NS_IMETHODIMP
nsSHEntry::RemoveChild(nsISHEntry * aChild)
{
NS_ENSURE_ARG_POINTER(aChild);
NS_ENSURE_TRUE(aChild, NS_ERROR_FAILURE);
PRBool childRemoved = mChildren.RemoveElement((void *)aChild);
if (childRemoved) {
aChild->SetParent(nsnull);

Просмотреть файл

@ -60,6 +60,7 @@ NS_IMPL_RELEASE(nsSHistory)
NS_INTERFACE_MAP_BEGIN(nsSHistory)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISHistory)
NS_INTERFACE_MAP_ENTRY(nsISHistory)
NS_INTERFACE_MAP_ENTRY(nsIWebNavigation)
NS_INTERFACE_MAP_END
//*****************************************************************************
@ -422,7 +423,7 @@ nsSHistory::LoadURI(const PRUnichar* aURI)
NS_IMETHODIMP
nsSHistory::AddChildSHEntry(nsISHEntry * aCloneRef, nsISHEntry * aNewEntry)
nsSHistory::AddChildSHEntry(nsISHEntry * aCloneRef, nsISHEntry * aNewEntry, PRInt32 aChildOffset)
{
//XXX Not yet implemented
@ -448,7 +449,9 @@ nsSHistory::GotoIndex(PRInt32 aIndex)
NS_IMETHODIMP
nsSHistory::LoadEntry(PRInt32 aIndex, PRBool aReloadFlag, long aLoadType)
{
nsCOMPtr<nsIDocShell> docShell;
// XXX I think the docshell should be a weakref here. The rootDocshell
// from which we start walking down the hierarchy is a weak ref.
nsIDocShell* docShell = nsnull;
nsCOMPtr<nsISHEntry> shEntry;
PRInt32 oldIndex = mIndex;
@ -462,18 +465,19 @@ nsSHistory::LoadEntry(PRInt32 aIndex, PRBool aReloadFlag, long aLoadType)
nsCOMPtr<nsIURI> nexturi;
nsCOMPtr<nsIDocShellLoadInfo> loadInfo;
if (oldIndex != aIndex) {
PRBool result = CompareSHEntry(prevEntry, nextEntry, mRootDocShell, getter_AddRefs(docShell), getter_AddRefs(shEntry));
PRBool result = CompareSHEntry(prevEntry, nextEntry, mRootDocShell, (&docShell), getter_AddRefs(shEntry));
if (!result)
mIndex = oldIndex;
mIndex = oldIndex;
if (!docShell || !shEntry || !mRootDocShell)
return NS_ERROR_FAILURE;
shEntry->GetURI(getter_AddRefs(nexturi));
nextEntry = shEntry;
}
else
nextEntry->GetURI(getter_AddRefs(nexturi));
docShell = mRootDocShell;
if (!docShell || !nextEntry || !mRootDocShell)
return NS_ERROR_FAILURE;
nextEntry->GetURI(getter_AddRefs(nexturi));
mRootDocShell->CreateLoadInfo (getter_AddRefs(loadInfo));
// This is not available yet
@ -515,9 +519,17 @@ nsSHistory::CompareSHEntry(nsISHEntry * aPrevEntry, nsISHEntry * aNextEntry, nsI
if (!prevUriSpec || !nextUriSpec)
return PR_FALSE;
if (prevUriSpec != nextUriSpec) {
// XXX for some reason PL_strcmp isn't returning right value
nsAutoString prevAutoStr(NS_ConvertASCIItoUCS2((const char *)prevUriSpec));
//nsAutoString nextAutoStr(nextUriSpec);
if (!(prevAutoStr.EqualsWithConversion((const char *)nextUriSpec))) {
*aDSResult = docshell;
*aSHEResult = nextEntry;
NS_IF_ADDREF(*aSHEResult);
// XXX we don't addref docshell here. The rootDocShell from which we started
// walking down the hierarchy is a weak ref.
//NS_IF_ADDREF(*aDSResult);
return PR_TRUE;
}
@ -533,6 +545,8 @@ nsSHistory::CompareSHEntry(nsISHEntry * aPrevEntry, nsISHEntry * aNextEntry, nsI
if (!NS_SUCCEEDED(rv) || !dsTreeNode)
return PR_FALSE;
if (!prevContainer || !nextContainer)
return PR_FALSE;
prevContainer->GetChildCount(&pcnt);
nextContainer->GetChildCount(&ncnt);
@ -549,10 +563,13 @@ nsSHistory::CompareSHEntry(nsISHEntry * aPrevEntry, nsISHEntry * aNextEntry, nsI
nextContainer->GetChildAt(i, getter_AddRefs(nChild));
dsTreeNode->GetChildAt(i, &dsTreeItemChild);
if (!dsTreeItemChild)
return PR_FALSE;
// XXX How about AddRef in QueryInterface? Is this OK?
nsIDocShell * dsChild = nsnull;
rv = dsTreeItemChild->QueryInterface(NS_GET_IID(nsIDocShell), (void **) dsChild);
rv = dsTreeItemChild->QueryInterface(NS_GET_IID(nsIDocShell), (void **) &dsChild);
result = CompareSHEntry(pChild, nChild, dsChild, aDSResult, aSHEResult);
if (result) // We have found the docshell in which loadUri is to be called.